This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES/Modulos/Tienda web/Controller/Utiles/uActualizarProveedoresUtils.pas

243 lines
7.2 KiB
ObjectPascal
Raw Blame History

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.