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

Binary file not shown.

View File

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

View File

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

View File

@ -14,8 +14,15 @@
<Projects Include="..\Articulos\Views\Articulos_view.dproj" />
<Projects Include="..\Contactos\Controller\Contactos_controller.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 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="Data\AlbaranesCliente_data.dproj" />
<Projects Include="Model\AlbaranesCliente_model.dproj" />
@ -181,14 +188,77 @@
<Target Name="Contactos_controller:Make">
<MSBuild Projects="..\Contactos\Controller\Contactos_controller.dproj" Targets="Make" />
</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">
<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 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 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>
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
</Project>

View File

@ -4,7 +4,7 @@ interface
uses
SysUtils, uDADataTable, uEditorDBItem,
Classes, SysUtils, uDADataTable, uEditorDBItem,
uControllerBase, uIDataModuleAlbaranesCliente, uClientesController,
uDetallesAlbaranClienteController, uBizAlbaranesCliente, uBizDireccionesContacto;
@ -65,6 +65,9 @@ type
ANuevaSituacion: String; AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0;
DoPost: Boolean = True) : Boolean;
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TAlbaranesClienteController = class(TControllerBase, IAlbaranesClienteController)
@ -138,7 +141,7 @@ type
function EsModificable(AAlbaran: IBizAlbaranCliente): Boolean;
function EsEliminable(AAlbaran: IBizAlbaranCliente): Boolean;
procedure EnviarAlbaranPorEMail(AAlbaran : IBizAlbaranCliente);
procedure EnviarAlbaranPorEMail(AAlbaran : IBizAlbaranCliente);
function CambiarSituacion(AAlbaran : IBizAlbaranCliente;
ANuevaSituacion: String; AFechaEnvio : TDateTime = 0;
AFechaRecibido : TDateTime = 0;
@ -148,6 +151,9 @@ type
procedure Print(AAlbaran : IBizAlbaranCliente; AllItems: Boolean = false);
procedure EtiquetasPreview(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
procedure EtiquetasPrint(AAlbaran : IBizAlbaranCliente; Const withRefCliente: Boolean);
function DarListaAnosAlbaranes: TStringList;
procedure FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -156,7 +162,7 @@ uses
uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
uIEditorAlbaranesCliente, uIEditorAlbaranesDevCliente, uIEditorAlbaranDevCliente,
uDataModuleAlbaranesCliente, Variants, uBizDetallesAlbaranCliente,
uBizContactos, uDataTableUtils, uDataModuleUsuarios, Classes, uFactuGES_App,
uBizContactos, uDataTableUtils, uDataModuleUsuarios, uFactuGES_App,
schAlbaranesClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorAlbaranCliente,
uIEditorElegirAlbaranesCliente, uIEditorDireccionEntregaAlbaranCliente,
schContactosClient_Intf, uAlbaranesClienteReportController, uControllerDetallesBase,
@ -414,6 +420,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TAlbaranesClienteController.DarListaAnosAlbaranes: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TAlbaranesClienteController.DescartarCambios(AAlbaran: IBizAlbaranCliente);
begin
if not Assigned(AAlbaran) then
@ -912,6 +923,35 @@ begin
Result := ASeleccionados;
end;
procedure TAlbaranesClienteController.FiltrarAno(AAlbaran: IBizAlbaranCliente; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
AAlbaran.DataTable.DynamicWhere.Clear;
AAlbaran.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with AAlbaran.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_AlbaranesClienteFECHA_ALBARAN), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_AlbaranesClienteFECHA_ALBARAN), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TAlbaranesClienteController.FiltrarEmpresa(AAlbaran: IBizAlbaranCliente);
var
Condicion: TDAWhereExpression;

View File

@ -1,7 +1,7 @@
inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
OnCreate = DAClientDataModuleCreate
Height = 234
Width = 484
Height = 394
Width = 512
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel
@ -421,4 +421,28 @@ inherited DataModuleAlbaranesCliente: TDataModuleAlbaranesCliente
Left = 384
Top = 56
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

View File

@ -20,6 +20,8 @@ type
ds_AlbaranesCliente: TDADataSource;
tbl_AlbaranesCliente_Detalles: TDAMemDataTable;
ds_AlbaranesCliente_Detalles: TDADataSource;
tbl_ListaAnosAlbaranes: TDAMemDataTable;
ds_ListaAnosAlbaranes: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
@ -38,6 +40,8 @@ type
function GetRptWordAlbaran(const AID: Integer): Binary;
function GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
function GetRptPDFAlbaran(const AID: Integer): Binary;
function GetAnosItems : TStringList;
end;
implementation
@ -116,6 +120,30 @@ begin
end;
end;
function TDataModuleAlbaranesCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosAlbaranes do
begin
Open;
First;
while not eof do
begin
AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
Next;
end;
Close;
end;
Result := AListaAnos;
finally
HideHourglassCursor;
end;
end;
function TDataModuleAlbaranesCliente.GetEtiquetas(const AID: Integer; withRefCliente: Boolean): Binary;
begin
Result := (RORemoteService as IsrvAlbaranesCliente).GenerarInformeEtiquetas(AID, withRefCliente)

View File

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

View File

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

View File

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

View File

@ -13,6 +13,33 @@ object srvAlbaranesCliente: TsrvAlbaranesCliente
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_ALBARAN, 1,4)) as ' +
'ANO'#10'from albaranes_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select d' +
'istinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosAlbaranes'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item
Params = <>
Statements = <

View File

@ -128,6 +128,18 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
object TBXSeparatorItem17: TTBXSeparatorItem [10]
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
ExplicitWidth = 583
object TBXSubmenuItem2: TTBXSubmenuItem [4]
@ -138,7 +150,9 @@ inherited fEditorAlbaranesCliente: TfEditorAlbaranesCliente
end
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitLeft = 427
ExplicitWidth = 117
object TBXItem42: TTBXItem
Action = actEnviar

View File

@ -54,6 +54,7 @@ type
procedure actGenerarEtiquetasUpdate(Sender: TObject);
procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected
FAlbaranes: IBizAlbaranCliente;
@ -71,6 +72,7 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este método
@ -379,6 +381,8 @@ end;
procedure TfEditorAlbaranesCliente.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -475,6 +479,13 @@ begin
// 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);
var
FTitulo : String;
@ -524,17 +535,37 @@ begin
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
end;
procedure TfEditorAlbaranesCliente.SetAlbaranes(const Value: IBizAlbaranCliente);
begin
FAlbaranes := Value;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewAlbaranesCliente).Albaranes := Albaranes;
if Assigned(FAlbaranes) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FAlbaranes.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewAlbaranesCliente).Albaranes := Albaranes;
end;
end;
end.

View File

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

View File

@ -1,5 +1,6 @@
inherited DataModuleAlbaranesProveedor: TDataModuleAlbaranesProveedor
OnCreate = DAClientDataModuleCreate
Height = 365
Width = 462
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -438,4 +439,28 @@ inherited DataModuleAlbaranesProveedor: TDataModuleAlbaranesProveedor
Left = 328
Top = 40
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

View File

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

View File

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

View File

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

View File

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

View File

@ -14,6 +14,33 @@ object srvAlbaranesProveedor: TsrvAlbaranesProveedor
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_ALBARAN, 1,4)) as ' +
'ANO'#10'from albaranes_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
Params = <>
Statements = <

View File

@ -126,6 +126,18 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor
inherited tbxMain: TTBXToolbar
ExplicitWidth = 606
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
ExplicitWidth = 606
object TBXSubmenuItem2: TTBXSubmenuItem [4]
@ -139,8 +151,10 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor
end
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitWidth = 237
ExplicitLeft = 427
ExplicitWidth = 117
object TBXItem41: TTBXItem
Action = actGenerarDevolucion
DisplayMode = nbdmImageAndText

View File

@ -34,6 +34,7 @@ type
procedure actGenerarFacturaExecute(Sender: TObject);
procedure actGenerarFacturaUpdate(Sender: TObject);
procedure actEliminarUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
procedure actGenerarDevolucionUpdate(Sender: TObject);
procedure actGenerarDevolucionExecute(Sender: TObject);
@ -53,6 +54,7 @@ type
procedure DuplicarInterno; override;
procedure PrevisualizarInterno; override;
procedure ImprimirInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo
@ -209,6 +211,8 @@ end;
procedure TfEditorAlbaranesProveedor.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -302,6 +306,13 @@ begin
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);
var
FTitulo : String;
@ -351,17 +362,37 @@ begin
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosAlbaranes;
end;
procedure TfEditorAlbaranesProveedor.SetAlbaranes(const Value: IBizAlbaranProveedor);
begin
FAlbaranes := Value;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewAlbaranesProveedor).Albaranes := Albaranes;
if Assigned(FAlbaranes) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FAlbaranes.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FAlbaranes.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewAlbaranesProveedor).Albaranes := Albaranes;
end;
end;
end.

View File

@ -54,6 +54,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente;
function ExtraerSeleccionados(ARecibosCliente: IBizFacturaCliente) : IBizFacturaCliente;
procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente);
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TFacturasClienteController = class(TControllerBase, IFacturasClienteController)
@ -119,6 +122,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaCliente; AMensaje: String; AMultiSelect: Boolean): IBizFacturaCliente;
function ExtraerSeleccionados(AFacturasCliente: IBizFacturaCliente) : IBizFacturaCliente;
procedure EnviarFacturaPorEMail(AFactura : IBizFacturaCliente);
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -132,7 +138,8 @@ uses
uBizDetallesAlbaranCliente, uFacturasClienteReportController,
DateUtils, Forms, uFormasPagoController, uBizFormasPago, uIEditorElegirFacturasCliente,
uRecibosClienteController, uBizRecibosCliente, uIntegerListUtils,
uSistemaFunc, uDialogElegirEMail, uEMailUtils, Dialogs, uStringsUtils;
uSistemaFunc, uDialogElegirEMail, uEMailUtils, Dialogs, uStringsUtils,
uROXMLIntf;
{procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoCliente;
@ -381,7 +388,7 @@ end;}
function TFacturasClienteController.Buscar(const ID: Integer): IBizFacturaCliente;
begin
Result := (FDataModule as IDataModuleFacturasCliente).GetItem(ID);
FiltrarEmpresa(Result);
FiltrarEmpresa(Result);
end;
function TFacturasClienteController.BuscarTodasPendientesComision(IdAgente:Integer; IdComision: Integer; IdFacturasAsociadas: String): IBizFacturaCliente;
@ -504,6 +511,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TFacturasClienteController.DarListaAnosFacturas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TFacturasClienteController.DescartarCambios(AFactura: IBizFacturaCliente);
begin
if not Assigned(AFactura) then
@ -930,6 +942,35 @@ begin
Result := ASeleccionados;
end;
procedure TFacturasClienteController.FiltrarAno(AFactura: IBizFacturaCliente; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
AFactura.DataTable.DynamicWhere.Clear;
AFactura.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with AFactura.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasClienteFECHA_FACTURA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TFacturasClienteController.FiltrarEmpresa(AFactura: IBizFacturaCliente);
var
Condicion: TDAWhereExpression;
@ -1225,4 +1266,3 @@ begin
end;
end.

View File

@ -1,6 +1,6 @@
inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
OnCreate = DAClientDataModuleCreate
Height = 207
Height = 318
Width = 518
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -405,4 +405,28 @@ inherited DataModuleFacturasCliente: TDataModuleFacturasCliente
Left = 400
Top = 40
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

View File

@ -21,10 +21,13 @@ type
ds_FacturasCliente: TDADataSource;
tbl_FacturasCliente_Detalles: TDAMemDataTable;
ds_FacturasCliente_Detalles: TDADataSource;
tbl_ListaAnosFacturas: TDAMemDataTable;
ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
function _GetDetalles : IBizDetallesFacturaCliente;
public
function GetAnosItems : TStringList;
function GetItems : IBizFacturaCliente;
function GetItem(const ID : Integer) : IBizFacturaCliente;
function NewItem : IBizFacturaCliente;
@ -128,6 +131,30 @@ begin
end;
end;
function TDataModuleFacturasCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosFacturas do
begin
Open;
First;
while not eof do
begin
AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
Next;
end;
Close;
end;
Result := AListaAnos;
finally
HideHourglassCursor;
end;
end;
function TDataModuleFacturasCliente.GetItems: IBizFacturaCliente;
var
AFactura : TDAMemDataTable;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -61,11 +61,25 @@ inherited fEditorFacturasCliente: TfEditorFacturasCliente
DisplayMode = nbdmImageAndText
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
ExplicitWidth = 842
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitLeft = 427
ExplicitWidth = 66
object TBXItem41: TTBXItem
Action = actInformes

View File

@ -16,7 +16,8 @@ uses
cxStyles, cxCustomData,
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid;
cxGridTableView, cxGridDBTableView, cxGrid, StdCtrls, cxContainer, cxTextEdit,
cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit, cxDBLookupComboBox;
type
@ -48,27 +49,33 @@ type
procedure actEnviarEMailUpdate(Sender: TObject);
procedure actEnviarEMailExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private
FFacturas: IBizFacturaCliente;
FController : IFacturasClienteController;
protected
function GetFacturas: IBizFacturaCliente;
procedure SetFacturas(const Value: IBizFacturaCliente);
function GetController : IFacturasClienteController; virtual;
procedure SetController (const Value : IFacturasClienteController); virtual;
procedure NuevoInterno; override;
procedure EliminarInterno; override;
procedure ModificarInterno; override;
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas;
property Controller : IFacturasClienteController read GetController write SetController;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure PonerTitulos(const ATitulo: string = ''); override;
end;
@ -269,6 +276,8 @@ end;
procedure TfEditorFacturasCliente.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -371,6 +380,13 @@ begin
end;
end;
procedure TfEditorFacturasCliente.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(Facturas, DynWhereDataTable, Text);
if Facturas.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorFacturasCliente.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@ -426,17 +442,37 @@ begin
end;
end;
procedure TfEditorFacturasCliente.RefrescarInterno;
begin
//Volvemos a cargar los años de las facturas
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
inherited;
end;
procedure TfEditorFacturasCliente.SetController(const Value: IFacturasClienteController);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
end;
procedure TfEditorFacturasCliente.SetFacturas(const Value: IBizFacturaCliente);
begin
FFacturas := Value;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewFacturasCliente).Facturas := Facturas;
if Assigned(FFacturas) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FFacturas.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewFacturasCliente).Facturas := Facturas;
end;
end;
end.

View File

@ -50,6 +50,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor;
function ExtraerSeleccionados(ARecibosProveedor: IBizFacturaProveedor) : IBizFacturaProveedor;
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
TFacturasProveedorController = class(TControllerBase, IFacturasProveedorController)
@ -113,6 +116,9 @@ type
function ElegirFacturas(AFacturas : IBizFacturaProveedor; AMensaje: String; AMultiSelect: Boolean): IBizFacturaProveedor;
function ExtraerSeleccionados(AFacturasProveedor: IBizFacturaProveedor) : IBizFacturaProveedor;
function DarListaAnosFacturas: TStringList;
procedure FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -358,6 +364,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TFacturasProveedorController.DarListaAnosFacturas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TFacturasProveedorController.DescartarCambios(AFactura: IBizFacturaProveedor);
begin
if not Assigned(AFactura) then
@ -737,6 +748,35 @@ begin
Result := ASeleccionados;
end;
procedure TFacturasProveedorController.FiltrarAno(AFactura: IBizFacturaProveedor; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
AFactura.DataTable.DynamicWhere.Clear;
AFactura.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with AFactura.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_FacturasProveedorFECHA_FACTURA), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TFacturasProveedorController.FiltrarEmpresa(AFactura: IBizFacturaProveedor);
var
Condicion: TDAWhereExpression;

View File

@ -444,4 +444,28 @@ inherited DataModuleFacturasProveedor: TDataModuleFacturasProveedor
Left = 368
Top = 232
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

View File

@ -23,6 +23,8 @@ type
ds_FacturasProveedor_Detalles: TDADataSource;
tbl_FacturasProveedor_Pedidos: TDAMemDataTable;
ds_FacturasProveedor_Pedidos: TDADataSource;
tbl_ListaAnosFacturas: TDAMemDataTable;
ds_ListaAnosFacturas: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
private
function _GetDetalles : IBizDetallesFacturaProveedor;
@ -34,6 +36,8 @@ type
// Report
function GetReport(const AFacturaID: String): Binary;
function GetAnosItems : TStringList;
end;
implementation
@ -98,6 +102,30 @@ begin
end;
end;
function TDataModuleFacturasProveedor.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosFacturas do
begin
Open;
First;
while not eof do
begin
AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
Next;
end;
Close;
end;
Result := AListaAnos;
finally
HideHourglassCursor;
end;
end;
function TDataModuleFacturasProveedor.GetItem(const ID: Integer): IBizFacturaProveedor;
var
Condicion: TDAWhereExpression;

View File

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

View File

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

View File

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

View File

@ -15,6 +15,33 @@ object srvFacturasProveedor: TsrvFacturasProveedor
DataDictionary = DataDictionary
Diagrams = Diagrams
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_FACTURA, 1,4)) as ' +
'ANO'#10'from facturas_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select ' +
'distinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosFacturas'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item
Params = <>
Statements = <

View File

@ -38,7 +38,7 @@ inherited fEditorFacturasProveedor: TfEditorFacturasProveedor
Width = 849
ExplicitWidth = 849
inherited tbxMain: TTBXToolbar
ExplicitWidth = 775
ExplicitWidth = 849
object TBXSubmenuItem2: TTBXSubmenuItem [0]
Caption = 'Nuevo'
DisplayMode = nbdmImageAndText
@ -58,11 +58,25 @@ inherited fEditorFacturasProveedor: TfEditorFacturasProveedor
Visible = False
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
ExplicitWidth = 849
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitLeft = 427
ExplicitWidth = 66
object TBXItem40: TTBXItem
Action = actInformes

View File

@ -39,6 +39,8 @@ type
procedure actNuevaFacturaExecute(Sender: TObject);
procedure actNuevoAbonoExecute(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private
FFacturas: IBizFacturaProveedor;
FController : IFacturasProveedorController;
@ -48,12 +50,15 @@ type
function GetController : IFacturasProveedorController; virtual;
procedure SetController (const Value : IFacturasProveedorController); virtual;
procedure NuevoInterno; override;
procedure EliminarInterno; override;
procedure ModificarInterno; override;
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property Facturas: IBizFacturaProveedor read GetFacturas write SetFacturas;
@ -245,6 +250,8 @@ end;
procedure TfEditorFacturasProveedor.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -344,6 +351,13 @@ begin
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);
var
FTitulo : String;
@ -396,17 +410,37 @@ begin
}
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosFacturas;
end;
procedure TfEditorFacturasProveedor.SetFacturas(const Value: IBizFacturaProveedor);
begin
FFacturas := Value;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewFacturasProveedor).Facturas := Facturas;
if Assigned(FFacturas) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FFacturas.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FFacturas.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewFacturasProveedor).Facturas := Facturas;
end;
end;
end.

View File

@ -4,7 +4,7 @@ interface
uses
SysUtils, uDADataTable,
Classes, SysUtils, uDADataTable,
uControllerBase, uIDataModulePedidosProveedor, uProveedoresController,
uDetallesPedidoProveedorController, uBizPedidosProveedor;
@ -56,7 +56,10 @@ type
procedure EnviarPedidoPorEMail(APedido: IBizPedidoProveedor);
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;
TPedidosProveedorController = class(TControllerBase, IPedidosProveedorController)
@ -129,6 +132,9 @@ type
Procedure AsignarIDObra(APedido: IBizPedidoProveedor; const IDObra: Variant);
Procedure AsignarIDAlmacen(APedido: IBizPedidoProveedor; const IDAlmacen: Variant);
function DarListaAnosPedidos: TStringList;
procedure FiltrarAno(APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -139,7 +145,7 @@ uses
uBizDetallesPedidoProveedor, uBizContactos, uDataTableUtils, uDataModuleUsuarios,
schPedidosProveedorClient_Intf, uDAInterfaces, uPedidosProveedorReportController,
uDateUtils, uIEditorPedidoProveedor, uIEditorElegirPedidosProveedor,
Dialogs, uIEditorDireccionEntregaPedidoProveedor, Classes, uIEditorSituacionPedidoProveedor,
Dialogs, uIEditorDireccionEntregaPedidoProveedor, uIEditorSituacionPedidoProveedor,
Variants, uSistemaFunc, uEMailUtils, uDialogElegirEMail, uIntegerListUtils, uStringsUtils;
{ TPedidosProveedorController }
@ -291,6 +297,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TPedidosProveedorController.DarListaAnosPedidos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TPedidosProveedorController.DescartarCambios(APedido: IBizPedidoProveedor);
begin
if not Assigned(APedido) then
@ -788,6 +799,35 @@ begin
Result := ASeleccionados;
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);
var
Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModulePedidosProveedor: TDataModulePedidosProveedor
OnCreate = DAClientDataModuleCreate
Height = 218
Height = 301
Width = 621
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -508,4 +508,28 @@ inherited DataModulePedidosProveedor: TDataModulePedidosProveedor
Left = 296
Top = 32
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

View File

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

View File

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

View File

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

View File

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

View File

@ -13,6 +13,33 @@ object srvPedidosProveedor: TsrvPedidosProveedor
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_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
Params = <>
Statements = <

View File

@ -49,12 +49,26 @@ inherited fEditorPedidosProveedor: TfEditorPedidosProveedor
Action = actEnviarEMail
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
ExplicitWidth = 700
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitWidth = 276
ExplicitLeft = 427
ExplicitWidth = 273
object TBXItem39: TTBXItem
Action = actRecibirPedido
DisplayMode = nbdmImageAndText

View File

@ -43,6 +43,7 @@ type
procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected
FPedidos: IBizPedidoProveedor;
@ -53,12 +54,15 @@ type
function GetController : IPedidosProveedorController; virtual;
procedure SetController (const Value : IPedidosProveedorController); virtual;
procedure NuevoInterno; override;
procedure ModificarInterno; override;
procedure EliminarInterno; override;
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
@ -259,6 +263,8 @@ end;
procedure TfEditorPedidosProveedor.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -363,6 +369,13 @@ begin
FController.Ver(Pedidos);
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);
var
FTitulo : String;
@ -419,17 +432,37 @@ begin
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPedidos;
end;
procedure TfEditorPedidosProveedor.SetPedidos(const Value: IBizPedidoProveedor);
begin
FPedidos := Value;
dsDataTable.DataTable := FPedidos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPedidosProveedor).Pedidos := Pedidos;
if Assigned(FPedidos) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FPedidos.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FPedidos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPedidosProveedor).Pedidos := Pedidos;
end;
end;
end.

View File

@ -64,6 +64,9 @@ type
function CambiarSituacion(APresupuesto : IBizPresupuestoCliente; Situacion: String; FechaDecision: TDateTime; AllItems: Boolean = false): Boolean;
procedure BorrarBonificacion(APresupuesto : IBizPresupuestoCliente);
function DarListaAnosPresupuestos: TStringList;
procedure FiltrarAno(APresupuesto: IBizPresupuestoCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TPresupuestosClienteController = class(TControllerBase, IPresupuestosClienteController)
@ -137,7 +140,10 @@ type
procedure EnviarPresupuestoPorEMail(APresupuesto : IBizPresupuestoCliente);
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;
implementation
@ -388,6 +394,11 @@ begin
end;
}
function TPresupuestosClienteController.DarListaAnosPresupuestos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TPresupuestosClienteController.DescartarCambios(APresupuesto: IBizPresupuestoCliente);
begin
if not Assigned(APresupuesto) then
@ -824,6 +835,35 @@ begin
Result := ASeleccionados;
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);
var
Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente
OnCreate = DAClientDataModuleCreate
Height = 213
Height = 370
Width = 603
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -385,7 +385,31 @@ inherited DataModulePresupuestosCliente: TDataModulePresupuestosCliente
Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel
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
Top = 152
Top = 192
end
object ds_ListaAnosPresupuestos: TDADataSource
DataSet = tbl_ListaAnosPresupuestos.Dataset
DataTable = tbl_ListaAnosPresupuestos
Left = 248
Top = 144
end
end

View File

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

View File

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

View File

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

View File

@ -9,13 +9,48 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_PresupuestosClienteDelta = '{C8D94DD0-07E0-41C9-95E0-5FA8501BC80E}';
RID_PresupuestosCliente_DetallesDelta = '{DFCABCBE-B322-4F22-A380-7DE112BF13DF}';
RID_ListaAnosPresupuestosDelta = '{B819407B-3A58-42FE-99D1-D735F8094AD1}';
RID_PresupuestosClienteDelta = '{A00D261A-A215-445D-9DCC-C024662EA398}';
RID_PresupuestosCliente_DetallesDelta = '{8943CBEB-C17F-4C81-B0D7-E1FBF3B8445C}';
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 = interface(IPresupuestosCliente)
['{C8D94DD0-07E0-41C9-95E0-5FA8501BC80E}']
['{A00D261A-A215-445D-9DCC-C024662EA398}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@ -461,7 +496,7 @@ type
{ IPresupuestosCliente_DetallesDelta }
IPresupuestosCliente_DetallesDelta = interface(IPresupuestosCliente_Detalles)
['{DFCABCBE-B322-4F22-A380-7DE112BF13DF}']
['{8943CBEB-C17F-4C81-B0D7-E1FBF3B8445C}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_PRESUPUESTOValue : Integer;
@ -666,6 +701,49 @@ implementation
uses
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 }
constructor TPresupuestosClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
var
@ -2267,6 +2345,7 @@ end;
initialization
RegisterBusinessProcessorRules(RID_ListaAnosPresupuestosDelta, TListaAnosPresupuestosBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PresupuestosClienteDelta, TPresupuestosClienteBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_PresupuestosCliente_DetallesDelta, TPresupuestosCliente_DetallesBusinessProcessorRules);

View File

@ -12,6 +12,33 @@ object srvPresupuestosCliente: TsrvPresupuestosCliente
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_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
Params = <>
Statements = <

View File

@ -124,7 +124,19 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente
Width = 805
ExplicitWidth = 805
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
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 805
@ -147,11 +159,11 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente
end
end
inherited TBXTMain2: TTBXToolbar
Left = 343
Left = 427
DockPos = 343
Visible = True
ExplicitLeft = 343
ExplicitWidth = 418
ExplicitLeft = 427
ExplicitWidth = 378
object TBXItem43: TTBXItem
Action = actAceptar
DisplayMode = nbdmImageAndText

View File

@ -61,6 +61,7 @@ type
procedure actEnviarEMailExecute(Sender: TObject);
procedure actEnviarEMailUpdate(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
protected
FPresupuestos: IBizPresupuestoCliente;
@ -78,6 +79,7 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo
@ -439,6 +441,8 @@ end;
procedure TfEditorPresupuestosCliente.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -515,6 +519,13 @@ begin
FController.Ver(Presupuestos);
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);
var
FTitulo : String;
@ -565,17 +576,37 @@ begin
APresupuestos := Nil;
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosPresupuestos;
end;
procedure TfEditorPresupuestosCliente.SetPresupuestos(const Value: IBizPresupuestoCliente);
begin
FPresupuestos := Value;
dsDataTable.DataTable := FPresupuestos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPresupuestosCliente).Presupuestos := Presupuestos;
if Assigned(FPresupuestos) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FPresupuestos.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FPresupuestos.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewPresupuestosCliente).Presupuestos := Presupuestos;
end;
end;
end.

View File

@ -80,6 +80,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TRecibosClienteController = class(TControllerBase, IRecibosClienteController)
@ -147,6 +150,9 @@ type
procedure Preview(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
procedure Print(ARecibosCliente : IBizRecibosCliente; AllItems: Boolean = false);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -444,6 +450,11 @@ begin
Result := Buscar(ID_NULO);
end;
function TRecibosClienteController.DarListaAnosRecibos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
function TRecibosClienteController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var
ARecibosCliente: IBizRecibosCliente;
@ -852,6 +863,35 @@ begin
Result := ASeleccionados;
end;
procedure TRecibosClienteController.FiltrarAno(ARecibo: IBizRecibosCliente; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
ARecibo.DataTable.DynamicWhere.Clear;
ARecibo.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with ARecibo.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_RecibosClienteFECHA_EMISION), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RecibosClienteFECHA_EMISION), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TRecibosClienteController.FiltrarEmpresa(ARecibo: IBizRecibosCliente);
var
Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
OnCreate = DAClientDataModuleCreate
Height = 223
Height = 286
Width = 525
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -476,4 +476,28 @@ inherited DataModuleRecibosCliente: TDataModuleRecibosCliente
Left = 416
Top = 32
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

View File

@ -47,6 +47,8 @@ type
ds_RecibosCliente: TDADataSource;
tbl_RecibosCompensadosCli: TDAMemDataTable;
ds_RecibosCompensadosCli: TDADataSource;
tbl_ListaAnosRecibos: TDAMemDataTable;
ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
protected
function _GetPagos: IBizPagosCliente;
@ -56,6 +58,8 @@ type
function GetItem(const ID : Integer) : IBizRecibosCliente;
function NewItem : IBizRecibosCliente;
function GetReport(const ListaID: TIntegerList): Binary;
function GetAnosItems : TStringList;
end;
implementation
@ -149,6 +153,30 @@ begin
Result := GetItem(ID_NULO)
end;
function TDataModuleRecibosCliente.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosRecibos do
begin
Open;
First;
while not eof do
begin
AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
Next;
end;
Close;
end;
Result := AListaAnos;
finally
HideHourglassCursor;
end;
end;
function TDataModuleRecibosCliente.GetItem(const ID: Integer): IBizRecibosCliente;
var
Condicion: TDAWhereExpression;

View File

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

View File

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

View File

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

View File

@ -14,6 +14,33 @@ object srvRecibosCliente: TsrvRecibosCliente
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_EMISION, 1,4)) as ' +
'ANO'#10'from recibos_cliente'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select dis' +
'tinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosRecibos'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item
Params = <>
Statements = <

View File

@ -41,13 +41,27 @@ inherited fEditorRecibosCliente: TfEditorRecibosCliente
Width = 645
ExplicitWidth = 645
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
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 645
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitLeft = 427
ExplicitWidth = 66
object TBXItem38: TTBXItem
Action = actInformes

View File

@ -49,12 +49,15 @@ type
JSInformesDialog: TJSDialog;
procedure FormShow(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private
FRecibosCliente: IBizRecibosCliente;
FController : IRecibosClienteController;
protected
function GetRecibosCliente: IBizRecibosCliente;
procedure SetRecibosCliente(const Value: IBizRecibosCliente);
function GetController : IRecibosClienteController;
procedure SetController (const Value : IRecibosClienteController);
@ -64,6 +67,8 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosCliente: IBizRecibosCliente read GetRecibosCliente write SetRecibosCliente;
@ -144,6 +149,8 @@ end;
procedure TfEditorRecibosCliente.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -221,6 +228,13 @@ begin
//No se pueden añadir recibos nuevos
end;
procedure TfEditorRecibosCliente.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(RecibosCliente, DynWhereDataTable, Text);
if RecibosCliente.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorRecibosCliente.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@ -272,17 +286,37 @@ begin
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
end;
procedure TfEditorRecibosCliente.SetRecibosCliente(const Value: IBizRecibosCliente);
begin
FRecibosCliente := Value;
dsDataTable.DataTable := FRecibosCliente.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRecibosCliente).Recibos := FRecibosCliente;
if Assigned(FRecibosCliente) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FRecibosCliente.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FRecibosCliente.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRecibosCliente).Recibos := FRecibosCliente;
end;
end;
end.

View File

@ -75,6 +75,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
TRecibosProveedorController = class(TControllerBase, IRecibosProveedorController)
@ -141,6 +144,9 @@ type
procedure Preview(ARecibosProveedor : IBizRecibosProveedor);
procedure Print(ARecibosProveedor : IBizRecibosProveedor);
function DarListaAnosRecibos: TStringList;
procedure FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -419,6 +425,11 @@ begin
Result := Buscar(ID_NULO);
end;
function TRecibosProveedorController.DarListaAnosRecibos: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
function TRecibosProveedorController.DarNuevaReferencia(ID_FACTURA: Integer; REFERENCIA: String): String;
var
ARecibosProveedor: IBizRecibosProveedor;
@ -791,6 +802,35 @@ begin
Result := ASeleccionados;
end;
procedure TRecibosProveedorController.FiltrarAno(ARecibo: IBizRecibosProveedor; ADynWhereDataTable: WideString; const Ano: String);
var
Condicion: TDAWhereExpression;
FechaIni: String;
FechaFin: String;
begin
ARecibo.DataTable.DynamicWhere.Clear;
ARecibo.DataTable.DynamicWhere.Xml := ADynWhereDataTable;
if (Ano <> 'Todos') then
begin
// Filtrar las facturas actuales por empresa
FechaIni := '01/01/' + Ano;
FechaFin := '31/12/' + Ano;
with ARecibo.DataTable.DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion := NewBinaryExpression(NewField('', fld_RecibosProveedorFECHA_EMISION), NewConstant(FechaIni, datString), dboGreaterOrEqual);
Condicion := NewBinaryExpression(NewBinaryExpression(NewField('', fld_RecibosProveedorFECHA_EMISION), NewConstant(FechaFin, datString), dboLessOrEqual), Condicion, dboAnd);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Condicion, Expression, dboAnd);
end;
end;
end;
procedure TRecibosProveedorController.FiltrarEmpresa(ARecibo: IBizRecibosProveedor);
var
Condicion: TDAWhereExpression;

View File

@ -1,6 +1,6 @@
inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
OnCreate = DAClientDataModuleCreate
Height = 255
Height = 311
Width = 518
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
@ -464,4 +464,28 @@ inherited DataModuleRecibosProveedor: TDataModuleRecibosProveedor
Left = 160
Top = 48
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

View File

@ -46,6 +46,8 @@ type
ds_RecibosCompensadosProv: TDADataSource;
tbl_RecibosProveedor: TDAMemDataTable;
ds_RecibosProveedor: TDADataSource;
tbl_ListaAnosRecibos: TDAMemDataTable;
ds_ListaAnosRecibos: TDADataSource;
procedure DAClientDataModuleCreate(Sender: TObject);
protected
function _GetPagos: IBizPagosProveedor;
@ -56,6 +58,7 @@ type
function NewItem : IBizRecibosProveedor;
function GetReport(const ID: Integer): Binary;
function GetAnosItems : TStringList;
end;
implementation
@ -142,6 +145,30 @@ begin
Result := GetItem(ID_NULO)
end;
function TDataModuleRecibosProveedor.GetAnosItems: TStringList;
var
AListaAnos: TStringList;
begin
AListaAnos := TStringList.Create;
ShowHourglassCursor;
try
with tbl_ListaAnosRecibos do
begin
Open;
First;
while not eof do
begin
AListaAnos.Add(Format('%s=%s', [Fields[0].AsString, Fields[0].AsString]));
Next;
end;
Close;
end;
Result := AListaAnos;
finally
HideHourglassCursor;
end;
end;
function TDataModuleRecibosProveedor.GetItem(const ID: Integer): IBizRecibosProveedor;
var
Condicion: TDAWhereExpression;

View File

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

View File

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

View File

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

View File

@ -13,6 +13,33 @@ object srvRecibosProveedor: TsrvRecibosProveedor
ConnectionManager = dmServer.ConnectionManager
DataDictionary = DADataDictionary
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_EMISION, 1,4)) as ' +
'ANO'#10'from recibos_proveedor'#10'order by 1 desc)'#10#10'UNION ALL'#10#10'select d' +
'istinct '#39'Todos'#39' as ANO'#10'from empresas'#10
StatementType = stSQL
ColumnMappings = <
item
DatasetField = 'ANO'
TableField = 'ANO'
end>
end>
Name = 'ListaAnosRecibos'
Fields = <
item
Name = 'ANO'
DataType = datString
Size = 254
end>
end
item
Params = <>
Statements = <

View File

@ -41,13 +41,27 @@ inherited fEditorRecibosProveedor: TfEditorRecibosProveedor
Width = 638
ExplicitWidth = 638
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
inherited tbxMenu: TTBXToolbar
ExplicitWidth = 638
end
inherited TBXTMain2: TTBXToolbar
Left = 427
Visible = True
ExplicitLeft = 427
ExplicitWidth = 66
object TBXItem38: TTBXItem
Action = actInformes

View File

@ -47,12 +47,16 @@ type
TBXItem38: TTBXItem;
procedure FormShow(Sender: TObject);
procedure actInformesExecute(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private
FRecibosProveedor: IBizRecibosProveedor;
FController : IRecibosProveedorController;
protected
function GetRecibosProveedor: IBizRecibosProveedor;
procedure SetRecibosProveedor(const Value: IBizRecibosProveedor);
function GetController : IRecibosProveedorController;
procedure SetController (const Value : IRecibosProveedorController);
@ -62,6 +66,8 @@ type
procedure DuplicarInterno; override;
procedure ImprimirInterno; override;
procedure PrevisualizarInterno; override;
procedure RefrescarInterno; override;
public
procedure PonerTitulos(const ATitulo: string = ''); override;
property RecibosProveedor: IBizRecibosProveedor read GetRecibosProveedor write SetRecibosProveedor;
@ -141,6 +147,8 @@ end;
procedure TfEditorRecibosProveedor.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -181,6 +189,13 @@ begin
//No se pueden añadir recibos nuevos
end;
procedure TfEditorRecibosProveedor.OnListaAnosChange(Sender: TObject; const Text: string);
begin
Controller.FiltrarAno(RecibosProveedor, DynWhereDataTable, Text);
if RecibosProveedor.DataTable.Active then
RefrescarInterno;
end;
procedure TfEditorRecibosProveedor.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
@ -194,17 +209,37 @@ begin
inherited;
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);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRecibos;
end;
procedure TfEditorRecibosProveedor.SetRecibosProveedor(const Value: IBizRecibosProveedor);
begin
FRecibosProveedor := Value;
dsDataTable.DataTable := FRecibosProveedor.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor;
if Assigned(FRecibosProveedor) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FRecibosProveedor.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FRecibosProveedor.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRecibosProveedor).Recibos := FRecibosProveedor;
end;
end;
end.

View File

@ -35,6 +35,9 @@ type
procedure RecuperarRecibos(ARemesaCliente: IBizRemesaCliente);
function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente;
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
TRemesasClienteController = class(TControllerBase, IRemesasClienteController)
@ -81,6 +84,9 @@ type
function ExtraerSeleccionados(ARemesasCliente: IBizRemesaCliente) : IBizRemesaCliente; virtual;
function ElegirRecibosCliente(ARemesaCliente : IBizRemesaCliente): Boolean;
procedure EliminarReciboCliente(ARemesaCliente : IBizRemesaCliente);
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaCliente; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -163,6 +169,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TRemesasClienteController.DarListaAnosRemesas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TRemesasClienteController.DescartarCambios(ARemesaCliente: IBizRemesaCliente);
begin
if not Assigned(ARemesaCliente) then
@ -444,6 +455,35 @@ begin
Result := ASeleccionados;
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);
var
Condicion: TDAWhereExpression;

View File

@ -160,4 +160,28 @@ inherited DataModuleRemesasCliente: TDataModuleRemesasCliente
Left = 208
Top = 32
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

View File

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

View File

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

View File

@ -9,11 +9,19 @@ const
{ Data table rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_RemesasCliente = '{A3A37A96-7559-4E50-8495-1079545939AD}';
RID_ListaAnosRemesas = '{18B30F17-EDCE-4FFF-A761-BC8F65564F29}';
RID_RemesasCliente = '{ECFA8C62-D24D-4A6D-97E2-4A0CECBE1704}';
{ Data table names }
nme_ListaAnosRemesas = 'ListaAnosRemesas';
nme_RemesasCliente = 'RemesasCliente';
{ ListaAnosRemesas fields }
fld_ListaAnosRemesasANO = 'ANO';
{ ListaAnosRemesas field indexes }
idx_ListaAnosRemesasANO = 0;
{ RemesasCliente fields }
fld_RemesasClienteID = 'ID';
fld_RemesasClienteID_EMPRESA = 'ID_EMPRESA';
@ -55,9 +63,44 @@ const
idx_RemesasClienteIMPORTE_TOTAL = 17;
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 = interface(IDAStronglyTypedDataTable)
['{DB8F46E9-380C-4C70-ABE6-04E5B22CF7A7}']
['{5AB6B670-D2E4-4409-BCD6-18F8F2E1BDAC}']
{ Property getters and setters }
function GetIDValue: Integer;
procedure SetIDValue(const aValue: Integer);
@ -298,6 +341,39 @@ implementation
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 }
constructor TRemesasClienteDataTableRules.Create(aDataTable: TDADataTable);
begin
@ -689,6 +765,7 @@ end;
initialization
RegisterDataTableRules(RID_ListaAnosRemesas, TListaAnosRemesasDataTableRules);
RegisterDataTableRules(RID_RemesasCliente, TRemesasClienteDataTableRules);
end.

View File

@ -9,12 +9,47 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_RemesasClienteDelta = '{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}';
RID_ListaAnosRemesasDelta = '{6C373A41-A09A-452A-932B-A3D8A57D3796}';
RID_RemesasClienteDelta = '{52679A52-CD63-419C-AFE2-86E2E6CE2F73}';
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 = interface(IRemesasCliente)
['{DF92284D-DA6F-4B1B-9E11-B808478A1CBD}']
['{52679A52-CD63-419C-AFE2-86E2E6CE2F73}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@ -255,6 +290,49 @@ implementation
uses
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 }
constructor TRemesasClienteBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
@ -826,6 +904,7 @@ end;
initialization
RegisterBusinessProcessorRules(RID_ListaAnosRemesasDelta, TListaAnosRemesasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RemesasClienteDelta, TRemesasClienteBusinessProcessorRules);
end.

View File

@ -136,6 +136,33 @@ object srvRemesasCliente: TsrvRemesasCliente
DataDictionary = DataDictionary
Diagrams = Diagrams
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_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
Params = <>
Statements = <

View File

@ -35,6 +35,9 @@ type
procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor);
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor;
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
TRemesasProveedorController = class(TControllerBase, IRemesasProveedorController)
@ -81,6 +84,9 @@ type
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor) : IBizRemesaProveedor; virtual;
function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor);
function DarListaAnosRemesas: TStringList;
procedure FiltrarAno(ARemesa: IBizRemesaProveedor; ADynWhereDataTable: WideString; const Ano: String);
end;
implementation
@ -163,6 +169,11 @@ begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
function TRemesasProveedorController.DarListaAnosRemesas: TStringList;
begin
Result := FDataModule.GetAnosItems;
end;
procedure TRemesasProveedorController.DescartarCambios(ARemesaProveedor: IBizRemesaProveedor);
begin
if not Assigned(ARemesaProveedor) then
@ -447,6 +458,35 @@ begin
Result := ASeleccionados;
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);
var
Condicion: TDAWhereExpression;

View File

@ -1,7 +1,7 @@
inherited DataModuleRemesasProveedor: TDataModuleRemesasProveedor
OnCreate = DAClientDataModuleCreate
Height = 233
Width = 291
Height = 232
Width = 496
object RORemoteService: TRORemoteService
Message = dmConexion.ROMessage
Channel = dmConexion.ROChannel
@ -160,4 +160,28 @@ inherited DataModuleRemesasProveedor: TDataModuleRemesasProveedor
Left = 192
Top = 24
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

View File

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

View File

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

View File

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

View File

@ -9,12 +9,47 @@ const
{ Delta rules ids
Feel free to change them to something more human readable
but make sure they are unique in the context of your application }
RID_RemesasProveedorDelta = '{8EF544D2-A579-49C7-A4AF-220B10067DE0}';
RID_ListaAnosRemesasDelta = '{FFBEBD9A-41DB-4885-9C59-D5B28D9224ED}';
RID_RemesasProveedorDelta = '{EFD80AFB-4227-4D5E-8EDC-24F95B41B3D4}';
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 = interface(IRemesasProveedor)
['{8EF544D2-A579-49C7-A4AF-220B10067DE0}']
['{EFD80AFB-4227-4D5E-8EDC-24F95B41B3D4}']
{ Property getters and setters }
function GetOldIDValue : Integer;
function GetOldID_EMPRESAValue : Integer;
@ -255,6 +290,49 @@ implementation
uses
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 }
constructor TRemesasProveedorBusinessProcessorRules.Create(aBusinessProcessor: TDABusinessProcessor);
begin
@ -826,6 +904,7 @@ end;
initialization
RegisterBusinessProcessorRules(RID_ListaAnosRemesasDelta, TListaAnosRemesasBusinessProcessorRules);
RegisterBusinessProcessorRules(RID_RemesasProveedorDelta, TRemesasProveedorBusinessProcessorRules);
end.

View File

@ -136,6 +136,33 @@ object srvRemesasProveedor: TsrvRemesasProveedor
DataDictionary = DataDictionary
Diagrams = Diagrams
Datasets = <
item
Params = <>
Statements = <
item
Connection = 'IBX'
ConnectionType = 'Interbase'
Default = True
Name = 'IBX'
SQL =
'select ANO from'#10'(select distinct(substr(FECHA_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
Params = <>
Statements = <

View File

@ -4,7 +4,6 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
Caption = 'Lista de remesas de pago'
ClientWidth = 820
ExplicitWidth = 828
ExplicitHeight = 240
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader
@ -44,12 +43,21 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
Width = 820
ExplicitWidth = 820
inherited tbxMain: TTBXToolbar
ExplicitWidth = 561
ExplicitWidth = 809
object TBXSeparatorItem17: TTBXSeparatorItem [12]
end
end
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
EditOptions = [tboUseEditWhenVertical]
end
@ -67,8 +75,8 @@ inherited fEditorRemesasProveedor: TfEditorRemesasProveedor
end
end
inherited TBXTMain2: TTBXToolbar
Left = 334
ExplicitLeft = 334
Left = 359
ExplicitLeft = 359
end
end
inherited StatusBar: TJvStatusBar

View File

@ -28,12 +28,16 @@ type
procedure FormShow(Sender: TObject);
procedure actVolcarDiscoExecute(Sender: TObject);
procedure actVolcarDiscoUpdate(Sender: TObject);
procedure OnListaAnosChange(Sender: TObject; const Text: string);
private
FRemesasProveedor: IBizRemesaProveedor;
FController : IRemesasProveedorController;
protected
function GetRemesasProveedor: IBizRemesaProveedor;
procedure SetRemesasProveedor(const Value: IBizRemesaProveedor);
function GetController : IRemesasProveedorController; virtual;
procedure SetController (const Value : IRemesasProveedorController); virtual;
@ -42,7 +46,7 @@ type
procedure ModificarInterno; override;
procedure PrevisualizarInterno; override;
procedure ImprimirInterno; override;
procedure RefrescarInterno; override;
//Si queremos crear otra vista para el editor heredado solo tendriamos que
//sobreescribir este metodo
@ -72,6 +76,8 @@ uses
}
procedure TfEditorRemesasProveedor.FormShow(Sender: TObject);
begin
cbxListaAnos.OnChange := OnListaAnosChange; //OJO SIEMPRE ANTES DEL INHERITED
inherited;
if not Assigned(ViewGrid) then
@ -148,6 +154,13 @@ begin
FController.Ver(RemesasProveedor);
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);
var
FTitulo : String;
@ -197,17 +210,37 @@ begin
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);
begin
FRemesasProveedor := Value;
dsDataTable.DataTable := FRemesasProveedor.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRemesasProveedor).RemesasProveedor := RemesasProveedor;
if Assigned(FRemesasProveedor) then
begin
//Se guarda el where de la sentencia origen, por si el editor tiene filtros que
//afecten a este where y en un futuro se desea volver al where origen (filtro de año))
DynWhereDataTable := FRemesasProveedor.DataTable.DynamicWhere.Xml;
dsDataTable.DataTable := FRemesasProveedor.DataTable;
if Assigned(ViewGrid) then
(ViewGrid as IViewRemesasProveedor).RemesasProveedor := RemesasProveedor;
end;
end;
procedure TfEditorRemesasProveedor.SetController(const Value: IRemesasProveedorController);
begin
FController := Value;
if Assigned(FController) then
ListaAnos := FController.DarListaAnosRemesas;
end;
destructor TfEditorRemesasProveedor.Destroy;