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.
|