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; procedure RefrescarSubcuentas(ID: Integer); 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.RefrescarSubcuentas(ID: Integer); var i: integer; NumberOfLevels: integer; begin cxGridView.BeginUpdate; NumberOfLevels := cxGrid.Levels.Count - 1; for i := NumberOfLevels downto 0 do begin if (FSubCuentas.DataTable.Locate('ID', cxGrid.Levels.Items[i].Tag,[])) then begin cxGrid.Levels.Items[i].Caption := FSubCuentas.DESCRIPCION; if (FSubCuentas.ID = ID) then cxGrid.Levels.Items[i].Caption := cxGrid.Levels.Items[i].Caption + ' - (****Pago clientes****)'; end; end; cxGridView.EndUpdate; 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; { cxGridView.BeginUpdate; NumberOfLevels := cxGrid.Levels.Count - 1; for i := NumberOfLevels downto 0 do begin cxGrid.Levels.Items[i].free; end; cxGridView.EndUpdate; } 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; if (FSubCuentas.PAGO_DEFECTO = 1) then Nivel.Caption := Nivel.Caption + ' - (****Pago clientes****)'; 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.