git-svn-id: https://192.168.0.254/svn/Proyectos.LuisLeon_FactuGES2/trunk@226 b2cfbe5a-eba1-4a0c-8b32-7feea0a119f2
400 lines
16 KiB
ObjectPascal
400 lines
16 KiB
ObjectPascal
unit uProcesoPresupuestosClienteController;
|
||
|
||
interface
|
||
|
||
|
||
uses
|
||
Classes, SysUtils, uDADataTable, FactuGES_Intf,
|
||
uControllerBase, uIDataModulePedidosCliente,
|
||
uBizPedidosCliente, uPedidosClienteController,
|
||
uBizPedidosProveedor, uPedidosProveedorController,
|
||
uBizAlbaranesProveedor, uAlbaranesProveedorController,
|
||
uBizFacturasProveedor, uFacturasProveedorController,
|
||
uBizAlbaranesCliente, uAlbaranesClienteController,
|
||
uBizFacturasCliente, uFacturasClienteController,
|
||
uBizFacturasProforma, uFacturasProformaController;
|
||
|
||
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;
|
||
FAlbaranesClienteController : IAlbaranesClienteController;
|
||
FFacturasClienteController : IFacturasClienteController;
|
||
FFacturasProformaController : IFacturasProformaController;
|
||
|
||
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;
|
||
function BuscarAlbaranesCliente(APedidosCliente: IBizPedidoCliente): IBizAlbaranCliente;
|
||
function BuscarFacturasCliente(AAlbaranesCliente: IBizAlbaranCliente): IBizFacturaCliente;
|
||
function BuscarFacturasProforma(const ListaIDPresupuestosCliente: TIntegerArray): IBizFacturaProforma;
|
||
|
||
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;
|
||
FAlbaranesClienteController := TAlbaranesClienteController.Create;
|
||
FFacturasClienteController := TFacturasClienteController.Create;
|
||
FFacturasProformaController := TFacturasProformaController.Create;
|
||
end;
|
||
|
||
destructor TProcesoPresupuestosClienteController.Destroy;
|
||
begin
|
||
FPedidosClienteController := Nil;
|
||
FPedidosProveedorController := Nil;
|
||
FAlbaranesProveedorController := Nil;
|
||
FFacturasProveedorController := Nil;
|
||
FAlbaranesClienteController := Nil;
|
||
FFacturasClienteController := Nil;
|
||
FFacturasProformaController := Nil;
|
||
inherited;
|
||
end;
|
||
|
||
function TProcesoPresupuestosClienteController.BuscarAlbaranesCliente(APedidosCliente: IBizPedidoCliente): IBizAlbaranCliente;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
AArrayIdPedidosCli : Array of TDAWhereExpression;
|
||
i: Integer;
|
||
|
||
begin
|
||
Result := FAlbaranesClienteController.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
|
||
APedidosCliente.Open;
|
||
SetLength(AArrayIdPedidosCli, APedidosCliente.RecordCount);
|
||
APedidosCliente.First;
|
||
i:=0;
|
||
while not APedidosCliente.EOF do
|
||
begin
|
||
AArrayIdPedidosCli[i] := NewConstant(APedidosCliente.ID, datInteger);
|
||
Inc(i);
|
||
APedidosCliente.Next;
|
||
end;
|
||
|
||
// (ID_PEDIDO in lista IDs) (SIEMPRE HAY AL MENOS UNO)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID_PEDIDO'), NewList(AArrayIdPedidosCli), dboIn);
|
||
if IsEmpty then
|
||
Expression := Condicion
|
||
else
|
||
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
||
|
||
APedidosCliente.Close;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TProcesoPresupuestosClienteController.BuscarAlbaranesProveedor(APedidosProveedor: IBizPedidoProveedor): IBizAlbaranProveedor;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
AArrayIdPedidosProv : 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(AArrayIdPedidosProv, APedidosProveedor.RecordCount);
|
||
APedidosProveedor.First;
|
||
i:=0;
|
||
while not ApedidosProveedor.EOF do
|
||
begin
|
||
AArrayIdPedidosProv[i] := NewConstant(APedidosProveedor.ID, datInteger);
|
||
Inc(i);
|
||
APedidosProveedor.Next;
|
||
end;
|
||
|
||
if (length(AArrayIdPedidosProv)<>0) then
|
||
// (ID_PEDIDO in lista IDs)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID_PEDIDO'), NewList(AArrayIdPedidosProv), dboIn)
|
||
else
|
||
// (ID is null, para que nos devuelva la lista vacia)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID'), NewConstant(ID_NULO, datInteger), dboEqual);
|
||
|
||
if IsEmpty then
|
||
Expression := Condicion
|
||
else
|
||
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
||
|
||
APedidosProveedor.Close;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TProcesoPresupuestosClienteController.BuscarFacturasCliente(AAlbaranesCliente: IBizAlbaranCliente): IBizFacturaCliente;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
AArrayIdAlbaranesCli : Array of TDAWhereExpression;
|
||
i: Integer;
|
||
|
||
begin
|
||
Result := FFacturasClienteController.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
|
||
AAlbaranesCliente.Open;
|
||
AAlbaranesCliente.First;
|
||
i:=0;
|
||
while not AAlbaranesCliente.EOF do
|
||
begin
|
||
if not AAlbaranesCliente.ID_FACTURAIsNull then
|
||
begin
|
||
SetLength(AArrayIdAlbaranesCli, i+1);
|
||
AArrayIdAlbaranesCli[i] := NewConstant(AAlbaranesCliente.ID, datInteger);
|
||
Inc(i);
|
||
end;
|
||
AAlbaranesCliente.Next;
|
||
end;
|
||
|
||
if (length(AArrayIdAlbaranesCli)<>0) then
|
||
// (ID in lista de IDs)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID_ALBARAN'), NewList(AArrayIdAlbaranesCli), dboIn)
|
||
else
|
||
// (ID is null, para que nos devuelva la lista vacia)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID'), NewConstant(ID_NULO, datInteger), dboEqual);
|
||
|
||
if IsEmpty then
|
||
Expression := Condicion
|
||
else
|
||
Expression := NewBinaryExpression(Expression, Condicion, dboOr);
|
||
|
||
AAlbaranesCliente.Close;
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TProcesoPresupuestosClienteController.BuscarFacturasProforma(const ListaIDPresupuestosCliente: TIntegerArray): IBizFacturaProforma;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
AArrayIdPresupuestosCli : Array of TDAWhereExpression;
|
||
i: Integer;
|
||
|
||
begin
|
||
Result := FFacturasProformaController.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
|
||
SetLength(AArrayIdPresupuestosCli, 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
|
||
AArrayIdPresupuestosCLi[i] := NewConstant(ListaIDPresupuestosCliente.Items[i], datInteger);
|
||
|
||
// (ID IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
|
||
Condicion := NewBinaryExpression(NewField('', fld_PedidosClienteID), NewList(AArrayIdPresupuestosCli), dboIn);
|
||
if IsEmpty then
|
||
Expression := Condicion
|
||
else
|
||
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
function TProcesoPresupuestosClienteController.BuscarFacturasProveedor(AAlbaranesProveedor: IBizAlbaranProveedor): IBizFacturaProveedor;
|
||
var
|
||
Condicion: TDAWhereExpression;
|
||
AArrayIdAlbaranesProv : 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;
|
||
AAlbaranesProveedor.First;
|
||
i:=0;
|
||
while not AAlbaranesProveedor.EOF do
|
||
begin
|
||
if not AAlbaranesProveedor.ID_FACTURAIsNull then
|
||
begin
|
||
SetLength(AArrayIdAlbaranesProv, i+1);
|
||
AArrayIdAlbaranesProv[i] := NewConstant(AAlbaranesProveedor.ID, datInteger);
|
||
Inc(i);
|
||
end;
|
||
AAlbaranesProveedor.Next;
|
||
end;
|
||
|
||
if (length(AArrayIdAlbaranesProv)<>0) then
|
||
// (ID in lista de IDs)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID_ALBARAN'), NewList(AArrayIdAlbaranesProv), dboIn)
|
||
else
|
||
// (ID is null, para que nos devuelva la lista vacia)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID'), NewConstant(ID_NULO, datInteger), dboEqual);
|
||
|
||
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;
|
||
AArrayIdPresupuestos : 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(AArrayIdPresupuestos, 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
|
||
AArrayIdPresupuestos[i] := NewConstant(ListaIDPresupuestosCliente.Items[i], datInteger);
|
||
|
||
// (ID IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
|
||
Condicion := NewBinaryExpression(NewField('', fld_PedidosClienteID), NewList(AArrayIdPresupuestos), 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;
|
||
AArrayIdPedidosCli : 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(AArrayIdPedidosCli, 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
|
||
AArrayIdPedidosCli[i] := NewConstant(ListaIDPresupuestosCliente.Items[i], datInteger);
|
||
|
||
// (ID_PEDIDO_CLIENTE IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
|
||
Condicion := NewBinaryExpression(NewField('', 'ID_PEDIDO_CLIENTE'), NewList(AArrayIdPedidosCli), 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;
|
||
AAlbaranesCliente: IBizAlbaranCliente;
|
||
AFacturasCliente: IBizFacturaCliente;
|
||
AFacturasProforma: IBizFacturaProforma;
|
||
|
||
begin
|
||
AEditor := NIL;
|
||
|
||
APedidosCliente := BuscarPedidosCliente(ListaIDPresupuestosCliente);
|
||
APedidosProveedor := BuscarPedidosProveedor(ListaIDPresupuestosCliente);
|
||
AAlbaranesProveedor := BuscarAlbaranesProveedor(APedidosProveedor);
|
||
AFacturasProveedor := BuscarFacturasProveedor(AAlbaranesProveedor);
|
||
AAlbaranesCliente := BuscarAlbaranesCliente(APedidosCliente);
|
||
AFacturasCliente := BuscarFacturasCliente(AAlbaranesCliente);
|
||
AFacturasProforma := BuscarFacturasProforma(ListaIDPresupuestosCliente);
|
||
|
||
|
||
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.AlbaranesCliente := AAlbaranesCliente;
|
||
AEditor.FacturasCliente := AFacturasCliente;
|
||
AEditor.FacturasProforma := AFacturasProforma;
|
||
AEditor.ShowModal;
|
||
finally
|
||
AEditor.Release;
|
||
AEditor := NIL;
|
||
//Se a<>ade esta linea ya que sin ella no se libera bien el puntero
|
||
HideHourglassCursor;
|
||
end;
|
||
|
||
end;
|
||
|
||
end.
|