git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES/trunk@4 3f40d355-893c-4141-8e64-b1d9be72e7e7
803 lines
22 KiB
ObjectPascal
803 lines
22 KiB
ObjectPascal
unit Sincronizacion;
|
||
|
||
interface
|
||
|
||
uses
|
||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||
Dialogs, RdxBotones, RdxBarras, ExtCtrls, RdxPaneles, OleServer,
|
||
OutlookXP, DB, IBCustomDataSet, StdCtrls, TablaProveedores,
|
||
TablaClientes, TablaAgenda, CETools;
|
||
|
||
type
|
||
tContactos = (tcProveedores, tcClientes);
|
||
|
||
TfSincronizacion = class(TForm)
|
||
BarraContadores: TRdxBarraSuperior;
|
||
imgSombra: TImage;
|
||
brInferior: TRdxBarraInferior;
|
||
bCerrar: TRdxBoton;
|
||
Outlook: TOutlookApplication;
|
||
Label1: TLabel;
|
||
eProgress1: TLabel;
|
||
eFechaUltimaSinc: TLabel;
|
||
Label2: TLabel;
|
||
eProgress2: TLabel;
|
||
Image1: TImage;
|
||
Image2: TImage;
|
||
Image3: TImage;
|
||
Label3: TLabel;
|
||
CEDeviceInfo: TCEDeviceInfo;
|
||
Image4: TImage;
|
||
Label4: TLabel;
|
||
procedure FormCreate(Sender: TObject);
|
||
procedure FormDestroy(Sender: TObject);
|
||
procedure FormShow(Sender: TObject);
|
||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||
procedure FormActivate(Sender: TObject);
|
||
procedure CEDeviceInfoConnectError(Sender: TObject);
|
||
private
|
||
ContactsFolder: MAPIFolder;
|
||
CalendarFolder: MAPIFolder;
|
||
NmSpace: NameSpace;
|
||
FTablaContactos : TIBDataSet;
|
||
FTablaAgenda : TIBDataSet;
|
||
FUltimaSincronizacion : TDateTime;
|
||
FCategoriaClientes : String;
|
||
FCategoriaProveedores : String;
|
||
function DarUltimaSincronizacion : TDateTime;
|
||
procedure ActualizarFechaSincronizacion;
|
||
procedure Sincronizar;
|
||
procedure SincronizarContactos (TipoContacto : tContactos);
|
||
procedure SincronizarAgenda;
|
||
procedure AnadirClientesNuevos;
|
||
procedure AnadirProveedoresNuevos;
|
||
procedure EliminarClientesSobrantes;
|
||
procedure EliminarProveedoresSobrantes;
|
||
procedure InsertarProveedorBD (Contacto : TContactItem;
|
||
Proveedor : TDatosProveedor);
|
||
procedure InsertarClienteBD (Contacto : TContactItem;
|
||
Cliente : TDatosCliente);
|
||
procedure ActualizarProveedorOutlook (Contacto : TContactItem;
|
||
Proveedor : TDatosProveedor);
|
||
procedure ActualizarProveedorBD (Contacto : TContactItem;
|
||
Proveedor : TDatosProveedor);
|
||
procedure ActualizarClienteOutlook (Contacto : TContactItem;
|
||
Cliente : TDatosCliente);
|
||
procedure ActualizarClienteBD (Contacto : TContactItem;
|
||
Cliente : TDatosCliente);
|
||
public
|
||
{ Public declarations }
|
||
end;
|
||
|
||
var
|
||
fSincronizacion: TfSincronizacion;
|
||
|
||
implementation
|
||
|
||
{$R *.dfm}
|
||
|
||
uses
|
||
IBSQL, Framework, BaseDatos, Mensajes, StrFunc, RdxEmpresaActiva, IBQuery,
|
||
SincronizarCalendario;
|
||
|
||
|
||
procedure TfSincronizacion.ActualizarClienteBD(Contacto: TContactItem;
|
||
Cliente: TDatosCliente);
|
||
var
|
||
Cadena : String;
|
||
begin
|
||
with Contacto, Cliente do
|
||
begin
|
||
if FullName <> Nombre then
|
||
Nombre := FullName;
|
||
if not EsCadenaVacia(Calle) then
|
||
begin
|
||
Cadena := Calle;
|
||
if not EsCadenaVacia(Numero) then
|
||
Cadena := Cadena + ', ' + Numero;
|
||
if not EsCadenaVacia(Piso) then
|
||
Cadena := Cadena + ' ' + Piso;
|
||
end;
|
||
if Cadena <> BusinessAddressStreet then
|
||
begin
|
||
Calle := BusinessAddressStreet;
|
||
Piso := '';
|
||
Numero := '';
|
||
end;
|
||
|
||
if BusinessAddressPostalCode <> CodigoPostal then
|
||
CodigoPostal := BusinessAddressPostalCode;
|
||
|
||
if BusinessAddressCity <> Poblacion then
|
||
Poblacion := BusinessAddressCity;
|
||
|
||
if BusinessAddressState <> Provincia then
|
||
Provincia := BusinessAddressState;
|
||
|
||
if Email1Address <> Correo then
|
||
Correo := Email1Address;
|
||
|
||
if BusinessTelephoneNumber <> Telefono1 then
|
||
Telefono1 := BusinessTelephoneNumber;
|
||
|
||
if Business2TelephoneNumber <> Telefono2 then
|
||
Telefono2 := Business2TelephoneNumber;
|
||
|
||
if BusinessFaxNumber <> Fax then
|
||
Fax := BusinessFaxNumber;
|
||
|
||
if MobileTelephoneNumber <> Movil1 then
|
||
Movil1 := MobileTelephoneNumber;
|
||
|
||
if HomeTelephoneNumber <> Movil2 then
|
||
Movil2 := HomeTelephoneNumber;
|
||
|
||
if Body <> Observaciones then
|
||
Observaciones := Body;
|
||
|
||
SalvarDatos;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.ActualizarClienteOutlook(Contacto: TContactItem;
|
||
Cliente: TDatosCliente);
|
||
begin
|
||
with Contacto, Cliente do
|
||
begin
|
||
CustomerID := Codigo;
|
||
FullName := Nombre;
|
||
FileAs := FullName;
|
||
if not EsCadenaVacia(Calle) then
|
||
begin
|
||
BusinessAddressStreet := Calle;
|
||
if not EsCadenaVacia(Numero) then
|
||
BusinessAddressStreet := BusinessAddressStreet + ', ' + Numero;
|
||
if not EsCadenaVacia(Piso) then
|
||
BusinessAddressStreet := BusinessAddressStreet + ' ' + Piso;
|
||
end;
|
||
BusinessAddressPostalCode := CodigoPostal;
|
||
BusinessAddressCity := Poblacion;
|
||
BusinessAddressState := Provincia;
|
||
Email1Address := Correo;
|
||
BusinessTelephoneNumber := Telefono1;
|
||
Business2TelephoneNumber := Telefono2;
|
||
BusinessFaxNumber := Fax;
|
||
MobileTelephoneNumber := Movil1;
|
||
HomeTelephoneNumber := Movil2;
|
||
Body := Observaciones;
|
||
Categories := FCategoriaClientes;
|
||
Save;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.ActualizarProveedorBD(Contacto: TContactItem;
|
||
Proveedor: TDatosProveedor);
|
||
var
|
||
Cadena : String;
|
||
begin
|
||
with Contacto, Proveedor do
|
||
begin
|
||
if FullName <> Nombre then
|
||
Nombre := FullName;
|
||
if not EsCadenaVacia(Calle) then
|
||
begin
|
||
Cadena := Calle;
|
||
if not EsCadenaVacia(Numero) then
|
||
Cadena := Cadena + ', ' + Numero;
|
||
if not EsCadenaVacia(Piso) then
|
||
Cadena := Cadena + ' ' + Piso;
|
||
end;
|
||
if Cadena <> BusinessAddressStreet then
|
||
begin
|
||
Calle := BusinessAddressStreet;
|
||
Piso := '';
|
||
Numero := '';
|
||
end;
|
||
|
||
if BusinessAddressPostalCode <> CodigoPostal then
|
||
CodigoPostal := BusinessAddressPostalCode;
|
||
|
||
if BusinessAddressCity <> Poblacion then
|
||
Poblacion := BusinessAddressCity;
|
||
|
||
if BusinessAddressState <> Provincia then
|
||
Provincia := BusinessAddressState;
|
||
|
||
if Email1Address <> Correo then
|
||
Correo := Email1Address;
|
||
|
||
if BusinessTelephoneNumber <> Telefono1 then
|
||
Telefono1 := BusinessTelephoneNumber;
|
||
|
||
if Business2TelephoneNumber <> Telefono2 then
|
||
Telefono2 := Business2TelephoneNumber;
|
||
|
||
if BusinessFaxNumber <> Fax then
|
||
Fax := BusinessFaxNumber;
|
||
|
||
if MobileTelephoneNumber <> Movil1 then
|
||
Movil1 := MobileTelephoneNumber;
|
||
|
||
if HomeTelephoneNumber <> Movil2 then
|
||
Movil2 := HomeTelephoneNumber;
|
||
|
||
if Body <> Observaciones then
|
||
Observaciones := Body;
|
||
|
||
SalvarDatos;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.ActualizarProveedorOutlook(
|
||
Contacto: TContactItem; Proveedor : TDatosProveedor);
|
||
begin
|
||
with Contacto, Proveedor do
|
||
begin
|
||
CustomerID := Codigo;
|
||
FullName := Nombre;
|
||
FileAs := FullName;
|
||
if not EsCadenaVacia(Calle) then
|
||
begin
|
||
BusinessAddressStreet := Calle;
|
||
if not EsCadenaVacia(Numero) then
|
||
BusinessAddressStreet := BusinessAddressStreet + ', ' + Numero;
|
||
if not EsCadenaVacia(Piso) then
|
||
BusinessAddressStreet := BusinessAddressStreet + ' ' + Piso;
|
||
end;
|
||
BusinessAddressPostalCode := CodigoPostal;
|
||
BusinessAddressCity := Poblacion;
|
||
BusinessAddressState := Provincia;
|
||
Email1Address := Correo;
|
||
BusinessTelephoneNumber := Telefono1;
|
||
Business2TelephoneNumber := Telefono2;
|
||
BusinessFaxNumber := Fax;
|
||
MobileTelephoneNumber := Movil1;
|
||
HomeTelephoneNumber := Movil2;
|
||
Body := Observaciones;
|
||
Categories := FCategoriaProveedores;
|
||
Save;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.FormCreate(Sender: TObject);
|
||
var
|
||
DLLHandle: THandle;
|
||
begin
|
||
FTablaContactos := NIL;
|
||
FTablaAgenda := NIL;
|
||
|
||
try
|
||
Outlook.Connect;
|
||
NmSpace := Outlook.GetNamespace('MAPI');
|
||
NmSpace.Logon('', '', False, False);
|
||
ContactsFolder := NmSpace.GetDefaultFolder(olFolderContacts);
|
||
CalendarFolder := NmSpace.GetDefaultFolder(olFolderCalendar);
|
||
|
||
|
||
DLLHandle := LoadLibrary('RAPI.DLL');
|
||
if DLLHandle < 32 then
|
||
raise SysUtils.Exception.Create('');
|
||
except
|
||
raise SysUtils.Exception.Create('Microsoft ActiveSync no est<73> instalado.');
|
||
end;
|
||
|
||
FTablaContactos := TIBDataSet.Create(Self);
|
||
with FTablaContactos do
|
||
begin
|
||
Database := dmBaseDatos.BD;
|
||
Transaction := dmBaseDatos.Transaccion;
|
||
end;
|
||
|
||
FTablaAgenda := TIBDataSet.Create(Self);
|
||
with FTablaAgenda do
|
||
begin
|
||
Database := dmBaseDatos.BD;
|
||
Transaction := dmBaseDatos.Transaccion;
|
||
end;
|
||
|
||
FUltimaSincronizacion := DarUltimaSincronizacion;
|
||
|
||
FCategoriaClientes := dmBaseDatos.DarValorConfiguracion('CAT_PPC_CLIENTES');
|
||
FCategoriaProveedores := dmBaseDatos.DarValorConfiguracion('CAT_PPC_PROVEEDORES');
|
||
if EsCadenaVacia(FCategoriaClientes) or EsCadenaVacia(FCategoriaProveedores) then
|
||
raise SysUtils.Exception.Create('No est<73>n definidas las categor<6F>as de los contactos para el PocketPC.');
|
||
end;
|
||
|
||
procedure TfSincronizacion.FormDestroy(Sender: TObject);
|
||
begin
|
||
dmBaseDatos.Rollback;
|
||
if Assigned (FTablaContactos) then
|
||
begin
|
||
FTablaContactos.Close;
|
||
FTablaContactos.Free;
|
||
end;
|
||
FTablaContactos := NIL;
|
||
|
||
if Assigned (FTablaAgenda) then
|
||
begin
|
||
FTablaAgenda.Close;
|
||
FTablaAgenda.Free;
|
||
end;
|
||
FTablaAgenda := NIL;
|
||
|
||
NmSpace.Logoff;
|
||
Outlook.Disconnect;
|
||
end;
|
||
|
||
procedure TfSincronizacion.FormShow(Sender: TObject);
|
||
begin
|
||
eFechaUltimaSinc.Caption := 'Ultima sincronizaci<63>n: ' + VarToStr(FUltimaSincronizacion);
|
||
|
||
end;
|
||
|
||
procedure TfSincronizacion.EliminarClientesSobrantes;
|
||
var
|
||
Contacto : TContactItem;
|
||
Filter: Widestring;
|
||
Id: IDispatch;
|
||
Total : Integer;
|
||
Contador : Integer;
|
||
DatosContacto : TObjeto;
|
||
Clientes : Items;
|
||
begin
|
||
Clientes := ContactsFolder.Items.Restrict('[Categor<6F>as] = "' + FCategoriaClientes + '"');
|
||
Contacto := TContactItem.Create(Self);
|
||
FTablaContactos.Open;
|
||
FTablaContactos.Last;
|
||
try
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Total := Clientes.Count - FTablaContactos.RecordCount;
|
||
Id := Clientes.GetLast;
|
||
if Total > 0 then
|
||
begin
|
||
Contador := 0;
|
||
while (Contador < Total) and Assigned(Id) do
|
||
begin
|
||
FTablaContactos.First;
|
||
Contacto.ConnectTo(Id as ContactItem);
|
||
if not FTablaContactos.Locate('CODIGO', Contacto.CustomerID, []) then
|
||
begin
|
||
Contacto.Delete;
|
||
Contador := Contador + 1;
|
||
end;
|
||
Id := Clientes.GetPrevious;
|
||
end;
|
||
end;
|
||
finally
|
||
FTablaContactos.Close;
|
||
Contacto.Free;
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TfSincronizacion.SincronizarContactos(TipoContacto : tContactos);
|
||
var
|
||
Contacto : TContactItem;
|
||
Filter: Widestring;
|
||
Id: IDispatch;
|
||
Contador : Integer;
|
||
DatosContacto : TObjeto;
|
||
begin
|
||
Contador := 0;
|
||
|
||
FTablaContactos.Open;
|
||
with FTablaContactos do
|
||
begin
|
||
Last;
|
||
First;
|
||
while not EOF do
|
||
begin
|
||
if TipoContacto = tcProveedores then
|
||
eProgress1.Caption := IntToStr(Contador) + ' proveedores sincronizados.'
|
||
else
|
||
eProgress2.Caption := IntToStr(Contador) + ' clientes sincronizados.';
|
||
|
||
Self.Refresh;
|
||
Application.ProcessMessages;
|
||
|
||
Filter :='[CustomerID] = "' + FieldByName('CODIGO').AsString + '"';
|
||
Id := ContactsFolder.Items.Find(Filter);
|
||
if (Id = nil) then
|
||
begin
|
||
Contacto := TContactItem.Create(Self);
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Contacto.ConnectTo(ContactsFolder.Items.Add(olContactItem) as _ContactItem);
|
||
|
||
try
|
||
if TipoContacto = tcProveedores then
|
||
begin
|
||
DatosContacto := TDatosProveedor.Create(FieldByName('CODIGO').AsString);
|
||
ActualizarProveedorOutlook(Contacto, DatosContacto as TDatosProveedor);
|
||
end
|
||
else begin
|
||
DatosContacto := TDatosCliente.Create(FieldByName('CODIGO').AsString);
|
||
ActualizarClienteOutlook(Contacto, DatosContacto as TDatosCliente);
|
||
end;
|
||
finally
|
||
Contacto.Free;
|
||
DatosContacto.Free;
|
||
end;
|
||
end
|
||
else begin
|
||
Contacto := TContactItem.Create(Self);
|
||
try
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Contacto.ConnectTo(Id as ContactItem);
|
||
|
||
if (Contacto.LastModificationTime > FUltimaSincronizacion) or
|
||
(FTablaContactos.FieldByName('ULTIMOCAMBIO').AsDateTime > FUltimaSincronizacion) then
|
||
begin
|
||
Contador := Contador + 1;
|
||
|
||
if TipoContacto = tcProveedores then
|
||
begin
|
||
DatosContacto := TDatosProveedor.Create(FieldByName('CODIGO').AsString);
|
||
if (Contacto.LastModificationTime > FieldByName('ULTIMOCAMBIO').AsDateTime) then
|
||
ActualizarProveedorBD(Contacto, DatosContacto as TDatosProveedor)
|
||
else
|
||
ActualizarProveedorOutlook(Contacto, DatosContacto as TDatosProveedor);
|
||
end
|
||
else begin
|
||
DatosContacto := TDatosCliente.Create(FieldByName('CODIGO').AsString);
|
||
if (Contacto.LastModificationTime > FieldByName('ULTIMOCAMBIO').AsDateTime) then
|
||
ActualizarClienteBD(Contacto, DatosContacto as TDatosCliente)
|
||
else
|
||
ActualizarClienteOutlook(Contacto, DatosContacto as TDatosCliente);
|
||
end;
|
||
DatosContacto.Free;
|
||
end;
|
||
finally
|
||
Contacto.Free;
|
||
end;
|
||
end;
|
||
Contador := Contador + 1;
|
||
Next;
|
||
end;
|
||
end;
|
||
if TipoContacto = tcProveedores then
|
||
eProgress1.Caption := IntToStr(Contador) + ' proveedores sincronizados.'
|
||
else
|
||
eProgress2.Caption := IntToStr(Contador) + ' clientes sincronizados.';
|
||
|
||
FTablaContactos.Close;
|
||
end;
|
||
|
||
procedure TfSincronizacion.FormClose(Sender: TObject;
|
||
var Action: TCloseAction);
|
||
begin
|
||
Action := caFree;
|
||
end;
|
||
|
||
procedure TfSincronizacion.FormActivate(Sender: TObject);
|
||
begin
|
||
OnActivate := NIL;
|
||
Sincronizar;
|
||
end;
|
||
|
||
procedure TfSincronizacion.AnadirClientesNuevos;
|
||
var
|
||
Contacto : TContactItem;
|
||
Id: IDispatch;
|
||
DatosContacto : TObjeto;
|
||
Clientes : Items;
|
||
DatosCliente : TDatosCliente;
|
||
begin
|
||
Clientes := ContactsFolder.Items.Restrict('[Categor<6F>as] = "' + FCategoriaClientes + '"');
|
||
Contacto := TContactItem.Create(Self);
|
||
|
||
try
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Id := Clientes.GetFirst;
|
||
while Assigned(Id) do
|
||
begin
|
||
Contacto.ConnectTo(Id as ContactItem);
|
||
if EsCadenaVacia(Contacto.CustomerID) then
|
||
begin
|
||
DatosCliente := TDatosCliente.Create;
|
||
try
|
||
InsertarClienteBD(Contacto, DatosCliente);
|
||
ActualizarClienteOutlook(Contacto, DatosCliente);
|
||
finally
|
||
DatosCliente.Free;
|
||
end;
|
||
end;
|
||
Id := Clientes.GetNext;
|
||
end;
|
||
finally
|
||
Contacto.Free;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.InsertarClienteBD(Contacto: TContactItem;
|
||
Cliente: TDatosCliente);
|
||
begin
|
||
with Contacto, Cliente do
|
||
begin
|
||
Nombre := FullName;
|
||
Calle := BusinessAddressStreet;
|
||
Piso := '';
|
||
Numero := '';
|
||
CodigoPostal := BusinessAddressPostalCode;
|
||
Poblacion := BusinessAddressCity;
|
||
Provincia := BusinessAddressState;
|
||
Correo := Email1Address;
|
||
Telefono1 := BusinessTelephoneNumber;
|
||
Telefono2 := Business2TelephoneNumber;
|
||
Fax := BusinessFaxNumber;
|
||
Movil1 := MobileTelephoneNumber;
|
||
Movil2 := HomeTelephoneNumber;
|
||
Observaciones := Body;
|
||
SalvarDatos;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.InsertarProveedorBD(Contacto: TContactItem;
|
||
Proveedor: TDatosProveedor);
|
||
begin
|
||
with Contacto, Proveedor do
|
||
begin
|
||
Nombre := FullName;
|
||
Calle := BusinessAddressStreet;
|
||
Piso := '';
|
||
Numero := '';
|
||
CodigoPostal := BusinessAddressPostalCode;
|
||
Poblacion := BusinessAddressCity;
|
||
Provincia := BusinessAddressState;
|
||
Correo := Email1Address;
|
||
Telefono1 := BusinessTelephoneNumber;
|
||
Telefono2 := Business2TelephoneNumber;
|
||
Fax := BusinessFaxNumber;
|
||
Movil1 := MobileTelephoneNumber;
|
||
Movil2 := HomeTelephoneNumber;
|
||
Observaciones := Body;
|
||
SalvarDatos;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.AnadirProveedoresNuevos;
|
||
var
|
||
Contacto : TContactItem;
|
||
Id: IDispatch;
|
||
DatosContacto : TObjeto;
|
||
Proveedores : Items;
|
||
DatosProveedor : TDatosProveedor;
|
||
begin
|
||
Proveedores := ContactsFolder.Items.Restrict('[Categor<6F>as] = "' + FCategoriaProveedores + '"');
|
||
Contacto := TContactItem.Create(Self);
|
||
|
||
try
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Id := Proveedores.GetFirst;
|
||
while Assigned(Id) do
|
||
begin
|
||
Contacto.ConnectTo(Id as ContactItem);
|
||
if EsCadenaVacia(Contacto.CustomerID) then
|
||
begin
|
||
DatosProveedor := TDatosProveedor.Create;
|
||
try
|
||
InsertarProveedorBD(Contacto, DatosProveedor);
|
||
ActualizarProveedorOutlook(Contacto, DatosProveedor);
|
||
finally
|
||
DatosProveedor.Free;
|
||
end;
|
||
end;
|
||
Id := Proveedores.GetNext;
|
||
end;
|
||
finally
|
||
Contacto.Free;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.EliminarProveedoresSobrantes;
|
||
var
|
||
Contacto : TContactItem;
|
||
Filter: Widestring;
|
||
Id: IDispatch;
|
||
Total : Integer;
|
||
Contador : Integer;
|
||
DatosContacto : TObjeto;
|
||
Proveedores : Items;
|
||
begin
|
||
Proveedores := ContactsFolder.Items.Restrict('[Categor<6F>as] = "' + FCategoriaProveedores + '"');
|
||
Contacto := TContactItem.Create(Self);
|
||
FTablaContactos.Open;
|
||
FTablaContactos.Last;
|
||
try
|
||
Contacto.ConnectKind := ckRunningOrNew;
|
||
Total := Proveedores.Count - FTablaContactos.RecordCount;
|
||
Id := Proveedores.GetLast;
|
||
if Total > 0 then
|
||
begin
|
||
Contador := 0;
|
||
while (Contador < Total) and Assigned(Id) do
|
||
begin
|
||
FTablaContactos.First;
|
||
Contacto.ConnectTo(Id as ContactItem);
|
||
if not FTablaContactos.Locate('CODIGO', Contacto.CustomerID, []) then
|
||
begin
|
||
Contacto.Delete;
|
||
Contador := Contador + 1;
|
||
end;
|
||
Id := Proveedores.GetPrevious;
|
||
end;
|
||
end;
|
||
finally
|
||
FTablaContactos.Close;
|
||
Contacto.Free;
|
||
end;
|
||
end;
|
||
|
||
function TfSincronizacion.DarUltimaSincronizacion: TDateTime;
|
||
var
|
||
oSQL : TIBQuery;
|
||
begin
|
||
oSQL := TIBQuery.Create(Self);
|
||
with oSQL do
|
||
begin
|
||
Database := dmBaseDatos.BD;
|
||
Transaction := dmBaseDatos.Transaccion;
|
||
SQL.Add('select ULTIMASINCRONIZACION ');
|
||
SQL.Add('from USUARIOS ');
|
||
SQL.Add('where UPPER(USUARIO) = UPPER(:USUARIO)');
|
||
ParamByName('USUARIO').AsString := dmBaseDatos.Usuario;
|
||
|
||
try
|
||
Prepare;
|
||
Open;
|
||
Result := FieldByName('ULTIMASINCRONIZACION').AsDateTime;
|
||
finally
|
||
Close;
|
||
Transaction := NIL;
|
||
Free;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.ActualizarFechaSincronizacion;
|
||
var
|
||
oSQL : TIBSQL;
|
||
begin
|
||
oSQL := TIBSQL.Create(nil);
|
||
with oSQL do
|
||
begin
|
||
Database := dmBaseDatos.BD;
|
||
Transaction := dmBaseDatos.Transaccion;
|
||
SQL.Add('update USUARIOS set ');
|
||
SQL.Add('ULTIMASINCRONIZACION = CURRENT_TIME ');
|
||
SQL.Add('where UPPER(USUARIO) = UPPER(:USUARIO)');
|
||
ParamByName('USUARIO').AsString := dmBaseDatos.Usuario;
|
||
try
|
||
Prepare;
|
||
ExecQuery;
|
||
finally
|
||
Close;
|
||
Transaction := NIL;
|
||
Free;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
procedure TfSincronizacion.SincronizarAgenda;
|
||
var
|
||
CitaItem : TAppointmentItem;
|
||
AppItem : AppointmentItem;
|
||
Filter: Widestring;
|
||
Id: IDispatch;
|
||
Citas : Items;
|
||
i, Contador : Integer;
|
||
DatosVisita : TDatosVisita;
|
||
StoreID : OleVariant;
|
||
SincCal : TSincCalendario;
|
||
begin
|
||
Contador := 0;
|
||
|
||
SincCal := TSincCalendario.Create(Self);
|
||
try
|
||
SincCal.CalendarioBD := FTablaAgenda;
|
||
SincCal.UltimaSincronizacion := FUltimaSincronizacion;
|
||
SincCal.Sincronizar;
|
||
finally
|
||
SincCal.Free;
|
||
end;
|
||
end;
|
||
|
||
|
||
procedure TfSincronizacion.CEDeviceInfoConnectError(Sender: TObject);
|
||
begin
|
||
ShowMessage('No se ha podido conectar con el PocketPC.' + #10#13 + 'No se realizar<61> la sincronizaci<63>n');
|
||
end;
|
||
|
||
procedure TfSincronizacion.Sincronizar;
|
||
begin
|
||
Screen.Cursor := crHourGlass;
|
||
Self.Refresh;
|
||
Application.ProcessMessages;
|
||
|
||
CEDeviceInfo.Open; // Conectar con el PPC;
|
||
if not CEDeviceInfo.Connected then
|
||
begin
|
||
bCerrar.Enabled := True;
|
||
Self.Refresh;
|
||
Screen.Cursor := crDefault;
|
||
Close;
|
||
Application.ProcessMessages;
|
||
Exit;
|
||
end;
|
||
|
||
Image4.Visible := True;
|
||
|
||
// Sincronizar los contactos
|
||
AnadirProveedoresNuevos;
|
||
AnadirClientesNuevos;
|
||
|
||
with FTablaContactos do
|
||
begin
|
||
Close;
|
||
SelectSQL.Clear;
|
||
SelectSQL.Add('select * from proveedores order by codigo');
|
||
Prepare;
|
||
end;
|
||
SincronizarContactos(tcProveedores);
|
||
EliminarProveedoresSobrantes;
|
||
|
||
Image1.Visible := True;
|
||
Self.Refresh;
|
||
Application.ProcessMessages;
|
||
|
||
with FTablaContactos do
|
||
begin
|
||
Close;
|
||
Database := dmBaseDatos.BD;
|
||
Transaction := dmBaseDatos.Transaccion;
|
||
SelectSQL.Clear;
|
||
SelectSQL.Add('select first 100 CLIENTES.CODIGO, CLIENTES.NIFCIF, CLIENTES.NOMBRE, PROCEDENCIA, VENDEDOR, ');
|
||
SelectSQL.Add('CALLE, NUMERO, PISO, CODIGOPOSTAL, POBLACION, PROVINCIA, ');
|
||
SelectSQL.Add('TELEFONO1, TELEFONO2, MOVIL1, MOVIL2, FAX, CORREO, ');
|
||
SelectSQL.Add('PERSONACONTACTO, OBSERVACIONES, ULTIMOCAMBIO ');
|
||
SelectSQL.Add('from CLIENTES left join SUCURSALESCLIENTE on ');
|
||
SelectSQL.Add('(SUCURSALESCLIENTE.CODIGOCLIENTE = CLIENTES.CODIGO and ');
|
||
SelectSQL.Add('SUCURSALESCLIENTE.TIPO = ''P'') ');
|
||
SelectSQL.Add('order by CLIENTES.FECHAALTA DESC, CLIENTES.CODIGO desc');
|
||
Prepare;
|
||
end;
|
||
SincronizarContactos(tcClientes);
|
||
EliminarClientesSobrantes;
|
||
|
||
Image2.Visible := True;
|
||
|
||
// Sincronizar la agenda (calendario)
|
||
with FTablaAgenda do
|
||
begin
|
||
Close;
|
||
SelectSQL.Clear;
|
||
SelectSQL.Add('select * from AGENDA ');
|
||
SelectSQL.Add('where UPPER(USUARIO) = UPPER(:USUARIO) ');
|
||
SelectSQL.Add('order by FECHAALTA');
|
||
|
||
with DeleteSQL do
|
||
begin
|
||
Add('delete from AGENDA ');
|
||
Add('where (CODIGO = :CODIGO)');
|
||
end;
|
||
|
||
ParamByName('USUARIO').AsString := dmBaseDatos.Usuario;
|
||
Prepare;
|
||
end;
|
||
SincronizarAgenda;
|
||
|
||
|
||
// Fin
|
||
CEDeviceInfo.Close; // desconectar con el PPC;
|
||
ActualizarFechaSincronizacion;
|
||
FUltimaSincronizacion := DarUltimaSincronizacion;
|
||
dmBaseDatos.Commit;
|
||
Image3.Visible := True;
|
||
bCerrar.Enabled := True;
|
||
Self.Refresh;
|
||
Application.ProcessMessages;
|
||
|
||
Screen.Cursor := crDefault;
|
||
end;
|
||
|
||
end.
|