diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj
index 377a649c..3efdabfa 100644
--- a/Source/Base/Base.dproj
+++ b/Source/Base/Base.dproj
@@ -44,6 +44,13 @@
Package
FalseTrueFalseLibreria base de FactuGESFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0
+
+
+
+
+
+
+
VCL for the Web Design Package for CodeGear RAD Studio
CodeGear WebSnap Components
CodeGear SOAP Components
@@ -58,53 +65,53 @@
MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
TForm
diff --git a/Source/Base/Base.res b/Source/Base/Base.res
index 1641339f..8b251f31 100644
Binary files a/Source/Base/Base.res and b/Source/Base/Base.res differ
diff --git a/Source/Cliente/FactuGES.rc b/Source/Cliente/FactuGES.rc
index 8adcccd1..f9a1dc75 100644
--- a/Source/Cliente/FactuGES.rc
+++ b/Source/Cliente/FactuGES.rc
@@ -1,7 +1,7 @@
MAINICON ICON "C:\Codigo Acana\Resources\Iconos\Factuges.ico"
1 VERSIONINFO
-FILEVERSION 2,2,9,0
-PRODUCTVERSION 2,2,9,0
+FILEVERSION 2,3,0,0
+PRODUCTVERSION 2,3,0,0
FILEFLAGSMASK 0x3FL
FILEFLAGS 0x00L
FILEOS 0x40004L
@@ -13,10 +13,10 @@ BEGIN
BLOCK "0C0A04E4"
BEGIN
VALUE "CompanyName", "Rodax Software S.L.\0"
- VALUE "FileVersion", "2.2.9.0\0"
+ VALUE "FileVersion", "2.3.0.0\0"
VALUE "InternalName", "FactuGES\0"
VALUE "ProductName", "FactuGES\0"
- VALUE "ProductVersion", "2.2.9.0\0"
+ VALUE "ProductVersion", "2.3.0.0\0"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/Cliente/FactuGES.res b/Source/Cliente/FactuGES.res
index b1b8e68d..b38313a9 100644
Binary files a/Source/Cliente/FactuGES.res and b/Source/Cliente/FactuGES.res differ
diff --git a/Source/GUIBase/GUIBase.dproj b/Source/GUIBase/GUIBase.dproj
index 3aea6a84..a5a33a2b 100644
--- a/Source/GUIBase/GUIBase.dproj
+++ b/Source/GUIBase/GUIBase.dproj
@@ -58,37 +58,37 @@
MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/GUIBase/uEditorGridBase.dfm b/Source/GUIBase/uEditorGridBase.dfm
index 36968b80..a681b198 100644
--- a/Source/GUIBase/uEditorGridBase.dfm
+++ b/Source/GUIBase/uEditorGridBase.dfm
@@ -90,6 +90,16 @@ inherited fEditorGridBase: TfEditorGridBase
ShowHint = True
ShrinkMode = tbsmNone
TabOrder = 0
+ object lblAno: TTBXLabelItem
+ Caption = 'A'#241'o:'
+ Visible = False
+ end
+ object cbxListaAnos: TTBXComboBoxItem
+ Visible = False
+ end
+ object sepAno: TTBXSeparatorItem
+ Visible = False
+ end
object TBXLabelItem1: TTBXLabelItem
Caption = 'Filtrar:'
end
diff --git a/Source/GUIBase/uEditorGridBase.pas b/Source/GUIBase/uEditorGridBase.pas
index fed1b592..f95ee8c9 100644
--- a/Source/GUIBase/uEditorGridBase.pas
+++ b/Source/GUIBase/uEditorGridBase.pas
@@ -64,6 +64,9 @@ type
N41: TMenuItem;
TBXSubmenuItem32: TTBXSubmenuItem;
TBXItem1039: TTBXItem;
+ lblAno: TTBXLabelItem;
+ cbxListaAnos: TTBXComboBoxItem;
+ sepAno: TTBXSeparatorItem;
procedure tbxEditFiltroChange(Sender: TObject; const Text: String);
procedure FormShow(Sender: TObject);
procedure actQuitarFiltroExecute(Sender: TObject);
@@ -79,7 +82,16 @@ type
procedure actExportarExcelExecute(Sender: TObject);
procedure actExportarExcelUpdate(Sender: TObject);
protected
+ FListaAnos: TStringList;
FViewGrid : IViewGridBase;
+ FDynWhereDataTable: WideString;
+
+ function GetListaAnos: TStringList;
+ procedure SetListaAnos(const Value: TStringList);
+
+ function GetDynWhereDataTable: WideString;
+ procedure SetDynWhereDataTable(const Value: WideString);
+
procedure SetViewGrid(const Value : IViewGridBase); virtual;
function GetViewGrid: IViewGridBase;
procedure SetMultiSelect (AValue : Boolean);
@@ -90,7 +102,9 @@ type
procedure ImprimirInterno; override;
procedure RefrescarInterno; override;
public
+ property ListaAnos: TStringList read GetListaAnos write SetListaAnos;
property ViewGrid: IViewGridBase read GetViewGrid write SetViewGrid;
+ property DynWhereDataTable: WideString read GetDynWhereDataTable write SetDynWhereDataTable;
property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;
constructor Create(AOwner : TComponent); override;
@@ -109,10 +123,24 @@ uses
}
destructor TfEditorGridBase.Destroy;
begin
+ FDynWhereDataTable := '';
FViewGrid := NIL;
+ if Assigned(FListaAnos) then
+ FlistaAnos.Free;
+
inherited;
end;
+function TfEditorGridBase.GetDynWhereDataTable: WideString;
+begin
+ Result := FDynWhereDataTable;
+end;
+
+function TfEditorGridBase.GetListaAnos: TStringList;
+begin
+ Result := FListaAnos;
+end;
+
function TfEditorGridBase.GetMultiSelect: Boolean;
begin
Result := False;
@@ -131,6 +159,47 @@ begin
ViewGrid.Print;
end;
+procedure TfEditorGridBase.SetDynWhereDataTable(const Value: WideString);
+begin
+ FDynWhereDataTable := Value;
+end;
+
+procedure TfEditorGridBase.SetListaAnos(const Value: TStringList);
+var
+ i: Integer;
+ AStringAnterior: String;
+
+begin
+ AStringAnterior := '';
+ if Assigned(FListaAnos) then
+ begin
+ AStringAnterior := FListaAnos.ValueFromIndex[cbxListaAnos.ItemIndex];
+ FListaAnos.Free;
+ end;
+
+ //Se asigna el nuevo TStringList
+ FListaAnos := Value;
+
+ if Assigned(FListaAnos) then
+ begin
+ cbxListaAnos.Strings.BeginUpdate;
+ cbxListaAnos.Strings.Clear;
+ for i := 0 to FListaAnos.Count - 1 do
+ cbxListaAnos.Strings.Append(FListaAnos.Names[i]);
+
+ //Se posiciona en el elemento que habia anteriormente
+ if Length(AStringAnterior) > 0 then
+ begin
+ if FListaAnos.IndexOfName(AStringAnterior) <> -1 then
+ cbxListaAnos.ItemIndex := FListaAnos.IndexOfName(AStringAnterior)
+ else
+ cbxListaAnos.ItemIndex := 0;
+ end;
+
+ cbxListaAnos.Strings.EndUpdate;
+ end;
+end;
+
procedure TfEditorGridBase.SetMultiSelect(AValue: Boolean);
begin
if Assigned(ViewGrid) then
@@ -166,6 +235,8 @@ begin
ViewGrid.ShowEmbedded(Self);
ViewGrid.RestoreFromIniFile;
end;
+
+ cbxListaAnos.ItemIndex := 0;
end;
procedure TfEditorGridBase.actEliminarUpdate(Sender: TObject);
@@ -265,6 +336,7 @@ end;
constructor TfEditorGridBase.Create(AOwner: TComponent);
begin
inherited;
+ FDynWhereDataTable := '';
actModificar.ShortCut := ShortCut(VK_RETURN, []);
end;
diff --git a/Source/Informes/InformeListadoFacturasClientePendientes.fr3 b/Source/Informes/InformeListadoFacturasClientePendientes.fr3
index 9a1c43d3..570bfc97 100644
--- a/Source/Informes/InformeListadoFacturasClientePendientes.fr3
+++ b/Source/Informes/InformeListadoFacturasClientePendientes.fr3
@@ -1,22 +1,20 @@
-
+
-
-
-
-
-
-
+
+
+
+
-
+
-
+
@@ -24,18 +22,39 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Informes/InformeListadoFacturasClientePendientesDesglosado.fr3 b/Source/Informes/InformeListadoFacturasClientePendientesDesglosado.fr3
index 4a5f34bd..6a728701 100644
--- a/Source/Informes/InformeListadoFacturasClientePendientesDesglosado.fr3
+++ b/Source/Informes/InformeListadoFacturasClientePendientesDesglosado.fr3
@@ -1,22 +1,20 @@
-
+
-
-
-
-
-
-
+
+
+
+
-
+
-
+
@@ -24,22 +22,43 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Informes/InformeListadoFacturasProveedorPendientes.fr3 b/Source/Informes/InformeListadoFacturasProveedorPendientes.fr3
index fa47af5e..8e8df0e4 100644
--- a/Source/Informes/InformeListadoFacturasProveedorPendientes.fr3
+++ b/Source/Informes/InformeListadoFacturasProveedorPendientes.fr3
@@ -1,22 +1,20 @@
-
+
-
-
-
-
-
-
+
+
+
+
-
+
-
+
@@ -25,7 +23,7 @@
-
+
@@ -33,11 +31,32 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Informes/InformeListadoFacturasProveedorPendientesDesglosado.fr3 b/Source/Informes/InformeListadoFacturasProveedorPendientesDesglosado.fr3
index 10b1e341..7846ecb8 100644
--- a/Source/Informes/InformeListadoFacturasProveedorPendientesDesglosado.fr3
+++ b/Source/Informes/InformeListadoFacturasProveedorPendientesDesglosado.fr3
@@ -1,22 +1,20 @@
-
+
-
-
-
-
-
-
+
+
+
+
-
+
-
+
@@ -25,7 +23,7 @@
-
+
@@ -33,15 +31,36 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
index 0179f04f..9453f7f9 100644
--- a/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
+++ b/Source/Modulos/Albaranes de cliente/Controller/uAlbaranesClienteController.pas
@@ -4,7 +4,7 @@ interface
uses
- SysUtils, uDADataTable, uEditorDBItem,
+ SysUtils, Classes, uDADataTable, uEditorDBItem,
uControllerBase, uIDataModuleAlbaranesCliente, uClientesController,
uDetallesAlbaranClienteController, uBizAlbaranesCliente, uBizDireccionesContacto;
@@ -59,6 +59,9 @@ type
ANuevaSituacion: String; AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0;
DoPost: Boolean = True) : Boolean;
+
+ function DarListaAnosAlbaranes: TStringList;
+ procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TAlbaranesClienteController = class(TControllerBase, IAlbaranesClienteController)
@@ -137,6 +140,9 @@ type
procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
+
+ function DarListaAnosAlbaranes: TStringList;
+ procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@@ -146,7 +152,7 @@ uses
uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
uIEditorAlbaranesCliente, uIEditorAlbaranesDevCliente, uIEditorAlbaranDevCliente,
uDataModuleAlbaranesCliente, Variants, uBizDetallesAlbaranCliente, uSistemaFunc,
- uBizContactos, uDataTableUtils, uDataModuleUsuarios, Classes, uFactuGES_App,
+ uBizContactos, uDataTableUtils, uDataModuleUsuarios, uFactuGES_App,
schAlbaranesClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorAlbaranCliente,
uIEditorElegirAlbaranesCliente, uIEditorDireccionEntregaAlbaranCliente,
schContactosClient_Intf, uAlbaranesClienteReportController,
@@ -380,6 +386,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
+function TAlbaranesClienteController.DarListaAnosAlbaranes: TStringList;
+begin
+ Result := FDataModule.GetAnosItems;
+end;
+
procedure TAlbaranesClienteController.DescartarCambios(AAlbaran: IBizAlbaranCliente);
begin
if not Assigned(AAlbaran) then
@@ -857,6 +868,35 @@ begin
Result := ASeleccionados;
end;
+procedure TAlbaranesClienteController.FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
+var
+ Condicion: TDAWhereExpression;
+ FechaIni: String;
+ FechaFin: String;
+
+begin
+ AAlbaran.DataTable.DynamicWhere.Clear;
+ AAlbaran.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
+
+ if (Ano <> 'Todos') then
+ begin
+ // Filtrar las facturas actuales por empresa
+ FechaIni := '01/01/' + Ano;
+ FechaFin := '31/12/' + Ano;
+ with AAlbaran.DataTable.DynamicWhere do
+ begin
+ // (FECHA_INICIO between FECHA_FIN)
+ Condicion := NewBinaryExpression(NewField('', fld_AlbaranesClienteFECHA_ALBARAN), NewConstant(FechaIni, datString), dboGreaterOrEqual);
+ Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_AlbaranesClienteFECHA_ALBARAN), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
+ end;
+ end;
+end;
+
procedure TAlbaranesClienteController.FiltrarEmpresa(AAlbaran: IBizAlbaranCliente);
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm
index 96458314..0a7cee48 100644
--- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm
+++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.dfm
@@ -1,6 +1,6 @@
inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
OnCreate = DAClientDataModuleCreate
- Height = 234
+ Height = 374
Width = 484
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@@ -428,4 +428,28 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
Left = 384
Top = 56
end
+ object tbl_ListaAnosAlbaranes: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_AlbaranesCliente
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'ListaAnosAlbaranes'
+ IndexDefs = <>
+ Left = 232
+ Top = 248
+ end
+ object ds_ListaAnosAlbaranes: TDADataSource
+ DataSet = tbl_ListaAnosAlbaranes.Dataset
+ DataTable = tbl_ListaAnosAlbaranes
+ Left = 232
+ Top = 200
+ end
end
diff --git a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
index 7c6aac7b..dac9c608 100644
--- a/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
+++ b/Source/Modulos/Albaranes de cliente/Data/uDataModuleAlbaranesCliente.pas
@@ -20,6 +20,8 @@ type
ds_AlbaranesCliente: TDADataSource;
tbl_AlbaranesCliente_Detalles: TDAMemDataTable;
ds_AlbaranesCliente_Detalles: TDADataSource;
+ tbl_ListaAnosAlbaranes: TDAMemDataTable;
+ ds_ListaAnosAlbaranes: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
@@ -29,6 +31,7 @@ type
procedure AsignarClaseNegocio(AAlbaran: TDADataTable); virtual;
public
+ function GetAnosItems : TStringList;
function GetItems : IBizAlbaranCliente; virtual;
function GetItem(const ID : Integer) : IBizAlbaranCliente;
function NewItem : IBizAlbaranCliente;
@@ -109,6 +112,30 @@ begin
end;
end;
+function TDataModuleAlbaranesCliente.GetAnosItems: TStringList;
+var
+ AListaAnos: TStringList;
+begin
+ AListaAnos := TStringList.Create;
+ ShowHourglassCursor;
+ try
+ with tbl_ListaAnosAlbaranes do
+ begin
+ Open;
+ First;
+ while not eof do
+ begin
+ AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
+ Next;
+ end;
+ Close;
+ end;
+ Result := AListaAnos;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TDataModuleAlbaranesCliente.GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID, withRefCliente)
diff --git a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesCliente.pas
index d2873999..5920d2dd 100644
--- a/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesCliente.pas
+++ b/Source/Modulos/Albaranes de cliente/Model/Data/uIDataModuleAlbaranesCliente.pas
@@ -3,11 +3,12 @@ unit uIDataModuleAlbaranesCliente;
interface
uses
- uBizAlbaranesCliente;
+ Classes, uBizAlbaranesCliente;
type
IDataModuleAlbaranesCliente = interface
['{81932348-9595-45AC-AFC9-5A8983B4A3A8}']
+ function GetAnosItems : TStringList;
function GetItems: IBizAlbaranCliente;
function GetItem(const ID : Integer) : IBizAlbaranCliente;
function NewItem : IBizAlbaranCliente;
diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas
index 83083eb4..16508557 100644
--- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas
+++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteClient_Intf.pas
@@ -9,13 +9,21 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_AlbaranesCliente = '{5C4C05DF-4F36-42A3-99B4-DFB3A7AD89CA}';
- RID_AlbaranesCliente_Detalles = '{B01769A9-4634-4893-BB47-AEA3E26FCF82}';
+ RID_ListaAnosAlbaranes = '{247D0B91-C596-409D-96BB-E8EE86FC35BA}';
+ RID_AlbaranesCliente = '{B4A7B6AB-D35C-43AF-8AE7-C59856BF0BD6}';
+ RID_AlbaranesCliente_Detalles = '{793305FD-EE30-43D1-8EA9-46DA228A0158}';
{ Data table names }
+ nme_ListaAnosAlbaranes = 'ListaAnosAlbaranes';
nme_AlbaranesCliente = 'AlbaranesCliente';
nme_AlbaranesCliente_Detalles = 'AlbaranesCliente_Detalles';
+ { ListaAnosAlbaranes fields }
+ fld_ListaAnosAlbaranesANO = 'ANO';
+
+ { ListaAnosAlbaranes field indexes }
+ idx_ListaAnosAlbaranesANO = 0;
+
{ AlbaranesCliente fields }
fld_AlbaranesClienteID = 'ID';
fld_AlbaranesClienteID_EMPRESA = 'ID_EMPRESA';
@@ -137,9 +145,44 @@ const
idx_AlbaranesCliente_DetallesREFERENCIA_PROVEEDOR = 13;
type
+ { IListaAnosAlbaranes }
+ IListaAnosAlbaranes = interface(IDAStronglyTypedDataTable)
+ ['{6DBFAC3F-A8AE-4700-BDF7-40B1A6A5BD14}']
+ { Property getters and setters }
+ function GetANOValue: String;
+ procedure SetANOValue(const aValue: String);
+ function GetANOIsNull: Boolean;
+ procedure SetANOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+ end;
+
+ { TListaAnosAlbaranesDataTableRules }
+ TListaAnosAlbaranesDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosAlbaranes)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ function GetANOIsNull: Boolean; virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
{ IAlbaranesCliente }
IAlbaranesCliente = interface(IDAStronglyTypedDataTable)
- ['{6AC3B22E-CE4C-4A1F-9373-B342F525C057}']
+ ['{D06A17AE-53EA-4AF3-B4A8-E962390A129D}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -666,7 +709,7 @@ type
{ IAlbaranesCliente_Detalles }
IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable)
- ['{61E85E5C-B0EF-4350-A06D-5601DB03ADB2}']
+ ['{4BD53665-58C8-41D1-BD2A-89023DB2C62C}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -859,6 +902,39 @@ implementation
uses Variants, uROBinaryHelpers;
+{ TListaAnosAlbaranesDataTableRules }
+constructor TListaAnosAlbaranesDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TListaAnosAlbaranesDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosAlbaranesDataTableRules.GetANOValue: String;
+begin
+ result := DataTable.Fields[idx_ListaAnosAlbaranesANO].AsString;
+end;
+
+procedure TListaAnosAlbaranesDataTableRules.SetANOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_ListaAnosAlbaranesANO].AsString := aValue;
+end;
+
+function TListaAnosAlbaranesDataTableRules.GetANOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_ListaAnosAlbaranesANO].IsNull;
+end;
+
+procedure TListaAnosAlbaranesDataTableRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_ListaAnosAlbaranesANO].AsVariant := Null;
+end;
+
+
{ TAlbaranesClienteDataTableRules }
constructor TAlbaranesClienteDataTableRules.Create(aDataTable: TDADataTable);
var
@@ -2072,6 +2148,7 @@ end;
initialization
+ RegisterDataTableRules(RID_ListaAnosAlbaranes, TListaAnosAlbaranesDataTableRules);
RegisterDataTableRules(RID_AlbaranesCliente, TAlbaranesClienteDataTableRules);
RegisterDataTableRules(RID_AlbaranesCliente_Detalles, TAlbaranesCliente_DetallesDataTableRules);
diff --git a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas
index 37b0a6e1..4cb54c80 100644
--- a/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas
+++ b/Source/Modulos/Albaranes de cliente/Model/schAlbaranesClienteServer_Intf.pas
@@ -9,13 +9,48 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_AlbaranesClienteDelta = '{07089145-5284-4338-A434-D04FD6D3C95E}';
- RID_AlbaranesCliente_DetallesDelta = '{2B77EEBC-CEEE-4FED-A05D-8FBB11FAC5AA}';
+ RID_ListaAnosAlbaranesDelta = '{E3D4415E-CAFC-4013-9A38-57F328741AE1}';
+ RID_AlbaranesClienteDelta = '{4CBCD975-355D-4537-8C6D-498D05CC4FA8}';
+ RID_AlbaranesCliente_DetallesDelta = '{46AA67C6-8B12-4327-8659-A8A97DE36553}';
type
+ { IListaAnosAlbaranesDelta }
+ IListaAnosAlbaranesDelta = interface(IListaAnosAlbaranes)
+ ['{E3D4415E-CAFC-4013-9A38-57F328741AE1}']
+ { Property getters and setters }
+ function GetOldANOValue : String;
+
+ { Properties }
+ property OldANO : String read GetOldANOValue;
+ end;
+
+ { TListaAnosAlbaranesBusinessProcessorRules }
+ TListaAnosAlbaranesBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosAlbaranes, IListaAnosAlbaranesDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ function GetANOIsNull: Boolean; virtual;
+ function GetOldANOValue: String; virtual;
+ function GetOldANOIsNull: Boolean; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO : String read GetANOValue write SetANOValue;
+ property ANOIsNull : Boolean read GetANOIsNull write SetANOIsNull;
+ property OldANO : String read GetOldANOValue;
+ property OldANOIsNull : Boolean read GetOldANOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
{ IAlbaranesClienteDelta }
IAlbaranesClienteDelta = interface(IAlbaranesCliente)
- ['{07089145-5284-4338-A434-D04FD6D3C95E}']
+ ['{4CBCD975-355D-4537-8C6D-498D05CC4FA8}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@@ -543,7 +578,7 @@ type
{ IAlbaranesCliente_DetallesDelta }
IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles)
- ['{2B77EEBC-CEEE-4FED-A05D-8FBB11FAC5AA}']
+ ['{46AA67C6-8B12-4327-8659-A8A97DE36553}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_ALBARANValue : Integer;
@@ -736,6 +771,49 @@ implementation
uses
Variants, uROBinaryHelpers, uDAInterfaces;
+{ TListaAnosAlbaranesBusinessProcessorRules }
+constructor TListaAnosAlbaranesBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TListaAnosAlbaranesBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosAlbaranesBusinessProcessorRules.GetANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosAlbaranesANO];
+end;
+
+function TListaAnosAlbaranesBusinessProcessorRules.GetANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosAlbaranesANO]);
+end;
+
+function TListaAnosAlbaranesBusinessProcessorRules.GetOldANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosAlbaranesANO];
+end;
+
+function TListaAnosAlbaranesBusinessProcessorRules.GetOldANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosAlbaranesANO]);
+end;
+
+procedure TListaAnosAlbaranesBusinessProcessorRules.SetANOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosAlbaranesANO] := aValue;
+end;
+
+procedure TListaAnosAlbaranesBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosAlbaranesANO] := Null;
+end;
+
+
{ TAlbaranesClienteBusinessProcessorRules }
constructor TAlbaranesClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var
@@ -2511,6 +2589,7 @@ end;
initialization
+ RegisterBusinessProcessorRules(RID_ListaAnosAlbaranesDelta, TListaAnosAlbaranesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesClienteDelta, TAlbaranesClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesCliente_DetallesDelta, TAlbaranesCliente_DetallesBusinessProcessorRules);
diff --git a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm
index 7c2f1737..625170e9 100644
--- a/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm
+++ b/Source/Modulos/Albaranes de cliente/Servidor/srvAlbaranesCliente_Impl.dfm
@@ -14,6 +14,33 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ Name = 'IBX'
+ SQL =
+ 'select ANO from'#10'(select distinct(substr(FECHA_ALBARAN, 1,4)) as ' +
+ 'ANO'#10'from albaranes_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select d' +
+ 'istinct '#39'Todos'#39' as ANO'#10'from empresas'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ANO'
+ TableField = 'ANO'
+ end>
+ end>
+ Name = 'ListaAnosAlbaranes'
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ end
item
Params = <>
Statements = <
diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
index bba00f20..53e0775f 100644
--- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
+++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.dfm
@@ -2,7 +2,6 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
Caption = 'Lista de albaranes de cliente'
ClientWidth = 583
ExplicitWidth = 591
- ExplicitHeight = 240
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
@@ -129,12 +128,26 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
object TBXSeparatorItem17: TTBXSeparatorItem [10]
end
end
+ inherited tbxFiltro: TTBXToolbar
+ ExplicitWidth = 431
+ inherited lblAno: TTBXLabelItem
+ Visible = True
+ end
+ inherited cbxListaAnos: TTBXComboBoxItem
+ Visible = True
+ end
+ inherited sepAno: TTBXSeparatorItem
+ Visible = True
+ end
+ end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 583
end
inherited TBXTMain2: TTBXToolbar
+ Left = 431
Visible = True
- ExplicitWidth = 246
+ ExplicitLeft = 431
+ ExplicitWidth = 152
object TBXItem42: TTBXItem
Action = actEnviar
DisplayMode = nbdmImageAndText
diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
index f3e17ef5..c7338e61 100644
--- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
+++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranesCliente.pas
@@ -48,6 +48,7 @@ type
procedure actConfirmarRecepcionUpdate(Sender: TObject);
procedure actGenerarEtiquetasExecute(Sender: TObject);
procedure actGenerarEtiquetasUpdate(Sender: TObject);
+ procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected
FAlbaranes: IBizAlbaranCliente;
@@ -65,6 +66,7 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
+ procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este método
@@ -341,6 +343,8 @@ end;
procedure TfEditorAlbaranesCliente.FormShow(Sender: TObject);
begin
+ cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
+
inherited;
if not Assigned(ViewGrid) then
@@ -460,6 +464,13 @@ begin
}
end;
+procedure TfEditorAlbaranesCliente.OnListaAnosChange(Sender: TObject; const Text: string);
+begin
+ Controller.FiltrarAno(Albaranes, DynWhereDataTable, Text);
+ if Albaranes.DataTable.Active then
+ RefrescarInterno;
+end;
+
procedure TfEditorAlbaranesCliente.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@@ -513,17 +524,37 @@ begin
end;
end;
+procedure TfEditorAlbaranesCliente.RefrescarInterno;
+begin
+ //Volvemos a cargar los años de las albaranes
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosAlbaranes;
+
+ inherited;
+end;
+
procedure TfEditorAlbaranesCliente.SetController(const Value: IAlbaranesClienteController);
begin
FController := Value;
+
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosAlbaranes;
end;
procedure TfEditorAlbaranesCliente.SetAlbaranes(const Value: IBizAlbaranCliente);
begin
FAlbaranes := Value;
- dsDataTable.DataTable := FAlbaranes.DataTable;
- if Assigned(ViewGrid) then
- (ViewGrid as IViewAlbaranesCliente).Albaranes := Albaranes;
+
+ if Assigned(FAlbaranes) then
+ begin
+ //Se guarda el where de la sentencia origen, por si el editor tiene filtros que
+ //afecten a este where y en un futuro se desea volver al where origen (filtro de año))
+ DynWhereDataTable := FAlbaranes.DataTable.DynamicWhere.Xml;
+
+ dsDataTable.DataTable := FAlbaranes.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewAlbaranesCliente).Albaranes := Albaranes;
+ end;
end;
end.
diff --git a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
index 48478902..514b1c0e 100644
--- a/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
+++ b/Source/Modulos/Facturas de cliente/Controller/uFacturasClienteController.pas
@@ -48,6 +48,9 @@ type
procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AFactura: IBizFacturaCliente);
procedure SetIgnorarContabilidad (AFactura: IBizFacturaCliente; const Ignorar: Integer);
+
+ function DarListaAnosFacturas: TStringList;
+ procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TFacturasClienteController = class(TControllerBase, IFacturasClienteController)
@@ -111,6 +114,9 @@ type
procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AFactura: IBizFacturaCliente);
procedure SetIgnorarContabilidad (AFactura: IBizFacturaCliente; const Ignorar: Integer);
+
+ function DarListaAnosFacturas: TStringList;
+ procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@@ -515,6 +521,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
+function TFacturasClienteController.DarListaAnosFacturas: TStringList;
+begin
+ Result := FDataModule.GetAnosItems;
+end;
+
procedure TFacturasClienteController.DescartarCambios(AFactura: IBizFacturaCliente);
begin
if not Assigned(AFactura) then
@@ -943,6 +954,35 @@ begin
Result := ASeleccionados;
end;
+procedure TFacturasClienteController.FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
+var
+ Condicion: TDAWhereExpression;
+ FechaIni: String;
+ FechaFin: String;
+
+begin
+ AFactura.DataTable.DynamicWhere.Clear;
+ AFactura.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
+
+ if (Ano <> 'Todos') then
+ begin
+ // Filtrar las facturas actuales por empresa
+ FechaIni := '01/01/' + Ano;
+ FechaFin := '31/12/' + Ano;
+ with AFactura.DataTable.DynamicWhere do
+ begin
+ // (FECHA_INICIO between FECHA_FIN)
+ Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
+ Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
+ end;
+ end;
+end;
+
procedure TFacturasClienteController.FiltrarEmpresa(AFactura: IBizFacturaCliente);
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.dfm b/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.dfm
index 470b0291..96be7c89 100644
--- a/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.dfm
+++ b/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.dfm
@@ -1,6 +1,6 @@
inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
OnCreate = DAClientDataModuleCreate
- Height = 207
+ Height = 398
Width = 518
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@@ -419,4 +419,28 @@ inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
Left = 400
Top = 40
end
+ object tbl_ListaAnosFacturas: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_FacturasCliente
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'ListaAnosFacturas'
+ IndexDefs = <>
+ Left = 232
+ Top = 232
+ end
+ object ds_ListaAnosFacturas: TDADataSource
+ DataSet = tbl_ListaAnosFacturas.Dataset
+ DataTable = tbl_ListaAnosFacturas
+ Left = 232
+ Top = 184
+ end
end
diff --git a/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.pas b/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.pas
index 10bb97a8..c843e620 100644
--- a/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.pas
+++ b/Source/Modulos/Facturas de cliente/Data/uDataModuleFacturasCliente.pas
@@ -21,10 +21,13 @@ type
ds_FacturasCliente: TDADataSource;
tbl_FacturasCliente_Detalles: TDAMemDataTable;
ds_FacturasCliente_Detalles: TDADataSource;
+ tbl_ListaAnosFacturas: TDAMemDataTable;
+ ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
function _GetDetalles : IBizDetallesFacturaCliente;
public
+ function GetAnosItems : TStringList;
function GetItems : IBizFacturaCliente;
function GetItem(const ID : Integer) : IBizFacturaCliente;
function NewItem : IBizFacturaCliente;
@@ -84,6 +87,30 @@ begin
end;
end;
+function TDataModuleFacturasCliente.GetAnosItems: TStringList;
+var
+ AListaAnos: TStringList;
+begin
+ AListaAnos := TStringList.Create;
+ ShowHourglassCursor;
+ try
+ with tbl_ListaAnosFacturas do
+ begin
+ Open;
+ First;
+ while not eof do
+ begin
+ AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
+ Next;
+ end;
+ Close;
+ end;
+ Result := AListaAnos;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TDataModuleFacturasCliente.GetItem(const ID: Integer): IBizFacturaCliente;
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Facturas de cliente/Model/Data/uIDataModuleFacturasCliente.pas b/Source/Modulos/Facturas de cliente/Model/Data/uIDataModuleFacturasCliente.pas
index d13d2d4a..25cf5dd5 100644
--- a/Source/Modulos/Facturas de cliente/Model/Data/uIDataModuleFacturasCliente.pas
+++ b/Source/Modulos/Facturas de cliente/Model/Data/uIDataModuleFacturasCliente.pas
@@ -9,6 +9,7 @@ uses
type
IDataModuleFacturasCliente = interface
['{B0BDC388-E831-4946-B736-E817E3EA4B7C}']
+ function GetAnosItems : TStringList;
function GetItems: IBizFacturaCliente;
function GetItem(const ID : Integer) : IBizFacturaCliente;
function NewItem : IBizFacturaCliente;
diff --git a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas
index d667025f..a0255135 100644
--- a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas
+++ b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteClient_Intf.pas
@@ -9,13 +9,21 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_FacturasCliente = '{02DBD50A-E80C-4275-BFEE-BF157514D41F}';
- RID_FacturasCliente_Detalles = '{642F747B-097F-4C29-B2A4-DCD4D2C33824}';
+ RID_ListaAnosFacturas = '{ED86AEEA-0208-4717-8C5F-35D6A69D96B5}';
+ RID_FacturasCliente = '{06968EF9-A6E1-4260-AF23-37F7FEFC3258}';
+ RID_FacturasCliente_Detalles = '{2682A446-07E2-4D50-887C-8ED86B4F37A8}';
{ Data table names }
+ nme_ListaAnosFacturas = 'ListaAnosFacturas';
nme_FacturasCliente = 'FacturasCliente';
nme_FacturasCliente_Detalles = 'FacturasCliente_Detalles';
+ { ListaAnosFacturas fields }
+ fld_ListaAnosFacturasANO = 'ANO';
+
+ { ListaAnosFacturas field indexes }
+ idx_ListaAnosFacturasANO = 0;
+
{ FacturasCliente fields }
fld_FacturasClienteID = 'ID';
fld_FacturasClienteID_EMPRESA = 'ID_EMPRESA';
@@ -141,9 +149,44 @@ const
idx_FacturasCliente_DetallesREFERENCIA_PROVEEDOR = 13;
type
+ { IListaAnosFacturas }
+ IListaAnosFacturas = interface(IDAStronglyTypedDataTable)
+ ['{48D78840-7D54-4239-812B-7792548C4D9D}']
+ { Property getters and setters }
+ function GetANOValue: String;
+ procedure SetANOValue(const aValue: String);
+ function GetANOIsNull: Boolean;
+ procedure SetANOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+ end;
+
+ { TListaAnosFacturasDataTableRules }
+ TListaAnosFacturasDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosFacturas)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ function GetANOIsNull: Boolean; virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
{ IFacturasCliente }
IFacturasCliente = interface(IDAStronglyTypedDataTable)
- ['{6C1D0551-0751-4021-9476-820DA8DFDEC2}']
+ ['{118A499A-5BDB-4073-89CB-264C0E6D8B81}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -694,7 +737,7 @@ type
{ IFacturasCliente_Detalles }
IFacturasCliente_Detalles = interface(IDAStronglyTypedDataTable)
- ['{010E516F-BB41-4392-8DDC-D0C2CE7144CF}']
+ ['{381C652C-E873-49CA-9961-CAD360ADB519}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -887,6 +930,39 @@ implementation
uses Variants, uROBinaryHelpers;
+{ TListaAnosFacturasDataTableRules }
+constructor TListaAnosFacturasDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TListaAnosFacturasDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosFacturasDataTableRules.GetANOValue: String;
+begin
+ result := DataTable.Fields[idx_ListaAnosFacturasANO].AsString;
+end;
+
+procedure TListaAnosFacturasDataTableRules.SetANOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_ListaAnosFacturasANO].AsString := aValue;
+end;
+
+function TListaAnosFacturasDataTableRules.GetANOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_ListaAnosFacturasANO].IsNull;
+end;
+
+procedure TListaAnosFacturasDataTableRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_ListaAnosFacturasANO].AsVariant := Null;
+end;
+
+
{ TFacturasClienteDataTableRules }
constructor TFacturasClienteDataTableRules.Create(aDataTable: TDADataTable);
var
@@ -2137,6 +2213,7 @@ end;
initialization
+ RegisterDataTableRules(RID_ListaAnosFacturas, TListaAnosFacturasDataTableRules);
RegisterDataTableRules(RID_FacturasCliente, TFacturasClienteDataTableRules);
RegisterDataTableRules(RID_FacturasCliente_Detalles, TFacturasCliente_DetallesDataTableRules);
diff --git a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas
index 26e7ff0c..c28c47cd 100644
--- a/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas
+++ b/Source/Modulos/Facturas de cliente/Model/schFacturasClienteServer_Intf.pas
@@ -9,13 +9,48 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_FacturasClienteDelta = '{77786E5C-76FA-4B31-A625-81EEDB4F0EF5}';
- RID_FacturasCliente_DetallesDelta = '{172DCD31-566D-43AD-B3BD-79D70B765BD3}';
+ RID_ListaAnosFacturasDelta = '{1044511F-C860-4A20-B049-0B443D1D266B}';
+ RID_FacturasClienteDelta = '{6E43BA0F-875D-4641-BD3B-26C3971CD234}';
+ RID_FacturasCliente_DetallesDelta = '{48031B0F-EA4E-429B-8A5A-80AE04B47531}';
type
+ { IListaAnosFacturasDelta }
+ IListaAnosFacturasDelta = interface(IListaAnosFacturas)
+ ['{1044511F-C860-4A20-B049-0B443D1D266B}']
+ { Property getters and setters }
+ function GetOldANOValue : String;
+
+ { Properties }
+ property OldANO : String read GetOldANOValue;
+ end;
+
+ { TListaAnosFacturasBusinessProcessorRules }
+ TListaAnosFacturasBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosFacturas, IListaAnosFacturasDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ function GetANOIsNull: Boolean; virtual;
+ function GetOldANOValue: String; virtual;
+ function GetOldANOIsNull: Boolean; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO : String read GetANOValue write SetANOValue;
+ property ANOIsNull : Boolean read GetANOIsNull write SetANOIsNull;
+ property OldANO : String read GetOldANOValue;
+ property OldANOIsNull : Boolean read GetOldANOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
{ IFacturasClienteDelta }
IFacturasClienteDelta = interface(IFacturasCliente)
- ['{77786E5C-76FA-4B31-A625-81EEDB4F0EF5}']
+ ['{6E43BA0F-875D-4641-BD3B-26C3971CD234}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@@ -566,7 +601,7 @@ type
{ IFacturasCliente_DetallesDelta }
IFacturasCliente_DetallesDelta = interface(IFacturasCliente_Detalles)
- ['{172DCD31-566D-43AD-B3BD-79D70B765BD3}']
+ ['{48031B0F-EA4E-429B-8A5A-80AE04B47531}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_FACTURAValue : Integer;
@@ -759,6 +794,49 @@ implementation
uses
Variants, uROBinaryHelpers, uDAInterfaces;
+{ TListaAnosFacturasBusinessProcessorRules }
+constructor TListaAnosFacturasBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TListaAnosFacturasBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO];
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO]);
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetOldANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosFacturasANO];
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetOldANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosFacturasANO]);
+end;
+
+procedure TListaAnosFacturasBusinessProcessorRules.SetANOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO] := aValue;
+end;
+
+procedure TListaAnosFacturasBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO] := Null;
+end;
+
+
{ TFacturasClienteBusinessProcessorRules }
constructor TFacturasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var
@@ -2590,6 +2668,7 @@ end;
initialization
+ RegisterBusinessProcessorRules(RID_ListaAnosFacturasDelta, TListaAnosFacturasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasClienteDelta, TFacturasClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasCliente_DetallesDelta, TFacturasCliente_DetallesBusinessProcessorRules);
diff --git a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
index 25824511..62c19bf4 100644
--- a/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
+++ b/Source/Modulos/Facturas de cliente/Reports/uRptFacturasCliente_Server.pas
@@ -251,7 +251,7 @@ var
begin
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
-{
+
AStream := TMemoryStream.Create;
try
//Inicializamos parametros
@@ -261,15 +261,19 @@ begin
// FFechaVenInicio := FechaVenInicio;
// FFechaVenFin := FechaVenFin;
FImporteMinimo := ImporteMinimo;
+ FDesglosado := Desglosado;
+
+ if Assigned(FListaIDClientes) then
+ FListaIDClientes.Free;
FListaIDClientes := ListaIDClientes;
//Se prepara la tabla del listado general del informe
- if tbl_InformeListadoFacturasPendientes.Active then
- tbl_InformeListadoFacturasPendientes.Active := False;
- PrepararTablaInforme(tbl_InformeListadoFacturasPendientes);
+ if tbl_InformeListadoFacturas.Active then
+ tbl_InformeListadoFacturas.Active := False;
+ PrepararTablaInforme(tbl_InformeListadoFacturas);
// Filtrar el informe por situacion
- with tbl_InformeListadoFacturasPendientes.DynamicWhere do
+ with tbl_InformeListadoFacturas.DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteSITUACION), NewConstant('PAGADA', datString), dboNotEqual);
@@ -279,15 +283,32 @@ begin
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;
+ //Se prepara la tabla del listado resumen del informe
+ if tbl_InformeListadoFacturasResumen.Active then
+ tbl_InformeListadoFacturasResumen.Active := False;
+
+ dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
+ PrepararTablaResumenInforme(dsMaster);
+
+ // Filtrar el informe por situacion
+ dsMaster.Where.AddText(' AND (SITUACION <> ''PAGADA'')');
+
+ //Esto se hace para rellenar la tabla del datamodule que usa el informe.
+ dsMaster.Open;
+ AStream.Clear;
+ Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1);
+ Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
+
+
//DESGLOSADO POR CLIENTE EN ESTE INFORME NO SE DESGLOSARÁ POR CLIENTE
- FDesglosado := Desglosado;
if FDesglosado then
ATipoInforme := rptInformeListadoFactuasClientePendienteDesglosado
else
ATipoInforme := rptInformeListadoFactuasClientePendiente;
//Finalmente se abren las tablas del informe
- tbl_InformeListadoFacturasPendientes.Active := True;
+ tbl_InformeListadoFacturas.Active := True;
+ tbl_InformeListadoFacturasResumen.Active := True;
Result := _GenerarInforme(ATipoInforme);
@@ -296,7 +317,6 @@ begin
dsMaster := Nil;
FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end;
- }
end;
procedure TRptFacturasCliente.IniciarParametrosInforme;
diff --git a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm
index c6b1cfa5..f95c6a1f 100644
--- a/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm
+++ b/Source/Modulos/Facturas de cliente/Servidor/srvFacturasCliente_Impl.dfm
@@ -15,6 +15,33 @@ object srvFacturasCliente: TsrvFacturasCliente
DataDictionary = DataDictionary
Diagrams = Diagrams
Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ Name = 'IBX'
+ SQL =
+ 'select ANO from'#10'(select distinct(substr(FECHA_FACTURA, 1,4)) as ' +
+ 'ANO'#10'from facturas_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select di' +
+ 'stinct '#39'Todos'#39' as ANO'#10'from empresas'#10#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ANO'
+ TableField = 'ANO'
+ end>
+ end>
+ Name = 'ListaAnosFacturas'
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ end
item
Params = <>
Statements = <
diff --git a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.dfm b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.dfm
index a34352dd..9190491e 100644
--- a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.dfm
+++ b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.dfm
@@ -57,11 +57,25 @@ inherited fEditorFacturasCliente: TfEditorFacturasCliente
Visible = False
end
end
+ inherited tbxFiltro: TTBXToolbar
+ ExplicitWidth = 431
+ inherited lblAno: TTBXLabelItem
+ Visible = True
+ end
+ inherited cbxListaAnos: TTBXComboBoxItem
+ Visible = True
+ end
+ inherited sepAno: TTBXSeparatorItem
+ Visible = True
+ end
+ end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 640
end
inherited TBXTMain2: TTBXToolbar
+ Left = 431
Visible = True
+ ExplicitLeft = 431
ExplicitWidth = 83
object TBXItem40: TTBXItem
Action = actInformes
diff --git a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
index 698bedcb..63826363 100644
--- a/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
+++ b/Source/Modulos/Facturas de cliente/Views/uEditorFacturasCliente.pas
@@ -40,6 +40,8 @@ type
procedure actNuevaFacturaExecute(Sender: TObject);
procedure actNuevoAbonoExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
+ procedure OnListaAnosChange(Sender: TObject; const Text: string);
+
private
FFacturas: IBizFacturaCliente;
FController : IFacturasClienteController;
@@ -49,12 +51,15 @@ type
function GetController : IFacturasClienteController; virtual;
procedure SetController (const Value : IFacturasClienteController); virtual;
+
procedure NuevoInterno; override;
procedure EliminarInterno; override;
procedure ModificarInterno; override;
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
+ procedure RefrescarInterno; override;
+
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas;
@@ -257,6 +262,8 @@ end;
procedure TfEditorFacturasCliente.FormShow(Sender: TObject);
begin
+ cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
+
inherited;
if not Assigned(ViewGrid) then
@@ -373,6 +380,13 @@ begin
end;
end;
+procedure TfEditorFacturasCliente.OnListaAnosChange(Sender: TObject; const Text: string);
+begin
+ Controller.FiltrarAno(Facturas, DynWhereDataTable, Text);
+ if Facturas.DataTable.Active then
+ RefrescarInterno;
+end;
+
procedure TfEditorFacturasCliente.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@@ -422,17 +436,37 @@ begin
end;
end;
+procedure TfEditorFacturasCliente.RefrescarInterno;
+begin
+ //Volvemos a cargar los años de las facturas
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosFacturas;
+
+ inherited;
+end;
+
procedure TfEditorFacturasCliente.SetController(const Value: IFacturasClienteController);
begin
FController := Value;
+
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosFacturas;
end;
procedure TfEditorFacturasCliente.SetFacturas(const Value: IBizFacturaCliente);
begin
FFacturas := Value;
- dsDataTable.DataTable := FFacturas.DataTable;
- if Assigned(ViewGrid) then
- (ViewGrid as IViewFacturasCliente).Facturas := Facturas;
+
+ if Assigned(FFacturas) then
+ begin
+ //Se guarda el where de la sentencia origen, por si el editor tiene filtros que
+ //afecten a este where y en un futuro se desea volver al where origen (filtro de año))
+ DynWhereDataTable := FFacturas.DataTable.DynamicWhere.Xml;
+
+ dsDataTable.DataTable := FFacturas.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewFacturasCliente).Facturas := Facturas;
+ end;
end;
end.
diff --git a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas
index 26550284..9199f8dd 100644
--- a/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas
+++ b/Source/Modulos/Facturas de proveedor/Controller/uFacturasProveedorController.pas
@@ -49,6 +49,9 @@ type
procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AFactura: IBizFacturaProveedor);
procedure SetIgnorarContabilidad (AFactura: IBizFacturaProveedor; const Ignorar: Integer);
+
+ function DarListaAnosFacturas: TStringList;
+ procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
TFacturasProveedorController = class(TControllerBase, IFacturasProveedorController)
@@ -113,6 +116,9 @@ type
procedure CopiarDireccion (const ADireccionEnvio: IBizDireccionesContacto; AFactura: IBizFacturaProveedor);
procedure SetIgnorarContabilidad (AFactura: IBizFacturaProveedor; const Ignorar: Integer);
+
+ function DarListaAnosFacturas: TStringList;
+ procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@@ -557,6 +563,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
+function TFacturasProveedorController.DarListaAnosFacturas: TStringList;
+begin
+ Result := FDataModule.GetAnosItems;
+end;
+
procedure TFacturasProveedorController.DescartarCambios(AFactura: IBizFacturaProveedor);
begin
if not Assigned(AFactura) then
@@ -984,6 +995,35 @@ begin
Result := ASeleccionados;
end;
+procedure TFacturasProveedorController.FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
+var
+ Condicion: TDAWhereExpression;
+ FechaIni: String;
+ FechaFin: String;
+
+begin
+ AFactura.DataTable.DynamicWhere.Clear;
+ AFactura.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
+
+ if (Ano <> 'Todos') then
+ begin
+ // Filtrar las facturas actuales por empresa
+ FechaIni := '01/01/' + Ano;
+ FechaFin := '31/12/' + Ano;
+ with AFactura.DataTable.DynamicWhere do
+ begin
+ // (FECHA_INICIO between FECHA_FIN)
+ Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
+ Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
+ end;
+ end;
+end;
+
procedure TFacturasProveedorController.FiltrarEmpresa(AFactura: IBizFacturaProveedor);
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.dfm b/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.dfm
index 74afba48..2ff99cbd 100644
--- a/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.dfm
+++ b/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.dfm
@@ -1,6 +1,6 @@
inherited DataModuleFacturasProveedor: TDataModuleFacturasProveedor
OnCreate = DAClientDataModuleCreate
- Height = 246
+ Height = 372
Width = 518
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@@ -406,4 +406,28 @@ inherited DataModuleFacturasProveedor: TDataModuleFacturasProveedor
Left = 368
Top = 104
end
+ object tbl_ListaAnosFacturas: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_FacturasProveedor
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'ListaAnosFacturas'
+ IndexDefs = <>
+ Left = 208
+ Top = 216
+ end
+ object ds_ListaAnosFacturas: TDADataSource
+ DataSet = tbl_ListaAnosFacturas.Dataset
+ DataTable = tbl_ListaAnosFacturas
+ Left = 208
+ Top = 168
+ end
end
diff --git a/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.pas b/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.pas
index c636933b..bfc3c2f9 100644
--- a/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.pas
+++ b/Source/Modulos/Facturas de proveedor/Data/uDataModuleFacturasProveedor.pas
@@ -20,10 +20,13 @@ type
ds_FacturasProveedor: TDADataSource;
tbl_FacturasProveedor_Detalles: TDAMemDataTable;
ds_FacturasProveedor_Detalles: TDADataSource;
+ tbl_ListaAnosFacturas: TDAMemDataTable;
+ ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
function _GetDetalles : IBizDetallesFacturaProveedor;
public
+ function GetAnosItems : TStringList;
function GetItems : IBizFacturaProveedor;
function GetItem(const ID : Integer) : IBizFacturaProveedor;
function NewItem : IBizFacturaProveedor;
@@ -76,6 +79,30 @@ begin
end;
end;
+function TDataModuleFacturasProveedor.GetAnosItems: TStringList;
+var
+ AListaAnos: TStringList;
+begin
+ AListaAnos := TStringList.Create;
+ ShowHourglassCursor;
+ try
+ with tbl_ListaAnosFacturas do
+ begin
+ Open;
+ First;
+ while not eof do
+ begin
+ AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
+ Next;
+ end;
+ Close;
+ end;
+ Result := AListaAnos;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TDataModuleFacturasProveedor.GetItem(const ID: Integer): IBizFacturaProveedor;
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Facturas de proveedor/FacturasProveedor_Group.groupproj b/Source/Modulos/Facturas de proveedor/FacturasProveedor_Group.groupproj
index 83be711d..50af6aea 100644
--- a/Source/Modulos/Facturas de proveedor/FacturasProveedor_Group.groupproj
+++ b/Source/Modulos/Facturas de proveedor/FacturasProveedor_Group.groupproj
@@ -18,10 +18,6 @@
-
-
-
-
@@ -225,50 +221,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Source/Modulos/Facturas de proveedor/Model/Data/uIDataModuleFacturasProveedor.pas b/Source/Modulos/Facturas de proveedor/Model/Data/uIDataModuleFacturasProveedor.pas
index 763c4989..9a58599b 100644
--- a/Source/Modulos/Facturas de proveedor/Model/Data/uIDataModuleFacturasProveedor.pas
+++ b/Source/Modulos/Facturas de proveedor/Model/Data/uIDataModuleFacturasProveedor.pas
@@ -9,6 +9,7 @@ uses
type
IDataModuleFacturasProveedor = interface
['{FD0F5B2F-5556-4031-86F0-EFF96805FD66}']
+ function GetAnosItems : TStringList;
function GetItems: IBizFacturaProveedor;
function GetItem(const ID : Integer) : IBizFacturaProveedor;
function NewItem : IBizFacturaProveedor;
diff --git a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas
index 65ecbbfc..e4670176 100644
--- a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas
+++ b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorClient_Intf.pas
@@ -9,13 +9,21 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_FacturasProveedor = '{65925C03-CA37-4D4C-A571-E55853C26BA9}';
- RID_FacturasProveedor_Detalles = '{10E36F34-C565-4C28-B800-2E679843DCED}';
+ RID_ListaAnosFacturas = '{9E91F819-43C2-41C2-9676-F03332208B2C}';
+ RID_FacturasProveedor = '{5C533F5E-8FCD-4317-9D2E-F1F0E33A34A9}';
+ RID_FacturasProveedor_Detalles = '{8BF1D455-8054-4877-BB76-B513DC0D5013}';
{ Data table names }
+ nme_ListaAnosFacturas = 'ListaAnosFacturas';
nme_FacturasProveedor = 'FacturasProveedor';
nme_FacturasProveedor_Detalles = 'FacturasProveedor_Detalles';
+ { ListaAnosFacturas fields }
+ fld_ListaAnosFacturasANO = 'ANO';
+
+ { ListaAnosFacturas field indexes }
+ idx_ListaAnosFacturasANO = 0;
+
{ FacturasProveedor fields }
fld_FacturasProveedorID = 'ID';
fld_FacturasProveedorID_EMPRESA = 'ID_EMPRESA';
@@ -137,9 +145,44 @@ const
idx_FacturasProveedor_DetallesREFERENCIA_PROVEEDOR = 13;
type
+ { IListaAnosFacturas }
+ IListaAnosFacturas = interface(IDAStronglyTypedDataTable)
+ ['{48A9B6D2-E50C-49BA-9A65-83DC0A717606}']
+ { Property getters and setters }
+ function GetANOValue: String;
+ procedure SetANOValue(const aValue: String);
+ function GetANOIsNull: Boolean;
+ procedure SetANOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+ end;
+
+ { TListaAnosFacturasDataTableRules }
+ TListaAnosFacturasDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosFacturas)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ function GetANOIsNull: Boolean; virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
{ IFacturasProveedor }
IFacturasProveedor = interface(IDAStronglyTypedDataTable)
- ['{F2F30017-EDDC-4294-8A13-93D1B4D70D0C}']
+ ['{2A13A3FA-6FBB-4E2B-A5B9-52470DCAF0E6}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -666,7 +709,7 @@ type
{ IFacturasProveedor_Detalles }
IFacturasProveedor_Detalles = interface(IDAStronglyTypedDataTable)
- ['{FB8F2FD1-E2A2-42EE-8027-9B399F363BB6}']
+ ['{36E09C88-81CA-409B-BEA3-5BEFD098DF61}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -859,6 +902,39 @@ implementation
uses Variants, uROBinaryHelpers;
+{ TListaAnosFacturasDataTableRules }
+constructor TListaAnosFacturasDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TListaAnosFacturasDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosFacturasDataTableRules.GetANOValue: String;
+begin
+ result := DataTable.Fields[idx_ListaAnosFacturasANO].AsString;
+end;
+
+procedure TListaAnosFacturasDataTableRules.SetANOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_ListaAnosFacturasANO].AsString := aValue;
+end;
+
+function TListaAnosFacturasDataTableRules.GetANOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_ListaAnosFacturasANO].IsNull;
+end;
+
+procedure TListaAnosFacturasDataTableRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_ListaAnosFacturasANO].AsVariant := Null;
+end;
+
+
{ TFacturasProveedorDataTableRules }
constructor TFacturasProveedorDataTableRules.Create(aDataTable: TDADataTable);
var
@@ -2067,6 +2143,7 @@ end;
initialization
+ RegisterDataTableRules(RID_ListaAnosFacturas, TListaAnosFacturasDataTableRules);
RegisterDataTableRules(RID_FacturasProveedor, TFacturasProveedorDataTableRules);
RegisterDataTableRules(RID_FacturasProveedor_Detalles, TFacturasProveedor_DetallesDataTableRules);
diff --git a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas
index 0c248959..86c9ad98 100644
--- a/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas
+++ b/Source/Modulos/Facturas de proveedor/Model/schFacturasProveedorServer_Intf.pas
@@ -9,13 +9,48 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_FacturasProveedorDelta = '{8A815C19-322F-46C9-BAD5-3A2696BF133E}';
- RID_FacturasProveedor_DetallesDelta = '{49E22119-767F-4CB5-A74E-87923CDA4BD6}';
+ RID_ListaAnosFacturasDelta = '{09861C81-9AF3-4E90-BF83-37A720C86F50}';
+ RID_FacturasProveedorDelta = '{2E0BD84E-DC1F-4FCC-A4B6-7B966E4EC2C1}';
+ RID_FacturasProveedor_DetallesDelta = '{850D863A-48C3-46C3-9CB1-B8F0A110870A}';
type
+ { IListaAnosFacturasDelta }
+ IListaAnosFacturasDelta = interface(IListaAnosFacturas)
+ ['{09861C81-9AF3-4E90-BF83-37A720C86F50}']
+ { Property getters and setters }
+ function GetOldANOValue : String;
+
+ { Properties }
+ property OldANO : String read GetOldANOValue;
+ end;
+
+ { TListaAnosFacturasBusinessProcessorRules }
+ TListaAnosFacturasBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosFacturas, IListaAnosFacturasDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ function GetANOIsNull: Boolean; virtual;
+ function GetOldANOValue: String; virtual;
+ function GetOldANOIsNull: Boolean; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO : String read GetANOValue write SetANOValue;
+ property ANOIsNull : Boolean read GetANOIsNull write SetANOIsNull;
+ property OldANO : String read GetOldANOValue;
+ property OldANOIsNull : Boolean read GetOldANOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
{ IFacturasProveedorDelta }
IFacturasProveedorDelta = interface(IFacturasProveedor)
- ['{8A815C19-322F-46C9-BAD5-3A2696BF133E}']
+ ['{2E0BD84E-DC1F-4FCC-A4B6-7B966E4EC2C1}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@@ -542,7 +577,7 @@ type
{ IFacturasProveedor_DetallesDelta }
IFacturasProveedor_DetallesDelta = interface(IFacturasProveedor_Detalles)
- ['{49E22119-767F-4CB5-A74E-87923CDA4BD6}']
+ ['{850D863A-48C3-46C3-9CB1-B8F0A110870A}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_FACTURAValue : Integer;
@@ -735,6 +770,49 @@ implementation
uses
Variants, uROBinaryHelpers, uDAInterfaces;
+{ TListaAnosFacturasBusinessProcessorRules }
+constructor TListaAnosFacturasBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TListaAnosFacturasBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO];
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO]);
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetOldANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosFacturasANO];
+end;
+
+function TListaAnosFacturasBusinessProcessorRules.GetOldANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosFacturasANO]);
+end;
+
+procedure TListaAnosFacturasBusinessProcessorRules.SetANOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO] := aValue;
+end;
+
+procedure TListaAnosFacturasBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosFacturasANO] := Null;
+end;
+
+
{ TFacturasProveedorBusinessProcessorRules }
constructor TFacturasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var
@@ -2504,6 +2582,7 @@ end;
initialization
+ RegisterBusinessProcessorRules(RID_ListaAnosFacturasDelta, TListaAnosFacturasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasProveedorDelta, TFacturasProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasProveedor_DetallesDelta, TFacturasProveedor_DetallesBusinessProcessorRules);
diff --git a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
index 8cf34100..b26db4f5 100644
--- a/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
+++ b/Source/Modulos/Facturas de proveedor/Reports/uRptFacturasProveedor_Server.pas
@@ -73,7 +73,6 @@ const
rptInformeListadoFactuasProveedorPendiente = 'InformeListadoFacturasProveedorPendientes.fr3';
rptInformeListadoFactuasProveedorPendienteDesglosado = 'InformeListadoFacturasProveedorPendientesDesglosado.fr3';
ds_InformeListadoFacturasResumen = 'ListadoFacturasProveedorResumen';
- ds_InformeListadoFacturasPendientesResumen = 'InformeListadoFacturasPendientesResumen';
{ TRptFacturasProveedor }
@@ -237,7 +236,7 @@ var
begin
FConnection.BeginTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
-{
+
AStream := TMemoryStream.Create;
try
//Inicializamos parametros
@@ -255,13 +254,13 @@ begin
//Se prepara la tabla del listado general del informe
-{ if tbl_InformeListadoFacturasPendientes.Active then
- tbl_InformeListadoFacturasPendientes.Active := False;
+ if tbl_InformeListadoFacturas.Active then
+ tbl_InformeListadoFacturas.Active := False;
- PrepararTablaInforme(tbl_InformeListadoFacturasPendientes);
+ PrepararTablaInforme(tbl_InformeListadoFacturas);
// Filtrar el informe por situacion
- with tbl_InformeListadoFacturasPendientes.DynamicWhere do
+ with tbl_InformeListadoFacturas.DynamicWhere do
begin
// (SITUACION >= PAGADA)
Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorSITUACION), NewConstant('PAGADA', datString), dboNotEqual);
@@ -272,10 +271,10 @@ begin
end;
//Se prepara la tabla del listado resumen del informe
- if tbl_InformeListadoFacturasPendResumen.Active then
- tbl_InformeListadoFacturasPendResumen.Active := False;
+ if tbl_InformeListadoFacturasResumen.Active then
+ tbl_InformeListadoFacturasResumen.Active := False;
- dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasPendientesResumen, [], [], False);
+ dsMaster := schReport.NewDataset(FConnection, ds_InformeListadoFacturasResumen, [], [], False);
PrepararTablaResumenInforme(dsMaster);
// Filtrar el informe por situacion
@@ -285,7 +284,7 @@ begin
dsMaster.Open;
AStream.Clear;
Bin2DataStreamer.WriteDataset(AStream, dsMaster, [woRows, woSchema], -1);
- Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasPendResumen, TRUE, '', TRUE, TRUE);
+ Bin2DataStreamer.ReadDataset(AStream, tbl_InformeListadoFacturasResumen, TRUE, '', TRUE, TRUE);
//DESGLOSADO POR PROVEEDOR EN ESTE INFORME
if FDesglosado then
@@ -294,8 +293,8 @@ begin
ATipoInforme := rptInformeListadoFactuasProveedorPendiente;
//Finalmente se abren las tablas del informe
- tbl_InformeListadoFacturasPendientes.Active := True;
- tbl_InformeListadoFacturasPendResumen.Active := True;
+ tbl_InformeListadoFacturas.Active := True;
+ tbl_InformeListadoFacturasResumen.Active := True;
Result := _GenerarInforme(ATipoInforme);
finally
@@ -303,7 +302,6 @@ begin
dsMaster := Nil;
FConnection.RollbackTransaction; //<--- Creo que no va a hacer falta. "PUES SI ES NECESARIO"
end;
-}
end;
procedure TRptFacturasProveedor.IniciarParametrosInforme;
diff --git a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm
index acf2e349..887568ea 100644
--- a/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm
+++ b/Source/Modulos/Facturas de proveedor/Servidor/srvFacturasProveedor_Impl.dfm
@@ -15,6 +15,33 @@ object srvFacturasProveedor: TsrvFacturasProveedor
DataDictionary = DataDictionary
Diagrams = Diagrams
Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ Name = 'IBX'
+ SQL =
+ 'select ANO from'#10'(select distinct(substr(FECHA_FACTURA, 1,4)) as ' +
+ 'ANO'#10'from facturas_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select ' +
+ 'distinct '#39'Todos'#39' as ANO'#10'from empresas'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ANO'
+ TableField = 'ANO'
+ end>
+ end>
+ Name = 'ListaAnosFacturas'
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ end
item
Params = <>
Statements = <
diff --git a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.dfm b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.dfm
index d715b306..6874657b 100644
--- a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.dfm
+++ b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.dfm
@@ -58,11 +58,26 @@ inherited fEditorFacturasProveedor: TfEditorFacturasProveedor
Visible = False
end
end
+ inherited tbxFiltro: TTBXToolbar
+ DockPos = -6
+ ExplicitWidth = 431
+ inherited lblAno: TTBXLabelItem
+ Visible = True
+ end
+ inherited cbxListaAnos: TTBXComboBoxItem
+ Visible = True
+ end
+ inherited sepAno: TTBXSeparatorItem
+ Visible = True
+ end
+ end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 640
end
inherited TBXTMain2: TTBXToolbar
+ Left = 431
Visible = True
+ ExplicitLeft = 431
ExplicitWidth = 83
object TBXItem40: TTBXItem
Action = actInformes
diff --git a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.pas b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.pas
index a90d8676..59115822 100644
--- a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.pas
+++ b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturasProveedor.pas
@@ -39,21 +39,27 @@ type
procedure actNuevaFacturaExecute(Sender: TObject);
procedure actNuevoAbonoExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
+ procedure OnListaAnosChange(Sender: TObject; const Text: string);
+
private
FFacturas: IBizFacturaProveedor;
FController : IFacturasProveedorController;
+
protected
function GetFacturas: IBizFacturaProveedor;
procedure SetFacturas(const Value: IBizFacturaProveedor);
function GetController : IFacturasProveedorController; virtual;
procedure SetController (const Value : IFacturasProveedorController); virtual;
+
procedure NuevoInterno; override;
procedure EliminarInterno; override;
procedure ModificarInterno; override;
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
+ procedure RefrescarInterno; override;
+
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas;
@@ -262,6 +268,8 @@ end;
procedure TfEditorFacturasProveedor.FormShow(Sender: TObject);
begin
+ cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
+
inherited;
if not Assigned(ViewGrid) then
@@ -348,6 +356,13 @@ begin
FController.Ver(Facturas);
end;
+procedure TfEditorFacturasProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
+begin
+ Controller.FiltrarAno(Facturas, DynWhereDataTable, Text);
+ if Facturas.DataTable.Active then
+ RefrescarInterno;
+end;
+
procedure TfEditorFacturasProveedor.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@@ -405,17 +420,37 @@ inherited;
}
end;
+procedure TfEditorFacturasProveedor.RefrescarInterno;
+begin
+ //Volvemos a cargar los años de las facturas
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosFacturas;
+
+ inherited;
+end;
+
procedure TfEditorFacturasProveedor.SetController(const Value: IFacturasProveedorController);
begin
FController := Value;
+
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosFacturas;
end;
procedure TfEditorFacturasProveedor.SetFacturas(const Value: IBizFacturaProveedor);
begin
FFacturas := Value;
- dsDataTable.DataTable := FFacturas.DataTable;
- if Assigned(ViewGrid) then
- (ViewGrid as IViewFacturasProveedor).Facturas := Facturas;
+
+ if Assigned(FFacturas) then
+ begin
+ //Se guarda el where de la sentencia origen, por si el editor tiene filtros que
+ //afecten a este where y en un futuro se desea volver al where origen (filtro de año))
+ DynWhereDataTable := FFacturas.DataTable.DynamicWhere.Xml;
+
+ dsDataTable.DataTable := FFacturas.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewFacturasProveedor).Facturas := Facturas;
+ end;
end;
end.
diff --git a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas
index ba23c156..6b45d06c 100644
--- a/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas
+++ b/Source/Modulos/Gestor de informes/Controller/uGestorInformesController.pas
@@ -346,9 +346,6 @@ var
AStream: Binary;
AEditor : IEditorInformeFacturasClientePendientesReport;
begin
- showmessage('Informe en desarrollo');
- exit;
-
AEditor := NIL;
CreateEditor('EditorInformeFacturasClientePendientesReport', IEditorInformeFacturasClientePendientesReport, AEditor);
@@ -396,9 +393,6 @@ var
AStream: Binary;
AEditor : IEditorInformeFacturasProveedorPendientesReport;
begin
- showmessage('Informe en desarrollo');
- exit;
-
AEditor := NIL;
CreateEditor('EditorInformeFacturasProveedorPendientesReport', IEditorInformeFacturasProveedorPendientesReport, AEditor);
if Assigned(AEditor) then
diff --git a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj
index fcfb6e62..fb19e218 100644
--- a/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj
+++ b/Source/Modulos/Gestor de informes/Views/GestorInformes_view.dproj
@@ -38,46 +38,46 @@
MainSource
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
TForm
diff --git a/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas b/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas
index 0f440b17..1ea1759c 100644
--- a/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas
+++ b/Source/Modulos/Recibos de cliente/Controller/uRecibosClienteController.pas
@@ -83,6 +83,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
+
+ function DarListaAnosRecibos: TStringList;
+ procedure FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TRecibosClienteController = class(TControllerBase, IRecibosClienteController)
@@ -154,6 +157,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
+
+ function DarListaAnosRecibos: TStringList;
+ procedure FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@@ -440,6 +446,11 @@ begin
Result := Buscar(ID_NULO);
end;
+function TRecibosClienteController.DarListaAnosRecibos: TStringList;
+begin
+ Result := FDataModule.GetAnosItems;
+end;
+
function TRecibosClienteController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var
ARecibosCliente: IBizRecibosCliente;
@@ -890,6 +901,35 @@ begin
Result := ASeleccionados;
end;
+procedure TRecibosClienteController.FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
+var
+ Condicion: TDAWhereExpression;
+ FechaIni: String;
+ FechaFin: String;
+
+begin
+ ARecibo.DataTable.DynamicWhere.Clear;
+ ARecibo.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
+
+ if (Ano <> 'Todos') then
+ begin
+ // Filtrar las facturas actuales por empresa
+ FechaIni := '01/01/' + Ano;
+ FechaFin := '31/12/' + Ano;
+ with ARecibo.DataTable.DynamicWhere do
+ begin
+ // (FECHA_INICIO between FECHA_FIN)
+ Condicion := NewBinaryExpression(NewField('', fld_RecibosClienteFECHA_EMISION), NewConstant(FechaIni, datString), dboGreaterOrEqual);
+ Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RecibosClienteFECHA_EMISION), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
+ end;
+ end;
+end;
+
procedure TRecibosClienteController.FiltrarEmpresa(ARecibo: IBizRecibosCliente);
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.dfm b/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.dfm
index 368d4a5a..59936623 100644
--- a/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.dfm
+++ b/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.dfm
@@ -1,6 +1,6 @@
inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
OnCreate = DAClientDataModuleCreate
- Height = 223
+ Height = 346
Width = 525
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@@ -593,4 +593,28 @@ inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
Left = 416
Top = 32
end
+ object tbl_ListaAnosRecibos: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_RecibosCliente
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'ListaAnosRecibos'
+ IndexDefs = <>
+ Left = 176
+ Top = 216
+ end
+ object ds_ListaAnosRecibos: TDADataSource
+ DataSet = tbl_ListaAnosRecibos.Dataset
+ DataTable = tbl_ListaAnosRecibos
+ Left = 176
+ Top = 160
+ end
end
diff --git a/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.pas b/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.pas
index a65899fb..9d24e792 100644
--- a/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.pas
+++ b/Source/Modulos/Recibos de cliente/Data/uDataModuleRecibosCliente.pas
@@ -46,12 +46,15 @@ type
ds_RecibosCliente: TDADataSource;
tbl_RecibosCompensadosCli: TDAMemDataTable;
ds_RecibosCompensadosCli: TDADataSource;
+ tbl_ListaAnosRecibos: TDAMemDataTable;
+ ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
protected
function _GetPagos: IBizPagosCliente;
function _GetRecibosCompensados : IBizRecibosCompensadosCli;
public
+ function GetAnosItems : TStringList;
function GetItems: IBizRecibosCliente;
function GetItem(const ID : Integer) : IBizRecibosCliente;
function NewItem : IBizRecibosCliente;
@@ -149,6 +152,30 @@ begin
Result := GetItem(ID_NULO)
end;
+function TDataModuleRecibosCliente.GetAnosItems: TStringList;
+var
+ AListaAnos: TStringList;
+begin
+ AListaAnos := TStringList.Create;
+ ShowHourglassCursor;
+ try
+ with tbl_ListaAnosRecibos do
+ begin
+ Open;
+ First;
+ while not eof do
+ begin
+ AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
+ Next;
+ end;
+ Close;
+ end;
+ Result := AListaAnos;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TDataModuleRecibosCliente.GetItem(const ID: Integer): IBizRecibosCliente;
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Recibos de cliente/Model/Data/uIDataModuleRecibosCliente.pas b/Source/Modulos/Recibos de cliente/Model/Data/uIDataModuleRecibosCliente.pas
index b20e1628..451d415f 100644
--- a/Source/Modulos/Recibos de cliente/Model/Data/uIDataModuleRecibosCliente.pas
+++ b/Source/Modulos/Recibos de cliente/Model/Data/uIDataModuleRecibosCliente.pas
@@ -26,11 +26,12 @@ unit uIDataModuleRecibosCliente;
interface
uses
- uBizRecibosCliente;
+ Classes, uBizRecibosCliente;
type
IDataModuleRecibosCliente = interface
['{F4F02C9E-E861-4938-8A2D-FE971A41EE92}']
+ function GetAnosItems : TStringList;
function GetItems: IBizRecibosCliente;
function GetItem(const ID : Integer) : IBizRecibosCliente;
function NewItem : IBizRecibosCliente;
diff --git a/Source/Modulos/Recibos de cliente/Model/schRecibosClienteClient_Intf.pas b/Source/Modulos/Recibos de cliente/Model/schRecibosClienteClient_Intf.pas
index 3f54cbed..9ad7d109 100644
--- a/Source/Modulos/Recibos de cliente/Model/schRecibosClienteClient_Intf.pas
+++ b/Source/Modulos/Recibos de cliente/Model/schRecibosClienteClient_Intf.pas
@@ -9,15 +9,23 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_RecibosCliente = '{83925C8D-8CDD-471F-95E7-3D94225FA3B9}';
- RID_PagosCliente = '{6D505274-2913-4C4E-9C64-3CF6F7035F70}';
- RID_RecibosCompensadosCli = '{AB4C31E9-E8B8-4AE3-A95A-B5A0D5F5E7F3}';
+ RID_ListaAnosRecibos = '{A4BD1210-5CBF-4C09-A950-5AF7715B5F66}';
+ RID_RecibosCliente = '{3AECC812-56FF-44BB-82FB-4C9B64C9A01D}';
+ RID_PagosCliente = '{6C5A18AF-C970-40C4-B34F-84AE2A6D3AE9}';
+ RID_RecibosCompensadosCli = '{8C5D4976-0E53-4B19-A977-9BC2C95291EE}';
{ Data table names }
+ nme_ListaAnosRecibos = 'ListaAnosRecibos';
nme_RecibosCliente = 'RecibosCliente';
nme_PagosCliente = 'PagosCliente';
nme_RecibosCompensadosCli = 'RecibosCompensadosCli';
+ { ListaAnosRecibos fields }
+ fld_ListaAnosRecibosANO = 'ANO';
+
+ { ListaAnosRecibos field indexes }
+ idx_ListaAnosRecibosANO = 0;
+
{ RecibosCliente fields }
fld_RecibosClienteID = 'ID';
fld_RecibosClienteID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO';
@@ -211,9 +219,44 @@ const
idx_RecibosCompensadosCliTIENDA = 35;
type
+ { IListaAnosRecibos }
+ IListaAnosRecibos = interface(IDAStronglyTypedDataTable)
+ ['{CE2FC543-F272-4EA2-9037-E30A840F8203}']
+ { Property getters and setters }
+ function GetANOValue: String;
+ procedure SetANOValue(const aValue: String);
+ function GetANOIsNull: Boolean;
+ procedure SetANOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+ end;
+
+ { TListaAnosRecibosDataTableRules }
+ TListaAnosRecibosDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosRecibos)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ function GetANOIsNull: Boolean; virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
{ IRecibosCliente }
IRecibosCliente = interface(IDAStronglyTypedDataTable)
- ['{E9F7D1F3-CB56-4C0E-B493-853CFEE73672}']
+ ['{A2D953EF-CA61-4ADD-821E-78B3B8732A3B}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -668,7 +711,7 @@ type
{ IPagosCliente }
IPagosCliente = interface(IDAStronglyTypedDataTable)
- ['{E5953A2B-D345-4F0E-8018-16A50961F9E4}']
+ ['{50F7365A-2441-42A9-9738-EC5594AFE4F9}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -907,7 +950,7 @@ type
{ IRecibosCompensadosCli }
IRecibosCompensadosCli = interface(IDAStronglyTypedDataTable)
- ['{F5CFE9D4-9477-43FF-AFBE-F6CFAC4D4313}']
+ ['{C7CF1A51-A951-435B-B7BB-78AD988872D7}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -1364,6 +1407,39 @@ implementation
uses Variants, uROBinaryHelpers;
+{ TListaAnosRecibosDataTableRules }
+constructor TListaAnosRecibosDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TListaAnosRecibosDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosRecibosDataTableRules.GetANOValue: String;
+begin
+ result := DataTable.Fields[idx_ListaAnosRecibosANO].AsString;
+end;
+
+procedure TListaAnosRecibosDataTableRules.SetANOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_ListaAnosRecibosANO].AsString := aValue;
+end;
+
+function TListaAnosRecibosDataTableRules.GetANOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_ListaAnosRecibosANO].IsNull;
+end;
+
+procedure TListaAnosRecibosDataTableRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_ListaAnosRecibosANO].AsVariant := Null;
+end;
+
+
{ TRecibosClienteDataTableRules }
constructor TRecibosClienteDataTableRules.Create(aDataTable: TDADataTable);
begin
@@ -3291,6 +3367,7 @@ end;
initialization
+ RegisterDataTableRules(RID_ListaAnosRecibos, TListaAnosRecibosDataTableRules);
RegisterDataTableRules(RID_RecibosCliente, TRecibosClienteDataTableRules);
RegisterDataTableRules(RID_PagosCliente, TPagosClienteDataTableRules);
RegisterDataTableRules(RID_RecibosCompensadosCli, TRecibosCompensadosCliDataTableRules);
diff --git a/Source/Modulos/Recibos de cliente/Model/schRecibosClienteServer_Intf.pas b/Source/Modulos/Recibos de cliente/Model/schRecibosClienteServer_Intf.pas
index 2fc8da70..dbe4a278 100644
--- a/Source/Modulos/Recibos de cliente/Model/schRecibosClienteServer_Intf.pas
+++ b/Source/Modulos/Recibos de cliente/Model/schRecibosClienteServer_Intf.pas
@@ -9,14 +9,49 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_RecibosClienteDelta = '{EA14D503-60F2-40E0-AC46-B289B3FE87FD}';
- RID_PagosClienteDelta = '{FD903D99-7EAA-4C30-A79C-82C97E9B5098}';
- RID_RecibosCompensadosCliDelta = '{A992F752-5824-4FA9-A17A-56EE6C368C9E}';
+ RID_ListaAnosRecibosDelta = '{8FC2C837-6926-4F14-B052-06BF6AB3BF38}';
+ RID_RecibosClienteDelta = '{1C641E43-0B1A-4136-AAA2-0F6B13C52F34}';
+ RID_PagosClienteDelta = '{3F9F91B7-5517-4927-919B-EE09DD7EDB9A}';
+ RID_RecibosCompensadosCliDelta = '{60B42F56-C470-481C-8665-D924F758ABE4}';
type
+ { IListaAnosRecibosDelta }
+ IListaAnosRecibosDelta = interface(IListaAnosRecibos)
+ ['{8FC2C837-6926-4F14-B052-06BF6AB3BF38}']
+ { Property getters and setters }
+ function GetOldANOValue : String;
+
+ { Properties }
+ property OldANO : String read GetOldANOValue;
+ end;
+
+ { TListaAnosRecibosBusinessProcessorRules }
+ TListaAnosRecibosBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosRecibos, IListaAnosRecibosDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ function GetANOIsNull: Boolean; virtual;
+ function GetOldANOValue: String; virtual;
+ function GetOldANOIsNull: Boolean; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO : String read GetANOValue write SetANOValue;
+ property ANOIsNull : Boolean read GetANOIsNull write SetANOIsNull;
+ property OldANO : String read GetOldANOValue;
+ property OldANOIsNull : Boolean read GetOldANOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
{ IRecibosClienteDelta }
IRecibosClienteDelta = interface(IRecibosCliente)
- ['{EA14D503-60F2-40E0-AC46-B289B3FE87FD}']
+ ['{1C641E43-0B1A-4136-AAA2-0F6B13C52F34}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer;
@@ -470,7 +505,7 @@ type
{ IPagosClienteDelta }
IPagosClienteDelta = interface(IPagosCliente)
- ['{FD903D99-7EAA-4C30-A79C-82C97E9B5098}']
+ ['{3F9F91B7-5517-4927-919B-EE09DD7EDB9A}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBOValue : Integer;
@@ -708,7 +743,7 @@ type
{ IRecibosCompensadosCliDelta }
IRecibosCompensadosCliDelta = interface(IRecibosCompensadosCli)
- ['{A992F752-5824-4FA9-A17A-56EE6C368C9E}']
+ ['{60B42F56-C470-481C-8665-D924F758ABE4}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer;
@@ -1165,6 +1200,49 @@ implementation
uses
Variants, uROBinaryHelpers, uDAInterfaces;
+{ TListaAnosRecibosBusinessProcessorRules }
+constructor TListaAnosRecibosBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TListaAnosRecibosBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO];
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO]);
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetOldANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRecibosANO];
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetOldANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRecibosANO]);
+end;
+
+procedure TListaAnosRecibosBusinessProcessorRules.SetANOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO] := aValue;
+end;
+
+procedure TListaAnosRecibosBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO] := Null;
+end;
+
+
{ TRecibosClienteBusinessProcessorRules }
constructor TRecibosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
@@ -3992,6 +4070,7 @@ end;
initialization
+ RegisterBusinessProcessorRules(RID_ListaAnosRecibosDelta, TListaAnosRecibosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosClienteDelta, TRecibosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PagosClienteDelta, TPagosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosCompensadosCliDelta, TRecibosCompensadosCliBusinessProcessorRules);
diff --git a/Source/Modulos/Recibos de cliente/RecibosCliente_Group.groupproj b/Source/Modulos/Recibos de cliente/RecibosCliente_Group.groupproj
index b7efb77f..d14fdefd 100644
--- a/Source/Modulos/Recibos de cliente/RecibosCliente_Group.groupproj
+++ b/Source/Modulos/Recibos de cliente/RecibosCliente_Group.groupproj
@@ -11,6 +11,7 @@
+
@@ -141,14 +142,23 @@
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Source/Modulos/Recibos de cliente/Servidor/srvRecibosCliente_Impl.dfm b/Source/Modulos/Recibos de cliente/Servidor/srvRecibosCliente_Impl.dfm
index 0a1eefe1..e3b7a6dd 100644
--- a/Source/Modulos/Recibos de cliente/Servidor/srvRecibosCliente_Impl.dfm
+++ b/Source/Modulos/Recibos de cliente/Servidor/srvRecibosCliente_Impl.dfm
@@ -14,6 +14,33 @@ object srvRecibosCliente: TsrvRecibosCliente
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ Name = 'IBX'
+ SQL =
+ 'select ANO from'#10'(select distinct(substr(FECHA_EMISION, 1,4)) as ' +
+ 'ANO'#10'from recibos_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select dis' +
+ 'tinct '#39'Todos'#39' as ANO'#10'from empresas'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ANO'
+ TableField = 'ANO'
+ end>
+ end>
+ Name = 'ListaAnosRecibos'
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ end
item
Params = <>
Statements = <
diff --git a/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.dfm b/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.dfm
index e5d6e8d3..0f50b225 100644
--- a/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.dfm
+++ b/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.dfm
@@ -43,11 +43,25 @@ inherited fEditorRecibosCliente: TfEditorRecibosCliente
inherited tbxMain: TTBXToolbar
ExplicitWidth = 645
end
+ inherited tbxFiltro: TTBXToolbar
+ ExplicitWidth = 431
+ inherited lblAno: TTBXLabelItem
+ Visible = True
+ end
+ inherited cbxListaAnos: TTBXComboBoxItem
+ Visible = True
+ end
+ inherited sepAno: TTBXSeparatorItem
+ Visible = True
+ end
+ end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 645
end
inherited TBXTMain2: TTBXToolbar
+ Left = 431
Visible = True
+ ExplicitLeft = 431
ExplicitWidth = 66
object TBXItem38: TTBXItem
Action = actInformes
diff --git a/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.pas b/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.pas
index 9672fd1d..78e37f15 100644
--- a/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.pas
+++ b/Source/Modulos/Recibos de cliente/Views/uEditorRecibosCliente.pas
@@ -50,6 +50,8 @@ type
procedure FormShow(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
+ procedure OnListaAnosChange(Sender: TObject; const Text: string);
+
private
FRecibosCliente: IBizRecibosCliente;
FController : IRecibosClienteController;
@@ -65,6 +67,8 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
+ procedure RefrescarInterno; override;
+
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosCliente: IBizRecibosCliente read GetRecibosCliente write SetRecibosCliente;
@@ -191,6 +195,8 @@ end;
procedure TfEditorRecibosCliente.FormShow(Sender: TObject);
begin
+ cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
+
inherited;
if not Assigned(ViewGrid) then
@@ -272,6 +278,13 @@ begin
FController.Ver(FRecibosCliente);
end;
+procedure TfEditorRecibosCliente.OnListaAnosChange(Sender: TObject; const Text: string);
+begin
+ Controller.FiltrarAno(RecibosCliente, DynWhereDataTable, Text);
+ if RecibosCliente.DataTable.Active then
+ RefrescarInterno;
+end;
+
procedure TfEditorRecibosCliente.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@@ -321,17 +334,37 @@ begin
end;
end;
+procedure TfEditorRecibosCliente.RefrescarInterno;
+begin
+ //Volvemos a cargar los años de los recibos
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosRecibos;
+
+ inherited;
+end;
+
procedure TfEditorRecibosCliente.SetController(const Value: IRecibosClienteController);
begin
FController := Value;
+
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosRecibos;
end;
procedure TfEditorRecibosCliente.SetRecibosCliente(const Value: IBizRecibosCliente);
begin
FRecibosCliente := Value;
- dsDataTable.DataTable := FRecibosCliente.DataTable;
- if Assigned(ViewGrid) then
- (ViewGrid as IViewRecibosCliente).Recibos := FRecibosCliente;
+
+ if Assigned(FRecibosCliente) then
+ begin
+ //Se guarda el where de la sentencia origen, por si el editor tiene filtros que
+ //afecten a este where y en un futuro se desea volver al where origen (filtro de año))
+ DynWhereDataTable := FRecibosCliente.DataTable.DynamicWhere.Xml;
+
+ dsDataTable.DataTable := FRecibosCliente.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewRecibosCliente).Recibos := FRecibosCliente;
+ end;
end;
end.
diff --git a/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas b/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas
index 8ae3ef85..10b8a72d 100644
--- a/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas
+++ b/Source/Modulos/Recibos de proveedor/Controller/uRecibosProveedorController.pas
@@ -77,6 +77,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor);
+
+ function DarListaAnosRecibos: TStringList;
+ procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
TRecibosProveedorController = class(TControllerBase, IRecibosProveedorController)
@@ -147,6 +150,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor);
+
+ function DarListaAnosRecibos: TStringList;
+ procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@@ -432,6 +438,11 @@ begin
Result := Buscar(ID_NULO);
end;
+function TRecibosProveedorController.DarListaAnosRecibos: TStringList;
+begin
+ Result := FDataModule.GetAnosItems;
+end;
+
function TRecibosProveedorController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var
ARecibosProveedor: IBizRecibosProveedor;
@@ -834,6 +845,35 @@ begin
Result := ASeleccionados;
end;
+procedure TRecibosProveedorController.FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
+var
+ Condicion: TDAWhereExpression;
+ FechaIni: String;
+ FechaFin: String;
+
+begin
+ ARecibo.DataTable.DynamicWhere.Clear;
+ ARecibo.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
+
+ if (Ano <> 'Todos') then
+ begin
+ // Filtrar las facturas actuales por empresa
+ FechaIni := '01/01/' + Ano;
+ FechaFin := '31/12/' + Ano;
+ with ARecibo.DataTable.DynamicWhere do
+ begin
+ // (FECHA_INICIO between FECHA_FIN)
+ Condicion := NewBinaryExpression(NewField('', fld_RecibosProveedorFECHA_EMISION), NewConstant(FechaIni, datString), dboGreaterOrEqual);
+ Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RecibosProveedorFECHA_EMISION), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
+
+ if IsEmpty then
+ Expression := Condicion
+ else
+ Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
+ end;
+ end;
+end;
+
procedure TRecibosProveedorController.FiltrarEmpresa(ARecibo: IBizRecibosProveedor);
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.dfm b/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.dfm
index 9a52646b..78824e18 100644
--- a/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.dfm
+++ b/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.dfm
@@ -1,6 +1,6 @@
inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
OnCreate = DAClientDataModuleCreate
- Height = 255
+ Height = 362
Width = 518
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@@ -595,4 +595,28 @@ inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
Left = 176
Top = 40
end
+ object tbl_ListaAnosRecibos: TDAMemDataTable
+ RemoteUpdatesOptions = []
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ Params = <>
+ StreamingOptions = [soDisableEventsWhileStreaming]
+ RemoteDataAdapter = rda_RecibosProveedor
+ DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
+ MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
+ LogicalName = 'ListaAnosRecibos'
+ IndexDefs = <>
+ Left = 176
+ Top = 200
+ end
+ object ds_ListaAnosRecibos: TDADataSource
+ DataSet = tbl_ListaAnosRecibos.Dataset
+ DataTable = tbl_ListaAnosRecibos
+ Left = 176
+ Top = 152
+ end
end
diff --git a/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.pas b/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.pas
index 032b6a48..8136a141 100644
--- a/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.pas
+++ b/Source/Modulos/Recibos de proveedor/Data/uDataModuleRecibosProveedor.pas
@@ -46,11 +46,14 @@ type
ds_RecibosCompensadosProv: TDADataSource;
tbl_RecibosProveedor: TDAMemDataTable;
ds_RecibosProveedor: TDADataSource;
+ tbl_ListaAnosRecibos: TDAMemDataTable;
+ ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
protected
function _GetPagos: IBizPagosProveedor;
function _GetRecibosCompensados : IBizRecibosCompensadosProv;
public
+ function GetAnosItems : TStringList;
function GetItems: IBizRecibosProveedor;
function GetItem(const ID : Integer) : IBizRecibosProveedor;
function NewItem : IBizRecibosProveedor;
@@ -142,6 +145,30 @@ begin
Result := GetItem(ID_NULO)
end;
+function TDataModuleRecibosProveedor.GetAnosItems: TStringList;
+var
+ AListaAnos: TStringList;
+begin
+ AListaAnos := TStringList.Create;
+ ShowHourglassCursor;
+ try
+ with tbl_ListaAnosRecibos do
+ begin
+ Open;
+ First;
+ while not eof do
+ begin
+ AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
+ Next;
+ end;
+ Close;
+ end;
+ Result := AListaAnos;
+ finally
+ HideHourglassCursor;
+ end;
+end;
+
function TDataModuleRecibosProveedor.GetItem(const ID: Integer): IBizRecibosProveedor;
var
Condicion: TDAWhereExpression;
diff --git a/Source/Modulos/Recibos de proveedor/Model/Data/uIDataModuleRecibosProveedor.pas b/Source/Modulos/Recibos de proveedor/Model/Data/uIDataModuleRecibosProveedor.pas
index 70e12725..b17df187 100644
--- a/Source/Modulos/Recibos de proveedor/Model/Data/uIDataModuleRecibosProveedor.pas
+++ b/Source/Modulos/Recibos de proveedor/Model/Data/uIDataModuleRecibosProveedor.pas
@@ -26,11 +26,12 @@ unit uIDataModuleRecibosProveedor;
interface
uses
- uBizRecibosProveedor;
+ Classes, uBizRecibosProveedor;
type
IDataModuleRecibosProveedor = interface
['{0EEAF672-1509-4695-90B0-0D6EBB81B6C5}']
+ function GetAnosItems : TStringList;
function GetItems: IBizRecibosProveedor;
function GetItem(const ID : Integer) : IBizRecibosProveedor;
function NewItem : IBizRecibosProveedor;
diff --git a/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorClient_Intf.pas b/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorClient_Intf.pas
index f9af5aaa..cb4a2a04 100644
--- a/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorClient_Intf.pas
+++ b/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorClient_Intf.pas
@@ -9,15 +9,23 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_RecibosCompensadosProv = '{54C2D2B1-B02A-467B-9C52-DA7767EF44A3}';
- RID_RecibosProveedor = '{5BC08F92-FE46-4CDD-8EDF-4A329D706989}';
- RID_PagosProveedor = '{528C3735-0265-42C5-BCC4-67E35704B985}';
+ RID_ListaAnosRecibos = '{9B2BA80B-D6E7-4970-B1CC-20990D8D11E7}';
+ RID_RecibosCompensadosProv = '{E0ECB451-A8BC-4B37-82A9-7F86E2FFE256}';
+ RID_RecibosProveedor = '{77ED4397-26CE-4EA3-ACF1-8CFDCE5DDF9C}';
+ RID_PagosProveedor = '{249FF85D-110C-447F-8164-61DF9530E7F9}';
{ Data table names }
+ nme_ListaAnosRecibos = 'ListaAnosRecibos';
nme_RecibosCompensadosProv = 'RecibosCompensadosProv';
nme_RecibosProveedor = 'RecibosProveedor';
nme_PagosProveedor = 'PagosProveedor';
+ { ListaAnosRecibos fields }
+ fld_ListaAnosRecibosANO = 'ANO';
+
+ { ListaAnosRecibos field indexes }
+ idx_ListaAnosRecibosANO = 0;
+
{ RecibosCompensadosProv fields }
fld_RecibosCompensadosProvID = 'ID';
fld_RecibosCompensadosProvID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO';
@@ -219,9 +227,44 @@ const
idx_PagosProveedorASIENTO_PUNTEADO = 17;
type
+ { IListaAnosRecibos }
+ IListaAnosRecibos = interface(IDAStronglyTypedDataTable)
+ ['{4CC0A39B-177C-4530-BDA1-74655040BD1D}']
+ { Property getters and setters }
+ function GetANOValue: String;
+ procedure SetANOValue(const aValue: String);
+ function GetANOIsNull: Boolean;
+ procedure SetANOIsNull(const aValue: Boolean);
+
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+ end;
+
+ { TListaAnosRecibosDataTableRules }
+ TListaAnosRecibosDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosRecibos)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ function GetANOIsNull: Boolean; virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO: String read GetANOValue write SetANOValue;
+ property ANOIsNull: Boolean read GetANOIsNull write SetANOIsNull;
+
+ public
+ constructor Create(aDataTable: TDADataTable); override;
+ destructor Destroy; override;
+
+ end;
+
{ IRecibosCompensadosProv }
IRecibosCompensadosProv = interface(IDAStronglyTypedDataTable)
- ['{6945980A-8AEF-4038-ABD2-0AA3573BE03D}']
+ ['{4CEC51B6-36BE-40B5-9CC9-7942E4916321}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -700,7 +743,7 @@ type
{ IRecibosProveedor }
IRecibosProveedor = interface(IDAStronglyTypedDataTable)
- ['{232A2617-948E-4E49-9AC6-41265EB87C46}']
+ ['{2909B622-C1B0-4738-B8EE-87F279FE7CA3}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -1179,7 +1222,7 @@ type
{ IPagosProveedor }
IPagosProveedor = interface(IDAStronglyTypedDataTable)
- ['{03E8C0E1-2295-4FF5-8FE5-DA68A3326500}']
+ ['{D614A1E7-19B0-47A4-A975-E61D0DA5EE19}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@@ -1420,6 +1463,39 @@ implementation
uses Variants, uROBinaryHelpers;
+{ TListaAnosRecibosDataTableRules }
+constructor TListaAnosRecibosDataTableRules.Create(aDataTable: TDADataTable);
+begin
+ inherited;
+end;
+
+destructor TListaAnosRecibosDataTableRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosRecibosDataTableRules.GetANOValue: String;
+begin
+ result := DataTable.Fields[idx_ListaAnosRecibosANO].AsString;
+end;
+
+procedure TListaAnosRecibosDataTableRules.SetANOValue(const aValue: String);
+begin
+ DataTable.Fields[idx_ListaAnosRecibosANO].AsString := aValue;
+end;
+
+function TListaAnosRecibosDataTableRules.GetANOIsNull: boolean;
+begin
+ result := DataTable.Fields[idx_ListaAnosRecibosANO].IsNull;
+end;
+
+procedure TListaAnosRecibosDataTableRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ DataTable.Fields[idx_ListaAnosRecibosANO].AsVariant := Null;
+end;
+
+
{ TRecibosCompensadosProvDataTableRules }
constructor TRecibosCompensadosProvDataTableRules.Create(aDataTable: TDADataTable);
begin
@@ -3431,6 +3507,7 @@ end;
initialization
+ RegisterDataTableRules(RID_ListaAnosRecibos, TListaAnosRecibosDataTableRules);
RegisterDataTableRules(RID_RecibosCompensadosProv, TRecibosCompensadosProvDataTableRules);
RegisterDataTableRules(RID_RecibosProveedor, TRecibosProveedorDataTableRules);
RegisterDataTableRules(RID_PagosProveedor, TPagosProveedorDataTableRules);
diff --git a/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorServer_Intf.pas b/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorServer_Intf.pas
index 6421c28e..869c0d74 100644
--- a/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorServer_Intf.pas
+++ b/Source/Modulos/Recibos de proveedor/Model/schRecibosProveedorServer_Intf.pas
@@ -9,14 +9,49 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
- RID_RecibosCompensadosProvDelta = '{16554E00-D877-4BAF-9C55-8E20790DCD56}';
- RID_RecibosProveedorDelta = '{ABE8514C-4344-43BF-B41B-C5E3095D1557}';
- RID_PagosProveedorDelta = '{4E478891-83D7-4418-A3E7-E36D0F802EE0}';
+ RID_ListaAnosRecibosDelta = '{6C4A7ACE-8C97-469A-A496-493F1A280405}';
+ RID_RecibosCompensadosProvDelta = '{07E70EBB-5912-4A27-BB68-34D15E499C1E}';
+ RID_RecibosProveedorDelta = '{79959841-F924-4E80-B1C0-26D60A1CA5E4}';
+ RID_PagosProveedorDelta = '{C9839E83-8D1F-4F5D-8A06-704C5BE7E7D8}';
type
+ { IListaAnosRecibosDelta }
+ IListaAnosRecibosDelta = interface(IListaAnosRecibos)
+ ['{6C4A7ACE-8C97-469A-A496-493F1A280405}']
+ { Property getters and setters }
+ function GetOldANOValue : String;
+
+ { Properties }
+ property OldANO : String read GetOldANOValue;
+ end;
+
+ { TListaAnosRecibosBusinessProcessorRules }
+ TListaAnosRecibosBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosRecibos, IListaAnosRecibosDelta)
+ private
+ protected
+ { Property getters and setters }
+ function GetANOValue: String; virtual;
+ function GetANOIsNull: Boolean; virtual;
+ function GetOldANOValue: String; virtual;
+ function GetOldANOIsNull: Boolean; virtual;
+ procedure SetANOValue(const aValue: String); virtual;
+ procedure SetANOIsNull(const aValue: Boolean); virtual;
+
+ { Properties }
+ property ANO : String read GetANOValue write SetANOValue;
+ property ANOIsNull : Boolean read GetANOIsNull write SetANOIsNull;
+ property OldANO : String read GetOldANOValue;
+ property OldANOIsNull : Boolean read GetOldANOIsNull;
+
+ public
+ constructor Create(aBusinessProcessor: TDABusinessProcessor); override;
+ destructor Destroy; override;
+
+ end;
+
{ IRecibosCompensadosProvDelta }
IRecibosCompensadosProvDelta = interface(IRecibosCompensadosProv)
- ['{16554E00-D877-4BAF-9C55-8E20790DCD56}']
+ ['{07E70EBB-5912-4A27-BB68-34D15E499C1E}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer;
@@ -494,7 +529,7 @@ type
{ IRecibosProveedorDelta }
IRecibosProveedorDelta = interface(IRecibosProveedor)
- ['{ABE8514C-4344-43BF-B41B-C5E3095D1557}']
+ ['{79959841-F924-4E80-B1C0-26D60A1CA5E4}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer;
@@ -972,7 +1007,7 @@ type
{ IPagosProveedorDelta }
IPagosProveedorDelta = interface(IPagosProveedor)
- ['{4E478891-83D7-4418-A3E7-E36D0F802EE0}']
+ ['{C9839E83-8D1F-4F5D-8A06-704C5BE7E7D8}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_RECIBOValue : Integer;
@@ -1213,6 +1248,49 @@ implementation
uses
Variants, uROBinaryHelpers, uDAInterfaces;
+{ TListaAnosRecibosBusinessProcessorRules }
+constructor TListaAnosRecibosBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
+begin
+ inherited;
+end;
+
+destructor TListaAnosRecibosBusinessProcessorRules.Destroy;
+begin
+ inherited;
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO];
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO]);
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetOldANOValue: String;
+begin
+ result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRecibosANO];
+end;
+
+function TListaAnosRecibosBusinessProcessorRules.GetOldANOIsNull: Boolean;
+begin
+ result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRecibosANO]);
+end;
+
+procedure TListaAnosRecibosBusinessProcessorRules.SetANOValue(const aValue: String);
+begin
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO] := aValue;
+end;
+
+procedure TListaAnosRecibosBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
+begin
+ if aValue then
+ BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRecibosANO] := Null;
+end;
+
+
{ TRecibosCompensadosProvBusinessProcessorRules }
constructor TRecibosCompensadosProvBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
@@ -4164,6 +4242,7 @@ end;
initialization
+ RegisterBusinessProcessorRules(RID_ListaAnosRecibosDelta, TListaAnosRecibosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosCompensadosProvDelta, TRecibosCompensadosProvBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosProveedorDelta, TRecibosProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PagosProveedorDelta, TPagosProveedorBusinessProcessorRules);
diff --git a/Source/Modulos/Recibos de proveedor/RecibosProveedor_Group.groupproj b/Source/Modulos/Recibos de proveedor/RecibosProveedor_Group.groupproj
index 9c5c5fc0..6999db3c 100644
--- a/Source/Modulos/Recibos de proveedor/RecibosProveedor_Group.groupproj
+++ b/Source/Modulos/Recibos de proveedor/RecibosProveedor_Group.groupproj
@@ -10,6 +10,7 @@
+
@@ -121,14 +122,23 @@
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/Source/Modulos/Recibos de proveedor/Servidor/srvRecibosProveedor_Impl.dfm b/Source/Modulos/Recibos de proveedor/Servidor/srvRecibosProveedor_Impl.dfm
index a8c4e9bf..d3e61ac6 100644
--- a/Source/Modulos/Recibos de proveedor/Servidor/srvRecibosProveedor_Impl.dfm
+++ b/Source/Modulos/Recibos de proveedor/Servidor/srvRecibosProveedor_Impl.dfm
@@ -13,6 +13,33 @@ object srvRecibosProveedor: TsrvRecibosProveedor
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
+ item
+ Params = <>
+ Statements = <
+ item
+ Connection = 'IBX'
+ ConnectionType = 'Interbase'
+ Default = True
+ Name = 'IBX'
+ SQL =
+ 'select ANO from'#10'(select distinct(substr(FECHA_EMISION, 1,4)) as ' +
+ 'ANO'#10'from recibos_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select d' +
+ 'istinct '#39'Todos'#39' as ANO'#10'from empresas'#10
+ StatementType = stSQL
+ ColumnMappings = <
+ item
+ DatasetField = 'ANO'
+ TableField = 'ANO'
+ end>
+ end>
+ Name = 'ListaAnosRecibos'
+ Fields = <
+ item
+ Name = 'ANO'
+ DataType = datString
+ Size = 255
+ end>
+ end
item
Params = <>
Statements = <
diff --git a/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.dfm b/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.dfm
index 1070aa94..6370f58c 100644
--- a/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.dfm
+++ b/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.dfm
@@ -43,11 +43,25 @@ inherited fEditorRecibosProveedor: TfEditorRecibosProveedor
inherited tbxMain: TTBXToolbar
ExplicitWidth = 546
end
+ inherited tbxFiltro: TTBXToolbar
+ ExplicitWidth = 431
+ inherited lblAno: TTBXLabelItem
+ Visible = True
+ end
+ inherited cbxListaAnos: TTBXComboBoxItem
+ Visible = True
+ end
+ inherited sepAno: TTBXSeparatorItem
+ Visible = True
+ end
+ end
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 638
end
inherited TBXTMain2: TTBXToolbar
+ Left = 431
Visible = True
+ ExplicitLeft = 431
ExplicitWidth = 66
object TBXItem38: TTBXItem
Action = actInformes
diff --git a/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.pas b/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.pas
index e4969170..9567c925 100644
--- a/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.pas
+++ b/Source/Modulos/Recibos de proveedor/Views/uEditorRecibosProveedor.pas
@@ -48,6 +48,8 @@ type
procedure FormShow(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
+ procedure OnListaAnosChange(Sender: TObject; const Text: string);
+
private
FRecibosProveedor: IBizRecibosProveedor;
FController : IRecibosProveedorController;
@@ -63,6 +65,8 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
+ procedure RefrescarInterno; override;
+
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor;
@@ -189,6 +193,8 @@ end;
procedure TfEditorRecibosProveedor.FormShow(Sender: TObject);
begin
+ cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
+
inherited;
if not Assigned(ViewGrid) then
@@ -233,6 +239,13 @@ begin
FController.Ver(FRecibosProveedor);
end;
+procedure TfEditorRecibosProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
+begin
+ Controller.FiltrarAno(RecibosProveedor, DynWhereDataTable, Text);
+ if RecibosProveedor.DataTable.Active then
+ RefrescarInterno;
+end;
+
procedure TfEditorRecibosProveedor.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@@ -246,17 +259,37 @@ begin
inherited;
end;
+procedure TfEditorRecibosProveedor.RefrescarInterno;
+begin
+ //Volvemos a cargar los años de los recibos
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosRecibos;
+
+ inherited;
+end;
+
procedure TfEditorRecibosProveedor.SetController(const Value: IRecibosProveedorController);
begin
FController := Value;
+
+ if Assigned(FController) then
+ ListaAnos := FController.DarListaAnosRecibos;
end;
procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor);
begin
FRecibosProveedor := Value;
- dsDataTable.DataTable := FRecibosProveedor.DataTable;
- if Assigned(ViewGrid) then
- (ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor;
+
+ if Assigned(FRecibosProveedor) then
+ begin
+ //Se guarda el where de la sentencia origen, por si el editor tiene filtros que
+ //afecten a este where y en un futuro se desea volver al where origen (filtro de año))
+ DynWhereDataTable := FRecibosProveedor.DataTable.DynamicWhere.Xml;
+
+ dsDataTable.DataTable := FRecibosProveedor.DataTable;
+ if Assigned(ViewGrid) then
+ (ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor;
+ end;
end;
end.
diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES
index 5fcd220f..4bb8a894 100644
Binary files a/Source/Servidor/FactuGES_Server.RES and b/Source/Servidor/FactuGES_Server.RES differ
diff --git a/Source/Servidor/FactuGES_Server.dpr b/Source/Servidor/FactuGES_Server.dpr
index 6fbc45e5..475ccbe3 100644
--- a/Source/Servidor/FactuGES_Server.dpr
+++ b/Source/Servidor/FactuGES_Server.dpr
@@ -120,14 +120,14 @@ uses
schEmpresasServer_Intf in '..\ApplicationBase\Empresas\Model\schEmpresasServer_Intf.pas',
schRemesasClienteClient_Intf in '..\Modulos\Remesas de cliente\Model\schRemesasClienteClient_Intf.pas',
schRemesasClienteServer_Intf in '..\Modulos\Remesas de cliente\Model\schRemesasClienteServer_Intf.pas',
- schAlbaranesClienteClient_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas',
- schAlbaranesClienteServer_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas',
schContabilidadClient_Intf in '..\Modulos\Contabilidad\Model\schContabilidadClient_Intf.pas',
schContabilidadServer_Intf in '..\Modulos\Contabilidad\Model\schContabilidadServer_Intf.pas',
- schFacturasProveedorClient_Intf in '..\Modulos\Facturas de proveedor\Model\schFacturasProveedorClient_Intf.pas',
- schFacturasProveedorServer_Intf in '..\Modulos\Facturas de proveedor\Model\schFacturasProveedorServer_Intf.pas',
schFacturasClienteClient_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteClient_Intf.pas',
schFacturasClienteServer_Intf in '..\Modulos\Facturas de cliente\Model\schFacturasClienteServer_Intf.pas',
+ schAlbaranesClienteClient_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteClient_Intf.pas',
+ schAlbaranesClienteServer_Intf in '..\Modulos\Albaranes de cliente\Model\schAlbaranesClienteServer_Intf.pas',
+ schFacturasProveedorClient_Intf in '..\Modulos\Facturas de proveedor\Model\schFacturasProveedorClient_Intf.pas',
+ schFacturasProveedorServer_Intf in '..\Modulos\Facturas de proveedor\Model\schFacturasProveedorServer_Intf.pas',
schRecibosClienteClient_Intf in '..\Modulos\Recibos de cliente\Model\schRecibosClienteClient_Intf.pas',
schRecibosClienteServer_Intf in '..\Modulos\Recibos de cliente\Model\schRecibosClienteServer_Intf.pas',
schRecibosProveedorClient_Intf in '..\Modulos\Recibos de proveedor\Model\schRecibosProveedorClient_Intf.pas',
diff --git a/Source/Servidor/FactuGES_Server.dproj b/Source/Servidor/FactuGES_Server.dproj
index 40125c38..2e949823 100644
--- a/Source/Servidor/FactuGES_Server.dproj
+++ b/Source/Servidor/FactuGES_Server.dproj
@@ -1,288 +1,284 @@
-
+
-
- {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1}
- FactuGES_Server.dpr
- Debug
- AnyCPU
- DCC32
- ..\..\Output\Debug\Servidor\FactuGES_Server.exe
-
-
- 7.0
- False
- False
- 0
- 3
- ..\..\Output\Release\Servidor
- RELEASE
-
-
- 7.0
- 3
- ..\..\Output\Debug\Servidor
- DEBUG;
- True
-
-
- Delphi.Personality
-
-
-FalseTrueFalseTrueFalse2300FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.3.0.0FactuGES (Servidor)2.3.0.0martes, 10 de marzo de 2009 19:06
-
-
-
-
- RemObjects Pascal Script - RemObjects SDK 3.0 Integration
- FactuGES_Server.dpr
-
-
-
-
- MainSource
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDARemoteService
-
-
-
- TRORemoteDataModule
-
-
-
-
-
-
-
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDARemoteService
-
-
-
-
-
-
-
-
-
- TDataModule
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
-
-
- TDataModule
-
-
-
- TDARemoteService
-
-
-
-
-
-
- TDataModule
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataModule
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
-
-
- TDataAbstractService
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
- TDataModule
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
- TDataModule
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
-
-
-
- TDataAbstractService
-
-
-
-
-
- TDataAbstractService
-
-
-
- TFrame
-
-
-
- TFrame
-
-
-
- TForm
-
-
-
- TFrame
-
-
-
- TDARemoteService
-
-
-
-
-
-
- TDataModule
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {ebdcd25d-40d7-4146-91ec-a0ea4aa1dcd1}
+ FactuGES_Server.dpr
+ Debug
+ AnyCPU
+ DCC32
+ ..\..\Output\Debug\Servidor\FactuGES_Server.exe
+
+
+ 7.0
+ False
+ False
+ 0
+ 3
+ ..\..\Output\Release\Servidor
+ RELEASE
+
+
+ 7.0
+ 3
+ ..\..\Output\Debug\Servidor
+ DEBUG;
+ True
+
+
+ Delphi.Personality
+
+
+ FalseTrueFalseTrueFalse2300FalseFalseFalseFalseFalse30821252Rodax Software S.L.2.3.0.0FactuGES (Servidor)2.3.0.0martes, 10 de marzo de 2009 19:06
+ RemObjects Pascal Script - RemObjects SDK 3.0 Integration
+ FactuGES_Server.dpr
+
+
+
+
+ MainSource
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDARemoteService
+
+
+
+ TRORemoteDataModule
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDARemoteService
+
+
+
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDARemoteService
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+ TDataModule
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+
+
+
+ TDataAbstractService
+
+
+
+
+
+ TDataAbstractService
+
+
+
+ TFrame
+
+
+
+ TFrame
+
+
+
+ TForm
+
+
+
+ TFrame
+
+
+
+ TDARemoteService
+
+
+
+
+
+
+ TDataModule
+
+
+
+
+
+
+
+
+
+
+
+
+