244 lines
8.9 KiB
ObjectPascal
244 lines
8.9 KiB
ObjectPascal
|
|
unit uProcesoPresupuestosClienteController;
|
|||
|
|
|
|||
|
|
interface
|
|||
|
|
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
Classes, SysUtils, uDADataTable, FactuGES_Intf,
|
|||
|
|
uControllerBase, uIDataModulePedidosCliente,
|
|||
|
|
uBizPedidosCliente, uPedidosClienteController,
|
|||
|
|
uBizPedidosProveedor, uPedidosProveedorController,
|
|||
|
|
uBizAlbaranesProveedor, uAlbaranesProveedorController,
|
|||
|
|
uBizFacturasProveedor, uFacturasProveedorController;
|
|||
|
|
|
|||
|
|
type
|
|||
|
|
IProcesoPresupuestosClienteController = interface(IControllerBase)
|
|||
|
|
['{CBF0D9CF-2CFB-4205-9891-4BAA4EFE0D7C}']
|
|||
|
|
procedure VerProceso(const ListaIDPresupuestosCliente: TIntegerArray);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
TProcesoPresupuestosClienteController = class(TControllerBase, IProcesoPresupuestosClienteController)
|
|||
|
|
private
|
|||
|
|
FPedidosClienteController : IPedidosClienteController;
|
|||
|
|
FPedidosProveedorController : IPedidosProveedorController;
|
|||
|
|
FAlbaranesProveedorController : IAlbaranesProveedorController;
|
|||
|
|
FFacturasProveedorController : IFacturasProveedorController;
|
|||
|
|
|
|||
|
|
public
|
|||
|
|
constructor Create; override;
|
|||
|
|
destructor Destroy; override;
|
|||
|
|
|
|||
|
|
function BuscarPedidosCliente(const ListaIDPresupuestosCliente: TIntegerArray): IBizPedidoCliente;
|
|||
|
|
function BuscarPedidosProveedor(const ListaIDPresupuestosCliente: TIntegerArray): IBizPedidoProveedor;
|
|||
|
|
function BuscarAlbaranesProveedor(APedidosProveedor: IBizPedidoProveedor): IBizAlbaranProveedor;
|
|||
|
|
function BuscarFacturasProveedor(AAlbaranesProveedor: IBizAlbaranProveedor): IBizFacturaProveedor;
|
|||
|
|
|
|||
|
|
procedure VerProceso(const ListaIDPresupuestosCliente: TIntegerArray);
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
implementation
|
|||
|
|
|
|||
|
|
uses
|
|||
|
|
uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
|
|||
|
|
uFactuGES_App, uDataTableUtils, uDataModuleUsuarios, Forms,
|
|||
|
|
schPedidosClienteClient_Intf, uDAInterfaces,
|
|||
|
|
uDateUtils, Dialogs, Variants, uSistemaFunc, uIntegerListUtils, uStringsUtils,
|
|||
|
|
uIEditorProcesoPresupuestosCliente, uModuleController;
|
|||
|
|
|
|||
|
|
{ TProcesoPresupuestosClienteController }
|
|||
|
|
constructor TProcesoPresupuestosClienteController.Create;
|
|||
|
|
begin
|
|||
|
|
inherited;
|
|||
|
|
FPedidosClienteController := TPedidosClienteController.Create;
|
|||
|
|
FPedidosProveedorController := TPedidosProveedorController.Create;
|
|||
|
|
FAlbaranesProveedorController := TAlbaranesProveedorController.Create;
|
|||
|
|
FFacturasProveedorController := TFacturasProveedorController.Create;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
destructor TProcesoPresupuestosClienteController.Destroy;
|
|||
|
|
begin
|
|||
|
|
FPedidosClienteController := Nil;
|
|||
|
|
FPedidosProveedorController := Nil;
|
|||
|
|
FAlbaranesProveedorController := Nil;
|
|||
|
|
FFacturasProveedorController := Nil;
|
|||
|
|
inherited;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TProcesoPresupuestosClienteController.BuscarAlbaranesProveedor(APedidosProveedor: IBizPedidoProveedor): IBizAlbaranProveedor;
|
|||
|
|
var
|
|||
|
|
Condicion: TDAWhereExpression;
|
|||
|
|
AArray : Array of TDAWhereExpression;
|
|||
|
|
i: Integer;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
Result := FAlbaranesProveedorController.BuscarTodos;
|
|||
|
|
//Quitamos el filtro por empresa ya que no es necesario y complicar<61>a where que hacemos a continuaci<63>n, adem<65>s de que puede darse el caso de haber dado de alta un pedido de proveedor con otra empresa?
|
|||
|
|
Result.DataTable.DynamicWhere.Clear;
|
|||
|
|
|
|||
|
|
if Assigned(Result) then
|
|||
|
|
begin
|
|||
|
|
//Vamos generando todos los where necesarios para cada uno de los ID de Pedido de proveedor que buscamos
|
|||
|
|
// Filtrar los Presupuestos pendientes de recepcion
|
|||
|
|
with Result.DataTable.DynamicWhere do
|
|||
|
|
begin
|
|||
|
|
APedidosProveedor.Open;
|
|||
|
|
SetLength(AArray, APedidosProveedor.RecordCount);
|
|||
|
|
APedidosProveedor.First;
|
|||
|
|
i:=0;
|
|||
|
|
while not ApedidosProveedor.EOF do
|
|||
|
|
begin
|
|||
|
|
AArray[i] := NewConstant(APedidosProveedor.ID, datInteger);
|
|||
|
|
Inc(i);
|
|||
|
|
APedidosProveedor.Next;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
// (ID_PEDIDO in lista IDs)
|
|||
|
|
Condicion := NewBinaryExpression(NewField('', 'ID_PEDIDO'), NewList(AArray), dboIn);
|
|||
|
|
if IsEmpty then
|
|||
|
|
Expression := Condicion
|
|||
|
|
else
|
|||
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
|||
|
|
|
|||
|
|
APedidosProveedor.Close;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TProcesoPresupuestosClienteController.BuscarFacturasProveedor(AAlbaranesProveedor: IBizAlbaranProveedor): IBizFacturaProveedor;
|
|||
|
|
var
|
|||
|
|
Condicion: TDAWhereExpression;
|
|||
|
|
AArray : Array of TDAWhereExpression;
|
|||
|
|
i: Integer;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
Result := FFacturasProveedorController.BuscarTodosDeAlbaran;
|
|||
|
|
|
|||
|
|
if Assigned(Result) then
|
|||
|
|
begin
|
|||
|
|
// Filtrar los Presupuestos pendientes de recepcion
|
|||
|
|
with Result.DataTable.DynamicWhere do
|
|||
|
|
begin
|
|||
|
|
//Vamos generando todos los where necesarios para cada uno de los ID de Pedido de proveedor que buscamos
|
|||
|
|
AAlbaranesProveedor.Open;
|
|||
|
|
SetLength(AArray, AAlbaranesProveedor.RecordCount);
|
|||
|
|
AAlbaranesProveedor.First;
|
|||
|
|
i:=0;
|
|||
|
|
while not AAlbaranesProveedor.EOF do
|
|||
|
|
begin
|
|||
|
|
if not AAlbaranesProveedor.ID_FACTURAIsNull then
|
|||
|
|
begin
|
|||
|
|
AArray[i] := NewConstant(AAlbaranesProveedor.ID, datInteger);
|
|||
|
|
Inc(i);
|
|||
|
|
end;
|
|||
|
|
AAlbaranesProveedor.Next;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
// (ID in lista de IDs)
|
|||
|
|
Condicion := NewBinaryExpression(NewField('', 'ID_ALBARAN'), NewList(AArray), dboIn);
|
|||
|
|
if IsEmpty then
|
|||
|
|
Expression := Condicion
|
|||
|
|
else
|
|||
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboOr);
|
|||
|
|
|
|||
|
|
AAlbaranesProveedor.Close;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TProcesoPresupuestosClienteController.BuscarPedidosCliente(const ListaIDPresupuestosCliente: TIntegerArray): IBizPedidoCliente;
|
|||
|
|
var
|
|||
|
|
Condicion: TDAWhereExpression;
|
|||
|
|
AArray : Array of TDAWhereExpression;
|
|||
|
|
i: Integer;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
Result := FPedidosClienteController.BuscarTodos;
|
|||
|
|
//Quitamos el filtro por empresa ya que no es necesario y complicar<61>a where que hacemos a continuaci<63>n
|
|||
|
|
Result.DataTable.DynamicWhere.Clear;
|
|||
|
|
|
|||
|
|
if Assigned(Result) then
|
|||
|
|
begin
|
|||
|
|
// Filtrar los pedidos de cliente que esten en la lista
|
|||
|
|
with Result.DataTable.DynamicWhere do
|
|||
|
|
begin
|
|||
|
|
SetLength(AArray, ListaIDPresupuestosCliente.Count);
|
|||
|
|
//Vamos generando la lista de ID de pedidos de cliente que vamos a inlcuir en la clausula IN
|
|||
|
|
for i := 0 to ListaIDPresupuestosCliente.Count - 1 do
|
|||
|
|
AArray[i] := NewConstant(ListaIDPresupuestosCliente.Items[i], datInteger);
|
|||
|
|
|
|||
|
|
// (ID IN lista de IDs)
|
|||
|
|
Condicion := NewBinaryExpression(NewField('', fld_PedidosClienteID), NewList(AArray), dboIn);
|
|||
|
|
if IsEmpty then
|
|||
|
|
Expression := Condicion
|
|||
|
|
else
|
|||
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
function TProcesoPresupuestosClienteController.BuscarPedidosProveedor(const ListaIDPresupuestosCliente: TIntegerArray): IBizPedidoProveedor;
|
|||
|
|
var
|
|||
|
|
Condicion: TDAWhereExpression;
|
|||
|
|
AArray : Array of TDAWhereExpression;
|
|||
|
|
i: Integer;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
Result := FPedidosProveedorController.BuscarTodos;
|
|||
|
|
//Quitamos el filtro por empresa ya que no es necesario y complicar<61>a where que hacemos a continuaci<63>n, adem<65>s de que puede darse el caso de haber dado de alta un pedido de proveedor con otra empresa?
|
|||
|
|
Result.DataTable.DynamicWhere.Clear;
|
|||
|
|
|
|||
|
|
if Assigned(Result) then
|
|||
|
|
begin
|
|||
|
|
// Filtrar los Pedidos de proveedor relacionados con los pedidos de cliente pasados por parametro
|
|||
|
|
with Result.DataTable.DynamicWhere do
|
|||
|
|
begin
|
|||
|
|
SetLength(AArray, ListaIDPresupuestosCliente.Count);
|
|||
|
|
//Vamos generando la lista de ID de pedidos de cliente que vamos a inlcuir en la clausula IN
|
|||
|
|
for i := 0 to ListaIDPresupuestosCliente.Count - 1 do
|
|||
|
|
AArray[i] := NewConstant(ListaIDPresupuestosCliente.Items[i], datInteger);
|
|||
|
|
|
|||
|
|
// (ID_PEDIDO_CLIENTE IN lista de IDs)
|
|||
|
|
Condicion := NewBinaryExpression(NewField('', 'ID_PEDIDO_CLIENTE'), NewList(AArray), dboIn);
|
|||
|
|
if IsEmpty then
|
|||
|
|
Expression := Condicion
|
|||
|
|
else
|
|||
|
|
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
procedure TProcesoPresupuestosClienteController.VerProceso(const ListaIDPresupuestosCliente: TIntegerArray);
|
|||
|
|
var
|
|||
|
|
AEditor : IEditorProcesoPresupuestosCliente;
|
|||
|
|
APedidosCliente: IBizPedidoCliente;
|
|||
|
|
APedidosProveedor: IBizPedidoProveedor;
|
|||
|
|
AAlbaranesProveedor: IBizAlbaranProveedor;
|
|||
|
|
AFacturasProveedor: IBizFacturaProveedor;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
AEditor := NIL;
|
|||
|
|
|
|||
|
|
APedidosCliente := BuscarPedidosCliente(ListaIDPresupuestosCliente);
|
|||
|
|
APedidosProveedor := BuscarPedidosProveedor(ListaIDPresupuestosCliente);
|
|||
|
|
AAlbaranesProveedor := BuscarAlbaranesProveedor(APedidosProveedor);
|
|||
|
|
AFacturasProveedor := BuscarFacturasProveedor(AAlbaranesProveedor);
|
|||
|
|
|
|||
|
|
CreateEditor('EditorProcesoPresupuestosCLiente', IEditorProcesoPresupuestosCliente, AEditor);
|
|||
|
|
if Assigned(AEditor) then
|
|||
|
|
try
|
|||
|
|
// AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
|
|||
|
|
AEditor.PedidosCliente := APedidosCliente;
|
|||
|
|
AEditor.PedidosProveedor := APedidosProveedor;
|
|||
|
|
AEditor.AlbaranesProveedor := AAlbaranesProveedor;
|
|||
|
|
AEditor.FacturasProveedor := AFacturasProveedor;
|
|||
|
|
AEditor.ShowModal;
|
|||
|
|
finally
|
|||
|
|
AEditor.Release;
|
|||
|
|
AEditor := NIL;
|
|||
|
|
end;
|
|||
|
|
end;
|
|||
|
|
|
|||
|
|
end.
|