diff --git a/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas b/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas index 085b02de..d35de395 100644 --- a/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas +++ b/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas @@ -59,7 +59,7 @@ type function BuscarRecibosRemesa(const ID_REMESA: Integer): IBizRecibosCliente; function BuscarRecibosFactura(const ID_FACTURA: Integer): IBizRecibosCliente; function BuscarRecibosACompensar(const Recibo: IBizRecibosCliente): IBizRecibosCliente; - function BuscarRecibosARemesar: IBizRecibosCliente; + function BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosCliente; procedure VerTodos(ARecibosCliente: IBizRecibosCliente); procedure Ver(ARecibosCliente: IBizRecibosCliente); @@ -131,7 +131,7 @@ type function BuscarRecibosRemesa(const ID_REMESA: Integer): IBizRecibosCliente; function BuscarRecibosFactura(const ID_FACTURA: Integer): IBizRecibosCliente; function BuscarRecibosACompensar(const Recibo: IBizRecibosCliente): IBizRecibosCliente; - function BuscarRecibosARemesar: IBizRecibosCliente; + function BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosCliente; procedure VerTodos(ARecibosCliente: IBizRecibosCliente); procedure Ver(ARecibosCliente: IBizRecibosCliente); @@ -371,7 +371,9 @@ begin end; end; -function TRecibosClienteController.BuscarRecibosARemesar: IBizRecibosCliente; +function TRecibosClienteController.BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosCliente; +var + i: Integer; begin ShowHourglassCursor; try @@ -390,7 +392,23 @@ begin OpenBraket; AddText(fld_RecibosClienteSITUACION + ' <> ''' + CTE_COBRADO + ''''); CloseBraket; + + //En este caso vamos a quitar de la lista de recibos pendientes aquellos que ya hemos + //añadido a la remesa pero que estan en memoria ya que todavia no se ha guarado en BD + for i := 0 to AListaNoVisibles.Count - 1 do + begin + AddOperator(opAND); + OpenBraket; + AddText(fld_RecibosClienteID + ' <> ''' + AListaNoVisibles.Strings[i] + ''''); + CloseBraket; + end; + + //En el caso contrario no hacemos nada, porque si se elimina un recibo de la remesa + //y sin guardar los cambios damos a añadir el recibo todavia está cobrado y no se que efectos + //secundarios puede provocar + //AListaVisibles end; + finally HideHourglassCursor; end; diff --git a/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas b/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas index ff80e51f..f6019238 100644 --- a/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas +++ b/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas @@ -55,7 +55,7 @@ type function BuscarRecibosRemesa(const ID_REMESA: Integer): IBizRecibosProveedor; function BuscarRecibosFactura(const ID_FACTURA: Integer): IBizRecibosProveedor; function BuscarRecibosACompensar(const Recibo: IBizRecibosProveedor): IBizRecibosProveedor; - function BuscarRecibosARemesar: IBizRecibosProveedor; + function BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosProveedor; procedure VerTodos(ARecibosProveedor: IBizRecibosProveedor); procedure Ver(ARecibosProveedor: IBizRecibosProveedor); @@ -118,7 +118,7 @@ type function BuscarRecibosRemesa(const ID_REMESA: Integer): IBizRecibosProveedor; function BuscarRecibosFactura(const ID_FACTURA: Integer): IBizRecibosProveedor; function BuscarRecibosACompensar(const Recibo: IBizRecibosProveedor): IBizRecibosProveedor; - function BuscarRecibosARemesar: IBizRecibosProveedor; + function BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosProveedor; procedure VerTodos(ARecibosProveedor: IBizRecibosProveedor); procedure Ver(ARecibosProveedor: IBizRecibosProveedor); @@ -336,7 +336,10 @@ begin end; end; -function TRecibosProveedorController.BuscarRecibosARemesar: IBizRecibosProveedor; +function TRecibosProveedorController.BuscarRecibosARemesar(const AListaVisibles, AListaNoVisibles: TStringList): IBizRecibosProveedor; +var + i: Integer; + begin ShowHourglassCursor; try @@ -354,6 +357,22 @@ begin OpenBraket; AddText(fld_RecibosProveedorSITUACION + ' <> ''' + CTE_PAGADO + ''''); CloseBraket; + + //En este caso vamos a quitar de la lista de recibos pendientes aquellos que ya hemos + //añadido a la remesa pero que estan en memoria ya que todavia no se ha guarado en BD + for i := 0 to AListaNoVisibles.Count - 1 do + begin + AddOperator(opAND); + OpenBraket; + AddText(fld_RecibosProveedorID + ' <> ''' + AListaNoVisibles.Strings[i] + ''''); + CloseBraket; + end; + + //En el caso contrario no hacemos nada, porque si se elimina un recibo de la remesa + //y sin guardar los cambios damos a añadir el recibo todavia está cobrado y no se que efectos + //secundarios puede provocar + //AListaVisibles + end; finally HideHourglassCursor; diff --git a/Source/Modulos/Remesas de cliente/Controller/uRemesasClienteController.pas b/Source/Modulos/Remesas de cliente/Controller/uRemesasClienteController.pas index d2f6c92e..15c236db 100644 --- a/Source/Modulos/Remesas de cliente/Controller/uRemesasClienteController.pas +++ b/Source/Modulos/Remesas de cliente/Controller/uRemesasClienteController.pas @@ -28,7 +28,7 @@ type function EsModificable(ARemesaProveedor : IBizRemesaCliente): Boolean; function EsEliminable(ARemesaProveedor : IBizRemesaCliente): Boolean; - function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente): Boolean; + function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente; AListaRecibosIniciales: TStringList): Boolean; procedure EliminarReciboCliente(ARemesaCliente : IBizRemesaCliente); function GetRecibosClienteController: IRecibosClienteController; property RecibosClienteController: IRecibosClienteController read GetRecibosClienteController; @@ -82,7 +82,7 @@ type function EsEliminable(ARemesaProveedor : IBizRemesaCliente): Boolean; function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaCliente; virtual; - function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente): Boolean; + function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente; AListaRecibosIniciales: TStringList): Boolean; procedure EliminarReciboCliente(ARemesaCliente : IBizRemesaCliente); function DarListaAnosRemesas: TStringList; @@ -300,14 +300,40 @@ begin ARemesaCliente := NIL; end; -function TRemesasClienteController.ElegirRecibosCliente(ARemesaCliente: IBizRemesaCliente): Boolean; +function TRemesasClienteController.ElegirRecibosCliente(ARemesaCliente: IBizRemesaCliente; AListaRecibosIniciales: TStringList): Boolean; var ARecibosRemesa : IBizRecibosCliente; ARecibosSeleccionados : IBizRecibosCliente; + ListaRecibosVisibles: TStringList; + ListaRecibosNoVisibles: TStringList; + i: Integer; + begin Result := False; - ARecibosSeleccionados := (FRecibosClienteController.ElegirRecibos(FRecibosClienteController.BuscarRecibosARemesar, 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosCliente); + ListaRecibosVisibles := TStringList.Create; + ListaRecibosNoVisibles := TStringList.Create; + + //Todos los recibos que tenga la remesa no deben de visualizarse en la lista de seleccion + ARemesaCliente.Recibos.DataTable.First; + while not ARemesaCliente.Recibos.DataTable.eof do + begin + ListaRecibosNoVisibles.Add(IntToStr(ARemesaCliente.Recibos.ID)); + ARemesaCliente.Recibos.DataTable.Next; + end; + ARemesaCliente.Recibos.DataTable.First; + + //Si de la lista inicial hay alguno que no se encuentre en la lista de recibos de la + //remesa que tenemos en memoria dicho recibo debería verse por lo que lo añadimos a la lista de visibles + for i := 0 to AListaRecibosIniciales.Count - 1 do + begin + ARemesaCliente.Recibos.DataTable.First; + if not ARemesaCliente.Recibos.DataTable.Locate(fld_RecibosClienteID, AListaRecibosIniciales.strings[i], []) then + ListaRecibosVisibles.Add(AListaRecibosIniciales.strings[i]); + end; + ARemesaCliente.Recibos.DataTable.First; + + ARecibosSeleccionados := (FRecibosClienteController.ElegirRecibos(FRecibosClienteController.BuscarRecibosARemesar(ListaRecibosVisibles, ListaRecibosNoVisibles), 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosCliente); if Assigned(ARecibosSeleccionados) then begin ShowHourglassCursor; @@ -323,6 +349,8 @@ begin end; end; + ListaRecibosVisibles.Free; + ListaRecibosNoVisibles.Free; ARecibosRemesa := Nil; ARecibosSeleccionados := Nil; end; diff --git a/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.dfm b/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.dfm index a5de831f..9c59b2d4 100644 --- a/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.dfm +++ b/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.dfm @@ -1,6 +1,7 @@ inherited frViewRecibosRemesaCliente: TfrViewRecibosRemesaCliente Width = 549 Height = 376 + OnShow = CustomViewShow ExplicitWidth = 549 ExplicitHeight = 376 inherited cxGrid: TcxGrid diff --git a/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.pas b/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.pas index c790e209..0a38ea66 100644 --- a/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.pas +++ b/Source/Modulos/Remesas de cliente/Views/uViewRecibosRemesaCliente.pas @@ -28,10 +28,12 @@ type cxGridViewIMPORTE: TcxGridDBColumn; cxGridViewOTROS_GASTOS: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; + procedure CustomViewShow(Sender: TObject); protected FHayCambios : Boolean; FRemesa : IBizRemesaCliente; FController : IRemesasClienteController; + FListaRecibosIniciales: TStringList; procedure AnadirInterno; override; procedure EliminarInterno; override; @@ -64,7 +66,7 @@ uses procedure TfrViewRecibosRemesaCliente.AnadirInterno; begin //inherited; // No hacer el comportamiento normal - if FController.ElegirRecibosCliente(RemesaCliente) then + if FController.ElegirRecibosCliente(RemesaCliente, FListaRecibosIniciales) then begin Modified := True; end; @@ -74,10 +76,25 @@ constructor TfrViewRecibosRemesaCliente.Create(AOwner: TComponent); begin inherited; FHayCambios := False; + FListaRecibosIniciales := TStringList.Create; +end; + +procedure TfrViewRecibosRemesaCliente.CustomViewShow(Sender: TObject); +begin + inherited; + + FRemesa.Recibos.DataTable.First; + while not FRemesa.Recibos.DataTable.eof do + begin + FListaRecibosIniciales.Add(IntToStr(FRemesa.Recibos.ID)); + FRemesa.Recibos.DataTable.next; + end; + FRemesa.Recibos.DataTable.First; end; destructor TfrViewRecibosRemesaCliente.Destroy; begin + FListaRecibosIniciales.Free; inherited; end; diff --git a/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas b/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas index b9956a9a..6c0824ab 100644 --- a/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas +++ b/Source/Modulos/Remesas de proveedor/Controller/uRemesasProveedorController.pas @@ -28,7 +28,7 @@ type function EsModificable(ARemesaProveedor : IBizRemesaProveedor): Boolean; function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean; - function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean; + function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor; AListaRecibosIniciales: TStringList): Boolean; procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor); function GetRecibosProveedorController: IRecibosProveedorController; property RecibosProveedorController: IRecibosProveedorController read GetRecibosProveedorController; @@ -82,7 +82,7 @@ type function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean; function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaProveedor; virtual; - function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean; + function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor; AListaRecibosIniciales: TStringList): Boolean; procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor); function DarListaAnosRemesas: TStringList; @@ -300,14 +300,40 @@ begin ARemesaProveedor := NIL; end; -function TRemesasProveedorController.ElegirRecibosProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean; +function TRemesasProveedorController.ElegirRecibosProveedor(ARemesaProveedor: IBizRemesaProveedor; AListaRecibosIniciales: TStringList): Boolean; var ARecibosRemesa : IBizRecibosProveedor; ARecibosSeleccionados : IBizRecibosProveedor; + ListaRecibosVisibles: TStringList; + ListaRecibosNoVisibles: TStringList; + i: Integer; + begin Result := False; - ARecibosSeleccionados := (FRecibosProveedorController.ElegirRecibos(FRecibosProveedorController.BuscarRecibosARemesar, 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosProveedor); + ListaRecibosVisibles := TStringList.Create; + ListaRecibosNoVisibles := TStringList.Create; + + //Todos los recibos que tenga la remesa no deben de visualizarse en la lista de seleccion + ARemesaProveedor.Recibos.DataTable.First; + while not ARemesaProveedor.Recibos.DataTable.eof do + begin + ListaRecibosNoVisibles.Add(IntToStr(ARemesaProveedor.Recibos.ID)); + ARemesaProveedor.Recibos.DataTable.Next; + end; + ARemesaProveedor.Recibos.DataTable.First; + + //Si de la lista inicial hay alguno que no se encuentre en la lista de recibos de la + //remesa que tenemos en memoria dicho recibo debería verse por lo que lo añadimos a la lista de visibles + for i := 0 to AListaRecibosIniciales.Count - 1 do + begin + ARemesaProveedor.Recibos.DataTable.First; + if not ARemesaProveedor.Recibos.DataTable.Locate(fld_RecibosProveedorID, AListaRecibosIniciales.strings[i], []) then + ListaRecibosVisibles.Add(AListaRecibosIniciales.strings[i]); + end; + ARemesaProveedor.Recibos.DataTable.First; + + ARecibosSeleccionados := (FRecibosProveedorController.ElegirRecibos(FRecibosProveedorController.BuscarRecibosARemesar(ListaRecibosVisibles, ListaRecibosNoVisibles), 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosProveedor); if Assigned(ARecibosSeleccionados) then begin ShowHourglassCursor; @@ -323,6 +349,8 @@ begin end; end; + ListaRecibosVisibles.Free; + ListaRecibosNoVisibles.Free; ARecibosRemesa := Nil; ARecibosSeleccionados := Nil; end; diff --git a/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.dfm b/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.dfm index 82afb2eb..dd18a896 100644 --- a/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.dfm +++ b/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.dfm @@ -1,6 +1,7 @@ inherited frViewRecibosRemesaProveedor: TfrViewRecibosRemesaProveedor Width = 549 Height = 376 + OnShow = CustomViewShow ExplicitWidth = 549 ExplicitHeight = 376 inherited cxGrid: TcxGrid diff --git a/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.pas b/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.pas index 23ac126e..fe640332 100644 --- a/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.pas +++ b/Source/Modulos/Remesas de proveedor/Views/uViewRecibosRemesaProveedor.pas @@ -28,10 +28,12 @@ type cxGridViewIMPORTE: TcxGridDBColumn; cxGridViewOTROS_GASTOS: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; + procedure CustomViewShow(Sender: TObject); protected FHayCambios : Boolean; FRemesa : IBizRemesaProveedor; FController : IRemesasProveedorController; + FListaRecibosIniciales: TStringList; procedure AnadirInterno; override; procedure EliminarInterno; override; @@ -64,7 +66,7 @@ uses procedure TfrViewRecibosRemesaProveedor.AnadirInterno; begin //inherited; // No hacer el comportamiento normal - if FController.ElegirRecibosProveedor(RemesaProveedor) then + if FController.ElegirRecibosProveedor(RemesaProveedor, FListaRecibosIniciales) then begin Modified := True; end; @@ -74,10 +76,25 @@ constructor TfrViewRecibosRemesaProveedor.Create(AOwner: TComponent); begin inherited; FHayCambios := False; + FListaRecibosIniciales := TStringList.Create; +end; + +procedure TfrViewRecibosRemesaProveedor.CustomViewShow(Sender: TObject); +begin + inherited; + + FRemesa.Recibos.DataTable.First; + while not FRemesa.Recibos.DataTable.eof do + begin + FListaRecibosIniciales.Add(IntToStr(FRemesa.Recibos.ID)); + FRemesa.Recibos.DataTable.next; + end; + FRemesa.Recibos.DataTable.First; end; destructor TfrViewRecibosRemesaProveedor.Destroy; begin + FListaRecibosIniciales.Free; inherited; end; diff --git a/Source/Servidor/FactuGES_Server.rc b/Source/Servidor/FactuGES_Server.rc index 0a27236c..2bf26681 100644 --- a/Source/Servidor/FactuGES_Server.rc +++ b/Source/Servidor/FactuGES_Server.rc @@ -16,7 +16,7 @@ BEGIN VALUE "FileVersion", "3.3.1.0\0" VALUE "ProductName", "FactuGES Server\0" VALUE "ProductVersion", "3.3.1.0\0" - VALUE "CompileDate", "viernes, 19 de junio de 2009 10:44\0" + VALUE "CompileDate", "miércoles, 08 de julio de 2009 12:22\0" END END BLOCK "VarFileInfo" diff --git a/Source/Servidor/FactuGES_Server.res b/Source/Servidor/FactuGES_Server.res index a8447313..fc7775ef 100644 Binary files a/Source/Servidor/FactuGES_Server.res and b/Source/Servidor/FactuGES_Server.res differ