This repository has been archived on 2024-11-28. You can view files and clone it, but cannot push or open issues or pull requests.
LuisLeon_FactuGES2/Source/Modulos/ProcesoPresupuestoCliente/Controller/uProcesoPresupuestosClienteController.pas

244 lines
8.9 KiB
ObjectPascal
Raw Blame History

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.