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