2013-09-04 17:08:17 +00:00
unit uProcesoPresupuestosClienteController;
interface
uses
Classes, SysUtils, uDADataTable, FactuGES_Intf,
uControllerBase, uIDataModulePedidosCliente,
uBizPedidosCliente, uPedidosClienteController,
uBizPedidosProveedor, uPedidosProveedorController,
uBizAlbaranesProveedor, uAlbaranesProveedorController,
2013-09-05 16:50:24 +00:00
uBizFacturasProveedor, uFacturasProveedorController,
uBizAlbaranesCliente, uAlbaranesClienteController,
2013-12-12 17:42:50 +00:00
uBizFacturasCliente, uFacturasClienteController,
uBizFacturasProforma, uFacturasProformaController;
2013-09-04 17:08:17 +00:00
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;
2013-09-05 16:50:24 +00:00
FAlbaranesClienteController : IAlbaranesClienteController;
FFacturasClienteController : IFacturasClienteController;
2013-12-12 17:42:50 +00:00
FFacturasProformaController : IFacturasProformaController;
2013-09-04 17:08:17 +00:00
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;
2013-09-05 16:50:24 +00:00
function BuscarAlbaranesCliente( APedidosCliente: IBizPedidoCliente) : IBizAlbaranCliente;
function BuscarFacturasCliente( AAlbaranesCliente: IBizAlbaranCliente) : IBizFacturaCliente;
2014-06-18 15:50:30 +00:00
function BuscarFacturasProforma( const ListaIDPresupuestosCliente: TIntegerArray) : IBizFacturaProforma;
2013-09-04 17:08:17 +00:00
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;
2013-09-05 16:50:24 +00:00
FAlbaranesClienteController : = TAlbaranesClienteController. Create;
FFacturasClienteController : = TFacturasClienteController. Create;
2013-12-12 17:42:50 +00:00
FFacturasProformaController : = TFacturasProformaController. Create;
2013-09-04 17:08:17 +00:00
end ;
destructor TProcesoPresupuestosClienteController. Destroy;
begin
FPedidosClienteController : = Nil ;
FPedidosProveedorController : = Nil ;
FAlbaranesProveedorController : = Nil ;
FFacturasProveedorController : = Nil ;
2013-09-05 16:50:24 +00:00
FAlbaranesClienteController : = Nil ;
FFacturasClienteController : = Nil ;
2013-12-12 17:42:50 +00:00
FFacturasProformaController : = Nil ;
2013-09-04 17:08:17 +00:00
inherited ;
end ;
2013-09-05 16:50:24 +00:00
function TProcesoPresupuestosClienteController. BuscarAlbaranesCliente( APedidosCliente: IBizPedidoCliente) : IBizAlbaranCliente;
var
Condicion: TDAWhereExpression;
2013-12-02 18:23:44 +00:00
AArrayIdPedidosCli : Array of TDAWhereExpression;
2013-09-05 16:50:24 +00:00
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;
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdPedidosCli, APedidosCliente. RecordCount) ;
2013-09-05 16:50:24 +00:00
APedidosCliente. First;
i: = 0 ;
while not APedidosCliente. EOF do
begin
2013-12-02 18:23:44 +00:00
AArrayIdPedidosCli[ i] : = NewConstant( APedidosCliente. ID, datInteger) ;
2013-09-05 16:50:24 +00:00
Inc( i) ;
APedidosCliente. Next;
end ;
2013-12-02 18:23:44 +00:00
// (ID_PEDIDO in lista IDs) (SIEMPRE HAY AL MENOS UNO)
Condicion : = NewBinaryExpression( NewField( '' , 'ID_PEDIDO' ) , NewList( AArrayIdPedidosCli) , dboIn) ;
2013-09-05 16:50:24 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
APedidosCliente. Close;
end ;
end ;
end ;
2013-09-04 17:08:17 +00:00
function TProcesoPresupuestosClienteController. BuscarAlbaranesProveedor( APedidosProveedor: IBizPedidoProveedor) : IBizAlbaranProveedor;
var
Condicion: TDAWhereExpression;
2013-12-02 18:23:44 +00:00
AArrayIdPedidosProv : Array of TDAWhereExpression;
2013-09-04 17:08:17 +00:00
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;
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdPedidosProv, APedidosProveedor. RecordCount) ;
2013-09-04 17:08:17 +00:00
APedidosProveedor. First;
i: = 0 ;
while not ApedidosProveedor. EOF do
begin
2013-12-02 18:23:44 +00:00
AArrayIdPedidosProv[ i] : = NewConstant( APedidosProveedor. ID, datInteger) ;
2013-09-04 17:08:17 +00:00
Inc( i) ;
APedidosProveedor. Next;
end ;
2013-12-02 18:23:44 +00:00
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) ;
2013-09-04 17:08:17 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
APedidosProveedor. Close;
end ;
end ;
end ;
2013-09-05 16:50:24 +00:00
function TProcesoPresupuestosClienteController. BuscarFacturasCliente( AAlbaranesCliente: IBizAlbaranCliente) : IBizFacturaCliente;
var
Condicion: TDAWhereExpression;
2013-12-02 18:23:44 +00:00
AArrayIdAlbaranesCli : Array of TDAWhereExpression;
2013-09-05 16:50:24 +00:00
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
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdAlbaranesCli, i+ 1 ) ;
AArrayIdAlbaranesCli[ i] : = NewConstant( AAlbaranesCliente. ID, datInteger) ;
2013-09-05 16:50:24 +00:00
Inc( i) ;
end ;
AAlbaranesCliente. Next;
end ;
2013-12-02 18:23:44 +00:00
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) ;
2013-09-05 16:50:24 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboOr) ;
AAlbaranesCliente. Close;
end ;
end ;
end ;
2014-06-18 15:50:30 +00:00
function TProcesoPresupuestosClienteController. BuscarFacturasProforma( const ListaIDPresupuestosCliente: TIntegerArray) : IBizFacturaProforma;
2013-12-12 17:42:50 +00:00
var
Condicion: TDAWhereExpression;
2014-06-18 15:50:30 +00:00
AArrayIdPresupuestosCli : Array of TDAWhereExpression;
2013-12-12 17:42:50 +00:00
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
2014-06-18 15:50:30 +00:00
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) ;
2013-12-12 17:42:50 +00:00
2014-06-18 15:50:30 +00:00
// (ID IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosClienteID) , NewList( AArrayIdPresupuestosCli) , dboIn) ;
2013-12-12 17:42:50 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
2013-09-04 17:08:17 +00:00
function TProcesoPresupuestosClienteController. BuscarFacturasProveedor( AAlbaranesProveedor: IBizAlbaranProveedor) : IBizFacturaProveedor;
var
Condicion: TDAWhereExpression;
2013-12-02 18:23:44 +00:00
AArrayIdAlbaranesProv : Array of TDAWhereExpression;
2013-09-04 17:08:17 +00:00
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
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdAlbaranesProv, i+ 1 ) ;
AArrayIdAlbaranesProv[ i] : = NewConstant( AAlbaranesProveedor. ID, datInteger) ;
2013-09-04 17:08:17 +00:00
Inc( i) ;
end ;
AAlbaranesProveedor. Next;
end ;
2013-12-02 18:23:44 +00:00
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) ;
2013-09-04 17:08:17 +00:00
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;
2013-12-02 18:23:44 +00:00
AArrayIdPresupuestos : Array of TDAWhereExpression;
2013-09-04 17:08:17 +00:00
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
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdPresupuestos, ListaIDPresupuestosCliente. Count) ;
2013-09-04 17:08:17 +00:00
//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
2013-12-02 18:23:44 +00:00
AArrayIdPresupuestos[ i] : = NewConstant( ListaIDPresupuestosCliente. Items[ i] , datInteger) ;
2013-09-04 17:08:17 +00:00
2013-12-02 18:23:44 +00:00
// (ID IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosClienteID) , NewList( AArrayIdPresupuestos) , dboIn) ;
2013-09-04 17:08:17 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
end ;
function TProcesoPresupuestosClienteController. BuscarPedidosProveedor( const ListaIDPresupuestosCliente: TIntegerArray) : IBizPedidoProveedor;
var
Condicion: TDAWhereExpression;
2013-12-02 18:23:44 +00:00
AArrayIdPedidosCli : Array of TDAWhereExpression;
2013-09-04 17:08:17 +00:00
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
2013-12-02 18:23:44 +00:00
SetLength( AArrayIdPedidosCli, ListaIDPresupuestosCliente. Count) ;
2013-09-04 17:08:17 +00:00
//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
2013-12-02 18:23:44 +00:00
AArrayIdPedidosCli[ i] : = NewConstant( ListaIDPresupuestosCliente. Items[ i] , datInteger) ;
2013-09-04 17:08:17 +00:00
2013-12-02 18:23:44 +00:00
// (ID_PEDIDO_CLIENTE IN lista de IDs) (SIEMPRE HAY AL MENOS UNO)
Condicion : = NewBinaryExpression( NewField( '' , 'ID_PEDIDO_CLIENTE' ) , NewList( AArrayIdPedidosCli) , dboIn) ;
2013-09-04 17:08:17 +00:00
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;
2013-09-05 16:50:24 +00:00
AAlbaranesCliente: IBizAlbaranCliente;
AFacturasCliente: IBizFacturaCliente;
2013-12-12 17:42:50 +00:00
AFacturasProforma: IBizFacturaProforma;
2013-09-04 17:08:17 +00:00
begin
AEditor : = NIL ;
2014-06-18 15:50:30 +00:00
APedidosCliente : = BuscarPedidosCliente( ListaIDPresupuestosCliente) ;
APedidosProveedor : = BuscarPedidosProveedor( ListaIDPresupuestosCliente) ;
AAlbaranesProveedor : = BuscarAlbaranesProveedor( APedidosProveedor) ;
AFacturasProveedor : = BuscarFacturasProveedor( AAlbaranesProveedor) ;
AAlbaranesCliente : = BuscarAlbaranesCliente( APedidosCliente) ;
AFacturasCliente : = BuscarFacturasCliente( AAlbaranesCliente) ;
AFacturasProforma : = BuscarFacturasProforma( ListaIDPresupuestosCliente) ;
2013-09-04 17:08:17 +00:00
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;
2013-09-05 16:50:24 +00:00
AEditor. AlbaranesCliente : = AAlbaranesCliente;
AEditor. FacturasCliente : = AFacturasCliente;
2014-06-18 15:50:30 +00:00
AEditor. FacturasProforma : = AFacturasProforma;
2013-09-04 17:08:17 +00:00
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
2014-06-18 15:50:30 +00:00
//Se a<> ade esta linea ya que sin ella no se libera bien el puntero
HideHourglassCursor;
2013-09-04 17:08:17 +00:00
end ;
2014-06-18 15:50:30 +00:00
2013-09-04 17:08:17 +00:00
end ;
end .