unit uViewPresupuestos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uViewGrid, uViewPreview, frxClass, frxPreview, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ActnList, uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGrid, uBizPresupuestosCliente, StdCtrls, ExtCtrls, cxLabel, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, cxIntlPrintSys3, dxPSCore, dxPScxCommon, dxPScxGridLnk, cxImage, cxImageComboBox, ImgList, PngImageList, cxTextEdit, Grids, DBGrids, cxCurrencyEdit, uViewFiltroBase; type IViewPresupuestos = interface(IViewGrid) ['{8C0A5647-E0E7-40CD-80EC-88DD46383368}'] function GetPresupuestos: IBizPresupuestos; procedure SetPresupuestos(const Value: IBizPresupuestos); property Presupuestos: IBizPresupuestos read GetPresupuestos write SetPresupuestos; end; TfrViewPresupuestos = class(TfrViewGrid, IViewPresupuestos) cxGridDBTableView1: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; cxGridLevel2: TcxGridLevel; cxGridLevel3: TcxGridLevel; cxGridViewCODIGO: TcxGridDBColumn; cxGridViewICONO: TcxGridDBColumn; cxGridViewFECHAPRESUPUESTO: TcxGridDBColumn; cxGridViewIMPORTETOTAL: TcxGridDBColumn; cxGridViewNOMBRE: TcxGridDBColumn; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewSITUACION: TcxGridDBColumn; cxGridViewVIGENCIAPRESUPUESTO: TcxGridDBColumn; PngImageList: TPngImageList; cxStyleRechazado: TcxStyle; cxStyleAceptado: TcxStyle; cxGridViewTIPO: TcxGridDBColumn; cxGridViewALBARAN: TcxGridDBColumn; cxGridViewOPCION: TcxGridDBColumn; procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure cxGridViewCODIGOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); private //Filtros relativos a la vista procedure AnadirFiltroSituaciones; procedure AnadirFiltroFechas; protected FPresupuestos: IBizPresupuestos; function GetPresupuestos: IBizPresupuestos; procedure SetPresupuestos(const Value: IBizPresupuestos); procedure AnadirOtrosFiltros; override; public property Presupuestos: IBizPresupuestos read GetPresupuestos write SetPresupuestos; end; var frViewPresupuestos: TfrViewPresupuestos; implementation uses uDataModulePresupuestos, schPresupuestosClient_Intf; {$R *.dfm} procedure TfrViewPresupuestos.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 cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare]; FFiltro := AddFilterGrid(fboAnd); Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName('FECHAPRESUPUESTO'); FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2)); end; end; procedure TfrViewPresupuestos.AnadirFiltroSituaciones; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); case cxGrid.ActiveLevel.Index of 1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PENDIENTE, SITUACION_PENDIENTE); 2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_ACEPTADO, SITUACION_ACEPTADO); 3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_RECHAZADO, SITUACION_RECHAZADO); end; end; procedure TfrViewPresupuestos.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; RefrescarFiltro; end; procedure TfrViewPresupuestos.cxGridViewCODIGOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var R: TRect; begin inherited; R := AViewInfo.ContentBounds; ACanvas.FillRect(R); ACanvas.DrawImage(PngImageList, R.Left, R.Top, 2); ADone := True; end; procedure TfrViewPresupuestos.cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); var IndiceCol: Integer; ASituacion: string; begin inherited; if Assigned(ARecord) then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_PresupuestosSITUACION).Index; ASituacion := VarToStr(ARecord.DisplayTexts[IndiceCol]); if ASituacion = SITUACION_ACEPTADO then AStyle := cxStyleAceptado else if ASituacion = SITUACION_RECHAZADO then AStyle := cxStyleRechazado; end; end; function TfrViewPresupuestos.GetPresupuestos: IBizPresupuestos; begin Result := FPresupuestos; end; procedure TfrViewPresupuestos.AnadirOtrosFiltros; begin inherited; AnadirFiltroSituaciones; AnadirFiltroFechas; //Finalmente activamos el filtro si tenemos algo if cxGridView.DataController.Filter.IsEmpty then cxGridView.DataController.Filter.Active := False else cxGridView.DataController.Filter.Active := True; cxGrid.ActiveLevel.GridView := cxGridView; end; procedure TfrViewPresupuestos.SetPresupuestos(const Value: IBizPresupuestos); begin FPresupuestos := Value; if Assigned(FPresupuestos) then DADataSource.DataTable := FPresupuestos.DataTable; end; end.