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, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock; 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; TBXItem2: TTBXItem; TBXItem3: TTBXItem; TBXItem4: TTBXItem; actCocinas: TAction; actBanos: TAction; actArreglosC: TAction; TBXSeparatorItem1: TTBXSeparatorItem; TBXSeparatorItem2: TTBXSeparatorItem; TBXSeparatorItem3: TTBXSeparatorItem; actArreglosB: TAction; actIncidencias: TAction; TBXItem6: TTBXItem; TBXItem7: TTBXItem; TBXSeparatorItem4: TTBXSeparatorItem; TBXSeparatorItem5: TTBXSeparatorItem; 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); procedure actCocinasExecute(Sender: TObject); procedure actBanosExecute(Sender: TObject); procedure actArreglosCExecute(Sender: TObject); procedure actQuitarAgrupacionesExecute(Sender: TObject); procedure actQuitarAgrupacionesUpdate(Sender: TObject); procedure actCocinasUpdate(Sender: TObject); procedure actBanosUpdate(Sender: TObject); procedure actArreglosCUpdate(Sender: TObject); procedure actArreglosBExecute(Sender: TObject); procedure actIncidenciasExecute(Sender: TObject); procedure actArreglosBUpdate(Sender: TObject); procedure actIncidenciasUpdate(Sender: TObject); private FTipoPresupuesto: String; //Filtros relativos a la vista procedure AnadirFiltroSituaciones; procedure AnadirFiltroFechas; procedure AnadirTipoPresupuestos; 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; AnadirTipoPresupuestos; 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 FTipoPresupuesto:= ''; FPresupuestos := Value; if Assigned(FPresupuestos) then DADataSource.DataTable := FPresupuestos.DataTable; end; procedure TfrViewPresupuestos.AnadirTipoPresupuestos; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); if (FTipoPresupuesto <> '') then if (FTipoPresupuesto = TIPO_COCINA) then FFiltro.AddItem(cxGridViewTIPO, foEqual, TIPO_COCINA, TIPO_COCINA) else if (FTipoPresupuesto = TIPO_BANO) then FFiltro.AddItem(cxGridViewTIPO, foEqual, TIPO_BANO, TIPO_BANO) else if (FTipoPresupuesto = TIPO_ARREGLO_C) then FFiltro.AddItem(cxGridViewTIPO, foEqual, TIPO_ARREGLO_C, TIPO_ARREGLO_C) else if (FTipoPresupuesto = TIPO_ARREGLO_B) then FFiltro.AddItem(cxGridViewTIPO, foEqual, TIPO_ARREGLO_B, TIPO_ARREGLO_B) else if (FTipoPresupuesto = TIPO_INCIDENCIA) then FFiltro.AddItem(cxGridViewTIPO, foEqual, TIPO_INCIDENCIA, TIPO_INCIDENCIA); end; procedure TfrViewPresupuestos.actCocinasExecute(Sender: TObject); begin inherited; FTipoPresupuesto := TIPO_COCINA; RefrescarFiltro end; procedure TfrViewPresupuestos.actBanosExecute(Sender: TObject); begin inherited; FTipoPresupuesto := TIPO_BANO; RefrescarFiltro end; procedure TfrViewPresupuestos.actArreglosCExecute(Sender: TObject); begin inherited; FTipoPresupuesto := TIPO_ARREGLO_C; RefrescarFiltro end; procedure TfrViewPresupuestos.actQuitarAgrupacionesExecute( Sender: TObject); begin inherited; FTipoPresupuesto := ''; RefrescarFiltro end; procedure TfrViewPresupuestos.actQuitarAgrupacionesUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> ''); end; procedure TfrViewPresupuestos.actCocinasUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> TIPO_COCINA); end; procedure TfrViewPresupuestos.actBanosUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> TIPO_BANO); end; procedure TfrViewPresupuestos.actArreglosCUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> TIPO_ARREGLO_C); end; procedure TfrViewPresupuestos.actArreglosBExecute(Sender: TObject); begin inherited; FTipoPresupuesto := TIPO_ARREGLO_B; RefrescarFiltro end; procedure TfrViewPresupuestos.actIncidenciasExecute(Sender: TObject); begin inherited; FTipoPresupuesto := TIPO_INCIDENCIA; RefrescarFiltro end; procedure TfrViewPresupuestos.actArreglosBUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> TIPO_ARREGLO_B); end; procedure TfrViewPresupuestos.actIncidenciasUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoPresupuesto <> TIPO_INCIDENCIA); end; end.