Adaptacion para poder visualizar por años la informacion de los grid

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@908 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
roberto 2009-02-27 10:44:29 +00:00
parent 13283a1b0d
commit 586a59e30a
95 changed files with 3547 additions and 216 deletions

View File

@ -59,30 +59,26 @@
<DelphiCompile Include="GUIBase.dpk"> <DelphiCompile Include="GUIBase.dpk">
<MainSource>MainSource</MainSource> <MainSource>MainSource</MainSource>
</DelphiCompile> </DelphiCompile>
<DCCReference Include="..\Modulos\Recibos de cliente\Base.dcp" /> <DCCReference Include="Base.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\cxLibraryD11.dcp" /> <DCCReference Include="cxLibraryD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\cxTreeListD11.dcp" /> <DCCReference Include="cxTreeListD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dbrtl.dcp" /> <DCCReference Include="dbrtl.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxBarD11.dcp" /> <DCCReference Include="dxBarD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxBarExtItemsD11.dcp" /> <DCCReference Include="dxBarExtItemsD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxComnD11.dcp" /> <DCCReference Include="dxComnD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxGDIPlusD11.dcp" /> <DCCReference Include="dxGDIPlusD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxLayoutControlD11.dcp" /> <DCCReference Include="dxLayoutControlD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxPSCoreD11.dcp" /> <DCCReference Include="dxPSCoreD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxPScxCommonD11.dcp" /> <DCCReference Include="dxPScxCommonD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxPScxGrid6LnkD11.dcp" /> <DCCReference Include="dxPScxGrid6LnkD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxPsPrVwAdvD11.dcp" /> <DCCReference Include="dxPsPrVwAdvD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\dxThemeD11.dcp" /> <DCCReference Include="dxThemeD11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\frx11.dcp" /> <DCCReference Include="frx11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\frxe11.dcp" /> <DCCReference Include="frxe11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\fs11.dcp" /> <DCCReference Include="fs11.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\JvAppFrmD11R.dcp" /> <DCCReference Include="JvAppFrmD11R.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\JvCtrlsD11R.dcp" /> <DCCReference Include="JvCtrlsD11R.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\rtl.dcp" /> <DCCReference Include="rtl.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\vcl.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\vcldb.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\vcljpg.dcp" />
<DCCReference Include="..\Modulos\Recibos de cliente\vclx.dcp" />
<DCCReference Include="uDialogBase.pas"> <DCCReference Include="uDialogBase.pas">
<Form>fDialogBase</Form> <Form>fDialogBase</Form>
</DCCReference> </DCCReference>
@ -180,6 +176,10 @@
<Form>frViewTotales</Form> <Form>frViewTotales</Form>
<DesignClass>TFrame</DesignClass> <DesignClass>TFrame</DesignClass>
</DCCReference> </DCCReference>
<DCCReference Include="vcl.dcp" />
<DCCReference Include="vcldb.dcp" />
<DCCReference Include="vcljpg.dcp" />
<DCCReference Include="vclx.dcp" />
</ItemGroup> </ItemGroup>
</Project> </Project>
<!-- EurekaLog First Line <!-- EurekaLog First Line

Binary file not shown.

View File

@ -3,28 +3,28 @@ inherited fEditorGridBase: TfEditorGridBase
Top = 354 Top = 354
Caption = 'fEditorGridBase' Caption = 'fEditorGridBase'
ClientHeight = 504 ClientHeight = 504
ClientWidth = 837 ClientWidth = 894
OnDestroy = CustomEditorDestroy OnDestroy = CustomEditorDestroy
ExplicitWidth = 845 ExplicitWidth = 902
ExplicitHeight = 538 ExplicitHeight = 538
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader inherited JvNavPanelHeader: TJvNavPanelHeader
Top = 0 Top = 0
Width = 837 Width = 894
ExplicitTop = 0 ExplicitTop = 0
ExplicitWidth = 837 ExplicitWidth = 894
inherited Image1: TImage inherited Image1: TImage
Left = 810 Left = 867
ExplicitLeft = 518 ExplicitLeft = 518
end end
end end
inherited TBXDock: TTBXDock inherited TBXDock: TTBXDock
Top = 27 Top = 27
Width = 837 Width = 894
Height = 75 Height = 75
ExplicitTop = 27 ExplicitTop = 27
ExplicitWidth = 837 ExplicitWidth = 894
ExplicitHeight = 75 ExplicitHeight = 75
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
DockPos = 0 DockPos = 0
@ -95,6 +95,16 @@ inherited fEditorGridBase: TfEditorGridBase
ShowHint = True ShowHint = True
ShrinkMode = tbsmNone ShrinkMode = tbsmNone
TabOrder = 0 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 object TBXLabelItem1: TTBXLabelItem
Caption = 'Filtrar:' Caption = 'Filtrar:'
end end
@ -117,7 +127,7 @@ inherited fEditorGridBase: TfEditorGridBase
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
TabOrder = 2 TabOrder = 2
Visible = False Visible = False
ExplicitWidth = 837 ExplicitWidth = 894
inherited TBXSubmenuItem4: TTBXSubmenuItem inherited TBXSubmenuItem4: TTBXSubmenuItem
inherited TBXItem30: TTBXItem inherited TBXItem30: TTBXItem
Visible = False Visible = False
@ -164,10 +174,11 @@ inherited fEditorGridBase: TfEditorGridBase
object TBXTMain2: TTBXToolbar object TBXTMain2: TTBXToolbar
Left = 337 Left = 337
Top = 49 Top = 49
Caption = 'tbxMain' Align = alRight
Caption = 'tbxLista'
ChevronHint = 'M'#225's botones|' ChevronHint = 'M'#225's botones|'
DockMode = dmCannotFloatOrChangeDocks DockMode = dmCannotFloatOrChangeDocks
DockPos = 334 DockPos = 318
DockRow = 2 DockRow = 2
DragHandleStyle = dhDouble DragHandleStyle = dhDouble
Images = SmallImages Images = SmallImages
@ -179,9 +190,9 @@ inherited fEditorGridBase: TfEditorGridBase
end end
inherited StatusBar: TJvStatusBar inherited StatusBar: TJvStatusBar
Top = 485 Top = 485
Width = 837 Width = 894
ExplicitTop = 485 ExplicitTop = 485
ExplicitWidth = 837 ExplicitWidth = 894
end end
inherited EditorActionList: TActionList inherited EditorActionList: TActionList
Left = 64 Left = 64

View File

@ -19,7 +19,9 @@ uses
uDAScriptingProvider, uDACDSDataTable, AppEvnts, JvAppStorage, uDAScriptingProvider, uDACDSDataTable, AppEvnts, JvAppStorage,
JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls,
JvComponentBase, dxLayoutLookAndFeels, TBXStatusBars, JvExComCtrls, JvComponentBase, dxLayoutLookAndFeels, TBXStatusBars, JvExComCtrls,
JvStatusBar, uDAInterfaces; JvStatusBar, uDAInterfaces, cxGraphics, StdCtrls, cxControls, cxContainer,
cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox;
type type
IEditorGridBase = interface(IEditorDBBase) IEditorGridBase = interface(IEditorDBBase)
@ -67,8 +69,11 @@ type
actContraer: TAction; actContraer: TAction;
TBXItem938: TTBXItem; TBXItem938: TTBXItem;
TBXItem939: TTBXItem; TBXItem939: TTBXItem;
cbxListaAnos: TTBXComboBoxItem;
sepAno: TTBXSeparatorItem;
lblAno: TTBXLabelItem;
procedure tbxEditFiltroChange(Sender: TObject; const Text: String); procedure tbxEditFiltroChange(Sender: TObject; const Text: String);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure actQuitarFiltroExecute(Sender: TObject); procedure actQuitarFiltroExecute(Sender: TObject);
procedure actDuplicarUpdate(Sender: TObject); procedure actDuplicarUpdate(Sender: TObject);
procedure actModificarUpdate(Sender: TObject); procedure actModificarUpdate(Sender: TObject);
@ -86,9 +91,19 @@ type
procedure actExpandirUpdate(Sender: TObject); procedure actExpandirUpdate(Sender: TObject);
procedure actContraerUpdate(Sender: TObject); procedure actContraerUpdate(Sender: TObject);
protected protected
FListaAnos: TStringList;
FViewGrid : IViewGridBase; 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; procedure SetViewGrid(const Value : IViewGridBase); virtual;
function GetViewGrid: IViewGridBase; function GetViewGrid: IViewGridBase;
procedure SetMultiSelect (AValue : Boolean); procedure SetMultiSelect (AValue : Boolean);
function GetMultiSelect : Boolean; function GetMultiSelect : Boolean;
@ -97,7 +112,9 @@ type
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure RefrescarInterno; override; procedure RefrescarInterno; override;
public public
property ListaAnos: TStringList read GetListaAnos write SetListaAnos;
property ViewGrid: IViewGridBase read GetViewGrid write SetViewGrid; property ViewGrid: IViewGridBase read GetViewGrid write SetViewGrid;
property DynWhereDataTable: WideString read GetDynWhereDataTable write SetDynWhereDataTable;
property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect; property MultiSelect : Boolean read GetMultiSelect write SetMultiSelect;
constructor Create(AOwner : TComponent); override; constructor Create(AOwner : TComponent); override;
@ -108,7 +125,7 @@ type
implementation implementation
uses uses
uDMBase, uCustomEditor, cxGridTableView, cxControls; uDMBase, uCustomEditor, cxGridTableView;
{$R *.dfm} {$R *.dfm}
@ -117,10 +134,24 @@ uses
} }
destructor TfEditorGridBase.Destroy; destructor TfEditorGridBase.Destroy;
begin begin
FDynWhereDataTable := '';
FViewGrid := NIL; FViewGrid := NIL;
if Assigned(FListaAnos) then
FlistaAnos.Free;
inherited; inherited;
end; end;
function TfEditorGridBase.GetDynWhereDataTable: WideString;
begin
Result := FDynWhereDataTable;
end;
function TfEditorGridBase.GetListaAnos: TStringList;
begin
Result := FListaAnos;
end;
function TfEditorGridBase.GetMultiSelect: Boolean; function TfEditorGridBase.GetMultiSelect: Boolean;
begin begin
Result := False; Result := False;
@ -139,6 +170,47 @@ begin
ViewGrid.Print; ViewGrid.Print;
end; 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); procedure TfEditorGridBase.SetMultiSelect(AValue: Boolean);
begin begin
if Assigned(ViewGrid) then if Assigned(ViewGrid) then
@ -185,6 +257,8 @@ begin
// actExpandir.Visible := ViewGrid.AgrupacionesVisibles; // actExpandir.Visible := ViewGrid.AgrupacionesVisibles;
// actContraer.Visible := ViewGrid.AgrupacionesVisibles; // actContraer.Visible := ViewGrid.AgrupacionesVisibles;
end; end;
cbxListaAnos.ItemIndex := 0;
end; end;
procedure TfEditorGridBase.actEliminarUpdate(Sender: TObject); procedure TfEditorGridBase.actEliminarUpdate(Sender: TObject);
@ -298,6 +372,7 @@ end;
constructor TfEditorGridBase.Create(AOwner: TComponent); constructor TfEditorGridBase.Create(AOwner: TComponent);
begin begin
inherited; inherited;
FDynWhereDataTable := '';
actModificar.ShortCut := ShortCut(VK_RETURN, []); actModificar.ShortCut := ShortCut(VK_RETURN, []);
end; end;
@ -362,6 +437,7 @@ begin
try try
// inherited; <- No hacemos lo que hay en el padre // inherited; <- No hacemos lo que hay en el padre
dsDataTable.DataTable.Refresh; dsDataTable.DataTable.Refresh;
finally finally
ViewGrid._FocusedView.EndUpdate; ViewGrid._FocusedView.EndUpdate;
ViewGrid._FocusedView.DataController.FocusedRowIndex := FocusedRow; ViewGrid._FocusedView.DataController.FocusedRowIndex := FocusedRow;

View File

@ -14,8 +14,15 @@
<Projects Include="..\Articulos\Views\Articulos_view.dproj" /> <Projects Include="..\Articulos\Views\Articulos_view.dproj" />
<Projects Include="..\Contactos\Controller\Contactos_controller.dproj" /> <Projects Include="..\Contactos\Controller\Contactos_controller.dproj" />
<Projects Include="..\Contactos\Views\Contactos_view.dproj" /> <Projects Include="..\Contactos\Views\Contactos_view.dproj" />
<Projects Include="..\Facturas de proveedor\Views\FacturasProveedor_view.dproj" />
<Projects Include="..\Pedidos a proveedor\Views\PedidosProveedor_view.dproj" />
<Projects Include="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" />
<Projects Include="..\Recibos de cliente\Views\RecibosCliente_view.dproj" />
<Projects Include="..\Recibos de proveedor\Views\RecibosProveedor_view.dproj" />
<Projects Include="..\Relaciones\Albaranes de cliente - Facturas de cliente\AlbCli_FacCli_relation.dproj" /> <Projects Include="..\Relaciones\Albaranes de cliente - Facturas de cliente\AlbCli_FacCli_relation.dproj" />
<Projects Include="..\Relaciones\Albaranes de proveedor - Facturas de proveedor\AlbProv_FacProv_relation.dproj" /> <Projects Include="..\Relaciones\Albaranes de proveedor - Facturas de proveedor\AlbProv_FacProv_relation.dproj" />
<Projects Include="..\Remesas de cliente\Views\RemesasCliente_view.dproj" />
<Projects Include="..\Remesas de proveedor\Views\RemesasProveedor_view.dproj" />
<Projects Include="Controller\AlbaranesCliente_controller.dproj" /> <Projects Include="Controller\AlbaranesCliente_controller.dproj" />
<Projects Include="Data\AlbaranesCliente_data.dproj" /> <Projects Include="Data\AlbaranesCliente_data.dproj" />
<Projects Include="Model\AlbaranesCliente_model.dproj" /> <Projects Include="Model\AlbaranesCliente_model.dproj" />
@ -181,14 +188,77 @@
<Target Name="Contactos_controller:Make"> <Target Name="Contactos_controller:Make">
<MSBuild Projects="..\Contactos\Controller\Contactos_controller.dproj" Targets="Make" /> <MSBuild Projects="..\Contactos\Controller\Contactos_controller.dproj" Targets="Make" />
</Target> </Target>
<Target Name="FacturasProveedor_view">
<MSBuild Projects="..\Facturas de proveedor\Views\FacturasProveedor_view.dproj" Targets="" />
</Target>
<Target Name="FacturasProveedor_view:Clean">
<MSBuild Projects="..\Facturas de proveedor\Views\FacturasProveedor_view.dproj" Targets="Clean" />
</Target>
<Target Name="FacturasProveedor_view:Make">
<MSBuild Projects="..\Facturas de proveedor\Views\FacturasProveedor_view.dproj" Targets="Make" />
</Target>
<Target Name="PedidosProveedor_view">
<MSBuild Projects="..\Pedidos a proveedor\Views\PedidosProveedor_view.dproj" Targets="" />
</Target>
<Target Name="PedidosProveedor_view:Clean">
<MSBuild Projects="..\Pedidos a proveedor\Views\PedidosProveedor_view.dproj" Targets="Clean" />
</Target>
<Target Name="PedidosProveedor_view:Make">
<MSBuild Projects="..\Pedidos a proveedor\Views\PedidosProveedor_view.dproj" Targets="Make" />
</Target>
<Target Name="PresupuestosCliente_view">
<MSBuild Projects="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" Targets="" />
</Target>
<Target Name="PresupuestosCliente_view:Clean">
<MSBuild Projects="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" Targets="Clean" />
</Target>
<Target Name="PresupuestosCliente_view:Make">
<MSBuild Projects="..\Presupuestos de cliente\Views\PresupuestosCliente_view.dproj" Targets="Make" />
</Target>
<Target Name="RecibosCliente_view">
<MSBuild Projects="..\Recibos de cliente\Views\RecibosCliente_view.dproj" Targets="" />
</Target>
<Target Name="RecibosCliente_view:Clean">
<MSBuild Projects="..\Recibos de cliente\Views\RecibosCliente_view.dproj" Targets="Clean" />
</Target>
<Target Name="RecibosCliente_view:Make">
<MSBuild Projects="..\Recibos de cliente\Views\RecibosCliente_view.dproj" Targets="Make" />
</Target>
<Target Name="RecibosProveedor_view">
<MSBuild Projects="..\Recibos de proveedor\Views\RecibosProveedor_view.dproj" Targets="" />
</Target>
<Target Name="RecibosProveedor_view:Clean">
<MSBuild Projects="..\Recibos de proveedor\Views\RecibosProveedor_view.dproj" Targets="Clean" />
</Target>
<Target Name="RecibosProveedor_view:Make">
<MSBuild Projects="..\Recibos de proveedor\Views\RecibosProveedor_view.dproj" Targets="Make" />
</Target>
<Target Name="RemesasCliente_view">
<MSBuild Projects="..\Remesas de cliente\Views\RemesasCliente_view.dproj" Targets="" />
</Target>
<Target Name="RemesasCliente_view:Clean">
<MSBuild Projects="..\Remesas de cliente\Views\RemesasCliente_view.dproj" Targets="Clean" />
</Target>
<Target Name="RemesasCliente_view:Make">
<MSBuild Projects="..\Remesas de cliente\Views\RemesasCliente_view.dproj" Targets="Make" />
</Target>
<Target Name="RemesasProveedor_view">
<MSBuild Projects="..\Remesas de proveedor\Views\RemesasProveedor_view.dproj" Targets="" />
</Target>
<Target Name="RemesasProveedor_view:Clean">
<MSBuild Projects="..\Remesas de proveedor\Views\RemesasProveedor_view.dproj" Targets="Clean" />
</Target>
<Target Name="RemesasProveedor_view:Make">
<MSBuild Projects="..\Remesas de proveedor\Views\RemesasProveedor_view.dproj" Targets="Make" />
</Target>
<Target Name="Build"> <Target Name="Build">
<CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_view;Articulos_controller;Articulos_view;AlbaranesCliente_model;AlbaranesCliente_data;AlbaranesCliente_controller;AlbCli_FacCli_relation;AlbaranesCliente_view;AlbaranesCliente_plugin;FactuGES;FactuGES_Server;AlbaranesProveedor_view;AlbProv_FacProv_relation;Contactos_controller" /> <CallTarget Targets="Base;GUIBase;ApplicationBase;Contactos_view;Articulos_controller;Articulos_view;AlbaranesCliente_model;AlbaranesCliente_data;AlbaranesCliente_controller;AlbCli_FacCli_relation;AlbaranesCliente_view;AlbaranesCliente_plugin;FactuGES;FactuGES_Server;AlbaranesProveedor_view;AlbProv_FacProv_relation;Contactos_controller;FacturasProveedor_view;PedidosProveedor_view;PresupuestosCliente_view;RecibosCliente_view;RecibosProveedor_view;RemesasCliente_view;RemesasProveedor_view" />
</Target> </Target>
<Target Name="Clean"> <Target Name="Clean">
<CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_view:Clean;Articulos_controller:Clean;Articulos_view:Clean;AlbaranesCliente_model:Clean;AlbaranesCliente_data:Clean;AlbaranesCliente_controller:Clean;AlbCli_FacCli_relation:Clean;AlbaranesCliente_view:Clean;AlbaranesCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;AlbaranesProveedor_view:Clean;AlbProv_FacProv_relation:Clean;Contactos_controller:Clean" /> <CallTarget Targets="Base:Clean;GUIBase:Clean;ApplicationBase:Clean;Contactos_view:Clean;Articulos_controller:Clean;Articulos_view:Clean;AlbaranesCliente_model:Clean;AlbaranesCliente_data:Clean;AlbaranesCliente_controller:Clean;AlbCli_FacCli_relation:Clean;AlbaranesCliente_view:Clean;AlbaranesCliente_plugin:Clean;FactuGES:Clean;FactuGES_Server:Clean;AlbaranesProveedor_view:Clean;AlbProv_FacProv_relation:Clean;Contactos_controller:Clean;FacturasProveedor_view:Clean;PedidosProveedor_view:Clean;PresupuestosCliente_view:Clean;RecibosCliente_view:Clean;RecibosProveedor_view:Clean;RemesasCliente_view:Clean;RemesasProveedor_view:Clean" />
</Target> </Target>
<Target Name="Make"> <Target Name="Make">
<CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_view:Make;Articulos_controller:Make;Articulos_view:Make;AlbaranesCliente_model:Make;AlbaranesCliente_data:Make;AlbaranesCliente_controller:Make;AlbCli_FacCli_relation:Make;AlbaranesCliente_view:Make;AlbaranesCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;AlbaranesProveedor_view:Make;AlbProv_FacProv_relation:Make;Contactos_controller:Make" /> <CallTarget Targets="Base:Make;GUIBase:Make;ApplicationBase:Make;Contactos_view:Make;Articulos_controller:Make;Articulos_view:Make;AlbaranesCliente_model:Make;AlbaranesCliente_data:Make;AlbaranesCliente_controller:Make;AlbCli_FacCli_relation:Make;AlbaranesCliente_view:Make;AlbaranesCliente_plugin:Make;FactuGES:Make;FactuGES_Server:Make;AlbaranesProveedor_view:Make;AlbProv_FacProv_relation:Make;Contactos_controller:Make;FacturasProveedor_view:Make;PedidosProveedor_view:Make;PresupuestosCliente_view:Make;RecibosCliente_view:Make;RecibosProveedor_view:Make;RemesasCliente_view:Make;RemesasProveedor_view:Make" />
</Target> </Target>
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" /> <Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
</Project> </Project>

View File

@ -4,7 +4,7 @@ interface
uses uses
SysUtils, uDADataTable, uEditorDBItem, Classes, SysUtils, uDADataTable, uEditorDBItem,
uControllerBase, uIDataModuleAlbaranesCliente, uClientesController, uControllerBase, uIDataModuleAlbaranesCliente, uClientesController,
uDetallesAlbaranClienteController, uBizAlbaranesCliente, uBizDireccionesContacto; uDetallesAlbaranClienteController, uBizAlbaranesCliente, uBizDireccionesContacto;
@ -65,6 +65,9 @@ type
ANuevaSituacion: String; AFechaEnvio : TDateTime = 0; ANuevaSituacion: String; AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0; AFechaRecibido : TDateTime = 0;
DoPost: Boolean = True) : Boolean; DoPost: Boolean = True) : Boolean;
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TAlbaranesClienteController = class(TControllerBase, IAlbaranesClienteController) TAlbaranesClienteController = class(TControllerBase, IAlbaranesClienteController)
@ -138,7 +141,7 @@ type
function EsModificable(AAlbaran: IBizAlbaranCliente): Boolean; function EsModificable(AAlbaran: IBizAlbaranCliente): Boolean;
function EsEliminable(AAlbaran: IBizAlbaranCliente): Boolean; function EsEliminable(AAlbaran: IBizAlbaranCliente): Boolean;
procedure EnviarAlbaranPorEMail(AAlbaran : IBizAlbaranCliente); procedure EnviarAlbaranPorEMail(AAlbaran : IBizAlbaranCliente);
function CambiarSituacion(AAlbaran : IBizAlbaranCliente; function CambiarSituacion(AAlbaran : IBizAlbaranCliente;
ANuevaSituacion: String; AFechaEnvio : TDateTime = 0; ANuevaSituacion: String; AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0; AFechaRecibido : TDateTime = 0;
@ -148,6 +151,9 @@ type
procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false); procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean); procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(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; end;
implementation implementation
@ -156,7 +162,7 @@ uses
uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils, uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
uIEditorAlbaranesCliente, uIEditorAlbaranesDevCliente, uIEditorAlbaranDevCliente, uIEditorAlbaranesCliente, uIEditorAlbaranesDevCliente, uIEditorAlbaranDevCliente,
uDataModuleAlbaranesCliente, Variants, uBizDetallesAlbaranCliente, uDataModuleAlbaranesCliente, Variants, uBizDetallesAlbaranCliente,
uBizContactos, uDataTableUtils, uDataModuleUsuarios, Classes, uFactuGES_App, uBizContactos, uDataTableUtils, uDataModuleUsuarios, uFactuGES_App,
schAlbaranesClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorAlbaranCliente, schAlbaranesClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorAlbaranCliente,
uIEditorElegirAlbaranesCliente, uIEditorDireccionEntregaAlbaranCliente, uIEditorElegirAlbaranesCliente, uIEditorDireccionEntregaAlbaranCliente,
schContactosClient_Intf, uAlbaranesClienteReportController, uControllerDetallesBase, schContactosClient_Intf, uAlbaranesClienteReportController, uControllerDetallesBase,
@ -414,6 +420,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TAlbaranesClienteController.DarListaAnosAlbaranes: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TAlbaranesClienteController.DescartarCambios(AAlbaran: IBizAlbaranCliente); procedure TAlbaranesClienteController.DescartarCambios(AAlbaran: IBizAlbaranCliente);
begin begin
if not Assigned(AAlbaran) then if not Assigned(AAlbaran) then
@ -912,6 +923,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; 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); procedure TAlbaranesClienteController.FiltrarEmpresa(AAlbaran: IBizAlbaranCliente);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,7 +1,7 @@
inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 234 Height = 394
Width = 484 Width = 512
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel Channel = dmConexion.ROChannel
@ -421,4 +421,28 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
Left = 384 Left = 384
Top = 56 Top = 56
end end
object tbl_ListaAnosAlbaranes: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
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 = 192
end
end end

View File

@ -20,6 +20,8 @@ type
ds_AlbaranesCliente: TDADataSource; ds_AlbaranesCliente: TDADataSource;
tbl_AlbaranesCliente_Detalles: TDAMemDataTable; tbl_AlbaranesCliente_Detalles: TDAMemDataTable;
ds_AlbaranesCliente_Detalles: TDADataSource; ds_AlbaranesCliente_Detalles: TDADataSource;
tbl_ListaAnosAlbaranes: TDAMemDataTable;
ds_ListaAnosAlbaranes: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
@ -38,6 +40,8 @@ type
function GetRptWordAlbaran(const AID: Integer): Binary; function GetRptWordAlbaran(const AID: Integer): Binary;
function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary; function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function GetRptPDFAlbaran(const AID: Integer): Binary; function GetRptPDFAlbaran(const AID: Integer): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -116,6 +120,30 @@ begin
end; end;
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; function TDataModuleAlbaranesCliente.GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
begin begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID, withRefCliente) Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID, withRefCliente)

View File

@ -3,11 +3,12 @@ unit uIDataModuleAlbaranesCliente;
interface interface
uses uses
uBizAlbaranesCliente; Classes, uBizAlbaranesCliente;
type type
IDataModuleAlbaranesCliente = interface IDataModuleAlbaranesCliente = interface
['{81932348-9595-45AC-AFC9-5A8983B4A3A8}'] ['{81932348-9595-45AC-AFC9-5A8983B4A3A8}']
function GetAnosItems : TStringList;
function GetItems: IBizAlbaranCliente; function GetItems: IBizAlbaranCliente;
function GetItem(const ID : Integer) : IBizAlbaranCliente; function GetItem(const ID : Integer) : IBizAlbaranCliente;
function NewItem : IBizAlbaranCliente; function NewItem : IBizAlbaranCliente;

View File

@ -9,13 +9,21 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_AlbaranesCliente = '{53F308FB-F81B-4A25-99E0-E11DF3E18565}'; RID_ListaAnosAlbaranes = '{4E395FAD-6E22-4BEA-8928-852C19481C40}';
RID_AlbaranesCliente_Detalles = '{D025104D-248E-4C16-BB61-752769362E0D}'; RID_AlbaranesCliente = '{4B881ADC-1915-43AB-AF50-8E576C19A0A0}';
RID_AlbaranesCliente_Detalles = '{FF516CED-DDC4-4D70-AC0F-E579F1103F15}';
{ Data table names } { Data table names }
nme_ListaAnosAlbaranes = 'ListaAnosAlbaranes';
nme_AlbaranesCliente = 'AlbaranesCliente'; nme_AlbaranesCliente = 'AlbaranesCliente';
nme_AlbaranesCliente_Detalles = 'AlbaranesCliente_Detalles'; nme_AlbaranesCliente_Detalles = 'AlbaranesCliente_Detalles';
{ ListaAnosAlbaranes fields }
fld_ListaAnosAlbaranesANO = 'ANO';
{ ListaAnosAlbaranes field indexes }
idx_ListaAnosAlbaranesANO = 0;
{ AlbaranesCliente fields } { AlbaranesCliente fields }
fld_AlbaranesClienteID = 'ID'; fld_AlbaranesClienteID = 'ID';
fld_AlbaranesClienteID_EMPRESA = 'ID_EMPRESA'; fld_AlbaranesClienteID_EMPRESA = 'ID_EMPRESA';
@ -137,9 +145,44 @@ const
idx_AlbaranesCliente_DetallesID_PEDIDO = 15; idx_AlbaranesCliente_DetallesID_PEDIDO = 15;
type type
{ IListaAnosAlbaranes }
IListaAnosAlbaranes = interface(IDAStronglyTypedDataTable)
['{A625E55F-A727-4F88-9DAA-605DD60159D7}']
{ 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 }
IAlbaranesCliente = interface(IDAStronglyTypedDataTable) IAlbaranesCliente = interface(IDAStronglyTypedDataTable)
['{9088D93F-C3A6-4EB9-83CC-7C8C04F9ABDD}'] ['{B3652632-A310-4050-B523-49C26C41F857}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -642,7 +685,7 @@ type
{ IAlbaranesCliente_Detalles } { IAlbaranesCliente_Detalles }
IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable) IAlbaranesCliente_Detalles = interface(IDAStronglyTypedDataTable)
['{7931FCBB-7F4B-414C-AAEB-6FB3F0A8C3D4}'] ['{AF2BB21F-76D4-42AD-9190-C2CC3934F6B9}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -859,6 +902,39 @@ implementation
uses Variants, uROBinaryHelpers; 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 } { TAlbaranesClienteDataTableRules }
constructor TAlbaranesClienteDataTableRules.Create(aDataTable: TDADataTable); constructor TAlbaranesClienteDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -2072,6 +2148,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosAlbaranes, TListaAnosAlbaranesDataTableRules);
RegisterDataTableRules(RID_AlbaranesCliente, TAlbaranesClienteDataTableRules); RegisterDataTableRules(RID_AlbaranesCliente, TAlbaranesClienteDataTableRules);
RegisterDataTableRules(RID_AlbaranesCliente_Detalles, TAlbaranesCliente_DetallesDataTableRules); RegisterDataTableRules(RID_AlbaranesCliente_Detalles, TAlbaranesCliente_DetallesDataTableRules);

View File

@ -9,13 +9,48 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_AlbaranesClienteDelta = '{9B8F3A42-777B-408C-8600-F52474CB6A01}'; RID_ListaAnosAlbaranesDelta = '{31517BB5-3488-4555-8B2D-2744016505EE}';
RID_AlbaranesCliente_DetallesDelta = '{EC9C74AF-D537-46A1-9FD4-3418C781C464}'; RID_AlbaranesClienteDelta = '{1A863DB4-0BF6-4F65-AFA1-52EA357D6529}';
RID_AlbaranesCliente_DetallesDelta = '{ED26F299-FA26-46E6-9A24-057570AB5D28}';
type type
{ IListaAnosAlbaranesDelta }
IListaAnosAlbaranesDelta = interface(IListaAnosAlbaranes)
['{31517BB5-3488-4555-8B2D-2744016505EE}']
{ 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 }
IAlbaranesClienteDelta = interface(IAlbaranesCliente) IAlbaranesClienteDelta = interface(IAlbaranesCliente)
['{9B8F3A42-777B-408C-8600-F52474CB6A01}'] ['{1A863DB4-0BF6-4F65-AFA1-52EA357D6529}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -519,7 +554,7 @@ type
{ IAlbaranesCliente_DetallesDelta } { IAlbaranesCliente_DetallesDelta }
IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles) IAlbaranesCliente_DetallesDelta = interface(IAlbaranesCliente_Detalles)
['{EC9C74AF-D537-46A1-9FD4-3418C781C464}'] ['{ED26F299-FA26-46E6-9A24-057570AB5D28}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_ALBARANValue : Integer; function GetOldID_ALBARANValue : Integer;
@ -736,6 +771,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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 } { TAlbaranesClienteBusinessProcessorRules }
constructor TAlbaranesClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TAlbaranesClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2511,6 +2589,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosAlbaranesDelta, TListaAnosAlbaranesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesClienteDelta, TAlbaranesClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesClienteDelta, TAlbaranesClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesCliente_DetallesDelta, TAlbaranesCliente_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesCliente_DetallesDelta, TAlbaranesCliente_DetallesBusinessProcessorRules);

View File

@ -13,6 +13,33 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < 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 = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -128,6 +128,18 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
object TBXSeparatorItem17: TTBXSeparatorItem [10] object TBXSeparatorItem17: TTBXSeparatorItem [10]
end end
end end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 583 ExplicitWidth = 583
object TBXSubmenuItem2: TTBXSubmenuItem [4] object TBXSubmenuItem2: TTBXSubmenuItem [4]
@ -138,7 +150,9 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
end end
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitLeft = 427
ExplicitWidth = 117 ExplicitWidth = 117
object TBXItem42: TTBXItem object TBXItem42: TTBXItem
Action = actEnviar Action = actEnviar

View File

@ -54,6 +54,7 @@ type
procedure actGenerarEtiquetasUpdate(Sender: TObject); procedure actGenerarEtiquetasUpdate(Sender: TObject);
procedure actEnviarEMailExecute(Sender: TObject); procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject); procedure actEnviarEMailUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected protected
FAlbaranes: IBizAlbaranCliente; FAlbaranes: IBizAlbaranCliente;
@ -71,6 +72,7 @@ type
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que //Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este método //sobreescribir este método
@ -379,6 +381,8 @@ end;
procedure TfEditorAlbaranesCliente.FormShow(Sender: TObject); procedure TfEditorAlbaranesCliente.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -475,6 +479,13 @@ begin
// end; // end;
end; 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); procedure TfEditorAlbaranesCliente.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -524,17 +535,37 @@ begin
end; end;
end; end;
procedure TfEditorAlbaranesCliente.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
inherited;
end;
procedure TfEditorAlbaranesCliente.SetController(const Value: IAlbaranesClienteController); procedure TfEditorAlbaranesCliente.SetController(const Value: IAlbaranesClienteController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
end; end;
procedure TfEditorAlbaranesCliente.SetAlbaranes(const Value: IBizAlbaranCliente); procedure TfEditorAlbaranesCliente.SetAlbaranes(const Value: IBizAlbaranCliente);
begin begin
FAlbaranes := Value; FAlbaranes := Value;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then if Assigned(FAlbaranes) then
(ViewGrid as IViewAlbaranesCliente).Albaranes := Albaranes; 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;
end. end.

View File

@ -4,7 +4,7 @@ interface
uses uses
SysUtils, uDADataTable, uEditorDBItem, Classes, SysUtils, uDADataTable, uEditorDBItem,
uControllerBase, uIDataModuleAlbaranesProveedor, uProveedoresController, uControllerBase, uIDataModuleAlbaranesProveedor, uProveedoresController,
uDetallesAlbaranProveedorController, uBizAlbaranesProveedor, uDetallesAlbaranProveedorController, uBizAlbaranesProveedor,
uBizDireccionesContacto, uBizInventario; uBizDireccionesContacto, uBizInventario;
@ -62,6 +62,9 @@ type
procedure Preview(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false); procedure Preview(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false);
procedure Print(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false); procedure Print(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false);
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranProveedor; ADynWhereDataTable: WideString; const Ano: String);
function GenerarDevolucion(AAlbaran : IBizAlbaranProveedor) : IBizAlbaranProveedor; function GenerarDevolucion(AAlbaran : IBizAlbaranProveedor) : IBizAlbaranProveedor;
end; end;
@ -138,6 +141,9 @@ type
procedure Preview(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false); procedure Preview(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false);
procedure Print(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false); procedure Print(AAlbaran : IBizAlbaranProveedor; AllItems: Boolean = false);
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranProveedor; ADynWhereDataTable: WideString; const Ano: String);
function GenerarDevolucion(AAlbaran : IBizAlbaranProveedor) : IBizAlbaranProveedor; function GenerarDevolucion(AAlbaran : IBizAlbaranProveedor) : IBizAlbaranProveedor;
end; end;
@ -152,7 +158,7 @@ uses
schContactosClient_Intf, Forms, schPedidosProveedorClient_Intf, uFactuGES_App, schContactosClient_Intf, Forms, schPedidosProveedorClient_Intf, uFactuGES_App,
uBizPedidosProveedor, uPedidosProveedorController, uBizPedidosProveedor, uPedidosProveedorController,
schInventarioClient_Intf, uStringsUtils, uIntegerListUtils, schInventarioClient_Intf, uStringsUtils, uIntegerListUtils,
uArticulosController, uBizArticulos, uControllerDetallesBase, Classes, uArticulosController, uBizArticulos, uControllerDetallesBase,
schArticulosClient_Intf, uControllerDetallesArticulos, Variants, uDialogUtils, schArticulosClient_Intf, uControllerDetallesArticulos, Variants, uDialogUtils,
uIEditorAlbaranDevProveedor, uAlbaranesProveedorReportController; uIEditorAlbaranDevProveedor, uAlbaranesProveedorReportController;
@ -556,6 +562,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TAlbaranesProveedorController.DarListaAnosAlbaranes: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TAlbaranesProveedorController.DescartarCambios(AAlbaran: IBizAlbaranProveedor); procedure TAlbaranesProveedorController.DescartarCambios(AAlbaran: IBizAlbaranProveedor);
begin begin
if not Assigned(AAlbaran) then if not Assigned(AAlbaran) then
@ -969,6 +980,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; end;
procedure TAlbaranesProveedorController.FiltrarAno(AAlbaran: IBizAlbaranProveedor; 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_AlbaranesProveedorFECHA_ALBARAN), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_AlbaranesProveedorFECHA_ALBARAN), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TAlbaranesProveedorController.FiltrarEmpresa(AAlbaran: IBizAlbaranProveedor); procedure TAlbaranesProveedorController.FiltrarEmpresa(AAlbaran: IBizAlbaranProveedor);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;
@ -1138,8 +1178,7 @@ begin
Result := FProveedorController; Result := FProveedorController;
end; end;
function TAlbaranesProveedorController.GenerarDevolucion( function TAlbaranesProveedorController.GenerarDevolucion(AAlbaran: IBizAlbaranProveedor): IBizAlbaranProveedor;
AAlbaran: IBizAlbaranProveedor): IBizAlbaranProveedor;
begin begin
if not Assigned(AAlbaran) then if not Assigned(AAlbaran) then
raise Exception.Create ('Albarán no asignado (QuitarDireccionEnvio)'); raise Exception.Create ('Albarán no asignado (QuitarDireccionEnvio)');

View File

@ -1,5 +1,6 @@
inherited DataModuleAlbaranesProveedor: TDataModuleAlbaranesProveedor inherited DataModuleAlbaranesProveedor: TDataModuleAlbaranesProveedor
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 365
Width = 462 Width = 462
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -438,4 +439,28 @@ inherited DataModuleAlbaranesProveedor: TDataModuleAlbaranesProveedor
Left = 328 Left = 328
Top = 40 Top = 40
end end
object tbl_ListaAnosAlbaranes: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
Params = <>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_AlbaranesProveedor
DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
LogicalName = 'ListaAnosAlbaranes'
IndexDefs = <>
Left = 168
Top = 224
end
object ds_ListaAnosAlbaranes: TDADataSource
DataSet = tbl_ListaAnosAlbaranes.Dataset
DataTable = tbl_ListaAnosAlbaranes
Left = 168
Top = 168
end
end end

View File

@ -20,6 +20,8 @@ type
ds_AlbaranesProveedor: TDADataSource; ds_AlbaranesProveedor: TDADataSource;
tbl_AlbaranesProveedor_Detalles: TDAMemDataTable; tbl_AlbaranesProveedor_Detalles: TDAMemDataTable;
ds_AlbaranesProveedor_Detalles: TDADataSource; ds_AlbaranesProveedor_Detalles: TDADataSource;
tbl_ListaAnosAlbaranes: TDAMemDataTable;
ds_ListaAnosAlbaranes: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
@ -37,6 +39,8 @@ type
function GetReport(const ListaID: TIntegerList): Binary; function GetReport(const ListaID: TIntegerList): Binary;
function GetRptWordAlbaran(const AID: Integer): Binary; function GetRptWordAlbaran(const AID: Integer): Binary;
function GetRptPDFAlbaran(const AID: Integer): Binary; function GetRptPDFAlbaran(const AID: Integer): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -116,6 +120,30 @@ begin
end; end;
end; end;
function TDataModuleAlbaranesProveedor.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 TDataModuleAlbaranesProveedor.GetItem(const ID: Integer): IBizAlbaranProveedor; function TDataModuleAlbaranesProveedor.GetItem(const ID: Integer): IBizAlbaranProveedor;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -3,11 +3,12 @@ unit uIDataModuleAlbaranesProveedor;
interface interface
uses uses
uBizAlbaranesProveedor; Classes, uBizAlbaranesProveedor;
type type
IDataModuleAlbaranesProveedor = interface IDataModuleAlbaranesProveedor = interface
['{2BAD8B3B-B57D-475C-B528-F82B320B2332}'] ['{2BAD8B3B-B57D-475C-B528-F82B320B2332}']
function GetAnosItems : TStringList;
function GetItems: IBizAlbaranProveedor; function GetItems: IBizAlbaranProveedor;
function GetItem(const ID : Integer) : IBizAlbaranProveedor; function GetItem(const ID : Integer) : IBizAlbaranProveedor;
function NewItem : IBizAlbaranProveedor; function NewItem : IBizAlbaranProveedor;

View File

@ -9,13 +9,21 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_AlbaranesProveedor = '{97135F3A-B8D7-4534-8A29-CB50202C8413}'; RID_ListaAnosAlbaranes = '{8672B75E-3E9B-4DB7-A7A2-616EDE5B3E33}';
RID_AlbaranesProveedor_Detalles = '{D817CBF4-1C3C-4003-9145-8923D9187710}'; RID_AlbaranesProveedor = '{0B80E923-C1D3-49AD-A4EB-B16C33839FAF}';
RID_AlbaranesProveedor_Detalles = '{EEB786E5-3D5D-4751-A154-1023C9E86ABC}';
{ Data table names } { Data table names }
nme_ListaAnosAlbaranes = 'ListaAnosAlbaranes';
nme_AlbaranesProveedor = 'AlbaranesProveedor'; nme_AlbaranesProveedor = 'AlbaranesProveedor';
nme_AlbaranesProveedor_Detalles = 'AlbaranesProveedor_Detalles'; nme_AlbaranesProveedor_Detalles = 'AlbaranesProveedor_Detalles';
{ ListaAnosAlbaranes fields }
fld_ListaAnosAlbaranesANO = 'ANO';
{ ListaAnosAlbaranes field indexes }
idx_ListaAnosAlbaranesANO = 0;
{ AlbaranesProveedor fields } { AlbaranesProveedor fields }
fld_AlbaranesProveedorID = 'ID'; fld_AlbaranesProveedorID = 'ID';
fld_AlbaranesProveedorID_EMPRESA = 'ID_EMPRESA'; fld_AlbaranesProveedorID_EMPRESA = 'ID_EMPRESA';
@ -141,9 +149,44 @@ const
idx_AlbaranesProveedor_DetallesREFERENCIA_FABRICANTE = 16; idx_AlbaranesProveedor_DetallesREFERENCIA_FABRICANTE = 16;
type type
{ IListaAnosAlbaranes }
IListaAnosAlbaranes = interface(IDAStronglyTypedDataTable)
['{5D5577A0-2463-4F53-84C1-0AD1444ACD5E}']
{ 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;
{ IAlbaranesProveedor } { IAlbaranesProveedor }
IAlbaranesProveedor = interface(IDAStronglyTypedDataTable) IAlbaranesProveedor = interface(IDAStronglyTypedDataTable)
['{8B370BF7-B54A-4FDD-B65B-90F2C8EBBC78}'] ['{E4144497-578E-458A-97C6-7CB8D148F6A4}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -658,7 +701,7 @@ type
{ IAlbaranesProveedor_Detalles } { IAlbaranesProveedor_Detalles }
IAlbaranesProveedor_Detalles = interface(IDAStronglyTypedDataTable) IAlbaranesProveedor_Detalles = interface(IDAStronglyTypedDataTable)
['{4E46B4A0-F866-4EFA-819C-D89CA70CA42E}'] ['{6500972B-0466-4C76-8136-B7CA39C10FE6}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -887,6 +930,39 @@ implementation
uses Variants, uROBinaryHelpers; 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;
{ TAlbaranesProveedorDataTableRules } { TAlbaranesProveedorDataTableRules }
constructor TAlbaranesProveedorDataTableRules.Create(aDataTable: TDADataTable); constructor TAlbaranesProveedorDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -2142,6 +2218,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosAlbaranes, TListaAnosAlbaranesDataTableRules);
RegisterDataTableRules(RID_AlbaranesProveedor, TAlbaranesProveedorDataTableRules); RegisterDataTableRules(RID_AlbaranesProveedor, TAlbaranesProveedorDataTableRules);
RegisterDataTableRules(RID_AlbaranesProveedor_Detalles, TAlbaranesProveedor_DetallesDataTableRules); RegisterDataTableRules(RID_AlbaranesProveedor_Detalles, TAlbaranesProveedor_DetallesDataTableRules);

View File

@ -9,13 +9,48 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_AlbaranesProveedorDelta = '{4418764D-F55C-4159-8188-FB26EB2712F2}'; RID_ListaAnosAlbaranesDelta = '{8ACFAAB6-FAD9-462B-9EFB-058863E6DE98}';
RID_AlbaranesProveedor_DetallesDelta = '{F4091255-CE14-4478-BE97-D015483ED476}'; RID_AlbaranesProveedorDelta = '{12E2ABCF-FA73-4601-A9A4-9E862D682126}';
RID_AlbaranesProveedor_DetallesDelta = '{A0DF5047-4CFE-47B9-A8A1-714BDC68631E}';
type type
{ IListaAnosAlbaranesDelta }
IListaAnosAlbaranesDelta = interface(IListaAnosAlbaranes)
['{8ACFAAB6-FAD9-462B-9EFB-058863E6DE98}']
{ 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;
{ IAlbaranesProveedorDelta } { IAlbaranesProveedorDelta }
IAlbaranesProveedorDelta = interface(IAlbaranesProveedor) IAlbaranesProveedorDelta = interface(IAlbaranesProveedor)
['{4418764D-F55C-4159-8188-FB26EB2712F2}'] ['{12E2ABCF-FA73-4601-A9A4-9E862D682126}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -531,7 +566,7 @@ type
{ IAlbaranesProveedor_DetallesDelta } { IAlbaranesProveedor_DetallesDelta }
IAlbaranesProveedor_DetallesDelta = interface(IAlbaranesProveedor_Detalles) IAlbaranesProveedor_DetallesDelta = interface(IAlbaranesProveedor_Detalles)
['{F4091255-CE14-4478-BE97-D015483ED476}'] ['{A0DF5047-4CFE-47B9-A8A1-714BDC68631E}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_ALBARANValue : Integer; function GetOldID_ALBARANValue : Integer;
@ -760,6 +795,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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;
{ TAlbaranesProveedorBusinessProcessorRules } { TAlbaranesProveedorBusinessProcessorRules }
constructor TAlbaranesProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TAlbaranesProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2597,6 +2675,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosAlbaranesDelta, TListaAnosAlbaranesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesProveedorDelta, TAlbaranesProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesProveedorDelta, TAlbaranesProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_AlbaranesProveedor_DetallesDelta, TAlbaranesProveedor_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_AlbaranesProveedor_DetallesDelta, TAlbaranesProveedor_DetallesBusinessProcessorRules);

View File

@ -14,6 +14,33 @@ object srvAlbaranesProveedor: TsrvAlbaranesProveedor
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < 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_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 = 'ListaAnosAlbaranes'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -126,6 +126,18 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 606 ExplicitWidth = 606
end end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 606 ExplicitWidth = 606
object TBXSubmenuItem2: TTBXSubmenuItem [4] object TBXSubmenuItem2: TTBXSubmenuItem [4]
@ -139,8 +151,10 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor
end end
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitWidth = 237 ExplicitLeft = 427
ExplicitWidth = 117
object TBXItem41: TTBXItem object TBXItem41: TTBXItem
Action = actGenerarDevolucion Action = actGenerarDevolucion
DisplayMode = nbdmImageAndText DisplayMode = nbdmImageAndText

View File

@ -34,6 +34,7 @@ type
procedure actGenerarFacturaExecute(Sender: TObject); procedure actGenerarFacturaExecute(Sender: TObject);
procedure actGenerarFacturaUpdate(Sender: TObject); procedure actGenerarFacturaUpdate(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject); procedure actEliminarUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
procedure actGenerarDevolucionUpdate(Sender: TObject); procedure actGenerarDevolucionUpdate(Sender: TObject);
procedure actGenerarDevolucionExecute(Sender: TObject); procedure actGenerarDevolucionExecute(Sender: TObject);
@ -53,6 +54,7 @@ type
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que //Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo //sobreescribir este metodo
@ -209,6 +211,8 @@ end;
procedure TfEditorAlbaranesProveedor.FormShow(Sender: TObject); procedure TfEditorAlbaranesProveedor.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -302,6 +306,13 @@ begin
end; end;
end; end;
procedure TfEditorAlbaranesProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(Albaranes, DynWhereDataTable, Text);
if Albaranes.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorAlbaranesProveedor.PonerTitulos(const ATitulo: string); procedure TfEditorAlbaranesProveedor.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -351,17 +362,37 @@ begin
end; end;
end; end;
procedure TfEditorAlbaranesProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
inherited;
end;
procedure TfEditorAlbaranesProveedor.SetController(const Value: IAlbaranesProveedorController); procedure TfEditorAlbaranesProveedor.SetController(const Value: IAlbaranesProveedorController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
end; end;
procedure TfEditorAlbaranesProveedor.SetAlbaranes(const Value: IBizAlbaranProveedor); procedure TfEditorAlbaranesProveedor.SetAlbaranes(const Value: IBizAlbaranProveedor);
begin begin
FAlbaranes := Value; FAlbaranes := Value;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then if Assigned(FAlbaranes) then
(ViewGrid as IViewAlbaranesProveedor).Albaranes := Albaranes; 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 IViewAlbaranesProveedor).Albaranes := Albaranes;
end;
end; end;
end. end.

View File

@ -54,6 +54,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente; function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente;
function ExtraerSeleccionados(ARecibosCliente: IBizFacturaCliente) : IBizFacturaCliente; function ExtraerSeleccionados(ARecibosCliente: IBizFacturaCliente) : IBizFacturaCliente;
procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente); procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente);
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TFacturasClienteController = class(TControllerBase, IFacturasClienteController) TFacturasClienteController = class(TControllerBase, IFacturasClienteController)
@ -119,6 +122,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente; function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente;
function ExtraerSeleccionados(AFacturasCliente: IBizFacturaCliente) : IBizFacturaCliente; function ExtraerSeleccionados(AFacturasCliente: IBizFacturaCliente) : IBizFacturaCliente;
procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente); procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente);
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -132,7 +138,8 @@ uses
uBizDetallesAlbaranCliente, uFacturasClienteReportController, uBizDetallesAlbaranCliente, uFacturasClienteReportController,
DateUtils, Forms, uFormasPagoController, uBizFormasPago, uIEditorElegirFacturasCliente, DateUtils, Forms, uFormasPagoController, uBizFormasPago, uIEditorElegirFacturasCliente,
uRecibosClienteController, uBizRecibosCliente, uIntegerListUtils, uRecibosClienteController, uBizRecibosCliente, uIntegerListUtils,
uSistemaFunc, uDialogElegirEMail, uEMailUtils, Dialogs, uStringsUtils; uSistemaFunc, uDialogElegirEMail, uEMailUtils, Dialogs, uStringsUtils,
uROXMLIntf;
{procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoCliente; {procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoCliente;
@ -381,7 +388,7 @@ end;}
function TFacturasClienteController.Buscar(const ID: Integer): IBizFacturaCliente; function TFacturasClienteController.Buscar(const ID: Integer): IBizFacturaCliente;
begin begin
Result := (FDataModule as IDataModuleFacturasCliente).GetItem(ID); Result := (FDataModule as IDataModuleFacturasCliente).GetItem(ID);
FiltrarEmpresa(Result); FiltrarEmpresa(Result);
end; end;
function TFacturasClienteController.BuscarTodasPendientesComision(IdAgente:Integer; IdComision: Integer; IdFacturasAsociadas: String): IBizFacturaCliente; function TFacturasClienteController.BuscarTodasPendientesComision(IdAgente:Integer; IdComision: Integer; IdFacturasAsociadas: String): IBizFacturaCliente;
@ -504,6 +511,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TFacturasClienteController.DarListaAnosFacturas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TFacturasClienteController.DescartarCambios(AFactura: IBizFacturaCliente); procedure TFacturasClienteController.DescartarCambios(AFactura: IBizFacturaCliente);
begin begin
if not Assigned(AFactura) then if not Assigned(AFactura) then
@ -930,6 +942,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; 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); procedure TFacturasClienteController.FiltrarEmpresa(AFactura: IBizFacturaCliente);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;
@ -1225,4 +1266,3 @@ begin
end; end;
end. end.

View File

@ -1,6 +1,6 @@
inherited DataModuleFacturasCliente: TDataModuleFacturasCliente inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 207 Height = 318
Width = 518 Width = 518
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -405,4 +405,28 @@ inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
Left = 400 Left = 400
Top = 40 Top = 40
end end
object tbl_ListaAnosFacturas: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
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 = 240
Top = 240
end
object ds_ListaAnosFacturas: TDADataSource
DataSet = tbl_ListaAnosFacturas.Dataset
DataTable = tbl_ListaAnosFacturas
Left = 240
Top = 176
end
end end

View File

@ -21,10 +21,13 @@ type
ds_FacturasCliente: TDADataSource; ds_FacturasCliente: TDADataSource;
tbl_FacturasCliente_Detalles: TDAMemDataTable; tbl_FacturasCliente_Detalles: TDAMemDataTable;
ds_FacturasCliente_Detalles: TDADataSource; ds_FacturasCliente_Detalles: TDADataSource;
tbl_ListaAnosFacturas: TDAMemDataTable;
ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
function _GetDetalles : IBizDetallesFacturaCliente; function _GetDetalles : IBizDetallesFacturaCliente;
public public
function GetAnosItems : TStringList;
function GetItems : IBizFacturaCliente; function GetItems : IBizFacturaCliente;
function GetItem(const ID : Integer) : IBizFacturaCliente; function GetItem(const ID : Integer) : IBizFacturaCliente;
function NewItem : IBizFacturaCliente; function NewItem : IBizFacturaCliente;
@ -128,6 +131,30 @@ begin
end; end;
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.GetItems: IBizFacturaCliente; function TDataModuleFacturasCliente.GetItems: IBizFacturaCliente;
var var
AFactura : TDAMemDataTable; AFactura : TDAMemDataTable;

View File

@ -9,6 +9,7 @@ uses
type type
IDataModuleFacturasCliente = interface IDataModuleFacturasCliente = interface
['{B0BDC388-E831-4946-B736-E817E3EA4B7C}'] ['{B0BDC388-E831-4946-B736-E817E3EA4B7C}']
function GetAnosItems : TStringList;
function GetItems: IBizFacturaCliente; function GetItems: IBizFacturaCliente;
function GetItem(const ID : Integer) : IBizFacturaCliente; function GetItem(const ID : Integer) : IBizFacturaCliente;
function NewItem : IBizFacturaCliente; function NewItem : IBizFacturaCliente;

View File

@ -9,13 +9,21 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_FacturasCliente = '{8F2BDC76-1E34-41E2-8738-14BA1E7BC9BA}'; RID_ListaAnosFacturas = '{FD7D4D74-BB5E-4F18-9F1A-AAF12EB25DC9}';
RID_FacturasCliente_Detalles = '{15B6D41F-96C1-4C4E-A224-C2D8F87CD524}'; RID_FacturasCliente = '{C2CB3D1C-C182-4CE2-AA95-14AE2D5FFC12}';
RID_FacturasCliente_Detalles = '{CAE1BB94-5B84-483D-8C3A-1300951E64F2}';
{ Data table names } { Data table names }
nme_ListaAnosFacturas = 'ListaAnosFacturas';
nme_FacturasCliente = 'FacturasCliente'; nme_FacturasCliente = 'FacturasCliente';
nme_FacturasCliente_Detalles = 'FacturasCliente_Detalles'; nme_FacturasCliente_Detalles = 'FacturasCliente_Detalles';
{ ListaAnosFacturas fields }
fld_ListaAnosFacturasANO = 'ANO';
{ ListaAnosFacturas field indexes }
idx_ListaAnosFacturasANO = 0;
{ FacturasCliente fields } { FacturasCliente fields }
fld_FacturasClienteID = 'ID'; fld_FacturasClienteID = 'ID';
fld_FacturasClienteID_EMPRESA = 'ID_EMPRESA'; fld_FacturasClienteID_EMPRESA = 'ID_EMPRESA';
@ -135,9 +143,44 @@ const
idx_FacturasCliente_DetallesREFERENCIA_PROVEEDOR = 14; idx_FacturasCliente_DetallesREFERENCIA_PROVEEDOR = 14;
type type
{ IListaAnosFacturas }
IListaAnosFacturas = interface(IDAStronglyTypedDataTable)
['{CD6D3B14-759E-4A7A-A148-CB8DDBFA0D92}']
{ 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 }
IFacturasCliente = interface(IDAStronglyTypedDataTable) IFacturasCliente = interface(IDAStronglyTypedDataTable)
['{C8AADCF0-C145-435A-A93E-D1B5ECD0BA1B}'] ['{6E9731DA-0B33-43DF-9128-37F89A8D1645}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -640,7 +683,7 @@ type
{ IFacturasCliente_Detalles } { IFacturasCliente_Detalles }
IFacturasCliente_Detalles = interface(IDAStronglyTypedDataTable) IFacturasCliente_Detalles = interface(IDAStronglyTypedDataTable)
['{F9994FFA-FB1C-4221-A444-441E23C4E2AD}'] ['{7562C65C-C3D3-4104-BAAE-5F11D0C87BF4}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -845,6 +888,39 @@ implementation
uses Variants, uROBinaryHelpers; 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 } { TFacturasClienteDataTableRules }
constructor TFacturasClienteDataTableRules.Create(aDataTable: TDADataTable); constructor TFacturasClienteDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -2032,6 +2108,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosFacturas, TListaAnosFacturasDataTableRules);
RegisterDataTableRules(RID_FacturasCliente, TFacturasClienteDataTableRules); RegisterDataTableRules(RID_FacturasCliente, TFacturasClienteDataTableRules);
RegisterDataTableRules(RID_FacturasCliente_Detalles, TFacturasCliente_DetallesDataTableRules); RegisterDataTableRules(RID_FacturasCliente_Detalles, TFacturasCliente_DetallesDataTableRules);

View File

@ -9,13 +9,48 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_FacturasClienteDelta = '{B00FDA28-E442-4DDF-98FA-DED7AD95E83C}'; RID_ListaAnosFacturasDelta = '{918AF647-D101-44B9-AC18-3D64BE3A714A}';
RID_FacturasCliente_DetallesDelta = '{AA6EC893-0E21-40B3-9BCC-8C857AF39A68}'; RID_FacturasClienteDelta = '{566BE766-12BF-4272-8214-8550BD00F7E3}';
RID_FacturasCliente_DetallesDelta = '{B1AB58CB-D6F2-4108-AB5F-B352E9C27B9F}';
type type
{ IListaAnosFacturasDelta }
IListaAnosFacturasDelta = interface(IListaAnosFacturas)
['{918AF647-D101-44B9-AC18-3D64BE3A714A}']
{ 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 }
IFacturasClienteDelta = interface(IFacturasCliente) IFacturasClienteDelta = interface(IFacturasCliente)
['{B00FDA28-E442-4DDF-98FA-DED7AD95E83C}'] ['{566BE766-12BF-4272-8214-8550BD00F7E3}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -518,7 +553,7 @@ type
{ IFacturasCliente_DetallesDelta } { IFacturasCliente_DetallesDelta }
IFacturasCliente_DetallesDelta = interface(IFacturasCliente_Detalles) IFacturasCliente_DetallesDelta = interface(IFacturasCliente_Detalles)
['{AA6EC893-0E21-40B3-9BCC-8C857AF39A68}'] ['{B1AB58CB-D6F2-4108-AB5F-B352E9C27B9F}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_FACTURAValue : Integer; function GetOldID_FACTURAValue : Integer;
@ -723,6 +758,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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 } { TFacturasClienteBusinessProcessorRules }
constructor TFacturasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TFacturasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2461,6 +2539,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosFacturasDelta, TListaAnosFacturasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasClienteDelta, TFacturasClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasClienteDelta, TFacturasClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasCliente_DetallesDelta, TFacturasCliente_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasCliente_DetallesDelta, TFacturasCliente_DetallesBusinessProcessorRules);

View File

@ -14,6 +14,33 @@ object srvFacturasCliente: TsrvFacturasCliente
DataDictionary = DataDictionary DataDictionary = DataDictionary
Diagrams = Diagrams Diagrams = Diagrams
Datasets = < 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 = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -43,7 +43,7 @@ implementation
{$R *.dfm} {$R *.dfm}
uses uses
{Generated:} FactuGES_Invk, Dialogs, uSistemaFunc, {Generated:} FactuGES_Invk, Dialogs, uSistemaFunc, uROClasses,
uDataModuleServer, uDatabaseUtils, uUsersManager, schFacturasClienteClient_Intf, uDataModuleServer, uDatabaseUtils, uUsersManager, schFacturasClienteClient_Intf,
uRestriccionesUsuarioUtils, uRestriccionesUsuarioUtils,
// uRptFacturasCliente_Server, // uRptFacturasCliente_Server,

View File

@ -49,16 +49,16 @@
<DelphiCompile Include="FacturasCliente_view.dpk"> <DelphiCompile Include="FacturasCliente_view.dpk">
<MainSource>MainSource</MainSource> <MainSource>MainSource</MainSource>
</DelphiCompile> </DelphiCompile>
<DCCReference Include="..\..\Pedidos a proveedor\AlbCli_FacCli_relation.dcp" /> <DCCReference Include="..\..\..\Cliente\AlbCli_FacCli_relation.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\ApplicationBase.dcp" /> <DCCReference Include="..\..\..\Cliente\ApplicationBase.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\Articulos_view.dcp" /> <DCCReference Include="..\..\..\Cliente\Articulos_view.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\Base.dcp" /> <DCCReference Include="..\..\..\Cliente\Base.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\Contactos_view.dcp" /> <DCCReference Include="..\..\..\Cliente\Contactos_view.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\FacturasCliente_controller.dcp" /> <DCCReference Include="..\..\..\Cliente\FacturasCliente_controller.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\FacturasCliente_model.dcp" /> <DCCReference Include="..\..\..\Cliente\FacturasCliente_model.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\GestorInformes_controller.dcp" /> <DCCReference Include="..\..\..\Cliente\GestorInformes_controller.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\GUIBase.dcp" /> <DCCReference Include="..\..\..\Cliente\GUIBase.dcp" />
<DCCReference Include="..\..\Pedidos a proveedor\PreCli_FacCli_relation.dcp" /> <DCCReference Include="..\..\..\Cliente\PreCli_FacCli_relation.dcp" />
<DCCReference Include="uEditorElegirArticulosFacturaCliente.pas"> <DCCReference Include="uEditorElegirArticulosFacturaCliente.pas">
<Form>fEditorElegirArticulosFacturaCliente</Form> <Form>fEditorElegirArticulosFacturaCliente</Form>
<DesignClass>TForm</DesignClass> <DesignClass>TForm</DesignClass>

View File

@ -61,11 +61,25 @@ inherited fEditorFacturasCliente: TfEditorFacturasCliente
DisplayMode = nbdmImageAndText DisplayMode = nbdmImageAndText
end end
end end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 842 ExplicitWidth = 842
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitLeft = 427
ExplicitWidth = 66 ExplicitWidth = 66
object TBXItem41: TTBXItem object TBXItem41: TTBXItem
Action = actInformes Action = actInformes

View File

@ -16,7 +16,8 @@ uses
cxStyles, cxCustomData, cxStyles, cxCustomData,
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid; cxGridTableView, cxGridDBTableView, cxGrid, StdCtrls, cxContainer, cxTextEdit,
cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox;
type type
@ -48,27 +49,33 @@ type
procedure actEnviarEMailUpdate(Sender: TObject); procedure actEnviarEMailUpdate(Sender: TObject);
procedure actEnviarEMailExecute(Sender: TObject); procedure actEnviarEMailExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private private
FFacturas: IBizFacturaCliente; FFacturas: IBizFacturaCliente;
FController : IFacturasClienteController; FController : IFacturasClienteController;
protected protected
function GetFacturas: IBizFacturaCliente; function GetFacturas: IBizFacturaCliente;
procedure SetFacturas(const Value: IBizFacturaCliente); procedure SetFacturas(const Value: IBizFacturaCliente);
function GetController : IFacturasClienteController; virtual; function GetController : IFacturasClienteController; virtual;
procedure SetController (const Value : IFacturasClienteController); virtual; procedure SetController (const Value : IFacturasClienteController); virtual;
procedure NuevoInterno; override; procedure NuevoInterno; override;
procedure EliminarInterno; override; procedure EliminarInterno; override;
procedure ModificarInterno; override; procedure ModificarInterno; override;
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas; property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas;
property Controller : IFacturasClienteController read GetController write SetController; property Controller : IFacturasClienteController read GetController write SetController;
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
procedure PonerTitulos(const ATitulo: string = ''); override;
end; end;
@ -269,6 +276,8 @@ end;
procedure TfEditorFacturasCliente.FormShow(Sender: TObject); procedure TfEditorFacturasCliente.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -371,6 +380,13 @@ begin
end; end;
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); procedure TfEditorFacturasCliente.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -426,17 +442,37 @@ begin
end; end;
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); procedure TfEditorFacturasCliente.SetController(const Value: IFacturasClienteController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
end; end;
procedure TfEditorFacturasCliente.SetFacturas(const Value: IBizFacturaCliente); procedure TfEditorFacturasCliente.SetFacturas(const Value: IBizFacturaCliente);
begin begin
FFacturas := Value; FFacturas := Value;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then if Assigned(FFacturas) then
(ViewGrid as IViewFacturasCliente).Facturas := Facturas; 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;
end. end.

View File

@ -50,6 +50,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor; function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor;
function ExtraerSeleccionados(ARecibosProveedor: IBizFacturaProveedor) : IBizFacturaProveedor; function ExtraerSeleccionados(ARecibosProveedor: IBizFacturaProveedor) : IBizFacturaProveedor;
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TFacturasProveedorController = class(TControllerBase, IFacturasProveedorController) TFacturasProveedorController = class(TControllerBase, IFacturasProveedorController)
@ -113,6 +116,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor; function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor;
function ExtraerSeleccionados(AFacturasProveedor: IBizFacturaProveedor) : IBizFacturaProveedor; function ExtraerSeleccionados(AFacturasProveedor: IBizFacturaProveedor) : IBizFacturaProveedor;
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -358,6 +364,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TFacturasProveedorController.DarListaAnosFacturas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TFacturasProveedorController.DescartarCambios(AFactura: IBizFacturaProveedor); procedure TFacturasProveedorController.DescartarCambios(AFactura: IBizFacturaProveedor);
begin begin
if not Assigned(AFactura) then if not Assigned(AFactura) then
@ -737,6 +748,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; 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); procedure TFacturasProveedorController.FiltrarEmpresa(AFactura: IBizFacturaProveedor);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -444,4 +444,28 @@ inherited DataModuleFacturasProveedor: TDataModuleFacturasProveedor
Left = 368 Left = 368
Top = 232 Top = 232
end end
object tbl_ListaAnosFacturas: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
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 = 208
end
object ds_ListaAnosFacturas: TDADataSource
DataSet = tbl_ListaAnosFacturas.Dataset
DataTable = tbl_ListaAnosFacturas
Left = 208
Top = 160
end
end end

View File

@ -23,6 +23,8 @@ type
ds_FacturasProveedor_Detalles: TDADataSource; ds_FacturasProveedor_Detalles: TDADataSource;
tbl_FacturasProveedor_Pedidos: TDAMemDataTable; tbl_FacturasProveedor_Pedidos: TDAMemDataTable;
ds_FacturasProveedor_Pedidos: TDADataSource; ds_FacturasProveedor_Pedidos: TDADataSource;
tbl_ListaAnosFacturas: TDAMemDataTable;
ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
function _GetDetalles : IBizDetallesFacturaProveedor; function _GetDetalles : IBizDetallesFacturaProveedor;
@ -34,6 +36,8 @@ type
// Report // Report
function GetReport(const AFacturaID: String): Binary; function GetReport(const AFacturaID: String): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -98,6 +102,30 @@ begin
end; end;
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; function TDataModuleFacturasProveedor.GetItem(const ID: Integer): IBizFacturaProveedor;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -9,6 +9,7 @@ uses
type type
IDataModuleFacturasProveedor = interface IDataModuleFacturasProveedor = interface
['{FD0F5B2F-5556-4031-86F0-EFF96805FD66}'] ['{FD0F5B2F-5556-4031-86F0-EFF96805FD66}']
function GetAnosItems : TStringList;
function GetItems: IBizFacturaProveedor; function GetItems: IBizFacturaProveedor;
function GetItem(const ID : Integer) : IBizFacturaProveedor; function GetItem(const ID : Integer) : IBizFacturaProveedor;
function NewItem : IBizFacturaProveedor; function NewItem : IBizFacturaProveedor;

View File

@ -9,15 +9,23 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_FacturasProveedor = '{FF3B435F-FC16-4D50-A208-6783A0728850}'; RID_ListaAnosFacturas = '{B75825C2-3B8D-4DF1-AF22-024910F5FBD9}';
RID_FacturasProveedor_Detalles = '{20EEDDBF-D1E1-4000-975B-D59C7740F875}'; RID_FacturasProveedor = '{44FD4DE6-500F-4F58-A58C-97CF98028CD2}';
RID_FacturasProveedor_Pedidos = '{2875F854-3655-4217-910B-6D4DE734817F}'; RID_FacturasProveedor_Detalles = '{1CB49BE9-8421-4FD5-80E8-12FFC6360422}';
RID_FacturasProveedor_Pedidos = '{961FA245-B4B9-478F-8B57-34025D5C9EEB}';
{ Data table names } { Data table names }
nme_ListaAnosFacturas = 'ListaAnosFacturas';
nme_FacturasProveedor = 'FacturasProveedor'; nme_FacturasProveedor = 'FacturasProveedor';
nme_FacturasProveedor_Detalles = 'FacturasProveedor_Detalles'; nme_FacturasProveedor_Detalles = 'FacturasProveedor_Detalles';
nme_FacturasProveedor_Pedidos = 'FacturasProveedor_Pedidos'; nme_FacturasProveedor_Pedidos = 'FacturasProveedor_Pedidos';
{ ListaAnosFacturas fields }
fld_ListaAnosFacturasANO = 'ANO';
{ ListaAnosFacturas field indexes }
idx_ListaAnosFacturasANO = 0;
{ FacturasProveedor fields } { FacturasProveedor fields }
fld_FacturasProveedorID = 'ID'; fld_FacturasProveedorID = 'ID';
fld_FacturasProveedorID_EMPRESA = 'ID_EMPRESA'; fld_FacturasProveedorID_EMPRESA = 'ID_EMPRESA';
@ -143,9 +151,44 @@ const
idx_FacturasProveedor_PedidosPROVEEDOR = 6; idx_FacturasProveedor_PedidosPROVEEDOR = 6;
type type
{ IListaAnosFacturas }
IListaAnosFacturas = interface(IDAStronglyTypedDataTable)
['{CB673572-AD31-405A-9EF0-0FC870012A4E}']
{ 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 }
IFacturasProveedor = interface(IDAStronglyTypedDataTable) IFacturasProveedor = interface(IDAStronglyTypedDataTable)
['{890AD02A-06A6-4529-91FE-5FDB296787A3}'] ['{20CB371E-32B4-45B7-B925-7DAF93C6F093}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -564,7 +607,7 @@ type
{ IFacturasProveedor_Detalles } { IFacturasProveedor_Detalles }
IFacturasProveedor_Detalles = interface(IDAStronglyTypedDataTable) IFacturasProveedor_Detalles = interface(IDAStronglyTypedDataTable)
['{84D37F36-0D2C-4509-83AC-5D2C4B5365DF}'] ['{AE1A2F3E-33E1-4593-A397-EF5B9520D17E}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -779,7 +822,7 @@ type
{ IFacturasProveedor_Pedidos } { IFacturasProveedor_Pedidos }
IFacturasProveedor_Pedidos = interface(IDAStronglyTypedDataTable) IFacturasProveedor_Pedidos = interface(IDAStronglyTypedDataTable)
['{ABC0DDB3-7231-4FF1-8AB7-5C99F75F480D}'] ['{00E2CBCC-20FA-40E8-A713-06794CC6A2B1}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -888,6 +931,39 @@ implementation
uses Variants, uROBinaryHelpers; 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 } { TFacturasProveedorDataTableRules }
constructor TFacturasProveedorDataTableRules.Create(aDataTable: TDADataTable); constructor TFacturasProveedorDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -2108,6 +2184,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosFacturas, TListaAnosFacturasDataTableRules);
RegisterDataTableRules(RID_FacturasProveedor, TFacturasProveedorDataTableRules); RegisterDataTableRules(RID_FacturasProveedor, TFacturasProveedorDataTableRules);
RegisterDataTableRules(RID_FacturasProveedor_Detalles, TFacturasProveedor_DetallesDataTableRules); RegisterDataTableRules(RID_FacturasProveedor_Detalles, TFacturasProveedor_DetallesDataTableRules);
RegisterDataTableRules(RID_FacturasProveedor_Pedidos, TFacturasProveedor_PedidosDataTableRules); RegisterDataTableRules(RID_FacturasProveedor_Pedidos, TFacturasProveedor_PedidosDataTableRules);

View File

@ -9,14 +9,49 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_FacturasProveedorDelta = '{2730D1DB-B404-41F5-BAFB-3C04F5CE8911}'; RID_ListaAnosFacturasDelta = '{EC0C9C41-F75A-44AF-9563-C1BF7C94797E}';
RID_FacturasProveedor_DetallesDelta = '{9550F90F-A4DD-4C53-87E1-486C0B219348}'; RID_FacturasProveedorDelta = '{E6CC20F4-E176-4296-8598-60A05EE8A3BA}';
RID_FacturasProveedor_PedidosDelta = '{14838498-B2C3-4AF5-B92E-4B250F856A69}'; RID_FacturasProveedor_DetallesDelta = '{F1E67867-CD3F-4CAD-A9E2-103852351589}';
RID_FacturasProveedor_PedidosDelta = '{F8DF3A8E-57BE-4D89-AA51-C60A1A6845F0}';
type type
{ IListaAnosFacturasDelta }
IListaAnosFacturasDelta = interface(IListaAnosFacturas)
['{EC0C9C41-F75A-44AF-9563-C1BF7C94797E}']
{ 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 }
IFacturasProveedorDelta = interface(IFacturasProveedor) IFacturasProveedorDelta = interface(IFacturasProveedor)
['{2730D1DB-B404-41F5-BAFB-3C04F5CE8911}'] ['{E6CC20F4-E176-4296-8598-60A05EE8A3BA}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -435,7 +470,7 @@ type
{ IFacturasProveedor_DetallesDelta } { IFacturasProveedor_DetallesDelta }
IFacturasProveedor_DetallesDelta = interface(IFacturasProveedor_Detalles) IFacturasProveedor_DetallesDelta = interface(IFacturasProveedor_Detalles)
['{9550F90F-A4DD-4C53-87E1-486C0B219348}'] ['{F1E67867-CD3F-4CAD-A9E2-103852351589}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_FACTURAValue : Integer; function GetOldID_FACTURAValue : Integer;
@ -649,7 +684,7 @@ type
{ IFacturasProveedor_PedidosDelta } { IFacturasProveedor_PedidosDelta }
IFacturasProveedor_PedidosDelta = interface(IFacturasProveedor_Pedidos) IFacturasProveedor_PedidosDelta = interface(IFacturasProveedor_Pedidos)
['{14838498-B2C3-4AF5-B92E-4B250F856A69}'] ['{F8DF3A8E-57BE-4D89-AA51-C60A1A6845F0}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_FACTURAValue : Integer; function GetOldID_FACTURAValue : Integer;
@ -758,6 +793,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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 } { TFacturasProveedorBusinessProcessorRules }
constructor TFacturasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TFacturasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2539,6 +2617,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosFacturasDelta, TListaAnosFacturasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasProveedorDelta, TFacturasProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasProveedorDelta, TFacturasProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasProveedor_DetallesDelta, TFacturasProveedor_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasProveedor_DetallesDelta, TFacturasProveedor_DetallesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_FacturasProveedor_PedidosDelta, TFacturasProveedor_PedidosBusinessProcessorRules); RegisterBusinessProcessorRules(RID_FacturasProveedor_PedidosDelta, TFacturasProveedor_PedidosBusinessProcessorRules);

View File

@ -15,6 +15,33 @@ object srvFacturasProveedor: TsrvFacturasProveedor
DataDictionary = DataDictionary DataDictionary = DataDictionary
Diagrams = Diagrams Diagrams = Diagrams
Datasets = < 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 = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -38,7 +38,7 @@ inherited fEditorFacturasProveedor: TfEditorFacturasProveedor
Width = 849 Width = 849
ExplicitWidth = 849 ExplicitWidth = 849
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 775 ExplicitWidth = 849
object TBXSubmenuItem2: TTBXSubmenuItem [0] object TBXSubmenuItem2: TTBXSubmenuItem [0]
Caption = 'Nuevo' Caption = 'Nuevo'
DisplayMode = nbdmImageAndText DisplayMode = nbdmImageAndText
@ -58,11 +58,25 @@ inherited fEditorFacturasProveedor: TfEditorFacturasProveedor
Visible = False Visible = False
end end
end end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 849 ExplicitWidth = 849
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitLeft = 427
ExplicitWidth = 66 ExplicitWidth = 66
object TBXItem40: TTBXItem object TBXItem40: TTBXItem
Action = actInformes Action = actInformes

View File

@ -39,6 +39,8 @@ type
procedure actNuevaFacturaExecute(Sender: TObject); procedure actNuevaFacturaExecute(Sender: TObject);
procedure actNuevoAbonoExecute(Sender: TObject); procedure actNuevoAbonoExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private private
FFacturas: IBizFacturaProveedor; FFacturas: IBizFacturaProveedor;
FController : IFacturasProveedorController; FController : IFacturasProveedorController;
@ -48,12 +50,15 @@ type
function GetController : IFacturasProveedorController; virtual; function GetController : IFacturasProveedorController; virtual;
procedure SetController (const Value : IFacturasProveedorController); virtual; procedure SetController (const Value : IFacturasProveedorController); virtual;
procedure NuevoInterno; override; procedure NuevoInterno; override;
procedure EliminarInterno; override; procedure EliminarInterno; override;
procedure ModificarInterno; override; procedure ModificarInterno; override;
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public public
procedure PonerTitulos(const ATitulo: string = ''); override; procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas; property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas;
@ -245,6 +250,8 @@ end;
procedure TfEditorFacturasProveedor.FormShow(Sender: TObject); procedure TfEditorFacturasProveedor.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -344,6 +351,13 @@ begin
end; end;
end; 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); procedure TfEditorFacturasProveedor.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -396,17 +410,37 @@ begin
} }
end; end;
procedure TfEditorFacturasProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
inherited;
end;
procedure TfEditorFacturasProveedor.SetController(const Value: IFacturasProveedorController); procedure TfEditorFacturasProveedor.SetController(const Value: IFacturasProveedorController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
end; end;
procedure TfEditorFacturasProveedor.SetFacturas(const Value: IBizFacturaProveedor); procedure TfEditorFacturasProveedor.SetFacturas(const Value: IBizFacturaProveedor);
begin begin
FFacturas := Value; FFacturas := Value;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then if Assigned(FFacturas) then
(ViewGrid as IViewFacturasProveedor).Facturas := Facturas; 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;
end. end.

View File

@ -4,7 +4,7 @@ interface
uses uses
SysUtils, uDADataTable, Classes, SysUtils, uDADataTable,
uControllerBase, uIDataModulePedidosProveedor, uProveedoresController, uControllerBase, uIDataModulePedidosProveedor, uProveedoresController,
uDetallesPedidoProveedorController, uBizPedidosProveedor; uDetallesPedidoProveedorController, uBizPedidosProveedor;
@ -56,7 +56,10 @@ type
procedure EnviarPedidoPorEMail(APedido: IBizPedidoProveedor); procedure EnviarPedidoPorEMail(APedido: IBizPedidoProveedor);
Procedure AsignarIDObra(APedido: IBizPedidoProveedor; const IDObra: Variant); Procedure AsignarIDObra(APedido: IBizPedidoProveedor; const IDObra: Variant);
Procedure AsignarIDAlmacen(APedido: IBizPedidoProveedor; const IDAlmacen: Variant); Procedure AsignarIDAlmacen(APedido: IBizPedidoProveedor; const IDAlmacen: Variant);
function DarListaAnosPedidos: TStringList;
procedure FiltrarAno(APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TPedidosProveedorController = class(TControllerBase, IPedidosProveedorController) TPedidosProveedorController = class(TControllerBase, IPedidosProveedorController)
@ -129,6 +132,9 @@ type
Procedure AsignarIDObra(APedido: IBizPedidoProveedor; const IDObra: Variant); Procedure AsignarIDObra(APedido: IBizPedidoProveedor; const IDObra: Variant);
Procedure AsignarIDAlmacen(APedido: IBizPedidoProveedor; const IDAlmacen: Variant); Procedure AsignarIDAlmacen(APedido: IBizPedidoProveedor; const IDAlmacen: Variant);
function DarListaAnosPedidos: TStringList;
procedure FiltrarAno(APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -139,7 +145,7 @@ uses
uBizDetallesPedidoProveedor, uBizContactos, uDataTableUtils, uDataModuleUsuarios, uBizDetallesPedidoProveedor, uBizContactos, uDataTableUtils, uDataModuleUsuarios,
schPedidosProveedorClient_Intf, uDAInterfaces, uPedidosProveedorReportController, schPedidosProveedorClient_Intf, uDAInterfaces, uPedidosProveedorReportController,
uDateUtils, uIEditorPedidoProveedor, uIEditorElegirPedidosProveedor, uDateUtils, uIEditorPedidoProveedor, uIEditorElegirPedidosProveedor,
Dialogs, uIEditorDireccionEntregaPedidoProveedor, Classes, uIEditorSituacionPedidoProveedor, Dialogs, uIEditorDireccionEntregaPedidoProveedor, uIEditorSituacionPedidoProveedor,
Variants, uSistemaFunc, uEMailUtils, uDialogElegirEMail, uIntegerListUtils, uStringsUtils; Variants, uSistemaFunc, uEMailUtils, uDialogElegirEMail, uIntegerListUtils, uStringsUtils;
{ TPedidosProveedorController } { TPedidosProveedorController }
@ -291,6 +297,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TPedidosProveedorController.DarListaAnosPedidos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TPedidosProveedorController.DescartarCambios(APedido: IBizPedidoProveedor); procedure TPedidosProveedorController.DescartarCambios(APedido: IBizPedidoProveedor);
begin begin
if not Assigned(APedido) then if not Assigned(APedido) then
@ -788,6 +799,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; end;
procedure TPedidosProveedorController.FiltrarAno(APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
APedido.DataTable.DynamicWhere.Clear;
APedido.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with APedido.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_PedidosProveedorFECHA_PEDIDO), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_PedidosProveedorFECHA_PEDIDO), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TPedidosProveedorController.FiltrarEmpresa(APedido: IBizPedidoProveedor); procedure TPedidosProveedorController.FiltrarEmpresa(APedido: IBizPedidoProveedor);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModulePedidosProveedor: TDataModulePedidosProveedor inherited DataModulePedidosProveedor: TDataModulePedidosProveedor
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 218 Height = 301
Width = 621 Width = 621
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -508,4 +508,28 @@ inherited DataModulePedidosProveedor: TDataModulePedidosProveedor
Left = 296 Left = 296
Top = 32 Top = 32
end end
object tbl_ListaAnosPedidos: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
Params = <>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_PedidosProveedor
DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
LogicalName = 'ListaAnosPedidos'
IndexDefs = <>
Left = 168
Top = 192
end
object ds_ListaAnosPedidos: TDADataSource
DataSet = tbl_ListaAnosPedidos.Dataset
DataTable = tbl_ListaAnosPedidos
Left = 168
Top = 144
end
end end

View File

@ -25,6 +25,8 @@ type
ds_PedidosProveedor_Articulos_Pendientes: TDADataSource; ds_PedidosProveedor_Articulos_Pendientes: TDADataSource;
tbl_PedidosProveedor_Detalles: TDAMemDataTable; tbl_PedidosProveedor_Detalles: TDAMemDataTable;
ds_PedidosProveedor_Detalles: TDADataSource; ds_PedidosProveedor_Detalles: TDADataSource;
tbl_ListaAnosPedidos: TDAMemDataTable;
ds_ListaAnosPedidos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
@ -49,6 +51,8 @@ type
function GetRptPDFPedido(const AID: Integer; function GetRptPDFPedido(const AID: Integer;
const ImprimirPrecio: Boolean = True; const ImprimirPrecio: Boolean = True;
const ImprimirRefProveedor: Boolean = True): Binary; const ImprimirRefProveedor: Boolean = True): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -134,6 +138,30 @@ begin
end; end;
end; end;
function TDataModulePedidosProveedor.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosPedidos 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 TDataModulePedidosProveedor.GetArticulosPendientes(const IDPedido: Integer): IBizDetallesPedidoProveedorPend; function TDataModulePedidosProveedor.GetArticulosPendientes(const IDPedido: Integer): IBizDetallesPedidoProveedorPend;
var var
AArticulos : TDAMemDataTable; AArticulos : TDAMemDataTable;

View File

@ -3,11 +3,12 @@ unit uIDataModulePedidosProveedor;
interface interface
uses uses
uBizPedidosProveedor, uBizDetallesPedidoProveedor; Classes, uBizPedidosProveedor, uBizDetallesPedidoProveedor;
type type
IDataModulePedidosProveedor = interface IDataModulePedidosProveedor = interface
['{280AA760-26CC-4962-AB08-6C473199DF86}'] ['{280AA760-26CC-4962-AB08-6C473199DF86}']
function GetAnosItems : TStringList;
function GetItems: IBizPedidoProveedor; function GetItems: IBizPedidoProveedor;
function GetItem(const ID : Integer) : IBizPedidoProveedor; function GetItem(const ID : Integer) : IBizPedidoProveedor;
function NewItem : IBizPedidoProveedor; function NewItem : IBizPedidoProveedor;

View File

@ -9,15 +9,23 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_PedidosProveedor = '{E2652269-320B-4D43-9416-4F5D0C4E23D6}'; RID_ListaAnosPedidos = '{BB4ACD7F-346E-4B72-9B4C-4765E709D911}';
RID_PedidosProveedor_Detalles = '{C42EB1EF-95E8-4856-8C5D-8E1A612ADBB5}'; RID_PedidosProveedor = '{FB6CB8F5-5944-469C-848F-C2B228E6115F}';
RID_PedidosProveedor_Articulos_Pendientes = '{8D6A57CC-6CD9-4223-93A1-94090350476A}'; RID_PedidosProveedor_Detalles = '{BB197BA1-5EB9-416C-A7DD-1B8C3097AE72}';
RID_PedidosProveedor_Articulos_Pendientes = '{D8031329-D44D-436D-90CC-28FFBF9B3485}';
{ Data table names } { Data table names }
nme_ListaAnosPedidos = 'ListaAnosPedidos';
nme_PedidosProveedor = 'PedidosProveedor'; nme_PedidosProveedor = 'PedidosProveedor';
nme_PedidosProveedor_Detalles = 'PedidosProveedor_Detalles'; nme_PedidosProveedor_Detalles = 'PedidosProveedor_Detalles';
nme_PedidosProveedor_Articulos_Pendientes = 'PedidosProveedor_Articulos_Pendientes'; nme_PedidosProveedor_Articulos_Pendientes = 'PedidosProveedor_Articulos_Pendientes';
{ ListaAnosPedidos fields }
fld_ListaAnosPedidosANO = 'ANO';
{ ListaAnosPedidos field indexes }
idx_ListaAnosPedidosANO = 0;
{ PedidosProveedor fields } { PedidosProveedor fields }
fld_PedidosProveedorID = 'ID'; fld_PedidosProveedorID = 'ID';
fld_PedidosProveedorID_EMPRESA = 'ID_EMPRESA'; fld_PedidosProveedorID_EMPRESA = 'ID_EMPRESA';
@ -159,9 +167,44 @@ const
idx_PedidosProveedor_Articulos_PendientesREFERENCIA_PROVEEDOR = 5; idx_PedidosProveedor_Articulos_PendientesREFERENCIA_PROVEEDOR = 5;
type type
{ IListaAnosPedidos }
IListaAnosPedidos = interface(IDAStronglyTypedDataTable)
['{F50ECDED-B2E2-4A7E-A160-91F65194D336}']
{ 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;
{ TListaAnosPedidosDataTableRules }
TListaAnosPedidosDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosPedidos)
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;
{ IPedidosProveedor } { IPedidosProveedor }
IPedidosProveedor = interface(IDAStronglyTypedDataTable) IPedidosProveedor = interface(IDAStronglyTypedDataTable)
['{7AAC7427-C170-452F-98E6-7C76C7861CD9}'] ['{52592A3B-FB1A-438A-8B4D-56335E373D8C}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -688,7 +731,7 @@ type
{ IPedidosProveedor_Detalles } { IPedidosProveedor_Detalles }
IPedidosProveedor_Detalles = interface(IDAStronglyTypedDataTable) IPedidosProveedor_Detalles = interface(IDAStronglyTypedDataTable)
['{63AB74B8-929A-447A-A847-03FCEB7B1654}'] ['{5D182AFF-F1C8-4C0C-A82B-E8F74B11F199}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -903,7 +946,7 @@ type
{ IPedidosProveedor_Articulos_Pendientes } { IPedidosProveedor_Articulos_Pendientes }
IPedidosProveedor_Articulos_Pendientes = interface(IDAStronglyTypedDataTable) IPedidosProveedor_Articulos_Pendientes = interface(IDAStronglyTypedDataTable)
['{C271A1BF-757D-4303-99EA-23C238D75AB6}'] ['{4EDB8973-E2C1-4B31-BAB1-1724233A993F}']
{ Property getters and setters } { Property getters and setters }
function GetID_PEDIDOValue: Integer; function GetID_PEDIDOValue: Integer;
procedure SetID_PEDIDOValue(const aValue: Integer); procedure SetID_PEDIDOValue(const aValue: Integer);
@ -1000,6 +1043,39 @@ implementation
uses Variants, uROBinaryHelpers; uses Variants, uROBinaryHelpers;
{ TListaAnosPedidosDataTableRules }
constructor TListaAnosPedidosDataTableRules.Create(aDataTable: TDADataTable);
begin
inherited;
end;
destructor TListaAnosPedidosDataTableRules.Destroy;
begin
inherited;
end;
function TListaAnosPedidosDataTableRules.GetANOValue: String;
begin
result := DataTable.Fields[idx_ListaAnosPedidosANO].AsString;
end;
procedure TListaAnosPedidosDataTableRules.SetANOValue(const aValue: String);
begin
DataTable.Fields[idx_ListaAnosPedidosANO].AsString := aValue;
end;
function TListaAnosPedidosDataTableRules.GetANOIsNull: boolean;
begin
result := DataTable.Fields[idx_ListaAnosPedidosANO].IsNull;
end;
procedure TListaAnosPedidosDataTableRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_ListaAnosPedidosANO].AsVariant := Null;
end;
{ TPedidosProveedorDataTableRules } { TPedidosProveedorDataTableRules }
constructor TPedidosProveedorDataTableRules.Create(aDataTable: TDADataTable); constructor TPedidosProveedorDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -2393,6 +2469,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosPedidos, TListaAnosPedidosDataTableRules);
RegisterDataTableRules(RID_PedidosProveedor, TPedidosProveedorDataTableRules); RegisterDataTableRules(RID_PedidosProveedor, TPedidosProveedorDataTableRules);
RegisterDataTableRules(RID_PedidosProveedor_Detalles, TPedidosProveedor_DetallesDataTableRules); RegisterDataTableRules(RID_PedidosProveedor_Detalles, TPedidosProveedor_DetallesDataTableRules);
RegisterDataTableRules(RID_PedidosProveedor_Articulos_Pendientes, TPedidosProveedor_Articulos_PendientesDataTableRules); RegisterDataTableRules(RID_PedidosProveedor_Articulos_Pendientes, TPedidosProveedor_Articulos_PendientesDataTableRules);

View File

@ -9,14 +9,49 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_PedidosProveedorDelta = '{B8E3C26F-6327-4643-9DD8-EAB3D15FDA84}'; RID_ListaAnosPedidosDelta = '{7413239D-F923-4D2D-885F-4083C7008226}';
RID_PedidosProveedor_DetallesDelta = '{64AC3126-C520-48D6-9555-5D59ABDCA7E6}'; RID_PedidosProveedorDelta = '{D1505641-F1C6-4565-823C-F14DC964DDC6}';
RID_PedidosProveedor_Articulos_PendientesDelta = '{6550B049-2DF2-4B23-AD8C-7DD1E6C96A08}'; RID_PedidosProveedor_DetallesDelta = '{E1572661-F1D9-4902-A018-60E27BF71613}';
RID_PedidosProveedor_Articulos_PendientesDelta = '{C1F7A9E2-4E27-4594-90D6-A830EBA65AF2}';
type type
{ IListaAnosPedidosDelta }
IListaAnosPedidosDelta = interface(IListaAnosPedidos)
['{7413239D-F923-4D2D-885F-4083C7008226}']
{ Property getters and setters }
function GetOldANOValue : String;
{ Properties }
property OldANO : String read GetOldANOValue;
end;
{ TListaAnosPedidosBusinessProcessorRules }
TListaAnosPedidosBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosPedidos, IListaAnosPedidosDelta)
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;
{ IPedidosProveedorDelta } { IPedidosProveedorDelta }
IPedidosProveedorDelta = interface(IPedidosProveedor) IPedidosProveedorDelta = interface(IPedidosProveedor)
['{B8E3C26F-6327-4643-9DD8-EAB3D15FDA84}'] ['{D1505641-F1C6-4565-823C-F14DC964DDC6}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -544,7 +579,7 @@ type
{ IPedidosProveedor_DetallesDelta } { IPedidosProveedor_DetallesDelta }
IPedidosProveedor_DetallesDelta = interface(IPedidosProveedor_Detalles) IPedidosProveedor_DetallesDelta = interface(IPedidosProveedor_Detalles)
['{64AC3126-C520-48D6-9555-5D59ABDCA7E6}'] ['{E1572661-F1D9-4902-A018-60E27BF71613}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_PEDIDOValue : Integer; function GetOldID_PEDIDOValue : Integer;
@ -758,7 +793,7 @@ type
{ IPedidosProveedor_Articulos_PendientesDelta } { IPedidosProveedor_Articulos_PendientesDelta }
IPedidosProveedor_Articulos_PendientesDelta = interface(IPedidosProveedor_Articulos_Pendientes) IPedidosProveedor_Articulos_PendientesDelta = interface(IPedidosProveedor_Articulos_Pendientes)
['{6550B049-2DF2-4B23-AD8C-7DD1E6C96A08}'] ['{C1F7A9E2-4E27-4594-90D6-A830EBA65AF2}']
{ Property getters and setters } { Property getters and setters }
function GetOldID_PEDIDOValue : Integer; function GetOldID_PEDIDOValue : Integer;
function GetOldREFERENCIAValue : String; function GetOldREFERENCIAValue : String;
@ -855,6 +890,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; Variants, uROBinaryHelpers, uDAInterfaces;
{ TListaAnosPedidosBusinessProcessorRules }
constructor TListaAnosPedidosBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
inherited;
end;
destructor TListaAnosPedidosBusinessProcessorRules.Destroy;
begin
inherited;
end;
function TListaAnosPedidosBusinessProcessorRules.GetANOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPedidosANO];
end;
function TListaAnosPedidosBusinessProcessorRules.GetANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPedidosANO]);
end;
function TListaAnosPedidosBusinessProcessorRules.GetOldANOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosPedidosANO];
end;
function TListaAnosPedidosBusinessProcessorRules.GetOldANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosPedidosANO]);
end;
procedure TListaAnosPedidosBusinessProcessorRules.SetANOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPedidosANO] := aValue;
end;
procedure TListaAnosPedidosBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPedidosANO] := Null;
end;
{ TPedidosProveedorBusinessProcessorRules } { TPedidosProveedorBusinessProcessorRules }
constructor TPedidosProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TPedidosProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2890,6 +2968,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosPedidosDelta, TListaAnosPedidosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidosProveedorDelta, TPedidosProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedorDelta, TPedidosProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidosProveedor_DetallesDelta, TPedidosProveedor_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedor_DetallesDelta, TPedidosProveedor_DetallesBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PedidosProveedor_Articulos_PendientesDelta, TPedidosProveedor_Articulos_PendientesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PedidosProveedor_Articulos_PendientesDelta, TPedidosProveedor_Articulos_PendientesBusinessProcessorRules);

View File

@ -13,6 +13,33 @@ object srvPedidosProveedor: TsrvPedidosProveedor
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_PEDIDO, 1,4)) as A' +
'NO'#10'from pedidos_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select di' +
'stinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosPedidos'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -49,12 +49,26 @@ inherited fEditorPedidosProveedor: TfEditorPedidosProveedor
Action = actEnviarEMail Action = actEnviarEMail
end end
end end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 700 ExplicitWidth = 700
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitWidth = 276 ExplicitLeft = 427
ExplicitWidth = 273
object TBXItem39: TTBXItem object TBXItem39: TTBXItem
Action = actRecibirPedido Action = actRecibirPedido
DisplayMode = nbdmImageAndText DisplayMode = nbdmImageAndText

View File

@ -43,6 +43,7 @@ type
procedure actEnviarEMailExecute(Sender: TObject); procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject); procedure actEnviarEMailUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected protected
FPedidos: IBizPedidoProveedor; FPedidos: IBizPedidoProveedor;
@ -53,12 +54,15 @@ type
function GetController : IPedidosProveedorController; virtual; function GetController : IPedidosProveedorController; virtual;
procedure SetController (const Value : IPedidosProveedorController); virtual; procedure SetController (const Value : IPedidosProveedorController); virtual;
procedure NuevoInterno; override; procedure NuevoInterno; override;
procedure ModificarInterno; override; procedure ModificarInterno; override;
procedure EliminarInterno; override; procedure EliminarInterno; override;
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public public
procedure PonerTitulos(const ATitulo: string = ''); override; procedure PonerTitulos(const ATitulo: string = ''); override;
@ -259,6 +263,8 @@ end;
procedure TfEditorPedidosProveedor.FormShow(Sender: TObject); procedure TfEditorPedidosProveedor.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -363,6 +369,13 @@ begin
FController.Ver(Pedidos); FController.Ver(Pedidos);
end; end;
procedure TfEditorPedidosProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(Pedidos, DynWhereDataTable, Text);
if Pedidos.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorPedidosProveedor.PonerTitulos(const ATitulo: string); procedure TfEditorPedidosProveedor.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -419,17 +432,37 @@ begin
end; end;
end; end;
procedure TfEditorPedidosProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPedidos;
inherited;
end;
procedure TfEditorPedidosProveedor.SetController(const Value: IPedidosProveedorController); procedure TfEditorPedidosProveedor.SetController(const Value: IPedidosProveedorController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPedidos;
end; end;
procedure TfEditorPedidosProveedor.SetPedidos(const Value: IBizPedidoProveedor); procedure TfEditorPedidosProveedor.SetPedidos(const Value: IBizPedidoProveedor);
begin begin
FPedidos := Value; FPedidos := Value;
dsDataTable.DataTable := FPedidos.DataTable;
if Assigned(ViewGrid) then if Assigned(FPedidos) then
(ViewGrid as IViewPedidosProveedor).Pedidos := Pedidos; 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 := FPedidos.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FPedidos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPedidosProveedor).Pedidos := Pedidos;
end;
end; end;
end. end.

View File

@ -64,6 +64,9 @@ type
function CambiarSituacion(APresupuesto : IBizPresupuestoCliente; Situacion: String; FechaDecision: TDateTime; AllItems: Boolean = false): Boolean; function CambiarSituacion(APresupuesto : IBizPresupuestoCliente; Situacion: String; FechaDecision: TDateTime; AllItems: Boolean = false): Boolean;
procedure BorrarBonificacion(APresupuesto : IBizPresupuestoCliente); procedure BorrarBonificacion(APresupuesto : IBizPresupuestoCliente);
function DarListaAnosPresupuestos: TStringList;
procedure FiltrarAno(APresupuesto: IBizPresupuestoCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TPresupuestosClienteController = class(TControllerBase, IPresupuestosClienteController) TPresupuestosClienteController = class(TControllerBase, IPresupuestosClienteController)
@ -137,7 +140,10 @@ type
procedure EnviarPresupuestoPorEMail(APresupuesto : IBizPresupuestoCliente); procedure EnviarPresupuestoPorEMail(APresupuesto : IBizPresupuestoCliente);
function CambiarSituacion(APresupuesto : IBizPresupuestoCliente; Situacion: String; FechaDecision: TDateTime; AllItems: Boolean = false): Boolean; function CambiarSituacion(APresupuesto : IBizPresupuestoCliente; Situacion: String; FechaDecision: TDateTime; AllItems: Boolean = false): Boolean;
procedure BorrarBonificacion(APresupuesto : IBizPresupuestoCliente); procedure BorrarBonificacion(APresupuesto : IBizPresupuestoCliente);
function DarListaAnosPresupuestos: TStringList;
procedure FiltrarAno(APresupuesto: IBizPresupuestoCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -388,6 +394,11 @@ begin
end; end;
} }
function TPresupuestosClienteController.DarListaAnosPresupuestos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TPresupuestosClienteController.DescartarCambios(APresupuesto: IBizPresupuestoCliente); procedure TPresupuestosClienteController.DescartarCambios(APresupuesto: IBizPresupuestoCliente);
begin begin
if not Assigned(APresupuesto) then if not Assigned(APresupuesto) then
@ -824,6 +835,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; end;
procedure TPresupuestosClienteController.FiltrarAno(APresupuesto: IBizPresupuestoCliente; ADynWhereDataTable: WideString;const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
APresupuesto.DataTable.DynamicWhere.Clear;
APresupuesto.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with APresupuesto.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_PresupuestosClienteFECHA_PRESUPUESTO), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_PresupuestosClienteFECHA_PRESUPUESTO), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TPresupuestosClienteController.FiltrarEmpresa(APresupuesto: IBizPresupuestoCliente); procedure TPresupuestosClienteController.FiltrarEmpresa(APresupuesto: IBizPresupuestoCliente);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 213 Height = 370
Width = 603 Width = 603
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -385,7 +385,31 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel Channel = dmConexion.ROChannel
ServiceName = 'srvGestorDocumentos' ServiceName = 'srvGestorDocumentos'
Left = 56
Top = 216
end
object tbl_ListaAnosPresupuestos: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
Params = <>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_PresupuestosCliente
DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
LogicalName = 'ListaAnosPresupuestos'
IndexDefs = <>
Left = 248 Left = 248
Top = 152 Top = 192
end
object ds_ListaAnosPresupuestos: TDADataSource
DataSet = tbl_ListaAnosPresupuestos.Dataset
DataTable = tbl_ListaAnosPresupuestos
Left = 248
Top = 144
end end
end end

View File

@ -23,6 +23,8 @@ type
tbl_PresupuestosCliente_Detalles: TDAMemDataTable; tbl_PresupuestosCliente_Detalles: TDAMemDataTable;
ds_PresupuestosCliente_Detalles: TDADataSource; ds_PresupuestosCliente_Detalles: TDADataSource;
RORemoteService1: TRORemoteService; RORemoteService1: TRORemoteService;
tbl_ListaAnosPresupuestos: TDAMemDataTable;
ds_ListaAnosPresupuestos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
private private
@ -43,6 +45,8 @@ type
function GetRptWordPresupuesto(const AID: Integer): Binary; function GetRptWordPresupuesto(const AID: Integer): Binary;
function GetRptWordCertificadoTrabajos(const AID: Integer): Binary; function GetRptWordCertificadoTrabajos(const AID: Integer): Binary;
function GetRptPDFPresupuesto(const AID: Integer): Binary; function GetRptPDFPresupuesto(const AID: Integer): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -139,6 +143,30 @@ begin
end; end;
end; end;
function TDataModulePresupuestosCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosPresupuestos 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 TDataModulePresupuestosCliente.GetItem(const ID: Integer): IBizPresupuestoCliente; function TDataModulePresupuestosCliente.GetItem(const ID: Integer): IBizPresupuestoCliente;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -9,6 +9,7 @@ uses
type type
IDataModulePresupuestosCliente = interface IDataModulePresupuestosCliente = interface
['{F0DDD126-9E62-4FEC-A849-FDCA75718F5B}'] ['{F0DDD126-9E62-4FEC-A849-FDCA75718F5B}']
function GetAnosItems : TStringList;
function GetItems: IBizPresupuestoCliente; overload; function GetItems: IBizPresupuestoCliente; overload;
function GetItems(const AListaID: TIntegerList) : IBizPresupuestoCliente; overload; function GetItems(const AListaID: TIntegerList) : IBizPresupuestoCliente; overload;
function GetItem(const ID : Integer) : IBizPresupuestoCliente; function GetItem(const ID : Integer) : IBizPresupuestoCliente;

View File

@ -9,13 +9,21 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_PresupuestosCliente = '{02B965D3-E8B3-4393-9538-6FEB6D1A79FE}'; RID_ListaAnosPresupuestos = '{B4D25BFF-BFAC-4141-925F-82DC23A4D3A2}';
RID_PresupuestosCliente_Detalles = '{E8F6A069-9B83-4BCB-A906-46BC95B992ED}'; RID_PresupuestosCliente = '{BAEC8917-A7DC-4606-AE7E-B8B8748290B1}';
RID_PresupuestosCliente_Detalles = '{C1C9402A-CDC5-4B77-BE8A-5907A6423EEC}';
{ Data table names } { Data table names }
nme_ListaAnosPresupuestos = 'ListaAnosPresupuestos';
nme_PresupuestosCliente = 'PresupuestosCliente'; nme_PresupuestosCliente = 'PresupuestosCliente';
nme_PresupuestosCliente_Detalles = 'PresupuestosCliente_Detalles'; nme_PresupuestosCliente_Detalles = 'PresupuestosCliente_Detalles';
{ ListaAnosPresupuestos fields }
fld_ListaAnosPresupuestosANO = 'ANO';
{ ListaAnosPresupuestos field indexes }
idx_ListaAnosPresupuestosANO = 0;
{ PresupuestosCliente fields } { PresupuestosCliente fields }
fld_PresupuestosClienteID = 'ID'; fld_PresupuestosClienteID = 'ID';
fld_PresupuestosClienteID_EMPRESA = 'ID_EMPRESA'; fld_PresupuestosClienteID_EMPRESA = 'ID_EMPRESA';
@ -125,9 +133,44 @@ const
idx_PresupuestosCliente_DetallesREFERENCIA_PROVEEDOR = 14; idx_PresupuestosCliente_DetallesREFERENCIA_PROVEEDOR = 14;
type type
{ IListaAnosPresupuestos }
IListaAnosPresupuestos = interface(IDAStronglyTypedDataTable)
['{AA0035CA-BE66-4730-A30B-E09CE7BB0325}']
{ 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;
{ TListaAnosPresupuestosDataTableRules }
TListaAnosPresupuestosDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosPresupuestos)
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;
{ IPresupuestosCliente } { IPresupuestosCliente }
IPresupuestosCliente = interface(IDAStronglyTypedDataTable) IPresupuestosCliente = interface(IDAStronglyTypedDataTable)
['{F472CCF9-F91D-40E6-A3CF-8EDCBBF40A3A}'] ['{294F97CB-1951-4F11-A7D9-2433A2E0237F}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -570,7 +613,7 @@ type
{ IPresupuestosCliente_Detalles } { IPresupuestosCliente_Detalles }
IPresupuestosCliente_Detalles = interface(IDAStronglyTypedDataTable) IPresupuestosCliente_Detalles = interface(IDAStronglyTypedDataTable)
['{024EFB8C-2DF7-4523-85D9-3AE553B9A336}'] ['{6E73582D-E1A0-40EA-A96A-1993F55F76A8}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -775,6 +818,39 @@ implementation
uses Variants, uROBinaryHelpers; uses Variants, uROBinaryHelpers;
{ TListaAnosPresupuestosDataTableRules }
constructor TListaAnosPresupuestosDataTableRules.Create(aDataTable: TDADataTable);
begin
inherited;
end;
destructor TListaAnosPresupuestosDataTableRules.Destroy;
begin
inherited;
end;
function TListaAnosPresupuestosDataTableRules.GetANOValue: String;
begin
result := DataTable.Fields[idx_ListaAnosPresupuestosANO].AsString;
end;
procedure TListaAnosPresupuestosDataTableRules.SetANOValue(const aValue: String);
begin
DataTable.Fields[idx_ListaAnosPresupuestosANO].AsString := aValue;
end;
function TListaAnosPresupuestosDataTableRules.GetANOIsNull: boolean;
begin
result := DataTable.Fields[idx_ListaAnosPresupuestosANO].IsNull;
end;
procedure TListaAnosPresupuestosDataTableRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_ListaAnosPresupuestosANO].AsVariant := Null;
end;
{ TPresupuestosClienteDataTableRules } { TPresupuestosClienteDataTableRules }
constructor TPresupuestosClienteDataTableRules.Create(aDataTable: TDADataTable); constructor TPresupuestosClienteDataTableRules.Create(aDataTable: TDADataTable);
var var
@ -1872,6 +1948,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosPresupuestos, TListaAnosPresupuestosDataTableRules);
RegisterDataTableRules(RID_PresupuestosCliente, TPresupuestosClienteDataTableRules); RegisterDataTableRules(RID_PresupuestosCliente, TPresupuestosClienteDataTableRules);
RegisterDataTableRules(RID_PresupuestosCliente_Detalles, TPresupuestosCliente_DetallesDataTableRules); RegisterDataTableRules(RID_PresupuestosCliente_Detalles, TPresupuestosCliente_DetallesDataTableRules);

View File

@ -9,13 +9,48 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_PresupuestosClienteDelta = '{C8D94DD0-07E0-41C9-95E0-5FA8501BC80E}'; RID_ListaAnosPresupuestosDelta = '{B819407B-3A58-42FE-99D1-D735F8094AD1}';
RID_PresupuestosCliente_DetallesDelta = '{DFCABCBE-B322-4F22-A380-7DE112BF13DF}'; RID_PresupuestosClienteDelta = '{A00D261A-A215-445D-9DCC-C024662EA398}';
RID_PresupuestosCliente_DetallesDelta = '{8943CBEB-C17F-4C81-B0D7-E1FBF3B8445C}';
type type
{ IListaAnosPresupuestosDelta }
IListaAnosPresupuestosDelta = interface(IListaAnosPresupuestos)
['{B819407B-3A58-42FE-99D1-D735F8094AD1}']
{ Property getters and setters }
function GetOldANOValue : String;
{ Properties }
property OldANO : String read GetOldANOValue;
end;
{ TListaAnosPresupuestosBusinessProcessorRules }
TListaAnosPresupuestosBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosPresupuestos, IListaAnosPresupuestosDelta)
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;
{ IPresupuestosClienteDelta } { IPresupuestosClienteDelta }
IPresupuestosClienteDelta = interface(IPresupuestosCliente) IPresupuestosClienteDelta = interface(IPresupuestosCliente)
['{C8D94DD0-07E0-41C9-95E0-5FA8501BC80E}'] ['{A00D261A-A215-445D-9DCC-C024662EA398}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -461,7 +496,7 @@ type
{ IPresupuestosCliente_DetallesDelta } { IPresupuestosCliente_DetallesDelta }
IPresupuestosCliente_DetallesDelta = interface(IPresupuestosCliente_Detalles) IPresupuestosCliente_DetallesDelta = interface(IPresupuestosCliente_Detalles)
['{DFCABCBE-B322-4F22-A380-7DE112BF13DF}'] ['{8943CBEB-C17F-4C81-B0D7-E1FBF3B8445C}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_PRESUPUESTOValue : Integer; function GetOldID_PRESUPUESTOValue : Integer;
@ -666,6 +701,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; Variants, uROBinaryHelpers, uDAInterfaces;
{ TListaAnosPresupuestosBusinessProcessorRules }
constructor TListaAnosPresupuestosBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
inherited;
end;
destructor TListaAnosPresupuestosBusinessProcessorRules.Destroy;
begin
inherited;
end;
function TListaAnosPresupuestosBusinessProcessorRules.GetANOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPresupuestosANO];
end;
function TListaAnosPresupuestosBusinessProcessorRules.GetANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPresupuestosANO]);
end;
function TListaAnosPresupuestosBusinessProcessorRules.GetOldANOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosPresupuestosANO];
end;
function TListaAnosPresupuestosBusinessProcessorRules.GetOldANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosPresupuestosANO]);
end;
procedure TListaAnosPresupuestosBusinessProcessorRules.SetANOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPresupuestosANO] := aValue;
end;
procedure TListaAnosPresupuestosBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosPresupuestosANO] := Null;
end;
{ TPresupuestosClienteBusinessProcessorRules } { TPresupuestosClienteBusinessProcessorRules }
constructor TPresupuestosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TPresupuestosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var var
@ -2267,6 +2345,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosPresupuestosDelta, TListaAnosPresupuestosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PresupuestosClienteDelta, TPresupuestosClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PresupuestosClienteDelta, TPresupuestosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PresupuestosCliente_DetallesDelta, TPresupuestosCliente_DetallesBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PresupuestosCliente_DetallesDelta, TPresupuestosCliente_DetallesBusinessProcessorRules);

View File

@ -12,6 +12,33 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_PRESUPUESTO, 1,4))' +
' as ANO'#10'from presupuestos_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10's' +
'elect distinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosPresupuestos'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -124,7 +124,19 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente
Width = 805 Width = 805
ExplicitWidth = 805 ExplicitWidth = 805
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 775 ExplicitWidth = 805
end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 805 ExplicitWidth = 805
@ -147,11 +159,11 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente
end end
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 343 Left = 427
DockPos = 343 DockPos = 343
Visible = True Visible = True
ExplicitLeft = 343 ExplicitLeft = 427
ExplicitWidth = 418 ExplicitWidth = 378
object TBXItem43: TTBXItem object TBXItem43: TTBXItem
Action = actAceptar Action = actAceptar
DisplayMode = nbdmImageAndText DisplayMode = nbdmImageAndText

View File

@ -61,6 +61,7 @@ type
procedure actEnviarEMailExecute(Sender: TObject); procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject); procedure actEnviarEMailUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected protected
FPresupuestos: IBizPresupuestoCliente; FPresupuestos: IBizPresupuestoCliente;
@ -78,6 +79,7 @@ type
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que //Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo //sobreescribir este metodo
@ -439,6 +441,8 @@ end;
procedure TfEditorPresupuestosCliente.FormShow(Sender: TObject); procedure TfEditorPresupuestosCliente.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -515,6 +519,13 @@ begin
FController.Ver(Presupuestos); FController.Ver(Presupuestos);
end; end;
procedure TfEditorPresupuestosCliente.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(Presupuestos, DynWhereDataTable, Text);
if Presupuestos.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorPresupuestosCliente.PonerTitulos(const ATitulo: string); procedure TfEditorPresupuestosCliente.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -565,17 +576,37 @@ begin
APresupuestos := Nil; APresupuestos := Nil;
end; end;
procedure TfEditorPresupuestosCliente.RefrescarInterno;
begin
//Volvemos a cargar los años de los presupuestos
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPresupuestos;
inherited;
end;
procedure TfEditorPresupuestosCliente.SetController(const Value: IPresupuestosClienteController); procedure TfEditorPresupuestosCliente.SetController(const Value: IPresupuestosClienteController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPresupuestos;
end; end;
procedure TfEditorPresupuestosCliente.SetPresupuestos(const Value: IBizPresupuestoCliente); procedure TfEditorPresupuestosCliente.SetPresupuestos(const Value: IBizPresupuestoCliente);
begin begin
FPresupuestos := Value; FPresupuestos := Value;
dsDataTable.DataTable := FPresupuestos.DataTable;
if Assigned(ViewGrid) then if Assigned(FPresupuestos) then
(ViewGrid as IViewPresupuestosCliente).Presupuestos := Presupuestos; 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 := FPresupuestos.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FPresupuestos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPresupuestosCliente).Presupuestos := Presupuestos;
end;
end; end;
end. end.

View File

@ -80,6 +80,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false); procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(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; end;
TRecibosClienteController = class(TControllerBase, IRecibosClienteController) TRecibosClienteController = class(TControllerBase, IRecibosClienteController)
@ -147,6 +150,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false); procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(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; end;
implementation implementation
@ -444,6 +450,11 @@ begin
Result := Buscar(ID_NULO); Result := Buscar(ID_NULO);
end; end;
function TRecibosClienteController.DarListaAnosRecibos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
function TRecibosClienteController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String; function TRecibosClienteController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var var
ARecibosCliente: IBizRecibosCliente; ARecibosCliente: IBizRecibosCliente;
@ -852,6 +863,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; 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); procedure TRecibosClienteController.FiltrarEmpresa(ARecibo: IBizRecibosCliente);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModuleRecibosCliente: TDataModuleRecibosCliente inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 223 Height = 286
Width = 525 Width = 525
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -476,4 +476,28 @@ inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
Left = 416 Left = 416
Top = 32 Top = 32
end end
object tbl_ListaAnosRecibos: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
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 = 168
Top = 208
end
object ds_ListaAnosRecibos: TDADataSource
DataSet = tbl_ListaAnosRecibos.Dataset
DataTable = tbl_ListaAnosRecibos
Left = 168
Top = 152
end
end end

View File

@ -47,6 +47,8 @@ type
ds_RecibosCliente: TDADataSource; ds_RecibosCliente: TDADataSource;
tbl_RecibosCompensadosCli: TDAMemDataTable; tbl_RecibosCompensadosCli: TDAMemDataTable;
ds_RecibosCompensadosCli: TDADataSource; ds_RecibosCompensadosCli: TDADataSource;
tbl_ListaAnosRecibos: TDAMemDataTable;
ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
protected protected
function _GetPagos: IBizPagosCliente; function _GetPagos: IBizPagosCliente;
@ -56,6 +58,8 @@ type
function GetItem(const ID : Integer) : IBizRecibosCliente; function GetItem(const ID : Integer) : IBizRecibosCliente;
function NewItem : IBizRecibosCliente; function NewItem : IBizRecibosCliente;
function GetReport(const ListaID: TIntegerList): Binary; function GetReport(const ListaID: TIntegerList): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -149,6 +153,30 @@ begin
Result := GetItem(ID_NULO) Result := GetItem(ID_NULO)
end; 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; function TDataModuleRecibosCliente.GetItem(const ID: Integer): IBizRecibosCliente;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -26,11 +26,12 @@ unit uIDataModuleRecibosCliente;
interface interface
uses uses
uBizRecibosCliente; Classes, uBizRecibosCliente;
type type
IDataModuleRecibosCliente = interface IDataModuleRecibosCliente = interface
['{F4F02C9E-E861-4938-8A2D-FE971A41EE92}'] ['{F4F02C9E-E861-4938-8A2D-FE971A41EE92}']
function GetAnosItems : TStringList;
function GetItems: IBizRecibosCliente; function GetItems: IBizRecibosCliente;
function GetItem(const ID : Integer) : IBizRecibosCliente; function GetItem(const ID : Integer) : IBizRecibosCliente;
function NewItem : IBizRecibosCliente; function NewItem : IBizRecibosCliente;

View File

@ -9,15 +9,23 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RecibosCliente = '{E9F29F10-35D7-452D-84BE-6DA7198A02C9}'; RID_ListaAnosRecibos = '{85D6A88E-F93C-4EBD-856B-E3DD70661B8C}';
RID_PagosCliente = '{9C420402-DDE5-4E67-AFF4-B29246EB13C5}'; RID_RecibosCliente = '{7AEE1847-3690-481E-AA36-7DD34941DAE0}';
RID_RecibosCompensadosCli = '{81964F25-3486-482C-A0CB-C0C59C70EE91}'; RID_PagosCliente = '{24604449-C6ED-4543-A84E-A9084B86E5EA}';
RID_RecibosCompensadosCli = '{3198778B-C101-4E4C-94B1-A5B6EE3FB400}';
{ Data table names } { Data table names }
nme_ListaAnosRecibos = 'ListaAnosRecibos';
nme_RecibosCliente = 'RecibosCliente'; nme_RecibosCliente = 'RecibosCliente';
nme_PagosCliente = 'PagosCliente'; nme_PagosCliente = 'PagosCliente';
nme_RecibosCompensadosCli = 'RecibosCompensadosCli'; nme_RecibosCompensadosCli = 'RecibosCompensadosCli';
{ ListaAnosRecibos fields }
fld_ListaAnosRecibosANO = 'ANO';
{ ListaAnosRecibos field indexes }
idx_ListaAnosRecibosANO = 0;
{ RecibosCliente fields } { RecibosCliente fields }
fld_RecibosClienteID = 'ID'; fld_RecibosClienteID = 'ID';
fld_RecibosClienteID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO'; fld_RecibosClienteID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO';
@ -175,9 +183,44 @@ const
idx_RecibosCompensadosCliUSUARIO = 29; idx_RecibosCompensadosCliUSUARIO = 29;
type type
{ IListaAnosRecibos }
IListaAnosRecibos = interface(IDAStronglyTypedDataTable)
['{CB0E282C-8761-42F7-A898-261F109FAE48}']
{ 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 }
IRecibosCliente = interface(IDAStronglyTypedDataTable) IRecibosCliente = interface(IDAStronglyTypedDataTable)
['{BCE939A4-4046-4AE1-906E-19AFBC0E5FD2}'] ['{76F7C244-A129-4A30-90CF-2CA8C4B52CAD}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -560,7 +603,7 @@ type
{ IPagosCliente } { IPagosCliente }
IPagosCliente = interface(IDAStronglyTypedDataTable) IPagosCliente = interface(IDAStronglyTypedDataTable)
['{BB11224C-1002-4939-ACCC-1CC94A74BCEF}'] ['{B9F92CCE-2ADD-4B5F-82AF-CEEA1C8B10EC}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -727,7 +770,7 @@ type
{ IRecibosCompensadosCli } { IRecibosCompensadosCli }
IRecibosCompensadosCli = interface(IDAStronglyTypedDataTable) IRecibosCompensadosCli = interface(IDAStronglyTypedDataTable)
['{EB5868FD-C6AA-4687-87B7-0AD07FDDA889}'] ['{A98A69F6-4C14-4B5D-A299-3FC51C52104B}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -1112,6 +1155,39 @@ implementation
uses Variants, uROBinaryHelpers; 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 } { TRecibosClienteDataTableRules }
constructor TRecibosClienteDataTableRules.Create(aDataTable: TDADataTable); constructor TRecibosClienteDataTableRules.Create(aDataTable: TDADataTable);
begin begin
@ -2661,6 +2737,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosRecibos, TListaAnosRecibosDataTableRules);
RegisterDataTableRules(RID_RecibosCliente, TRecibosClienteDataTableRules); RegisterDataTableRules(RID_RecibosCliente, TRecibosClienteDataTableRules);
RegisterDataTableRules(RID_PagosCliente, TPagosClienteDataTableRules); RegisterDataTableRules(RID_PagosCliente, TPagosClienteDataTableRules);
RegisterDataTableRules(RID_RecibosCompensadosCli, TRecibosCompensadosCliDataTableRules); RegisterDataTableRules(RID_RecibosCompensadosCli, TRecibosCompensadosCliDataTableRules);

View File

@ -9,14 +9,49 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RecibosClienteDelta = '{252DA552-C7AC-4E91-BA26-BC298E1B66DE}'; RID_ListaAnosRecibosDelta = '{C6F18E23-8B34-474E-BBB0-C5F929DD22BC}';
RID_PagosClienteDelta = '{733D49FB-64CA-4B84-9F7A-C4EE6287107A}'; RID_RecibosClienteDelta = '{271FBB55-92A8-42B7-96C9-15A5404D6869}';
RID_RecibosCompensadosCliDelta = '{D4C982A9-C395-4F4E-91E0-0633186E4D73}'; RID_PagosClienteDelta = '{7DA5462C-B7F5-4D2E-BD81-2BFCAD69EA92}';
RID_RecibosCompensadosCliDelta = '{A670E8DA-B3CC-4578-A8DB-6F00B3230751}';
type type
{ IListaAnosRecibosDelta }
IListaAnosRecibosDelta = interface(IListaAnosRecibos)
['{C6F18E23-8B34-474E-BBB0-C5F929DD22BC}']
{ 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 }
IRecibosClienteDelta = interface(IRecibosCliente) IRecibosClienteDelta = interface(IRecibosCliente)
['{252DA552-C7AC-4E91-BA26-BC298E1B66DE}'] ['{271FBB55-92A8-42B7-96C9-15A5404D6869}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer; function GetOldID_RECIBO_COMPENSADOValue : Integer;
@ -398,7 +433,7 @@ type
{ IPagosClienteDelta } { IPagosClienteDelta }
IPagosClienteDelta = interface(IPagosCliente) IPagosClienteDelta = interface(IPagosCliente)
['{733D49FB-64CA-4B84-9F7A-C4EE6287107A}'] ['{7DA5462C-B7F5-4D2E-BD81-2BFCAD69EA92}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBOValue : Integer; function GetOldID_RECIBOValue : Integer;
@ -564,7 +599,7 @@ type
{ IRecibosCompensadosCliDelta } { IRecibosCompensadosCliDelta }
IRecibosCompensadosCliDelta = interface(IRecibosCompensadosCli) IRecibosCompensadosCliDelta = interface(IRecibosCompensadosCli)
['{D4C982A9-C395-4F4E-91E0-0633186E4D73}'] ['{A670E8DA-B3CC-4578-A8DB-6F00B3230751}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer; function GetOldID_RECIBO_COMPENSADOValue : Integer;
@ -949,6 +984,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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 } { TRecibosClienteBusinessProcessorRules }
constructor TRecibosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TRecibosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin begin
@ -3218,6 +3296,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosRecibosDelta, TListaAnosRecibosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosClienteDelta, TRecibosClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RecibosClienteDelta, TRecibosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PagosClienteDelta, TPagosClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PagosClienteDelta, TPagosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosCompensadosCliDelta, TRecibosCompensadosCliBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RecibosCompensadosCliDelta, TRecibosCompensadosCliBusinessProcessorRules);

View File

@ -14,6 +14,33 @@ object srvRecibosCliente: TsrvRecibosCliente
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < 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 = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -41,13 +41,27 @@ inherited fEditorRecibosCliente: TfEditorRecibosCliente
Width = 645 Width = 645
ExplicitWidth = 645 ExplicitWidth = 645
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 577 ExplicitWidth = 645
end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 645 ExplicitWidth = 645
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitLeft = 427
ExplicitWidth = 66 ExplicitWidth = 66
object TBXItem38: TTBXItem object TBXItem38: TTBXItem
Action = actInformes Action = actInformes

View File

@ -49,12 +49,15 @@ type
JSInformesDialog: TJSDialog; JSInformesDialog: TJSDialog;
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private private
FRecibosCliente: IBizRecibosCliente; FRecibosCliente: IBizRecibosCliente;
FController : IRecibosClienteController; FController : IRecibosClienteController;
protected protected
function GetRecibosCliente: IBizRecibosCliente; function GetRecibosCliente: IBizRecibosCliente;
procedure SetRecibosCliente(const Value: IBizRecibosCliente); procedure SetRecibosCliente(const Value: IBizRecibosCliente);
function GetController : IRecibosClienteController; function GetController : IRecibosClienteController;
procedure SetController (const Value : IRecibosClienteController); procedure SetController (const Value : IRecibosClienteController);
@ -64,6 +67,8 @@ type
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public public
procedure PonerTitulos(const ATitulo: string = ''); override; procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosCliente: IBizRecibosCliente read GetRecibosCliente write SetRecibosCliente; property RecibosCliente: IBizRecibosCliente read GetRecibosCliente write SetRecibosCliente;
@ -144,6 +149,8 @@ end;
procedure TfEditorRecibosCliente.FormShow(Sender: TObject); procedure TfEditorRecibosCliente.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -221,6 +228,13 @@ begin
//No se pueden añadir recibos nuevos //No se pueden añadir recibos nuevos
end; 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); procedure TfEditorRecibosCliente.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -272,17 +286,37 @@ begin
end; end;
end; end;
procedure TfEditorRecibosCliente.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
inherited;
end;
procedure TfEditorRecibosCliente.SetController(const Value: IRecibosClienteController); procedure TfEditorRecibosCliente.SetController(const Value: IRecibosClienteController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
end; end;
procedure TfEditorRecibosCliente.SetRecibosCliente(const Value: IBizRecibosCliente); procedure TfEditorRecibosCliente.SetRecibosCliente(const Value: IBizRecibosCliente);
begin begin
FRecibosCliente := Value; FRecibosCliente := Value;
dsDataTable.DataTable := FRecibosCliente.DataTable;
if Assigned(ViewGrid) then if Assigned(FRecibosCliente) then
(ViewGrid as IViewRecibosCliente).Recibos := FRecibosCliente; 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;
end. end.

View File

@ -75,6 +75,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor); procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor); procedure Print(ARecibosProveedor : IBizRecibosProveedor);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TRecibosProveedorController = class(TControllerBase, IRecibosProveedorController) TRecibosProveedorController = class(TControllerBase, IRecibosProveedorController)
@ -141,6 +144,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor); procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor); procedure Print(ARecibosProveedor : IBizRecibosProveedor);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -419,6 +425,11 @@ begin
Result := Buscar(ID_NULO); Result := Buscar(ID_NULO);
end; end;
function TRecibosProveedorController.DarListaAnosRecibos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
function TRecibosProveedorController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String; function TRecibosProveedorController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var var
ARecibosProveedor: IBizRecibosProveedor; ARecibosProveedor: IBizRecibosProveedor;
@ -791,6 +802,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; 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); procedure TRecibosProveedorController.FiltrarEmpresa(ARecibo: IBizRecibosProveedor);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 255 Height = 311
Width = 518 Width = 518
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
@ -464,4 +464,28 @@ inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
Left = 160 Left = 160
Top = 48 Top = 48
end end
object tbl_ListaAnosRecibos: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
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 = 160
Top = 216
end
object ds_ListaAnosRecibos: TDADataSource
DataSet = tbl_ListaAnosRecibos.Dataset
DataTable = tbl_ListaAnosRecibos
Left = 160
Top = 160
end
end end

View File

@ -46,6 +46,8 @@ type
ds_RecibosCompensadosProv: TDADataSource; ds_RecibosCompensadosProv: TDADataSource;
tbl_RecibosProveedor: TDAMemDataTable; tbl_RecibosProveedor: TDAMemDataTable;
ds_RecibosProveedor: TDADataSource; ds_RecibosProveedor: TDADataSource;
tbl_ListaAnosRecibos: TDAMemDataTable;
ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
protected protected
function _GetPagos: IBizPagosProveedor; function _GetPagos: IBizPagosProveedor;
@ -56,6 +58,7 @@ type
function NewItem : IBizRecibosProveedor; function NewItem : IBizRecibosProveedor;
function GetReport(const ID: Integer): Binary; function GetReport(const ID: Integer): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -142,6 +145,30 @@ begin
Result := GetItem(ID_NULO) Result := GetItem(ID_NULO)
end; 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; function TDataModuleRecibosProveedor.GetItem(const ID: Integer): IBizRecibosProveedor;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -26,11 +26,12 @@ unit uIDataModuleRecibosProveedor;
interface interface
uses uses
uBizRecibosProveedor; Classes, uBizRecibosProveedor;
type type
IDataModuleRecibosProveedor = interface IDataModuleRecibosProveedor = interface
['{0EEAF672-1509-4695-90B0-0D6EBB81B6C5}'] ['{0EEAF672-1509-4695-90B0-0D6EBB81B6C5}']
function GetAnosItems : TStringList;
function GetItems: IBizRecibosProveedor; function GetItems: IBizRecibosProveedor;
function GetItem(const ID : Integer) : IBizRecibosProveedor; function GetItem(const ID : Integer) : IBizRecibosProveedor;
function NewItem : IBizRecibosProveedor; function NewItem : IBizRecibosProveedor;

View File

@ -9,15 +9,23 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RecibosCompensadosProv = '{4F2EE656-026F-4B10-86C2-B20762BE3B0C}'; RID_ListaAnosRecibos = '{E517AD0B-3117-47E6-BDE0-C6F56CA71A1D}';
RID_RecibosProveedor = '{475F3A75-FAE9-4B74-96DB-B4AF7CD46E87}'; RID_RecibosCompensadosProv = '{9EAB41F6-5853-4683-A0E3-F66C12232C03}';
RID_PagosProveedor = '{A2635576-C5EB-4458-AA15-91D3EE590873}'; RID_RecibosProveedor = '{2344F4F7-8139-44E1-B225-3E581F4B9FB2}';
RID_PagosProveedor = '{873FD5ED-817D-4AF3-81CF-5D3290B15090}';
{ Data table names } { Data table names }
nme_ListaAnosRecibos = 'ListaAnosRecibos';
nme_RecibosCompensadosProv = 'RecibosCompensadosProv'; nme_RecibosCompensadosProv = 'RecibosCompensadosProv';
nme_RecibosProveedor = 'RecibosProveedor'; nme_RecibosProveedor = 'RecibosProveedor';
nme_PagosProveedor = 'PagosProveedor'; nme_PagosProveedor = 'PagosProveedor';
{ ListaAnosRecibos fields }
fld_ListaAnosRecibosANO = 'ANO';
{ ListaAnosRecibos field indexes }
idx_ListaAnosRecibosANO = 0;
{ RecibosCompensadosProv fields } { RecibosCompensadosProv fields }
fld_RecibosCompensadosProvID = 'ID'; fld_RecibosCompensadosProvID = 'ID';
fld_RecibosCompensadosProvID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO'; fld_RecibosCompensadosProvID_RECIBO_COMPENSADO = 'ID_RECIBO_COMPENSADO';
@ -167,9 +175,44 @@ const
idx_PagosProveedorUSUARIO = 11; idx_PagosProveedorUSUARIO = 11;
type type
{ IListaAnosRecibos }
IListaAnosRecibos = interface(IDAStronglyTypedDataTable)
['{738763D4-26C6-4F0D-BB6E-D638C380B114}']
{ 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 }
IRecibosCompensadosProv = interface(IDAStronglyTypedDataTable) IRecibosCompensadosProv = interface(IDAStronglyTypedDataTable)
['{5B17FD1B-07B7-4241-BB12-EAC558D12C8E}'] ['{43B7C892-1530-424B-B6B0-380E0A018456}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -528,7 +571,7 @@ type
{ IRecibosProveedor } { IRecibosProveedor }
IRecibosProveedor = interface(IDAStronglyTypedDataTable) IRecibosProveedor = interface(IDAStronglyTypedDataTable)
['{EEA4A9FB-5FE6-4AEA-97A0-7E1A745AFDA6}'] ['{A7B468FD-DB65-4615-A6C5-1E2807D62ABE}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -887,7 +930,7 @@ type
{ IPagosProveedor } { IPagosProveedor }
IPagosProveedor = interface(IDAStronglyTypedDataTable) IPagosProveedor = interface(IDAStronglyTypedDataTable)
['{0CDD85E2-5782-497F-9F64-DCD22CBC13EC}'] ['{6A3FB0F1-D6B5-49C4-A298-F046CF5DA655}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -1056,6 +1099,39 @@ implementation
uses Variants, uROBinaryHelpers; 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 } { TRecibosCompensadosProvDataTableRules }
constructor TRecibosCompensadosProvDataTableRules.Create(aDataTable: TDADataTable); constructor TRecibosCompensadosProvDataTableRules.Create(aDataTable: TDADataTable);
begin begin
@ -2521,6 +2597,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosRecibos, TListaAnosRecibosDataTableRules);
RegisterDataTableRules(RID_RecibosCompensadosProv, TRecibosCompensadosProvDataTableRules); RegisterDataTableRules(RID_RecibosCompensadosProv, TRecibosCompensadosProvDataTableRules);
RegisterDataTableRules(RID_RecibosProveedor, TRecibosProveedorDataTableRules); RegisterDataTableRules(RID_RecibosProveedor, TRecibosProveedorDataTableRules);
RegisterDataTableRules(RID_PagosProveedor, TPagosProveedorDataTableRules); RegisterDataTableRules(RID_PagosProveedor, TPagosProveedorDataTableRules);

View File

@ -9,14 +9,49 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RecibosCompensadosProvDelta = '{46C42FEF-6415-42DA-86DE-B140A2E3B65C}'; RID_ListaAnosRecibosDelta = '{7319675D-5CEC-4118-8CA5-D1D9A3E862B7}';
RID_RecibosProveedorDelta = '{80D121EA-2F86-44E4-9AE9-EEF31D5CF58A}'; RID_RecibosCompensadosProvDelta = '{96E9C110-BDAA-4E8E-B142-2F74CCFDBC74}';
RID_PagosProveedorDelta = '{8AB67F2C-0537-4A5B-AC9C-93FC3DA0411F}'; RID_RecibosProveedorDelta = '{AB79EADA-4BE6-4E51-BFEA-C4F1C20E8059}';
RID_PagosProveedorDelta = '{E48CD2E0-5DD4-41AF-97DE-F945B013E452}';
type type
{ IListaAnosRecibosDelta }
IListaAnosRecibosDelta = interface(IListaAnosRecibos)
['{7319675D-5CEC-4118-8CA5-D1D9A3E862B7}']
{ 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 }
IRecibosCompensadosProvDelta = interface(IRecibosCompensadosProv) IRecibosCompensadosProvDelta = interface(IRecibosCompensadosProv)
['{46C42FEF-6415-42DA-86DE-B140A2E3B65C}'] ['{96E9C110-BDAA-4E8E-B142-2F74CCFDBC74}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer; function GetOldID_RECIBO_COMPENSADOValue : Integer;
@ -374,7 +409,7 @@ type
{ IRecibosProveedorDelta } { IRecibosProveedorDelta }
IRecibosProveedorDelta = interface(IRecibosProveedor) IRecibosProveedorDelta = interface(IRecibosProveedor)
['{80D121EA-2F86-44E4-9AE9-EEF31D5CF58A}'] ['{AB79EADA-4BE6-4E51-BFEA-C4F1C20E8059}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBO_COMPENSADOValue : Integer; function GetOldID_RECIBO_COMPENSADOValue : Integer;
@ -732,7 +767,7 @@ type
{ IPagosProveedorDelta } { IPagosProveedorDelta }
IPagosProveedorDelta = interface(IPagosProveedor) IPagosProveedorDelta = interface(IPagosProveedor)
['{8AB67F2C-0537-4A5B-AC9C-93FC3DA0411F}'] ['{E48CD2E0-5DD4-41AF-97DE-F945B013E452}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_RECIBOValue : Integer; function GetOldID_RECIBOValue : Integer;
@ -901,6 +936,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; 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 } { TRecibosCompensadosProvBusinessProcessorRules }
constructor TRecibosCompensadosProvBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TRecibosCompensadosProvBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin begin
@ -3046,6 +3124,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosRecibosDelta, TListaAnosRecibosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosCompensadosProvDelta, TRecibosCompensadosProvBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RecibosCompensadosProvDelta, TRecibosCompensadosProvBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RecibosProveedorDelta, TRecibosProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RecibosProveedorDelta, TRecibosProveedorBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PagosProveedorDelta, TPagosProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_PagosProveedorDelta, TPagosProveedorBusinessProcessorRules);

View File

@ -13,6 +13,33 @@ object srvRecibosProveedor: TsrvRecibosProveedor
ConnectionManager = dmServer.ConnectionManager ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary DataDictionary = DADataDictionary
Datasets = < 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 = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -41,13 +41,27 @@ inherited fEditorRecibosProveedor: TfEditorRecibosProveedor
Width = 638 Width = 638
ExplicitWidth = 638 ExplicitWidth = 638
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 577 ExplicitWidth = 638
end
inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 427
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
end end
inherited tbxMenu: TTBXToolbar inherited tbxMenu: TTBXToolbar
ExplicitWidth = 638 ExplicitWidth = 638
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True Visible = True
ExplicitLeft = 427
ExplicitWidth = 66 ExplicitWidth = 66
object TBXItem38: TTBXItem object TBXItem38: TTBXItem
Action = actInformes Action = actInformes

View File

@ -47,12 +47,16 @@ type
TBXItem38: TTBXItem; TBXItem38: TTBXItem;
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure actInformesExecute(Sender: TObject); procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private private
FRecibosProveedor: IBizRecibosProveedor; FRecibosProveedor: IBizRecibosProveedor;
FController : IRecibosProveedorController; FController : IRecibosProveedorController;
protected protected
function GetRecibosProveedor: IBizRecibosProveedor; function GetRecibosProveedor: IBizRecibosProveedor;
procedure SetRecibosProveedor(const Value: IBizRecibosProveedor); procedure SetRecibosProveedor(const Value: IBizRecibosProveedor);
function GetController : IRecibosProveedorController; function GetController : IRecibosProveedorController;
procedure SetController (const Value : IRecibosProveedorController); procedure SetController (const Value : IRecibosProveedorController);
@ -62,6 +66,8 @@ type
procedure DuplicarInterno; override; procedure DuplicarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public public
procedure PonerTitulos(const ATitulo: string = ''); override; procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor; property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor;
@ -141,6 +147,8 @@ end;
procedure TfEditorRecibosProveedor.FormShow(Sender: TObject); procedure TfEditorRecibosProveedor.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -181,6 +189,13 @@ begin
//No se pueden añadir recibos nuevos //No se pueden añadir recibos nuevos
end; 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); procedure TfEditorRecibosProveedor.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -194,17 +209,37 @@ begin
inherited; inherited;
end; end;
procedure TfEditorRecibosProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
inherited;
end;
procedure TfEditorRecibosProveedor.SetController(const Value: IRecibosProveedorController); procedure TfEditorRecibosProveedor.SetController(const Value: IRecibosProveedorController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
end; end;
procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor); procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor);
begin begin
FRecibosProveedor := Value; FRecibosProveedor := Value;
dsDataTable.DataTable := FRecibosProveedor.DataTable;
if Assigned(ViewGrid) then if Assigned(FRecibosProveedor) then
(ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor; 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;
end. end.

View File

@ -35,6 +35,9 @@ type
procedure RecuperarRecibos(ARemesaCliente: IBizRemesaCliente); procedure RecuperarRecibos(ARemesaCliente: IBizRemesaCliente);
function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente; function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente;
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TRemesasClienteController = class(TControllerBase, IRemesasClienteController) TRemesasClienteController = class(TControllerBase, IRemesasClienteController)
@ -81,6 +84,9 @@ type
function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente; virtual; function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente; virtual;
function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente): Boolean; function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente): Boolean;
procedure EliminarReciboCliente(ARemesaCliente : IBizRemesaCliente); procedure EliminarReciboCliente(ARemesaCliente : IBizRemesaCliente);
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaCliente; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -163,6 +169,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TRemesasClienteController.DarListaAnosRemesas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TRemesasClienteController.DescartarCambios(ARemesaCliente: IBizRemesaCliente); procedure TRemesasClienteController.DescartarCambios(ARemesaCliente: IBizRemesaCliente);
begin begin
if not Assigned(ARemesaCliente) then if not Assigned(ARemesaCliente) then
@ -444,6 +455,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; end;
procedure TRemesasClienteController.FiltrarAno(ARemesa: IBizRemesaCliente; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
ARemesa.DataTable.DynamicWhere.Clear;
ARemesa.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with ARemesa.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_RemesasClienteFECHA_REMESA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RemesasClienteFECHA_REMESA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TRemesasClienteController.FiltrarEmpresa(ARemesaCliente: IBizRemesaCliente); procedure TRemesasClienteController.FiltrarEmpresa(ARemesaCliente: IBizRemesaCliente);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -160,4 +160,28 @@ inherited DataModuleRemesasCliente: TDataModuleRemesasCliente
Left = 208 Left = 208
Top = 32 Top = 32
end end
object tbl_ListaAnosRemesas: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
Params = <>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_RemesasCliente
DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
LogicalName = 'ListaAnosRemesas'
IndexDefs = <>
Left = 328
Top = 88
end
object ds_ListaAnosRemesas: TDADataSource
DataSet = tbl_ListaAnosRemesas.Dataset
DataTable = tbl_ListaAnosRemesas
Left = 328
Top = 32
end
end end

View File

@ -18,6 +18,8 @@ type
rda_RemesasCliente: TDARemoteDataAdapter; rda_RemesasCliente: TDARemoteDataAdapter;
tbl_RemesasCliente: TDAMemDataTable; tbl_RemesasCliente: TDAMemDataTable;
ds_RemesasCliente: TDADataSource; ds_RemesasCliente: TDADataSource;
tbl_ListaAnosRemesas: TDAMemDataTable;
ds_ListaAnosRemesas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
protected protected
@ -30,6 +32,8 @@ type
// Report // Report
function GetReport(const ID: String): Binary; function GetReport(const ID: String): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -63,6 +67,30 @@ begin
Result := GetItem(ID_NULO) Result := GetItem(ID_NULO)
end; end;
function TDataModuleRemesasCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosRemesas 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 TDataModuleRemesasCliente.GetItem(const ID: Integer): IBizRemesaCliente; function TDataModuleRemesasCliente.GetItem(const ID: Integer): IBizRemesaCliente;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -3,11 +3,12 @@ unit uIDataModuleRemesasCliente;
interface interface
uses uses
uBizRemesasCliente; Classes, uBizRemesasCliente;
type type
IDataModuleRemesasCliente = interface IDataModuleRemesasCliente = interface
['{9047C468-78DE-404E-9047-1125B382FE3B}'] ['{9047C468-78DE-404E-9047-1125B382FE3B}']
function GetAnosItems : TStringList;
function GetItems: IBizRemesaCliente; function GetItems: IBizRemesaCliente;
function GetItem(const ID : Integer) : IBizRemesaCliente; function GetItem(const ID : Integer) : IBizRemesaCliente;
function NewItem : IBizRemesaCliente; function NewItem : IBizRemesaCliente;

View File

@ -9,11 +9,19 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RemesasCliente = '{A3A37A96-7559-4E50-8495-1079545939AD}'; RID_ListaAnosRemesas = '{18B30F17-EDCE-4FFF-A761-BC8F65564F29}';
RID_RemesasCliente = '{ECFA8C62-D24D-4A6D-97E2-4A0CECBE1704}';
{ Data table names } { Data table names }
nme_ListaAnosRemesas = 'ListaAnosRemesas';
nme_RemesasCliente = 'RemesasCliente'; nme_RemesasCliente = 'RemesasCliente';
{ ListaAnosRemesas fields }
fld_ListaAnosRemesasANO = 'ANO';
{ ListaAnosRemesas field indexes }
idx_ListaAnosRemesasANO = 0;
{ RemesasCliente fields } { RemesasCliente fields }
fld_RemesasClienteID = 'ID'; fld_RemesasClienteID = 'ID';
fld_RemesasClienteID_EMPRESA = 'ID_EMPRESA'; fld_RemesasClienteID_EMPRESA = 'ID_EMPRESA';
@ -55,9 +63,44 @@ const
idx_RemesasClienteIMPORTE_TOTAL = 17; idx_RemesasClienteIMPORTE_TOTAL = 17;
type type
{ IListaAnosRemesas }
IListaAnosRemesas = interface(IDAStronglyTypedDataTable)
['{E749CD10-676C-459A-996A-8690F0712301}']
{ 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;
{ TListaAnosRemesasDataTableRules }
TListaAnosRemesasDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosRemesas)
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;
{ IRemesasCliente } { IRemesasCliente }
IRemesasCliente = interface(IDAStronglyTypedDataTable) IRemesasCliente = interface(IDAStronglyTypedDataTable)
['{DB8F46E9-380C-4C70-ABE6-04E5B22CF7A7}'] ['{5AB6B670-D2E4-4409-BCD6-18F8F2E1BDAC}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -298,6 +341,39 @@ implementation
uses Variants, uROBinaryHelpers; uses Variants, uROBinaryHelpers;
{ TListaAnosRemesasDataTableRules }
constructor TListaAnosRemesasDataTableRules.Create(aDataTable: TDADataTable);
begin
inherited;
end;
destructor TListaAnosRemesasDataTableRules.Destroy;
begin
inherited;
end;
function TListaAnosRemesasDataTableRules.GetANOValue: String;
begin
result := DataTable.Fields[idx_ListaAnosRemesasANO].AsString;
end;
procedure TListaAnosRemesasDataTableRules.SetANOValue(const aValue: String);
begin
DataTable.Fields[idx_ListaAnosRemesasANO].AsString := aValue;
end;
function TListaAnosRemesasDataTableRules.GetANOIsNull: boolean;
begin
result := DataTable.Fields[idx_ListaAnosRemesasANO].IsNull;
end;
procedure TListaAnosRemesasDataTableRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_ListaAnosRemesasANO].AsVariant := Null;
end;
{ TRemesasClienteDataTableRules } { TRemesasClienteDataTableRules }
constructor TRemesasClienteDataTableRules.Create(aDataTable: TDADataTable); constructor TRemesasClienteDataTableRules.Create(aDataTable: TDADataTable);
begin begin
@ -689,6 +765,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosRemesas, TListaAnosRemesasDataTableRules);
RegisterDataTableRules(RID_RemesasCliente, TRemesasClienteDataTableRules); RegisterDataTableRules(RID_RemesasCliente, TRemesasClienteDataTableRules);
end. end.

View File

@ -9,12 +9,47 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RemesasClienteDelta = '{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}'; RID_ListaAnosRemesasDelta = '{6C373A41-A09A-452A-932B-A3D8A57D3796}';
RID_RemesasClienteDelta = '{52679A52-CD63-419C-AFE2-86E2E6CE2F73}';
type type
{ IListaAnosRemesasDelta }
IListaAnosRemesasDelta = interface(IListaAnosRemesas)
['{6C373A41-A09A-452A-932B-A3D8A57D3796}']
{ Property getters and setters }
function GetOldANOValue : String;
{ Properties }
property OldANO : String read GetOldANOValue;
end;
{ TListaAnosRemesasBusinessProcessorRules }
TListaAnosRemesasBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosRemesas, IListaAnosRemesasDelta)
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;
{ IRemesasClienteDelta } { IRemesasClienteDelta }
IRemesasClienteDelta = interface(IRemesasCliente) IRemesasClienteDelta = interface(IRemesasCliente)
['{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}'] ['{52679A52-CD63-419C-AFE2-86E2E6CE2F73}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -255,6 +290,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; Variants, uROBinaryHelpers, uDAInterfaces;
{ TListaAnosRemesasBusinessProcessorRules }
constructor TListaAnosRemesasBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
inherited;
end;
destructor TListaAnosRemesasBusinessProcessorRules.Destroy;
begin
inherited;
end;
function TListaAnosRemesasBusinessProcessorRules.GetANOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO];
end;
function TListaAnosRemesasBusinessProcessorRules.GetANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO]);
end;
function TListaAnosRemesasBusinessProcessorRules.GetOldANOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRemesasANO];
end;
function TListaAnosRemesasBusinessProcessorRules.GetOldANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRemesasANO]);
end;
procedure TListaAnosRemesasBusinessProcessorRules.SetANOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO] := aValue;
end;
procedure TListaAnosRemesasBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO] := Null;
end;
{ TRemesasClienteBusinessProcessorRules } { TRemesasClienteBusinessProcessorRules }
constructor TRemesasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TRemesasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin begin
@ -826,6 +904,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosRemesasDelta, TListaAnosRemesasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RemesasClienteDelta, TRemesasClienteBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RemesasClienteDelta, TRemesasClienteBusinessProcessorRules);
end. end.

View File

@ -136,6 +136,33 @@ object srvRemesasCliente: TsrvRemesasCliente
DataDictionary = DataDictionary DataDictionary = DataDictionary
Diagrams = Diagrams Diagrams = Diagrams
Datasets = < Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_REMESA, 1,4)) as A' +
'NO'#10'from remesas_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select dist' +
'inct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosRemesas'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -35,6 +35,9 @@ type
procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor); procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor);
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor; function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor;
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
TRemesasProveedorController = class(TControllerBase, IRemesasProveedorController) TRemesasProveedorController = class(TControllerBase, IRemesasProveedorController)
@ -81,6 +84,9 @@ type
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor; virtual; function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor; virtual;
function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean; function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor); procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor);
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end; end;
implementation implementation
@ -163,6 +169,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf); Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end; end;
function TRemesasProveedorController.DarListaAnosRemesas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TRemesasProveedorController.DescartarCambios(ARemesaProveedor: IBizRemesaProveedor); procedure TRemesasProveedorController.DescartarCambios(ARemesaProveedor: IBizRemesaProveedor);
begin begin
if not Assigned(ARemesaProveedor) then if not Assigned(ARemesaProveedor) then
@ -447,6 +458,35 @@ begin
Result := ASeleccionados; Result := ASeleccionados;
end; end;
procedure TRemesasProveedorController.FiltrarAno(ARemesa: IBizRemesaProveedor; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
ARemesa.DataTable.DynamicWhere.Clear;
ARemesa.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with ARemesa.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_RemesasProveedorFECHA_REMESA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RemesasProveedorFECHA_REMESA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TRemesasProveedorController.FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor); procedure TRemesasProveedorController.FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor);
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -1,7 +1,7 @@
inherited DataModuleRemesasProveedor: TDataModuleRemesasProveedor inherited DataModuleRemesasProveedor: TDataModuleRemesasProveedor
OnCreate = DAClientDataModuleCreate OnCreate = DAClientDataModuleCreate
Height = 233 Height = 232
Width = 291 Width = 496
object RORemoteService: TRORemoteService object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel Channel = dmConexion.ROChannel
@ -160,4 +160,28 @@ inherited DataModuleRemesasProveedor: TDataModuleRemesasProveedor
Left = 192 Left = 192
Top = 24 Top = 24
end end
object tbl_ListaAnosRemesas: TDAMemDataTable
RemoteUpdatesOptions = []
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
Params = <>
StreamingOptions = [soDisableEventsWhileStreaming]
RemoteDataAdapter = rda_RemesasProveedor
DetailOptions = [dtCascadeOpenClose, dtCascadeApplyUpdates, dtAutoFetch, dtCascadeDelete, dtCascadeUpdate, dtDisableLogOfCascadeDeletes, dtDisableLogOfCascadeUpdates, dtIncludeInAllInOneFetch]
MasterOptions = [moCascadeOpenClose, moCascadeApplyUpdates, moCascadeDelete, moCascadeUpdate, moDisableLogOfCascadeDeletes, moDisableLogOfCascadeUpdates]
LogicalName = 'ListaAnosRemesas'
IndexDefs = <>
Left = 312
Top = 96
end
object ds_ListaAnosRemesas: TDADataSource
DataSet = tbl_ListaAnosRemesas.Dataset
DataTable = tbl_ListaAnosRemesas
Left = 312
Top = 32
end
end end

View File

@ -18,6 +18,8 @@ type
rda_RemesasProveedor: TDARemoteDataAdapter; rda_RemesasProveedor: TDARemoteDataAdapter;
tbl_RemesasProveedor: TDAMemDataTable; tbl_RemesasProveedor: TDAMemDataTable;
ds_RemesasProveedor: TDADataSource; ds_RemesasProveedor: TDADataSource;
tbl_ListaAnosRemesas: TDAMemDataTable;
ds_ListaAnosRemesas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject); procedure DAClientDataModuleCreate(Sender: TObject);
protected protected
@ -30,6 +32,8 @@ type
// Report // Report
function GetReport(const ID: String): Binary; function GetReport(const ID: String): Binary;
function GetAnosItems : TStringList;
end; end;
implementation implementation
@ -64,6 +68,30 @@ begin
Result := GetItem(ID_NULO) Result := GetItem(ID_NULO)
end; end;
function TDataModuleRemesasProveedor.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosRemesas 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 TDataModuleRemesasProveedor.GetItem(const ID: Integer): IBizRemesaProveedor; function TDataModuleRemesasProveedor.GetItem(const ID: Integer): IBizRemesaProveedor;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;

View File

@ -3,11 +3,12 @@ unit uIDataModuleRemesasProveedor;
interface interface
uses uses
uBizRemesasProveedor; Classes, uBizRemesasProveedor;
type type
IDataModuleRemesasProveedor = interface IDataModuleRemesasProveedor = interface
['{6073E44A-0B61-4D26-BCDE-33150D88C91B}'] ['{6073E44A-0B61-4D26-BCDE-33150D88C91B}']
function GetAnosItems : TStringList;
function GetItems: IBizRemesaProveedor; function GetItems: IBizRemesaProveedor;
function GetItem(const ID : Integer) : IBizRemesaProveedor; function GetItem(const ID : Integer) : IBizRemesaProveedor;
function NewItem : IBizRemesaProveedor; function NewItem : IBizRemesaProveedor;

View File

@ -9,11 +9,19 @@ const
{ Data table rules ids { Data table rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RemesasProveedor = '{2EB3551B-D75C-4B29-8F57-BCF984FDBFC8}'; RID_ListaAnosRemesas = '{261AB8E1-0E2C-4B04-A9BE-2B72296D2515}';
RID_RemesasProveedor = '{35FDE746-5F60-48C1-B43D-FEA13E00E42D}';
{ Data table names } { Data table names }
nme_ListaAnosRemesas = 'ListaAnosRemesas';
nme_RemesasProveedor = 'RemesasProveedor'; nme_RemesasProveedor = 'RemesasProveedor';
{ ListaAnosRemesas fields }
fld_ListaAnosRemesasANO = 'ANO';
{ ListaAnosRemesas field indexes }
idx_ListaAnosRemesasANO = 0;
{ RemesasProveedor fields } { RemesasProveedor fields }
fld_RemesasProveedorID = 'ID'; fld_RemesasProveedorID = 'ID';
fld_RemesasProveedorID_EMPRESA = 'ID_EMPRESA'; fld_RemesasProveedorID_EMPRESA = 'ID_EMPRESA';
@ -55,9 +63,44 @@ const
idx_RemesasProveedorIMPORTE_TOTAL = 17; idx_RemesasProveedorIMPORTE_TOTAL = 17;
type type
{ IListaAnosRemesas }
IListaAnosRemesas = interface(IDAStronglyTypedDataTable)
['{65D1E740-08B2-4D21-AED3-892D643446B9}']
{ 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;
{ TListaAnosRemesasDataTableRules }
TListaAnosRemesasDataTableRules = class(TIntfObjectDADataTableRules, IListaAnosRemesas)
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;
{ IRemesasProveedor } { IRemesasProveedor }
IRemesasProveedor = interface(IDAStronglyTypedDataTable) IRemesasProveedor = interface(IDAStronglyTypedDataTable)
['{C0DCF223-5495-4B6F-98BC-7C51719E7D34}'] ['{1708918B-503F-4D94-93B5-78AE00B1FD28}']
{ Property getters and setters } { Property getters and setters }
function GetIDValue: Integer; function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer); procedure SetIDValue(const aValue: Integer);
@ -298,6 +341,39 @@ implementation
uses Variants, uROBinaryHelpers; uses Variants, uROBinaryHelpers;
{ TListaAnosRemesasDataTableRules }
constructor TListaAnosRemesasDataTableRules.Create(aDataTable: TDADataTable);
begin
inherited;
end;
destructor TListaAnosRemesasDataTableRules.Destroy;
begin
inherited;
end;
function TListaAnosRemesasDataTableRules.GetANOValue: String;
begin
result := DataTable.Fields[idx_ListaAnosRemesasANO].AsString;
end;
procedure TListaAnosRemesasDataTableRules.SetANOValue(const aValue: String);
begin
DataTable.Fields[idx_ListaAnosRemesasANO].AsString := aValue;
end;
function TListaAnosRemesasDataTableRules.GetANOIsNull: boolean;
begin
result := DataTable.Fields[idx_ListaAnosRemesasANO].IsNull;
end;
procedure TListaAnosRemesasDataTableRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
DataTable.Fields[idx_ListaAnosRemesasANO].AsVariant := Null;
end;
{ TRemesasProveedorDataTableRules } { TRemesasProveedorDataTableRules }
constructor TRemesasProveedorDataTableRules.Create(aDataTable: TDADataTable); constructor TRemesasProveedorDataTableRules.Create(aDataTable: TDADataTable);
begin begin
@ -689,6 +765,7 @@ end;
initialization initialization
RegisterDataTableRules(RID_ListaAnosRemesas, TListaAnosRemesasDataTableRules);
RegisterDataTableRules(RID_RemesasProveedor, TRemesasProveedorDataTableRules); RegisterDataTableRules(RID_RemesasProveedor, TRemesasProveedorDataTableRules);
end. end.

View File

@ -9,12 +9,47 @@ const
{ Delta rules ids { Delta rules ids
Feel free to change them to something more human readable Feel free to change them to something more human readable
but make sure they are unique in the context of your application } but make sure they are unique in the context of your application }
RID_RemesasProveedorDelta = '{8EF544D2-A579-49C7-A4AF-220B10067DE0}'; RID_ListaAnosRemesasDelta = '{FFBEBD9A-41DB-4885-9C59-D5B28D9224ED}';
RID_RemesasProveedorDelta = '{EFD80AFB-4227-4D5E-8EDC-24F95B41B3D4}';
type type
{ IListaAnosRemesasDelta }
IListaAnosRemesasDelta = interface(IListaAnosRemesas)
['{FFBEBD9A-41DB-4885-9C59-D5B28D9224ED}']
{ Property getters and setters }
function GetOldANOValue : String;
{ Properties }
property OldANO : String read GetOldANOValue;
end;
{ TListaAnosRemesasBusinessProcessorRules }
TListaAnosRemesasBusinessProcessorRules = class(TDABusinessProcessorRules, IListaAnosRemesas, IListaAnosRemesasDelta)
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;
{ IRemesasProveedorDelta } { IRemesasProveedorDelta }
IRemesasProveedorDelta = interface(IRemesasProveedor) IRemesasProveedorDelta = interface(IRemesasProveedor)
['{8EF544D2-A579-49C7-A4AF-220B10067DE0}'] ['{EFD80AFB-4227-4D5E-8EDC-24F95B41B3D4}']
{ Property getters and setters } { Property getters and setters }
function GetOldIDValue : Integer; function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer; function GetOldID_EMPRESAValue : Integer;
@ -255,6 +290,49 @@ implementation
uses uses
Variants, uROBinaryHelpers, uDAInterfaces; Variants, uROBinaryHelpers, uDAInterfaces;
{ TListaAnosRemesasBusinessProcessorRules }
constructor TListaAnosRemesasBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
inherited;
end;
destructor TListaAnosRemesasBusinessProcessorRules.Destroy;
begin
inherited;
end;
function TListaAnosRemesasBusinessProcessorRules.GetANOValue: String;
begin
result := BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO];
end;
function TListaAnosRemesasBusinessProcessorRules.GetANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO]);
end;
function TListaAnosRemesasBusinessProcessorRules.GetOldANOValue: String;
begin
result := BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRemesasANO];
end;
function TListaAnosRemesasBusinessProcessorRules.GetOldANOIsNull: Boolean;
begin
result := VarIsNull(BusinessProcessor.CurrentChange.OldValueByName[fld_ListaAnosRemesasANO]);
end;
procedure TListaAnosRemesasBusinessProcessorRules.SetANOValue(const aValue: String);
begin
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO] := aValue;
end;
procedure TListaAnosRemesasBusinessProcessorRules.SetANOIsNull(const aValue: Boolean);
begin
if aValue then
BusinessProcessor.CurrentChange.NewValueByName[fld_ListaAnosRemesasANO] := Null;
end;
{ TRemesasProveedorBusinessProcessorRules } { TRemesasProveedorBusinessProcessorRules }
constructor TRemesasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor); constructor TRemesasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin begin
@ -826,6 +904,7 @@ end;
initialization initialization
RegisterBusinessProcessorRules(RID_ListaAnosRemesasDelta, TListaAnosRemesasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RemesasProveedorDelta, TRemesasProveedorBusinessProcessorRules); RegisterBusinessProcessorRules(RID_RemesasProveedorDelta, TRemesasProveedorBusinessProcessorRules);
end. end.

View File

@ -136,6 +136,33 @@ object srvRemesasProveedor: TsrvRemesasProveedor
DataDictionary = DataDictionary DataDictionary = DataDictionary
Diagrams = Diagrams Diagrams = Diagrams
Datasets = < Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_REMESA, 1,4)) as A' +
'NO'#10'from remesas_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select di' +
'stinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosRemesas'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item item
Params = <> Params = <>
Statements = < Statements = <

View File

@ -4,7 +4,6 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
Caption = 'Lista de remesas de pago' Caption = 'Lista de remesas de pago'
ClientWidth = 820 ClientWidth = 820
ExplicitWidth = 828 ExplicitWidth = 828
ExplicitHeight = 240
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader inherited JvNavPanelHeader: TJvNavPanelHeader
@ -44,12 +43,21 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
Width = 820 Width = 820
ExplicitWidth = 820 ExplicitWidth = 820
inherited tbxMain: TTBXToolbar inherited tbxMain: TTBXToolbar
ExplicitWidth = 561 ExplicitWidth = 809
object TBXSeparatorItem17: TTBXSeparatorItem [12] object TBXSeparatorItem17: TTBXSeparatorItem [12]
end end
end end
inherited tbxFiltro: TTBXToolbar inherited tbxFiltro: TTBXToolbar
ExplicitWidth = 269 ExplicitWidth = 359
inherited lblAno: TTBXLabelItem
Visible = True
end
inherited cbxListaAnos: TTBXComboBoxItem
Visible = True
end
inherited sepAno: TTBXSeparatorItem
Visible = True
end
inherited tbxEditFiltro: TTBXEditItem inherited tbxEditFiltro: TTBXEditItem
EditOptions = [tboUseEditWhenVertical] EditOptions = [tboUseEditWhenVertical]
end end
@ -67,8 +75,8 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
end end
end end
inherited TBXTMain2: TTBXToolbar inherited TBXTMain2: TTBXToolbar
Left = 334 Left = 359
ExplicitLeft = 334 ExplicitLeft = 359
end end
end end
inherited StatusBar: TJvStatusBar inherited StatusBar: TJvStatusBar

View File

@ -28,12 +28,16 @@ type
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure actVolcarDiscoExecute(Sender: TObject); procedure actVolcarDiscoExecute(Sender: TObject);
procedure actVolcarDiscoUpdate(Sender: TObject); procedure actVolcarDiscoUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private private
FRemesasProveedor: IBizRemesaProveedor; FRemesasProveedor: IBizRemesaProveedor;
FController : IRemesasProveedorController; FController : IRemesasProveedorController;
protected protected
function GetRemesasProveedor: IBizRemesaProveedor; function GetRemesasProveedor: IBizRemesaProveedor;
procedure SetRemesasProveedor(const Value: IBizRemesaProveedor); procedure SetRemesasProveedor(const Value: IBizRemesaProveedor);
function GetController : IRemesasProveedorController; virtual; function GetController : IRemesasProveedorController; virtual;
procedure SetController (const Value : IRemesasProveedorController); virtual; procedure SetController (const Value : IRemesasProveedorController); virtual;
@ -42,7 +46,7 @@ type
procedure ModificarInterno; override; procedure ModificarInterno; override;
procedure PrevisualizarInterno; override; procedure PrevisualizarInterno; override;
procedure ImprimirInterno; override; procedure ImprimirInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que //Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo //sobreescribir este metodo
@ -72,6 +76,8 @@ uses
} }
procedure TfEditorRemesasProveedor.FormShow(Sender: TObject); procedure TfEditorRemesasProveedor.FormShow(Sender: TObject);
begin begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited; inherited;
if not Assigned(ViewGrid) then if not Assigned(ViewGrid) then
@ -148,6 +154,13 @@ begin
FController.Ver(RemesasProveedor); FController.Ver(RemesasProveedor);
end; end;
procedure TfEditorRemesasProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(RemesasProveedor, DynWhereDataTable, Text);
if RemesasProveedor.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorRemesasProveedor.PonerTitulos(const ATitulo: string); procedure TfEditorRemesasProveedor.PonerTitulos(const ATitulo: string);
var var
FTitulo : String; FTitulo : String;
@ -197,17 +210,37 @@ begin
end; end;
end; end;
procedure TfEditorRemesasProveedor.RefrescarInterno;
begin
//Volvemos a cargar los años de los albaranes
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRemesas;
inherited;
end;
procedure TfEditorRemesasProveedor.SetRemesasProveedor(const Value: IBizRemesaProveedor); procedure TfEditorRemesasProveedor.SetRemesasProveedor(const Value: IBizRemesaProveedor);
begin begin
FRemesasProveedor := Value; FRemesasProveedor := Value;
dsDataTable.DataTable := FRemesasProveedor.DataTable;
if Assigned(ViewGrid) then if Assigned(FRemesasProveedor) then
(ViewGrid as IViewRemesasProveedor).RemesasProveedor := RemesasProveedor; 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 := FRemesasProveedor.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FRemesasProveedor.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRemesasProveedor).RemesasProveedor := RemesasProveedor;
end;
end; end;
procedure TfEditorRemesasProveedor.SetController(const Value: IRemesasProveedorController); procedure TfEditorRemesasProveedor.SetController(const Value: IRemesasProveedorController);
begin begin
FController := Value; FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRemesas;
end; end;
destructor TfEditorRemesasProveedor.Destroy; destructor TfEditorRemesasProveedor.Destroy;