AlonsoYSal_FactuGES2/Source/Modulos/Contabilidad/Views/uViewExtractoMovimientos.pas
2019-11-18 10:36:42 +00:00

296 lines
9.2 KiB
ObjectPascal

unit uViewExtractoMovimientos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, DB, cxDBData, uDADataTable, cxGridLevel,
cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGrid, uBizDiario, ActnList, Menus,
cxGridBandedTableView, cxGridDBBandedTableView, JvComponent,
JvFormAutoSize, PngImageList, ImgList, dxPSGlbl, dxPSUtl, dxPSEngn,
dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
dxPSEdgePatterns, dxPSCore, dxPScxCommon, dxPScxGrid6Lnk,
cxGridCustomPopupMenu, cxGridPopupMenu, uViewFiltroBase, TB2Item, TBX,
TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces, cxCalendar,
cxImageComboBox, cxTextEdit, cxCurrencyEdit, uBizSubCuentas, uAsientosController,
uCustomView, uViewBase;
type
IViewExtractoMovimientos = interface(IViewGrid)
['{5CA170E3-5552-4EF5-A2C0-02E4C9052045}']
function GetDiario: IBizDiario;
procedure SetDiario(const Value: IBizDiario);
property Diario: IBizDiario read GetDiario write SetDiario;
function GetSubCuentas: IBizSubCuenta;
procedure SetSubCuentas(const Value: IBizSubCuenta);
property SubCuentas: IBizSubCuenta read GetSubCuentas write SetSubCuentas;
function GetController : IAsientosController;
procedure SetController (const Value : IAsientosController);
property Controller : IAsientosController read GetController write SetController;
function GetExtractoChange: TNotifyEvent;
procedure SetExtractoChange(const Value: TNotifyEvent);
property OnExtractoChange: TNotifyEvent read GetExtractoChange write SetExtractoChange;
end;
TfrViewExtractoMovimientos = class(TfrViewGrid, IViewExtractoMovimientos)
cxGridViewCONCEPTO: TcxGridDBColumn;
cxGridViewREF_SUBCUENTA: TcxGridDBColumn;
cxGridViewID_ASIENTO: TcxGridDBColumn;
PngImageList: TPngImageList;
cxGridViewSUBCUENTA: TcxGridDBColumn;
cxGridViewDEBE: TcxGridDBColumn;
cxGridViewHABER: TcxGridDBColumn;
cxGridViewFECHA_ASIENTO: TcxGridDBColumn;
cxGridViewORDEN: TcxGridDBColumn;
cxGridViewID_APUNTE: TcxGridDBColumn;
cxGridViewID_FACTURA: TcxGridDBColumn;
cxGridViewID_PAGO: TcxGridDBColumn;
cxGridViewDOCUMENTO: TcxGridDBColumn;
cxGridViewSaldo: TcxGridDBColumn;
cxGridViewTIPO: TcxGridDBColumn;
cxStyleCierre: TcxStyle;
cxGridViewPUNTEADO: TcxGridDBColumn;
procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
procedure CustomViewShow(Sender: TObject);
procedure CustomViewDestroy(Sender: TObject);
procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
out AStyle: TcxStyle);
procedure cxGridViewICONOCustomDrawCell(Sender: TcxCustomGridTableView;
ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
var ADone: Boolean);
private
FOnExtractoChange: TNotifyEvent;
function GetExtractoChange: TNotifyEvent;
procedure SetExtractoChange(const Value: TNotifyEvent);
procedure AnadirFiltroFechas;
protected
FSubCuentas: IBizSubCuenta;
FDiario: IBizDiario;
FController : IAsientosController;
function GetDiario: IBizDiario; virtual;
procedure SetDiario(const Value: IBizDiario); virtual;
function GetSubCuentas: IBizSubCuenta; virtual;
procedure SetSubCuentas(const Value: IBizSubCuenta); virtual;
function GetController : IAsientosController; virtual;
procedure SetController (const Value : IAsientosController); virtual;
public
procedure AnadirOtrosFiltros; override;
property OnExtractoChange: TNotifyEvent read GetExtractoChange write SetExtractoChange;
property Diario: IBizDiario read GetDiario write SetDiario;
property SubCuentas: IBizSubCuenta read GetSubCuentas write SetSubCuentas;
property Controller : IAsientosController read GetController write SetController;
end;
implementation
{$R *.dfm}
uses
uSubCuentasController;
{ TfrViewDiario }
{
******************************* TfrViewDiario *******************************
}
function TfrViewExtractoMovimientos.GetController: IAsientosController;
begin
Result := FController;
end;
function TfrViewExtractoMovimientos.GetDiario: IBizDiario;
begin
Result := FDiario;
end;
function TfrViewExtractoMovimientos.GetExtractoChange: TNotifyEvent;
begin
Result := FOnExtractoChange;
end;
function TfrViewExtractoMovimientos.GetSubCuentas: IBizSubCuenta;
begin
Result := FSubCuentas;
end;
procedure TfrViewExtractoMovimientos.SetController(const Value: IAsientosController);
begin
FController := Value;
end;
procedure TfrViewExtractoMovimientos.SetDiario(const Value: IBizDiario);
begin
FDiario := Value;
if Assigned(FDiario) then
dsDataSource.DataTable := FDiario.DataTable;
if Assigned(FOnExtractoChange) then
FOnExtractoChange(Self);
FDiario.DataTable.Active := True;
GotoFirst;
end;
procedure TfrViewExtractoMovimientos.SetExtractoChange(const Value: TNotifyEvent);
begin
FOnExtractoChange := Value;
end;
procedure TfrViewExtractoMovimientos.SetSubCuentas(const Value: IBizSubCuenta);
var
Nivel: TcxGridLevel;
auxb: Boolean;
begin
FSubCuentas := Value;
if Assigned(FSubCuentas) then
begin
if not FSubCuentas.DataTable.Active then
FSubCuentas.DataTable.Active := True;
if FSubCuentas.RecordCount > 0 then
begin
with FSubCuentas.DataTable do
begin
First;
auxb:=True;
while not EOF do
begin
if auxb
//Ponemos la primera cuenta en el nivel ya creado
then Nivel := cxGridLevel
//Creamos un nuevo nivel
else Nivel := cxGrid.Levels.Add;
Nivel.Caption := FSubCuentas.DESCRIPCION;
Nivel.Tag := FSubCuentas.ID;
Next;
auxb := False;
end;
First;
end;
end
else cxGrid.RootLevelOptions.DetailTabsPosition := dtpNone;
// FAsientos.Intervalo := frListaIntervalos.Intervalo;
end;
end;
procedure TfrViewExtractoMovimientos.AnadirFiltroFechas;
var
Columna: TcxGridDBColumn;
Fecha1, Fecha2: Variant;
FFiltro : TcxFilterCriteriaItemList;
begin
Fecha1 := frViewFiltroBase1.edtFechaIniFiltro.EditValue;
Fecha2 := frViewFiltroBase1.edtFechaFinFiltro.EditValue;
if not VarIsNull(Fecha1) and not VarIsNull(Fecha2) then
begin
_FocusedView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare];
FFiltro := AddFilterGrid(fboAnd);
Columna := _FocusedView.GetColumnByFieldName('FECHA_ASIENTO');
FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2));
end;
end;
procedure TfrViewExtractoMovimientos.AnadirOtrosFiltros;
begin
inherited;
AnadirFiltroFechas;
//Finalmente activamos el filtro si tenemos algo
if _FocusedView.DataController.Filter.IsEmpty then
_FocusedView.DataController.Filter.Active := False
else
_FocusedView.DataController.Filter.Active := True;
cxGrid.ActiveLevel.GridView := _FocusedView;
end;
procedure TfrViewExtractoMovimientos.CustomViewDestroy(Sender: TObject);
begin
FSubCuentas := Nil;
inherited;
end;
procedure TfrViewExtractoMovimientos.CustomViewShow(Sender: TObject);
begin
inherited;
with TSubCuentasController.Create do
try
SubCuentas := BuscarCajasBancos;
finally
Free;
end;
if Assigned(FController) then
begin
Diario := FController.BuscarAsientos(cxGrid.Levels.Items[cxGrid.ActiveLevel.Index].Tag);
//Por si no lo guarda bien el registro del grid
cxGridViewFECHA_ASIENTO.SortIndex := 0;
cxGridViewORDEN.SortIndex := 1;
cxGridViewFECHA_ASIENTO.SortOrder := soDescending;
cxGridViewORDEN.SortOrder := soDescending;
end;
end;
procedure TfrViewExtractoMovimientos.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
var
ACursor: TCursor;
begin
ACursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
inherited;
if Assigned(FController) then
Diario := FController.BuscarAsientos(cxGrid.Levels.Items[ALevel.Index].Tag);
cxGrid.Levels.Items[ALevel.Index].GridView := cxGridView;
Screen.Cursor := ACursor;
end;
procedure TfrViewExtractoMovimientos.cxGridViewICONOCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
R : TRect;
begin
inherited;
R := AViewInfo.ContentBounds;
ACanvas.FillRect(R);
ACanvas.DrawImage(GridPNGImageList, R.Left, R.Top, 0);
ADone := True;
end;
procedure TfrViewExtractoMovimientos.cxGridViewStylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
var
IndiceCol: Integer;
ATIPO: string;
begin
inherited;
if Assigned(ARecord) then
begin
IndiceCol := cxGridViewTIPO.Index;
ATipo := VarToStr(ARecord.DisplayTexts[IndiceCol]);
if (ATIPO = 'X') then
AStyle := cxStyleCierre;
end;
end;
end.