unit uViewRecibosCliente; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewGrid, uViewPreview, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, cxImageComboBox, cxTextEdit, ImgList, PngImageList, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, dxPSCore, dxPScxCommon, dxPScxGridLnk, ActnList, uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxImage, Grids, DBGrids, uBizRecibosCliente, cxGridCustomPopupMenu, cxGridPopupMenu, cxCalendar, cxCurrencyEdit; type IViewRecibosCliente = interface(IViewGrid) ['{27D0229A-6340-4F03-B97A-7776E9166F2F}'] function GetRecibos: IBizRecibosCliente; procedure SetRecibos(const Value: IBizRecibosCliente); property Recibos: IBizRecibosCliente read GetRecibos write SetRecibos; procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant); end; TfrViewRecibosCliente = class(TfrViewGrid, IViewRecibosCliente) PngImageList: TPngImageList; cxStylePendientes: TcxStyle; cxGridPendientes: TcxGridLevel; cxGridPagados: TcxGridLevel; cxStylePagados: TcxStyle; cxGridViewRecID: TcxGridDBColumn; cxGridViewID: TcxGridDBColumn; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewSITUACION: TcxGridDBColumn; cxGridViewID_FACTURA: TcxGridDBColumn; cxGridViewFECHA_VENCIMIENTO: TcxGridDBColumn; cxGridViewDESCRIPCION: TcxGridDBColumn; cxGridViewOBSERVACIONES: TcxGridDBColumn; cxGridViewIMPORTE: TcxGridDBColumn; cxGridViewFECHA_FACTURA: TcxGridDBColumn; cxGridViewFORMA_PAGO_FACTURA: TcxGridDBColumn; cxGridViewIMPORTE_FACTURA: TcxGridDBColumn; cxGridViewNOMBRE_CLIENTE: TcxGridDBColumn; cxGridViewNIF_CIF_CLIENTE: TcxGridDBColumn; cxGridViewENTIDAD_CLIENTE: TcxGridDBColumn; cxGridViewSUCURSAL_CLIENTE: TcxGridDBColumn; cxGridViewDC_CLIENTE: TcxGridDBColumn; cxGridViewCUENTA_CLIENTE: TcxGridDBColumn; cxGridViewID_EMPRESA: TcxGridDBColumn; cxGridViewFECHA_ALTA: TcxGridDBColumn; cxGridViewFECHA_MODIFICACION: TcxGridDBColumn; cxGridViewUSUARIO: TcxGridDBColumn; cxGridViewID_REMESA: TcxGridDBColumn; cxGridViewREFERENCIA_REMESA: TcxGridDBColumn; cxGridDevueltos: TcxGridLevel; cxGridViewOTROS_GASTOS: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; cxGridViewFECHA_EMISION: TcxGridDBColumn; cxStyleDevueltos: TcxStyle; procedure cxGridViewICONOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure cxGridViewIMPORTE_TOTALGetDisplayText(Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: string); protected FNivelFiltrado : TcxFilterCriteriaItemList; FRecibos: IBizRecibosCliente; function GetRecibos: IBizRecibosCliente; procedure SetRecibos(const Value: IBizRecibosCliente); procedure FilterChanged(Sender : TObject); override; public property Recibos: IBizRecibosCliente read GetRecibos write SetRecibos; procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant); end; implementation uses uDataModuleRecibosCliente, DateUtils; {$R *.dfm} { TfrViewRecibosCliente } procedure TfrViewRecibosCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; FreeAndNil(FNivelFiltrado); FilterChanged(Self); end; procedure TfrViewRecibosCliente.cxGridViewICONOCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var R : TRect; begin inherited; { R := AViewInfo.ContentBounds; ACanvas.FillRect(R); if (Pos('-', AViewInfo.GridRecord.DisplayTexts[cxGridViewIMPORTE_TOTAL.Index]) > 0) then ACanvas.DrawImage(PngImageList, R.Left, R.Top, 3) else ACanvas.DrawImage(PngImageList, R.Left, R.Top, 2); ADone := True; } end; procedure TfrViewRecibosCliente.cxGridViewIMPORTE_TOTALGetDisplayText( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; var AText: string); var ImporteTotal : Double; begin //Se encarga de mostrar el campo calculado de importe total ImporteTotal := -1; if not VarIsNull(ARecord.Values[cxGridViewIMPORTE.Index]) then if not VarIsNull(ARecord.Values[cxGridViewOTROS_GASTOS.Index]) then ImporteTotal := ARecord.Values[cxGridViewIMPORTE.Index] + ARecord.Values[cxGridViewOTROS_GASTOS.Index] else ImporteTotal := ARecord.Values[cxGridViewIMPORTE.Index]; if (ImporteTotal <> -1) then begin AText := FormatCurr(',0.00 €;-,0.00 €', FloatToCurr(ImporteTotal)); ARecord.Values[cxGridViewIMPORTE_TOTAL.Index] := ImporteTotal; cxGridViewIMPORTE_TOTAL.EditValue := ImporteTotal; cxGridViewIMPORTE_TOTAL.DataBinding.Field.Value := ImporteTotal; end; end; procedure TfrViewRecibosCliente.cxGridViewStylesGetContentStyle( Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); var IndiceCol: Integer; ASituacion: string; begin inherited; if Assigned(ARecord) then begin IndiceCol := cxGridViewSITUACION.Index; ASituacion := UPPERCASE(VarToStr(ARecord.DisplayTexts[IndiceCol])); if (ASituacion = CTE_PENDIENTE) then AStyle := cxStylePendientes else if (ASituacion = CTE_COBRADO) then AStyle := cxStylePagados else if (ASituacion = CTE_DEVUELTO) then AStyle := cxStyleDevueltos; end; end; procedure TfrViewRecibosCliente.FilterChanged(Sender: TObject); var AItemList: TcxFilterCriteriaItemList; AItemList2: TcxFilterCriteriaItemList; begin inherited; cxGridView.DataController.Filter.BeginUpdate; AItemList := cxGridView.DataController.Filter.Root; AItemList2 := AItemList.AddItemList(fboAnd); FNivelFiltrado := AItemList2; case cxGrid.ActiveLevel.Index of 1 : AItemList2.AddItem(cxGridViewSITUACION, foEqual, CTE_PENDIENTE, CTE_PENDIENTE); 2 : AItemList2.AddItem(cxGridViewSITUACION, foEqual, CTE_COBRADO, CTE_COBRADO); 3 : AItemList2.AddItem(cxGridViewSITUACION, foEqual, CTE_DEVUELTO, CTE_DEVUELTO); end; AItemList := AItemList2; if cxGridView.DataController.Filter.IsEmpty then cxGridView.DataController.Filter.Active := False else cxGridView.DataController.Filter.Active := True; cxGridView.DataController.Filter.EndUpdate; cxGrid.ActiveLevel.GridView := cxGridView; end; procedure TfrViewRecibosCliente.FiltrarPorFechas(const Fecha1, Fecha2: Variant); var Columna: TcxGridDBColumn; begin with cxGridView.DataController.Filter do begin BeginUpdate; try Options := [fcoCaseInsensitive, fcoSoftCompare]; Root.Clear; if not VarIsNull(Fecha1) and not VarIsNull(Fecha2) then begin Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName('FECHA_VENCIMIENTO'); Root.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2)); Active := True; end else Active := False; finally EndUpdate; end; end; end; function TfrViewRecibosCliente.GetRecibos: IBizRecibosCliente; begin Result := FRecibos; end; procedure TfrViewRecibosCliente.SetRecibos(const Value: IBizRecibosCliente); begin FRecibos := Value; if Assigned(FRecibos) then dsDataSource.DataTable := FRecibos.DataTable; end; end.