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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fDialogBase
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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fEditorInformeBase
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 - - - - - -
srvEjercicios
- TDataAbstractService -
- - - -
srvEmpresas
- TDARemoteService -
- -
srvProvinciasPoblaciones
- TRORemoteDataModule -
- - - - - - - - - - - -
srvAlbaranesCliente
- TDataAbstractService -
- - - - -
srvAlbaranesProveedor
- TDataAbstractService -
- - - -
srvAlmacenes
- TDARemoteService -
- - - - - - - -
RptComisiones
- TDataModule -
- -
srvComisiones
- TDataAbstractService -
- - - - -
srvContabilidad
- TDataAbstractService -
- - - - - - - -
RptEtiquetasContacto
- TDataModule -
- -
srvContactos
- TDARemoteService -
- - - - -
RptFacturasCliente
- TDataModule -
- -
srvFacturasCliente
- TDataAbstractService -
- - - - -
RptFacturasProveedor
- TDataModule -
- -
srvFacturasProveedor
- TDataAbstractService -
- - - - - - - -
srvGestorDocumentos
- TDataAbstractService -
- -
srvGestorInformes
- TDataAbstractService -
- - - -
srvHistoricoMovimientos
- TDataAbstractService -
- - - -
srvInventario
- TDataAbstractService -
- - - - -
srvPedidosProveedor
- TDataAbstractService -
- - - - -
RptPresupuestosCliente
-
- -
srvPresupuestosCliente
- TDataAbstractService -
- - - - - -
RptRecibosCliente
- TDataModule -
- -
srvRecibosCliente
- TDataAbstractService -
- - - - - -
RptRecibosProveedor
- TDataModule -
- -
srvRecibosProveedor
- TDataAbstractService -
- - - -
srvReferencias
- TDataAbstractService -
- - - - -
srvRemesasCliente
- TDataAbstractService -
- - - - -
srvRemesasProveedor
- TDataAbstractService -
- - - - - - -
srvUnidadesMedida
- TDataAbstractService -
- - - -
srvConfiguracion
- TDataAbstractService -
- -
frConexionBD
- TFrame -
- -
frConfGeneral
- TFrame -
- -
fConfiguracion
- TForm -
- -
FrameConfiguracion
- TFrame -
- -
srvLogin
- TDARemoteService -
- -
fAcercaDe
-
- -
dmServer
- TDataModule -
- -
fServerForm
-
- - - - - - - - -
+ + {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 + + + + + +
srvEjercicios
+ TDataAbstractService +
+ + + +
srvEmpresas
+ TDARemoteService +
+ +
srvProvinciasPoblaciones
+ TRORemoteDataModule +
+ + + + + + + + + + + +
srvAlbaranesCliente
+ TDataAbstractService +
+ + + + +
srvAlbaranesProveedor
+ TDataAbstractService +
+ + + +
srvAlmacenes
+ TDARemoteService +
+ + + + + + + +
RptComisiones
+ TDataModule +
+ +
srvComisiones
+ TDataAbstractService +
+ + + + +
srvContabilidad
+ TDataAbstractService +
+ + + + + + + +
RptEtiquetasContacto
+ TDataModule +
+ +
srvContactos
+ TDARemoteService +
+ + + + +
RptFacturasCliente
+ TDataModule +
+ +
srvFacturasCliente
+ TDataAbstractService +
+ + + + +
RptFacturasProveedor
+ TDataModule +
+ +
srvFacturasProveedor
+ TDataAbstractService +
+ + + + + + + +
srvGestorDocumentos
+ TDataAbstractService +
+ +
srvGestorInformes
+ TDataAbstractService +
+ + + +
srvHistoricoMovimientos
+ TDataAbstractService +
+ + + +
srvInventario
+ TDataAbstractService +
+ + + + +
srvPedidosProveedor
+ TDataAbstractService +
+ + + + +
RptPresupuestosCliente
+
+ +
srvPresupuestosCliente
+ TDataAbstractService +
+ + + + + +
RptRecibosCliente
+ TDataModule +
+ +
srvRecibosCliente
+ TDataAbstractService +
+ + + + + +
RptRecibosProveedor
+ TDataModule +
+ +
srvRecibosProveedor
+ TDataAbstractService +
+ + + +
srvReferencias
+ TDataAbstractService +
+ + + + +
srvRemesasCliente
+ TDataAbstractService +
+ + + + +
srvRemesasProveedor
+ TDataAbstractService +
+ + + + + + +
srvUnidadesMedida
+ TDataAbstractService +
+ + + +
srvConfiguracion
+ TDataAbstractService +
+ +
frConexionBD
+ TFrame +
+ +
frConfGeneral
+ TFrame +
+ +
fConfiguracion
+ TForm +
+ +
FrameConfiguracion
+ TFrame +
+ +
srvLogin
+ TDARemoteService +
+ +
fAcercaDe
+
+ +
dmServer
+ TDataModule +
+ +
fServerForm
+
+ + + + + + + + +