git-svn-id: https://192.168.0.254/svn/Proyectos.AlonsoYSal_FactuGES2/trunk@6 40301925-124e-1c4e-b97d-170ad7a8785b
188 lines
5.8 KiB
ObjectPascal
188 lines
5.8 KiB
ObjectPascal
unit uGenerarPedidosProvUtils;
|
||
|
||
interface
|
||
|
||
uses
|
||
SysUtils, Classes, uBizPedidosCliente, pngimage, JSDialog;
|
||
|
||
type
|
||
TdmGenerarPedidosProv = class(TDataModule)
|
||
JsListaPedidosGenerados: TJSDialog;
|
||
end;
|
||
|
||
function GenerarPedidosProv(const IDPedido : Integer) : Boolean; overload;
|
||
function GenerarPedidosProv(APedidoCli : IBizPedidoCliente) : Boolean; overload;
|
||
function GenerarPedidosProv : Boolean; overload;
|
||
|
||
implementation
|
||
|
||
{$R *.dfm}
|
||
|
||
uses
|
||
uDialogUtils,
|
||
uPedidosClienteController, uPedidosProveedorController, uProveedoresController,
|
||
uDetallesPedidoProveedorController, uControllerDetallesBase,
|
||
uBizPedidosProveedor, uBizContactos, schPedidosProveedorClient_Intf;
|
||
|
||
var
|
||
dmGenerarPedidosProv: TdmGenerarPedidosProv;
|
||
APedidosClienteController : IPedidosClienteController;
|
||
APedidosProveedorController : IPedidosProveedorController;
|
||
ADetallesPedidosProvController : IDetallesPedidoProveedorController;
|
||
AProveedoresController : IProveedoresController;
|
||
|
||
|
||
procedure Inicializar;
|
||
begin
|
||
dmGenerarPedidosProv := TdmGenerarPedidosProv.Create(nil);
|
||
APedidosClienteController := TPedidosClienteController.Create;
|
||
APedidosProveedorController := TPedidosProveedorController.Create;
|
||
ADetallesPedidosProvController := TDetallesPedidoProveedorController.Create;
|
||
AProveedoresController := TProveedoresController.Create;
|
||
end;
|
||
|
||
procedure Finalizar;
|
||
begin
|
||
FreeAndNIL(dmGenerarPedidosProv);
|
||
APedidosClienteController := nil;
|
||
APedidosProveedorController := nil;
|
||
ADetallesPedidosProvController := nil;
|
||
AProveedoresController := nil;
|
||
end;
|
||
|
||
|
||
function GenerarPedidosProv(const IDPedido : Integer) : Boolean; overload;
|
||
var
|
||
APedido : IBizPedidoCliente;
|
||
begin
|
||
Result := False;
|
||
|
||
try
|
||
if not Assigned(APedidosClienteController) then
|
||
Inicializar;
|
||
|
||
APedido := APedidosClienteController.Buscar(IDPedido);
|
||
if Assigned(APedido) then
|
||
Result := GenerarPedidosProv(APedido);
|
||
finally
|
||
if Assigned(APedidosClienteController) then
|
||
Finalizar;
|
||
end;
|
||
end;
|
||
|
||
function GenerarPedidosProv(APedidoCli : IBizPedidoCliente) : Boolean; overload;
|
||
var
|
||
APedidoProv : IBizPedidoProveedor;
|
||
AArticulosPend : IBizPedidoClienteArticulosPendientesPedirAProv;
|
||
ALista : TStringList;
|
||
begin
|
||
Result := False;
|
||
|
||
if not Assigned(APedidoCli) then
|
||
raise Exception.Create('Pedido de cliente no asignado (GenerarPedidosProv)');
|
||
|
||
if not APedidoCli.DataTable.Active then
|
||
APedidoCli.DataTable.Active := True;
|
||
|
||
if not Assigned(APedidosClienteController) then
|
||
Inicializar;
|
||
|
||
AArticulosPend := APedidosClienteController.BuscarPendientesPedir(APedidoCli.ID);
|
||
if not Assigned(AArticulosPend) then
|
||
raise Exception.Create('Error al recuperar la lista de art<72>culos pendientes de pedir (GenerarPedidosProv)');
|
||
|
||
ALista := TStringList.Create;
|
||
try
|
||
if not AArticulosPend.DataTable.Active then
|
||
AArticulosPend.DataTable.Active := True;
|
||
|
||
if AArticulosPend.DataTable.RecordCount = 0 then
|
||
begin
|
||
ShowInfoMessage('Este pedido a cliente no tiene art<72>culos pendientes que se tengan que pedir a los proveedores');
|
||
Exit;
|
||
end;
|
||
|
||
APedidoProv := NIL;
|
||
AArticulosPend.DataTable.First;
|
||
while not AArticulosPend.DataTable.EOF do
|
||
begin
|
||
if Assigned(APedidoProv) and
|
||
(AArticulosPend.ID_PROVEEDOR <> APedidoProv.ID_PROVEEDOR) then
|
||
begin
|
||
APedidosProveedorController.Guardar(APedidoProv);
|
||
ALista.Add(APedidoProv.REFERENCIA + ': ' + APedidoProv.NOMBRE);
|
||
APedidoProv := NIL;
|
||
end;
|
||
|
||
if not Assigned(APedidoProv) then
|
||
begin
|
||
APedidoProv := APedidosProveedorController.Nuevo;
|
||
APedidoProv.Edit;
|
||
APedidoProv.Proveedor := (AProveedoresController.Buscar(AArticulosPend.ID_PROVEEDOR) as IBizProveedor);
|
||
APedidoProv.ID_PEDIDO_CLIENTE := APedidoCli.ID;
|
||
end;
|
||
|
||
//OJO IMPORTANTE
|
||
//Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para
|
||
//obligarle siempre a recalcular los detalles una sola vez
|
||
ADetallesController.BeginUpdate(APedidoProv.Detalles);
|
||
|
||
ADetallesPedidosProvController.Add(APedidoProv.Detalles, TIPO_DETALLE_CONCEPTO);
|
||
ADetallesPedidosProvController.AnadirArticulo(APedidoProv.Detalles, AArticulosPend.ID_ARTICULO);
|
||
with APedidoProv.Detalles do
|
||
begin
|
||
Edit;
|
||
CANTIDAD := AArticulosPend.CANT_PENDIENTE_PEDIR;
|
||
Post;
|
||
end;
|
||
ADetallesController.EndUpdate(APedidoProv.Detalles);
|
||
AArticulosPend.DataTable.Next;
|
||
end;
|
||
|
||
if Assigned(APedidoProv) then
|
||
begin
|
||
APedidosProveedorController.Guardar(APedidoProv);
|
||
ALista.Add(APedidoProv.REFERENCIA + ': ' + APedidoProv.NOMBRE);
|
||
APedidoProv := NIL;
|
||
end;
|
||
|
||
if ALista.Count > 0 then
|
||
begin
|
||
dmGenerarPedidosProv.JsListaPedidosGenerados.Content.Clear;
|
||
dmGenerarPedidosProv.JsListaPedidosGenerados.Content.AddStrings(ALista);
|
||
dmGenerarPedidosProv.JsListaPedidosGenerados.Execute;
|
||
end;
|
||
|
||
Result := True;
|
||
finally
|
||
FreeAndNIL(ALista);
|
||
AArticulosPend := NIL;
|
||
|
||
if Assigned(APedidosClienteController) then
|
||
Finalizar;
|
||
end;
|
||
end;
|
||
|
||
function GenerarPedidosProv : Boolean; overload;
|
||
var
|
||
APedidoCli : IBizPedidoCliente;
|
||
begin
|
||
Result := False;
|
||
try
|
||
if not Assigned(APedidosClienteController) then
|
||
Inicializar;
|
||
|
||
APedidoCli := APedidosClienteController.ElegirPedidos(APedidosClienteController.BuscarPendientes,
|
||
'Elija el pedido de cliente que desea utilizar para dar de alta el pedido o pedidos a proveedor.'
|
||
, False);
|
||
|
||
if Assigned(APedidoCli) then
|
||
Result := GenerarPedidosProv(APedidoCli);
|
||
finally
|
||
if Assigned(APedidosClienteController) then
|
||
Finalizar;
|
||
end;
|
||
end;
|
||
|
||
end.
|