git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES/trunk@4 3f40d355-893c-4141-8e64-b1d9be72e7e7
248 lines
6.7 KiB
ObjectPascal
248 lines
6.7 KiB
ObjectPascal
unit SincronizarCalendario;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, IBCustomDataSet, CETools, DB;
|
|
|
|
type
|
|
TSincCalendario = class(TComponent)
|
|
private
|
|
FCalendarioBD : TIBDataSet;
|
|
FCEApp : TCEAppointments;
|
|
FUltimaSincronizacion: TDateTime;
|
|
FListaID : TStringList;
|
|
function InsertarCitaBD: boolean;
|
|
function InsertarCitaPPC: boolean;
|
|
function ActualizarCitaBD: boolean;
|
|
function ActualizarCitaPPC: boolean;
|
|
procedure OnFilterIDNulo(DataSet: TDataSet; var Accept: Boolean);
|
|
procedure OnFilterIDNoNulo(DataSet: TDataSet; var Accept: Boolean);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure Sincronizar;
|
|
published
|
|
property CalendarioBD : TIBDataSet read FCalendarioBD write FCalendarioBD;
|
|
property UltimaSincronizacion : TDateTime read FUltimaSincronizacion write FUltimaSincronizacion;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, BaseDatos, TablaAgenda, DateUtils, Variants;
|
|
|
|
{ TSincCalendario }
|
|
|
|
function TSincCalendario.ActualizarCitaBD: boolean;
|
|
var
|
|
Visita: TDatosVisita;
|
|
begin
|
|
Result := False;
|
|
Visita := TDatosVisita.Create(FCalendarioBD.FieldByName('CODIGO').AsInteger);
|
|
try
|
|
Visita.Descripcion := FCEApp.Appointment.SUBJECT;
|
|
Visita.FechaIni := DateOf(FCEApp.Appointment.DATE);
|
|
Visita.HoraIni := TimeOf(FCEApp.Appointment.DATE);
|
|
Visita.FechaFin := IncMinute(FCEApp.Appointment.DATE, FCEApp.Appointment.LEN);
|
|
Visita.HoraFin := TimeOf(Visita.FechaFin);
|
|
Visita.FechaFin := DateOf(Visita.FechaFin);
|
|
Visita.EntryID := FCEApp.RecordID;
|
|
Visita.SalvarDatos;
|
|
finally
|
|
Visita.Free;
|
|
Visita := NIL;
|
|
end;
|
|
end;
|
|
|
|
function TSincCalendario.ActualizarCitaPPC: boolean;
|
|
var
|
|
Visita: TDatosVisita;
|
|
CEApp: TCEAppointmentRecord;
|
|
FechaAux : TDateTime;
|
|
begin
|
|
Result := False;
|
|
Visita := TDatosVisita.Create(FCalendarioBD.FieldByName('CODIGO').AsInteger);
|
|
FillChar(CEApp, SizeOf(TCEAppointmentRecord), 0);
|
|
try
|
|
CEApp := FCEApp.Appointment;
|
|
CEApp.SUBJECT := Visita.Descripcion;
|
|
CEApp.DATE := Visita.FechaIni;
|
|
ReplaceTime(CEApp.DATE, Visita.HoraIni);
|
|
FechaAux := Visita.FechaFin;
|
|
ReplaceTime(FechaAux, Visita.HoraFin);
|
|
CEApp.LEN := MinutesBetween(CEApp.DATE, FechaAux);
|
|
FCEApp.Appointment := CEApp;
|
|
FCEApp.Write;
|
|
finally
|
|
Visita.Free;
|
|
Visita := NIL;
|
|
end;
|
|
end;
|
|
|
|
constructor TSincCalendario.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
FCalendarioBD := NIL;
|
|
FUltimaSincronizacion := dmBaseDatos.DarFecha;
|
|
FCEApp := TCEAppointments.Create(Self);
|
|
FListaID := TStringList.Create;
|
|
end;
|
|
|
|
destructor TSincCalendario.Destroy;
|
|
begin
|
|
FCEApp.Free;
|
|
FCEApp := NIL;
|
|
|
|
FListaID.Free;
|
|
FListaID := NIL;
|
|
|
|
FCalendarioBD := NIL;
|
|
inherited;
|
|
end;
|
|
|
|
function TSincCalendario.InsertarCitaBD: boolean;
|
|
var
|
|
Visita: TDatosVisita;
|
|
begin
|
|
Result := False;
|
|
Visita := TDatosVisita.Create;
|
|
try
|
|
Visita.Usuario := dmBaseDatos.Usuario;
|
|
Visita.Descripcion := FCEApp.Appointment.SUBJECT;
|
|
Visita.FechaIni := DateOf(FCEApp.Appointment.DATE);
|
|
Visita.HoraIni := TimeOf(FCEApp.Appointment.DATE);
|
|
Visita.FechaFin := IncMinute(FCEApp.Appointment.DATE, FCEApp.Appointment.LEN);
|
|
Visita.HoraFin := TimeOf(Visita.FechaFin);
|
|
Visita.FechaFin := DateOf(Visita.FechaFin);
|
|
Visita.EntryID := FCEApp.RecordID;
|
|
Visita.SalvarDatos;
|
|
finally
|
|
Visita.Free;
|
|
Visita := NIL;
|
|
end;
|
|
end;
|
|
|
|
function TSincCalendario.InsertarCitaPPC: boolean;
|
|
var
|
|
Visita: TDatosVisita;
|
|
CEApp: TCEAppointmentRecord;
|
|
FechaAux : TDateTime;
|
|
begin
|
|
Result := False;
|
|
Visita := TDatosVisita.Create(FCalendarioBD.FieldByName('CODIGO').AsInteger);
|
|
FillChar(CEApp, SizeOf(TCEAppointmentRecord), 0);
|
|
try
|
|
CEApp.SUBJECT := Visita.Descripcion;
|
|
CEApp.DATE := Visita.FechaIni;
|
|
ReplaceTime(CEApp.DATE, Visita.HoraIni);
|
|
FechaAux := Visita.FechaFin;
|
|
ReplaceTime(FechaAux, Visita.HoraFin);
|
|
CEApp.LEN := MinutesBetween(CEApp.DATE, FechaAux);
|
|
CEApp.STATUS := APPSTATUS_BUSY;
|
|
|
|
FCEApp.Append;
|
|
FCEApp.Appointment := CEApp;
|
|
FCEApp.Write;
|
|
|
|
Visita.EntryID := FCEApp.RecordID;
|
|
Visita.SalvarDatos;
|
|
finally
|
|
Visita.Free;
|
|
Visita := NIL;
|
|
end;
|
|
end;
|
|
|
|
procedure TSincCalendario.OnFilterIDNoNulo(DataSet: TDataSet;
|
|
var Accept: Boolean);
|
|
begin
|
|
Accept := not VarIsNull(DataSet.FieldByName('ENTRYID').AsVariant);
|
|
end;
|
|
|
|
procedure TSincCalendario.OnFilterIDNulo(DataSet: TDataSet; var Accept: Boolean);
|
|
begin
|
|
Accept := VarIsNull(DataSet.FieldByName('ENTRYID').AsVariant);
|
|
end;
|
|
|
|
procedure TSincCalendario.Sincronizar;
|
|
var
|
|
Continuar : Boolean;
|
|
begin
|
|
if not Assigned(FCalendarioBD) then
|
|
raise Exception.Create('Falta indicar la tabla de BD');
|
|
|
|
try
|
|
FCalendarioBD.Open;
|
|
FCalendarioBD.First;
|
|
|
|
FCEApp.Open;
|
|
FCEApp.First;
|
|
|
|
Continuar := (FCEApp.NumRecords > 0);
|
|
while Continuar do
|
|
begin
|
|
FCEApp.Read;
|
|
if not FCalendarioBD.Locate('ENTRYID', FCEApp.RecordID, []) then
|
|
InsertarCitaBD
|
|
else begin
|
|
if (FCalendarioBD.FieldByName('BORRADO').AsString = CITA_BORRADA) then
|
|
begin
|
|
FCalendarioBD.Delete;
|
|
FCEApp.Delete;
|
|
end
|
|
else begin
|
|
if (FCEApp.LastModified > FUltimaSincronizacion) or
|
|
(FCalendarioBD.FieldByName('ULTIMOCAMBIO').AsDateTime > FUltimaSincronizacion) then
|
|
begin
|
|
if (FCEApp.LastModified > FCalendarioBD.FieldByName('ULTIMOCAMBIO').AsDateTime) then
|
|
ActualizarCitaBD
|
|
else
|
|
ActualizarCitaPPC;
|
|
end;
|
|
end;
|
|
end;
|
|
FListaID.Add(IntToStr(FCEApp.RecordID));
|
|
Continuar := FCEApp.Next;
|
|
end;
|
|
|
|
// Borrar de la BD las citas que se han borrado en el PPC
|
|
FCalendarioBD.Filtered := False;
|
|
FCalendarioBD.OnFilterRecord := OnFilterIDNoNulo;
|
|
FCalendarioBD.Filtered := True;
|
|
FCalendarioBD.First;
|
|
while not FCalendarioBD.EOF do
|
|
begin
|
|
if FListaID.IndexOf(FCalendarioBD.FieldByName('ENTRYID').AsString) = -1 then
|
|
FCalendarioBD.Delete
|
|
else
|
|
FCalendarioBD.Next;
|
|
end;
|
|
|
|
|
|
// Insertar en el PPC las citas nuevas
|
|
FCalendarioBD.Filtered := False;
|
|
FCalendarioBD.OnFilterRecord := OnFilterIDNulo;
|
|
FCalendarioBD.Filtered := True;
|
|
FCalendarioBD.First;
|
|
while not FCalendarioBD.EOF do
|
|
begin
|
|
if (FCalendarioBD.FieldByName('BORRADO').AsString = CITA_BORRADA) then
|
|
FCalendarioBD.Delete
|
|
else begin
|
|
InsertarCitaPPC;
|
|
FCalendarioBD.Next;
|
|
end;
|
|
end;
|
|
|
|
FCalendarioBD.Filtered := False;
|
|
FCalendarioBD.Filter := '';
|
|
finally
|
|
FCalendarioBD.Close;
|
|
FCalendarioBD.OnFilterRecord := NIL;
|
|
FCEApp.Close;
|
|
end;
|
|
end;
|
|
|
|
end.
|