unit uViewPedidosCliente; interface uses Types, 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, uBizPedidosCliente, cxCurrencyEdit, Forms, uViewFiltroBase, ActnList, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces, uCustomView, uViewBase; type IViewPedidosCliente = interface(IViewGrid) ['{EFDC1D9B-2B49-4558-B70C-0DAA39FF99E6}'] function GetPedidos: IBizPedidoCliente; procedure SetPedidos(const Value: IBizPedidoCliente); property Pedidos: IBizPedidoCliente read GetPedidos write SetPedidos; end; TfrViewPedidosCliente = class(TfrViewGrid, IViewPedidosCliente) cxGridDBTableView1: TcxGridDBTableView; cxGridLevel1: TcxGridLevel; cxGridLevel2: TcxGridLevel; cxGridLevel3: TcxGridLevel; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn; cxGridViewNOMBRE: TcxGridDBColumn; cxGridViewFECHA_PEDIDO: TcxGridDBColumn; cxGridViewFECHA_ENTREGA: TcxGridDBColumn; cxGridViewCALLE: TcxGridDBColumn; cxGridViewPOBLACION: TcxGridDBColumn; cxGridViewPROVINCIA: TcxGridDBColumn; cxGridViewCODIGO_POSTAL: TcxGridDBColumn; cxGridViewPERSONA_CONTACTO: TcxGridDBColumn; cxGridViewTELEFONO: TcxGridDBColumn; cxGridViewREF_TIENDA_WEB: TcxGridDBColumn; cxGridViewSITUACION: TcxGridDBColumn; cxStylePendiente: TcxStyle; cxStyleEnProceso: TcxStyle; cxStyleServido: TcxStyle; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; actCliente: TAction; TBXItem3: TTBXItem; TBXSeparatorItem2: TTBXSeparatorItem; cxGridViewINCIDENCIAS: TcxGridDBColumn; cxGridViewNUM_COPIAS: TcxGridDBColumn; cxGridViewNUM_CORREOS: TcxGridDBColumn; procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); procedure actClienteExecute(Sender: TObject); procedure actClienteUpdate(Sender: TObject); 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 cxGridViewNUM_COPIASCustomDrawHeader(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); procedure cxGridViewNUM_CORREOSCustomDrawHeader(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); procedure cxGridViewREF_TIENDA_WEBCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); private //Filtros relativos a la vista procedure AnadirFiltroSituaciones; procedure AnadirFiltroFechas; protected FPedidos: IBizPedidoCliente; function GetPedidos: IBizPedidoCliente; procedure SetPedidos(const Value: IBizPedidoCliente); public procedure AnadirOtrosFiltros; override; property Pedidos: IBizPedidoCliente read GetPedidos write SetPedidos; end; implementation uses SysUtils, Variants, Windows, uDataModulePedidosCliente, schPedidosClienteClient_Intf, uReferenciasUtils, cxVariants; {$R *.dfm} procedure TfrViewPedidosCliente.actClienteExecute(Sender: TObject); begin if (cxGridViewNOMBRE.GroupIndex < 0) then begin cxGridViewNOMBRE.GroupIndex := cxGridView.GroupedColumnCount; cxGridViewNOMBRE.Visible := False; end else begin cxGridViewNOMBRE.GroupIndex := -1; cxGridViewNOMBRE.Visible := True; end; end; procedure TfrViewPedidosCliente.actClienteUpdate(Sender: TObject); begin inherited; (Sender as TAction).Checked := not (cxGridViewNOMBRE.GroupIndex < 0); end; procedure TfrViewPedidosCliente.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('FECHA_PEDIDO'); FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2)); end; end; procedure TfrViewPedidosCliente.AnadirFiltroSituaciones; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); case cxGrid.ActiveLevel.Index of 1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_PENDIENTE, SITUACION_PEDIDO_PENDIENTE); 2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_ENPROCESO, SITUACION_PEDIDO_ENPROCESO); 3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_SERVIDO, SITUACION_PEDIDO_SERVIDO); end; end; procedure TfrViewPedidosCliente.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 TfrViewPedidosCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; RefrescarFiltro; end; procedure TfrViewPedidosCliente.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 TfrViewPedidosCliente.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; AHintText := ARecord.Values[cxGridViewINCIDENCIAS.Index] end; end; procedure TfrViewPedidosCliente.cxGridViewNUM_COPIASCustomDrawHeader( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); var R : TRect; begin inherited; with AViewInfo do begin LookAndFeelPainter.DrawHeader(ACanvas, Bounds, TextAreaBounds, Neighbors, Borders, ButtonState, AlignmentHorz, AlignmentVert, MultiLine, False, '', Params.Font, Params.TextColor, Params.Color); R := AViewInfo.ContentBounds; ACanvas.FillRect(R); ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top, 4); end; ADone := True; end; procedure TfrViewPedidosCliente.cxGridViewNUM_CORREOSCustomDrawHeader( Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); var R : TRect; begin inherited; with AViewInfo do begin LookAndFeelPainter.DrawHeader(ACanvas, Bounds, TextAreaBounds, Neighbors, Borders, ButtonState, AlignmentHorz, AlignmentVert, MultiLine, False, '', Params.Font, Params.TextColor, Params.Color); R := AViewInfo.ContentBounds; ACanvas.FillRect(R); ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top, 3); end; ADone := True; end; procedure TfrViewPedidosCliente.cxGridViewREF_TIENDA_WEBCustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var R : TRect; begin inherited; if (AViewInfo.GridRecord.DisplayTexts[cxGridViewREF_TIENDA_WEB.Index] <> '') then begin R := AViewInfo.ContentBounds; ACanvas.FillRect(R); ACanvas.DrawImage(GridPNGImageList, R.Left, R.Top, 5); ADone := True; end; end; procedure TfrViewPedidosCliente.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_PedidosClienteSITUACION).Index; ASituacion := UPPERCASE(VarToStr(ARecord.DisplayTexts[IndiceCol])); if ASituacion = SITUACION_PEDIDO_PENDIENTE then AStyle := cxStylePENDIENTE else if ASituacion = SITUACION_PEDIDO_ENPROCESO then AStyle := cxStyleENPROCESO else if ASituacion = SITUACION_PEDIDO_SERVIDO then AStyle := cxStyleSERVIDO; end; end; function TfrViewPedidosCliente.GetPedidos: IBizPedidoCliente; begin Result := FPedidos; end; procedure TfrViewPedidosCliente.SetPedidos(const Value: IBizPedidoCliente); begin FPedidos := Value; if Assigned(FPedidos) then dsDataSource.DataTable := FPedidos.DataTable; end; end.