243 lines
7.2 KiB
ObjectPascal
243 lines
7.2 KiB
ObjectPascal
|
|
unit uActualizarProveedoresUtils;
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
Forms, Classes, Windows, SysUtils,
|
|||
|
|
uBizTiendaWeb, JSDialog, ExtCtrls;
|
|||
|
|
|
|||
|
|
function ActualizarProveedoresTienda(ATiendaWeb : IBizTiendaWeb): Boolean;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
uProveedoresController, uOscManufacturersController,
|
|||
|
|
uBizOscManufacturers, uPasswordUtils, schTiendaWebClient_Intf, uDADataTable,
|
|||
|
|
uBizContactos, uBizDireccionesContacto, schContactosClient_Intf,
|
|||
|
|
JSDialogs, uDialogUtils, StrUtils, uIntegerListUtils;
|
|||
|
|
|
|||
|
|
|
|||
|
|
function AnadirOSCManufacturer(AOSCManufacturers : IBizOscManufacturer; AProveedor : IBizProveedor): Boolean;
|
|||
|
|
var
|
|||
|
|
AOSCManufacturerController : IOscManufacturersController;
|
|||
|
|
i : Integer;
|
|||
|
|
Resultado : Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := True;
|
|||
|
|
|
|||
|
|
if not Assigned(AOSCManufacturers) then
|
|||
|
|
raise Exception.Create ('OSCManufacturers no asignado (AnadirOSCManufacturer)');
|
|||
|
|
|
|||
|
|
if not Assigned(AProveedor) then
|
|||
|
|
raise Exception.Create ('Proveedor no asignado (AnadirOSCManufacturer)');
|
|||
|
|
|
|||
|
|
AProveedor.DataTable.Active := True;
|
|||
|
|
|
|||
|
|
AOSCManufacturerController := TOscManufacturersController.Create;
|
|||
|
|
AOSCManufacturers.DataTable.Active := True;
|
|||
|
|
|
|||
|
|
try
|
|||
|
|
AOSCManufacturerController.Anadir(AOSCManufacturers);
|
|||
|
|
with AOSCManufacturers do
|
|||
|
|
begin
|
|||
|
|
manufacturers_name := AProveedor.NOMBRE;
|
|||
|
|
date_added := Now;
|
|||
|
|
rdx_manufacturers_id_local := AProveedor.ID;
|
|||
|
|
Post;
|
|||
|
|
end;
|
|||
|
|
AOSCManufacturerController.Guardar(AOSCManufacturers);
|
|||
|
|
|
|||
|
|
finally
|
|||
|
|
AOSCManufacturerController := NIL;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
function ActualizarOSCManufacturer(AOSCManufacturers : IBizOscManufacturer; AProveedor : IBizProveedor) : Boolean;
|
|||
|
|
var
|
|||
|
|
AOSCManufacturerController : IOscManufacturersController;
|
|||
|
|
i : Integer;
|
|||
|
|
Resultado : Boolean;
|
|||
|
|
begin
|
|||
|
|
Result := True;
|
|||
|
|
|
|||
|
|
if not Assigned(AOSCManufacturers) then
|
|||
|
|
raise Exception.Create ('OSCManufacturers no asignado (ActualizarOSCManufacturer)');
|
|||
|
|
|
|||
|
|
if not Assigned(AProveedor) then
|
|||
|
|
raise Exception.Create ('Proveedor no asignado (ActualizarOSCManufacturer)');
|
|||
|
|
|
|||
|
|
AProveedor.DataTable.Active := True;
|
|||
|
|
|
|||
|
|
AOSCManufacturerController := TOscManufacturersController.Create;
|
|||
|
|
|
|||
|
|
AOSCManufacturers.DataTable.Active := True;
|
|||
|
|
try
|
|||
|
|
if not AOSCManufacturerController.Localizar(AOSCManufacturers, AProveedor.ID) then
|
|||
|
|
raise Exception.CreateFmt('No se ha localizado el manufacturer con ID = %d', [AProveedor.ID]);
|
|||
|
|
|
|||
|
|
with AOSCManufacturers do
|
|||
|
|
begin
|
|||
|
|
Edit;
|
|||
|
|
manufacturers_name := AProveedor.NOMBRE;
|
|||
|
|
last_modified := Now;
|
|||
|
|
Post;
|
|||
|
|
end;
|
|||
|
|
AOSCManufacturerController.Guardar(AOSCManufacturers);
|
|||
|
|
|
|||
|
|
finally
|
|||
|
|
AOSCManufacturerController := NIL;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function HayCambiosPendientes(AProveedor : IBizProveedor; const UltimaSincro : TDateTime): Boolean;
|
|||
|
|
begin
|
|||
|
|
if not Assigned(AProveedor) then
|
|||
|
|
raise Exception.Create ('Proveedor no asignado (HayCambiosPendientes)');
|
|||
|
|
|
|||
|
|
AProveedor.DataTable.Active := True;
|
|||
|
|
|
|||
|
|
Result := (AProveedor.FECHA_MODIFICACION > UltimaSincro);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function ActualizarProveedoresTienda(ATiendaWeb : IBizTiendaWeb): Boolean;
|
|||
|
|
var
|
|||
|
|
AProveedoresController : IProveedoresController;
|
|||
|
|
AProveedores : IBizProveedor;
|
|||
|
|
|
|||
|
|
AOSCManufacturerController : IOscManufacturersController;
|
|||
|
|
AOSCManufacturers : IBizOscManufacturer;
|
|||
|
|
|
|||
|
|
i : Integer;
|
|||
|
|
|
|||
|
|
//ADlg : TJSDialog;
|
|||
|
|
Resultado : Boolean;
|
|||
|
|
s : String;
|
|||
|
|
|
|||
|
|
AManufacturerList : TIntegerList;
|
|||
|
|
AIndex : Integer;
|
|||
|
|
begin
|
|||
|
|
Result := False;
|
|||
|
|
if not Assigned(ATiendaWeb) then
|
|||
|
|
raise Exception.Create ('TiendaWeb no asignada');
|
|||
|
|
|
|||
|
|
AProveedoresController := TProveedoresController.Create;
|
|||
|
|
AOSCManufacturerController := TOscManufacturersController.Create;
|
|||
|
|
|
|||
|
|
AManufacturerList := TIntegerList.Create;
|
|||
|
|
//ADlg := TJSDialog.Create(nil);
|
|||
|
|
try
|
|||
|
|
{with ADlg do
|
|||
|
|
begin
|
|||
|
|
Title := 'Actualizaci<63>n de proveedores';
|
|||
|
|
DialogOptions := [doProgressBarMarquee, doTopMost];
|
|||
|
|
ButtonBar.Buttons := [];
|
|||
|
|
Instruction.Text := 'Actualizando proveedores...';
|
|||
|
|
Content.Text := Format('Progreso: %d%%', [0]);
|
|||
|
|
Expando.Visible := True;
|
|||
|
|
Expando.MoreHeight := 200;
|
|||
|
|
Expando.ShowInFooter := True;
|
|||
|
|
Expando.ShowText := 'Ver m<>s detalles...';
|
|||
|
|
Expando.HideText := 'Ocultar detalles...';
|
|||
|
|
Progress.Max := 100;
|
|||
|
|
end;}
|
|||
|
|
|
|||
|
|
AProveedores := (AProveedoresController.BuscarTodosTiendaWeb as IBizProveedor);
|
|||
|
|
AProveedores.DataTable.Active := True;
|
|||
|
|
AProveedores.DataTable.First;
|
|||
|
|
|
|||
|
|
AOSCManufacturers := AOSCManufacturerController.BuscarTodos;
|
|||
|
|
AOSCManufacturers.DataTable.Active := True;
|
|||
|
|
AOSCManufacturers.DataTable.First;
|
|||
|
|
|
|||
|
|
{if AProveedores.DataTable.RecordCount > 0 then
|
|||
|
|
ADlg.Progress.Max := AProveedores.DataTable.RecordCount;
|
|||
|
|
|
|||
|
|
ADlg.Execute;
|
|||
|
|
Application.ProcessMessages;}
|
|||
|
|
|
|||
|
|
for I := 0 to AProveedores.DataTable.RecordCount - 1 do
|
|||
|
|
begin
|
|||
|
|
Application.ProcessMessages;
|
|||
|
|
{with ADlg do
|
|||
|
|
begin
|
|||
|
|
Content.Text := Format('Progreso: %d%%', [Progress.Position*100 div ADlg.Progress.Max]);
|
|||
|
|
//UpdateProgress;
|
|||
|
|
Application.ProcessMessages;
|
|||
|
|
end;}
|
|||
|
|
|
|||
|
|
if not AOSCManufacturerController.Localizar(AOSCManufacturers, AProveedores.ID) then
|
|||
|
|
begin
|
|||
|
|
s := Format('A<>adiendo %s... ', [AProveedores.NOMBRE]);
|
|||
|
|
Resultado := AnadirOSCManufacturer(AOSCManufacturers, AProveedores);
|
|||
|
|
if Resultado then
|
|||
|
|
s := s + 'OK'
|
|||
|
|
else
|
|||
|
|
s := s + 'Fallo';
|
|||
|
|
end
|
|||
|
|
else begin
|
|||
|
|
if HayCambiosPendientes(AProveedores, ATiendaWeb.ULTIMA_ACTUALIZACION) then
|
|||
|
|
begin
|
|||
|
|
s := Format('Actualizando %s... ', [AProveedores.NOMBRE]);
|
|||
|
|
Resultado := ActualizarOSCManufacturer(AOSCManufacturers, AProveedores);
|
|||
|
|
if Resultado then
|
|||
|
|
s := s + 'OK'
|
|||
|
|
else
|
|||
|
|
s := s + 'Fallo';
|
|||
|
|
end
|
|||
|
|
else
|
|||
|
|
s := Format('%s sin cambios', [AProveedores.NOMBRE]);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
//ADlg.Expando.Lines.Add(s);
|
|||
|
|
|
|||
|
|
AManufacturerList.Add(AProveedores.ID);
|
|||
|
|
AProveedores.DataTable.Next;
|
|||
|
|
|
|||
|
|
{with ADlg do
|
|||
|
|
begin
|
|||
|
|
Content.Text := Format('Progreso: %d%%', [Progress.Position*100 div ADlg.Progress.Max]);
|
|||
|
|
//UpdateProgress;
|
|||
|
|
Application.ProcessMessages;
|
|||
|
|
end;}
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
// Ahora hay que eliminar de OSC los proveedores que sobran
|
|||
|
|
AOSCManufacturers.Last;
|
|||
|
|
for I := (AOSCManufacturers.DataTable.RecordCount - 1) downto 0 do
|
|||
|
|
begin
|
|||
|
|
Application.ProcessMessages;
|
|||
|
|
if not AManufacturerList.Find(AOSCManufacturers.rdx_manufacturers_id_local, AIndex) then
|
|||
|
|
begin
|
|||
|
|
s := Format('Eliminado %s... ', [AOSCManufacturers.manufacturers_name]);
|
|||
|
|
//ADlg.Expando.Lines.Add(s);
|
|||
|
|
AOSCManufacturers.Delete;
|
|||
|
|
end;
|
|||
|
|
AOSCManufacturers.Prior;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
AOSCManufacturerController.Guardar(AOSCManufacturers);
|
|||
|
|
Application.ProcessMessages;
|
|||
|
|
Result := True;
|
|||
|
|
finally
|
|||
|
|
{ADlg.Close;
|
|||
|
|
FreeAndNIL(ADlg);
|
|||
|
|
Application.ProcessMessages;}
|
|||
|
|
|
|||
|
|
|
|||
|
|
FreeAndNIL(AManufacturerList);
|
|||
|
|
|
|||
|
|
AProveedores.DataTable.Active := False;
|
|||
|
|
AProveedores := NIL;
|
|||
|
|
|
|||
|
|
AOSCManufacturers.DataTable.Active := False;
|
|||
|
|
AOSCManufacturers := NIL;
|
|||
|
|
|
|||
|
|
AProveedoresController := NIL;
|
|||
|
|
AOSCManufacturerController := NIL;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
end.
|