unit uViewContratosCliente; interface uses uViewGrid, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, cxImageComboBox, ImgList, Controls, PngImageList, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridCustomPopupMenu, cxGridPopupMenu, dxPSCore, dxPScxCommon, dxPScxGrid6Lnk, uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, Classes, cxGrid, uBizContratosCliente, cxCurrencyEdit, Forms, uViewFiltroBase, ActnList, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces, Windows, uCustomView, uViewBase, cxTextEdit; type IViewContratosCliente = interface(IViewGrid) ['{89FCCB14-46E9-4B45-BADD-847C881CCE1A}'] function GetContratos: IBizContratoCliente; procedure SetContratos(const Value: IBizContratoCliente); property Contratos: IBizContratoCliente read GetContratos write SetContratos; end; TfrViewContratosCliente = class(TfrViewGrid, IViewContratosCliente) cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn; cxGridViewNOMBRE: TcxGridDBColumn; cxGridViewSITUACION: TcxGridDBColumn; cxGridViewFECHA_CONTRATO: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; cxGridLevelPendientes: TcxGridLevel; cxGridLevelAceptados: TcxGridLevel; cxStylePENDIENTES: TcxStyle; cxStyleACEPTADO: TcxStyle; actCocinas: TAction; TBXSeparatorItem2: TTBXSeparatorItem; TBXItem3: TTBXItem; cxGridViewNIF_CIF: TcxGridDBColumn; cxGridViewINCIDENCIAS: TcxGridDBColumn; cxStyleRECHAZADO: TcxStyle; cxGridViewTIPO_CONTRATO: TcxGridDBColumn; cxGridViewCALLE: TcxGridDBColumn; cxGridViewPOBLACION: TcxGridDBColumn; cxGridViewCODIGO_POSTAL: TcxGridDBColumn; cxGridViewPROVINCIA: TcxGridDBColumn; cxGridViewVENDEDOR: TcxGridDBColumn; cxGridViewReferenciaContenido: TcxGridDBColumn; cxGridViewLISTA_NOMBRES: TcxGridDBColumn; cxGridLevelRechazados: TcxGridLevel; cxGridViewFECHA_DECISION: TcxGridDBColumn; cxGridViewFACTURA_ASOCIADA: TcxGridDBColumn; cxGridViewFECHA_PREVISTA_MONTAJE: TcxGridDBColumn; cxGridViewCAMPO_LIBRE: TcxGridDBColumn; cxGridViewLOPD: TcxGridDBColumn; actBanos: TAction; actElectrodomesticos: TAction; actVarios: TAction; TBXItem2: TTBXItem; TBXItem4: TTBXItem; TBXItem5: TTBXItem; TBXSeparatorItem1: TTBXSeparatorItem; TBXSeparatorItem3: TTBXSeparatorItem; TBXSeparatorItem4: TTBXSeparatorItem; cxGridViewPROCEDENCIA_CLIENTE: TcxGridDBColumn; cxGridViewDESCUENTO: TcxGridDBColumn; cxGridViewIMPORTE_DESCUENTO: TcxGridDBColumn; cxGridViewIMPORTE_NETO: TcxGridDBColumn; cxGridViewFECHA_ULT_PRESENTACION_CLIENTE: TcxGridDBColumn; cxGridViewFORMA_PAGO: TcxGridDBColumn; procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); procedure actCocinasExecute(Sender: TObject); procedure actCocinasUpdate(Sender: TObject); procedure cxGridViewICONOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); procedure cxGridViewINCIDENCIASACTIVASGetCellHint( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; ACellViewInfo: TcxGridTableDataCellViewInfo; const AMousePos: TPoint; var AHintText: TCaption; var AIsHintMultiLine: Boolean; var AHintTextRect: TRect); procedure cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); procedure frViewFiltroBase1actQuitarFiltroExecute(Sender: TObject); procedure actQuitarAgrupacionesUpdate(Sender: TObject); procedure actQuitarAgrupacionesExecute(Sender: TObject); procedure CustomViewShow(Sender: TObject); procedure actBanosExecute(Sender: TObject); procedure actBanosUpdate(Sender: TObject); procedure actElectrodomesticosExecute(Sender: TObject); procedure actElectrodomesticosUpdate(Sender: TObject); procedure actVariosExecute(Sender: TObject); procedure actVariosUpdate(Sender: TObject); private FTipoContrato: String; //Filtros relativos a la vista procedure AnadirFiltroSituaciones; procedure AnadirFiltroFechas; procedure AnadirFiltroTipo; protected FContratos: IBizContratoCliente; function GetContratos: IBizContratoCliente; procedure SetContratos(const Value: IBizContratoCliente); public procedure AnadirOtrosFiltros; override; property Contratos: IBizContratoCliente read GetContratos write SetContratos; end; implementation uses SysUtils, variants, uDataModuleContratosCliente, schContratosClienteClient_Intf, uViewGridBase, uPresupuestosClienteController, //uReferenciasUtils, cxVariants; {$R *.dfm} procedure TfrViewContratosCliente.actBanosExecute(Sender: TObject); begin inherited; FTipoContrato := CTE_BANO; RefrescarFiltro end; procedure TfrViewContratosCliente.actBanosUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoContrato <> CTE_BANO); end; procedure TfrViewContratosCliente.actCocinasExecute(Sender: TObject); begin FTipoContrato := CTE_COCINA; RefrescarFiltro end; procedure TfrViewContratosCliente.actCocinasUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoContrato <> CTE_COCINA); end; procedure TfrViewContratosCliente.actElectrodomesticosExecute(Sender: TObject); begin inherited; FTipoContrato := CTE_ELECTRODOMESTICO; RefrescarFiltro end; procedure TfrViewContratosCliente.actElectrodomesticosUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoContrato <> CTE_ELECTRODOMESTICO); end; procedure TfrViewContratosCliente.actQuitarAgrupacionesExecute(Sender: TObject); begin inherited; FTipoContrato := ''; RefrescarFiltro end; procedure TfrViewContratosCliente.actQuitarAgrupacionesUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoContrato <> ''); end; procedure TfrViewContratosCliente.actVariosExecute(Sender: TObject); begin inherited; FTipoContrato := CTE_VARIOS; RefrescarFiltro end; procedure TfrViewContratosCliente.actVariosUpdate(Sender: TObject); begin inherited; (Sender as TAction).Enabled := (FTipoContrato <> CTE_VARIOS); end; procedure TfrViewContratosCliente.AnadirFiltroFechas; var Columna: TcxGridDBColumn; Fecha1, Fecha2: Variant; FechaDecision1, FechaDecision2: Variant; FechaMontaje1, FechaMontaje2: Variant; FFiltro : TcxFilterCriteriaItemList; begin Fecha1 := frViewFiltroBase1.edtFechaIniFiltro.EditValue; Fecha2 := frViewFiltroBase1.edtFechaFinFiltro.EditValue; FechaDecision1 := frViewFiltroBase1.edtFecha2IniFiltro.EditValue; FechaDecision2 := frViewFiltroBase1.edtFecha2FinFiltro.EditValue; FechaMontaje1 := frViewFiltroBase1.edtFecha3IniFiltro.EditValue; FechaMontaje2 := frViewFiltroBase1.edtFecha3FinFiltro.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('FECHA_CONTRATO'); FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2)); end; if not VarIsNull(FechaDecision1) and not VarIsNull(FechaDecision2) then begin cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare]; FFiltro := AddFilterGrid(fboAnd); Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName('FECHA_DECISION'); FFiltro.AddItem(Columna, foBetween, varArrayOf([FechaDecision1, FechaDecision2]), VarToStr(FechaDecision1) + ' and ' + VarToStr(FechaDecision2)); end; if not VarIsNull(FechaMontaje1) and not VarIsNull(FechaMontaje2) then begin cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare]; FFiltro := AddFilterGrid(fboAnd); Columna := (cxGridView as TcxGridDBTableView).GetColumnByFieldName('FECHA_PREVISTA_MONTAJE'); FFiltro.AddItem(Columna, foBetween, varArrayOf([FechaMontaje1, FechaMontaje2]), VarToStr(FechaMontaje1) + ' and ' + VarToStr(FechaMontaje2)); end; end; procedure TfrViewContratosCliente.AnadirFiltroSituaciones; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); case cxGrid.ActiveLevel.Index of 1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_CONTRATO_PENDIENTE, SITUACION_CONTRATO_PENDIENTE); 2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_CONTRATO_ACEPTADO, SITUACION_CONTRATO_ACEPTADO); 3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_CONTRATO_RECHAZADO, SITUACION_CONTRATO_RECHAZADO); end; end; procedure TfrViewContratosCliente.AnadirFiltroTipo; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); if (FTipoContrato <> '') then if (FTipoContrato = CTE_COCINA) then FFiltro.AddItem(cxGridViewTIPO_CONTRATO, foEqual, CTE_COCINA, CTE_COCINA) else if (FTipoContrato = CTE_BANO) then FFiltro.AddItem(cxGridViewTIPO_CONTRATO, foEqual, CTE_BANO, CTE_BANO) else if (FTipoContrato = CTE_ELECTRODOMESTICO) then FFiltro.AddItem(cxGridViewTIPO_CONTRATO, foEqual, CTE_ELECTRODOMESTICO, CTE_ELECTRODOMESTICO) else if (FTipoContrato = CTE_VARIOS) then FFiltro.AddItem(cxGridViewTIPO_CONTRATO, foEqual, CTE_VARIOS, CTE_VARIOS) end; procedure TfrViewContratosCliente.AnadirOtrosFiltros; begin inherited; AnadirFiltroSituaciones; AnadirFiltroFechas; AnadirFiltroTipo; //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 TfrViewContratosCliente.CustomViewShow(Sender: TObject); begin inherited; FTipoContrato := ''; end; procedure TfrViewContratosCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; RefrescarFiltro; end; procedure TfrViewContratosCliente.cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); begin inherited; { if (AItemIndex = cxGridViewREFERENCIA.Index) and (VarType(V1) = VarType(V2)) and (VarType(V1) = varString) then Compare := CompararReferencias(V1, V2) else Compare := VarCompare(V1, V2); } end; procedure TfrViewContratosCliente.cxGridViewICONOCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); {var R : TRect;} begin inherited; { R := AViewInfo.ContentBounds; ACanvas.FillRect(R); if (cxGridView.DataController.DisplayTexts[AViewInfo.GridRecord.RecordIndex, cxGridViewINCIDENCIASACTIVAS.Index] = 'Sin incidencias') then ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top + 2, 1) else ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top + 2, 2); ADone := True;} end; procedure TfrViewContratosCliente.cxGridViewINCIDENCIASACTIVASGetCellHint( Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; ACellViewInfo: TcxGridTableDataCellViewInfo; const AMousePos: TPoint; var AHintText: TCaption; var AIsHintMultiLine: Boolean; var AHintTextRect: TRect); begin inherited; if (ARecord.DisplayTexts[Sender.Index] <> 'Sin incidencias') then begin AIsHintMultiLine := True; if not VarIsNull(ARecord.Values[cxGridViewINCIDENCIAS.Index]) then AHintText := ARecord.Values[cxGridViewINCIDENCIAS.Index]; end; end; procedure TfrViewContratosCliente.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_ContratosClienteSITUACION).Index; ASituacion := VarToStr(ARecord.DisplayTexts[IndiceCol]); if ASituacion = SITUACION_CONTRATO_PENDIENTE then AStyle.TextColor := cxStylePENDIENTES.TextColor else if ASituacion = SITUACION_CONTRATO_ACEPTADO then AStyle.TextColor := cxStyleACEPTADO.TextColor else if ASituacion = SITUACION_CONTRATO_RECHAZADO then AStyle.TextColor := cxStyleRECHAZADO.TextColor end; end; procedure TfrViewContratosCliente.frViewFiltroBase1actQuitarFiltroExecute(Sender: TObject); begin frViewFiltroBase1.txtFiltroTodo.Clear; end; function TfrViewContratosCliente.GetContratos: IBizContratoCliente; begin Result := FContratos; end; procedure TfrViewContratosCliente.SetContratos(const Value: IBizContratoCliente); begin FContratos := Value; if Assigned(FContratos) then dsDataSource.DataTable := FContratos.DataTable; end; end.