236 lines
7.2 KiB
ObjectPascal
236 lines
7.2 KiB
ObjectPascal
unit uGenerarPedidosProvUtils;
|
||
|
||
interface
|
||
|
||
uses
|
||
SysUtils, Classes, uBizContratosCliente, uBizPedidosProveedor, pngimage, JSDialog;
|
||
|
||
type
|
||
TdmGenerarPedidosProv = class(TDataModule)
|
||
JsListaPedidosGenerados: TJSDialog;
|
||
JsListaPedidosAsignadosAContrato: TJSDialog;
|
||
end;
|
||
|
||
// function GenerarPedidosProv(const IDPedido : Integer) : Boolean; overload;
|
||
// function GenerarPedidosProv(APedidoCli : IBizPedidoCliente) : Boolean; overload;
|
||
// function GenerarPedidosProv : Boolean; overload;
|
||
|
||
function AsignarContratoAPedidos(AContrato : IBizContratoCliente; var APedidos: IBizPedidoProveedor): Boolean;
|
||
|
||
implementation
|
||
|
||
{$R *.dfm}
|
||
|
||
uses
|
||
uDialogUtils,
|
||
uContratosClienteController, uPedidosProveedorController, uProveedoresController,
|
||
uDetallesPedidoProveedorController, uControllerDetallesBase,
|
||
uBizContactos, schPedidosProveedorClient_Intf;
|
||
|
||
var
|
||
dmGenerarPedidosProv: TdmGenerarPedidosProv;
|
||
AContratosClienteController : IContratosClienteController;
|
||
APedidosProveedorController : IPedidosProveedorController;
|
||
ADetallesPedidosProvController : IDetallesPedidoProveedorController;
|
||
AProveedoresController : IProveedoresController;
|
||
|
||
|
||
procedure Inicializar;
|
||
begin
|
||
dmGenerarPedidosProv := TdmGenerarPedidosProv.Create(nil);
|
||
AContratosClienteController := TContratosClienteController.Create;
|
||
APedidosProveedorController := TPedidosProveedorController.Create;
|
||
ADetallesPedidosProvController := TDetallesPedidoProveedorController.Create;
|
||
AProveedoresController := TProveedoresController.Create;
|
||
end;
|
||
|
||
procedure Finalizar;
|
||
begin
|
||
FreeAndNIL(dmGenerarPedidosProv);
|
||
AContratosClienteController := nil;
|
||
APedidosProveedorController := nil;
|
||
ADetallesPedidosProvController := nil;
|
||
AProveedoresController := nil;
|
||
end;
|
||
|
||
|
||
function AsignarContratoAPedidos(AContrato : IBizContratoCliente; var APedidos: IBizPedidoProveedor): Boolean;
|
||
var
|
||
i: integer;
|
||
|
||
begin
|
||
Result := False;
|
||
|
||
if not Assigned(APedidos) then
|
||
raise Exception.Create ('Pedidos no asignadas (AsignarContratoAPedidos)');
|
||
|
||
if not Assigned(AContrato) then
|
||
raise Exception.Create ('Contrato no asignado (AsignarContratoAPedidos)');
|
||
|
||
if not APedidos.DataTable.Active then
|
||
APedidos.DataTable.Active := True;
|
||
|
||
if not Assigned(AContratosClienteController) then
|
||
Inicializar;
|
||
|
||
with dmGenerarPedidosProv.JsListaPedidosAsignadosAContrato do
|
||
begin
|
||
Content.Clear;
|
||
APedidos.DataTable.First;
|
||
for i := 0 to APedidos.DataTable.RecordCount - 1 do
|
||
begin
|
||
if (APedidos.SITUACION = SITUACION_PEDIDO_PENDIENTE) then
|
||
begin
|
||
APedidos.Edit;
|
||
APedidos.ID_CONTRATO_CLIENTE := AContrato.ID;
|
||
APedidos.REF_CON_CLIENTE := AContrato.REFERENCIA;
|
||
APedidos.NOMBRE_CLIENTE := AContrato.NOMBRE_CLIENTE;
|
||
Content.Add(APedidos.REFERENCIA + ': Asignado contrato ' + AContrato.REFERENCIA);
|
||
APedidos.Post;
|
||
Result := True;
|
||
end
|
||
else
|
||
Content.Add(APedidos.REFERENCIA + ': El pedido est<73> parcialmente recibido o recibido, por lo que no se puede modificar el contrato asociado ' + APedidos.REF_CON_CLIENTE);
|
||
APedidos.Next;
|
||
end;
|
||
end;
|
||
dmGenerarPedidosProv.JsListaPedidosAsignadosAContrato.Execute;
|
||
APedidos.DataTable.ApplyUpdates;
|
||
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.
|