unit uViewRecibosProveedor; 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, uBizRecibosProveedor, cxGridCustomPopupMenu, cxGridPopupMenu, cxCalendar, cxCurrencyEdit; type IViewRecibosProveedor = interface(IViewGrid) ['{2E26DF6E-CFCD-41CC-AC4C-FCF3AD0AD0D7}'] function GetRecibos: IBizRecibosProveedor; procedure SetRecibos(const Value: IBizRecibosProveedor); property Recibos: IBizRecibosProveedor read GetRecibos write SetRecibos; procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant); end; TfrViewRecibosProveedor = class(TfrViewGrid, IViewRecibosProveedor) PngImageList: TPngImageList; cxStylePendientes: TcxStyle; cxGridPendientes: TcxGridLevel; cxGridPagados: TcxGridLevel; cxStylePagadas: 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_PROVEEDOR: TcxGridDBColumn; cxGridViewNIF_CIF_PROVEEDOR: TcxGridDBColumn; cxGridViewENTIDAD_PROVEEDOR: TcxGridDBColumn; cxGridViewSUCURSAL_PROVEEDOR: TcxGridDBColumn; cxGridViewDC_PROVEEDOR: TcxGridDBColumn; cxGridViewCUENTA_PROVEEDOR: 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; cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn; cxStyleDevueltas: 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: IBizRecibosProveedor; function GetRecibos: IBizRecibosProveedor; procedure SetRecibos(const Value: IBizRecibosProveedor); procedure FilterChanged(Sender : TObject); override; public property Recibos: IBizRecibosProveedor read GetRecibos write SetRecibos; procedure FiltrarPorFechas(const Fecha1, Fecha2: Variant); end; implementation uses uDataModuleRecibosProveedor, DateUtils; {$R *.dfm} { TfrViewRecibosProveedor } procedure TfrViewRecibosProveedor.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; FreeAndNil(FNivelFiltrado); FilterChanged(Self); end; procedure TfrViewRecibosProveedor.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 TfrViewRecibosProveedor.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 TfrViewRecibosProveedor.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_PAGADO) then AStyle := cxStylePagadas else if (ASituacion = CTE_DEVUELTO) then AStyle := cxStyleDevueltas; end; end; procedure TfrViewRecibosProveedor.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_PAGADO, CTE_PAGADO); 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 TfrViewRecibosProveedor.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 TfrViewRecibosProveedor.GetRecibos: IBizRecibosProveedor; begin Result := FRecibos; end; procedure TfrViewRecibosProveedor.SetRecibos(const Value: IBizRecibosProveedor); begin FRecibos := Value; if Assigned(FRecibos) then dsDataSource.DataTable := FRecibos.DataTable; end; end.