unit uViewFacturasCliente; 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, dxPScxGrid6Lnk, ActnList, uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGrid, cxImage, Grids, DBGrids, uBizFacturasCliente, cxGridCustomPopupMenu, cxGridPopupMenu, cxCalendar, cxCurrencyEdit, uViewFiltroBase, TB2Item, SpTBXItem, TB2Toolbar, SpTBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces, uCustomView, uViewBase, cxLookAndFeels, cxLookAndFeelPainters, dxPSPDFExportCore, dxPSPDFExport, cxDrawTextUtils, dxPSPrVwStd, dxPSPrVwAdv, dxPScxEditorProducers, dxPScxExtEditorProducers, dxPScxPageControlProducer; type IViewFacturasCliente = interface(IViewGrid) ['{927A005F-5D71-4C37-B9E7-10292F9D467C}'] function GetFacturas: IBizFacturaCliente; procedure SetFacturas(const Value: IBizFacturaCliente); property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas; end; TfrViewFacturasCliente = class(TfrViewGrid, IViewFacturasCliente) PngImageList: TPngImageList; cxGridViewNOMBRE: TcxGridDBColumn; cxGridViewREFERENCIA: TcxGridDBColumn; cxGridViewFECHA_FACTURA: TcxGridDBColumn; cxGridViewSITUACION: TcxGridDBColumn; cxGridViewBASE_IMPONIBLE: TcxGridDBColumn; cxGridViewIMPORTE_DESCUENTO: TcxGridDBColumn; cxGridViewDESCUENTO: TcxGridDBColumn; cxGridViewIMPORTE_IVA: TcxGridDBColumn; cxGridViewIMPORTE_TOTAL: TcxGridDBColumn; cxGridViewIVA: TcxGridDBColumn; cxGridViewNIF_CIF: TcxGridDBColumn; cxGridViewCALLE: TcxGridDBColumn; cxGridViewPROVINCIA: TcxGridDBColumn; cxGridViewCODIGO_POSTAL: TcxGridDBColumn; cxGridViewPOBLACION: TcxGridDBColumn; cxStylePagada: TcxStyle; cxGridPendientes: TcxGridLevel; cxGridParcial: TcxGridLevel; cxStyleAbono: TcxStyle; cxGridPagadas: TcxGridLevel; cxGridViewREFERENCIA_COMISION: TcxGridDBColumn; cxStylePendientes: TcxStyle; cxStyleParciales: TcxStyle; actCliente: TAction; actProvincia: TAction; TBXItem2: TSpTBXItem; TBXSeparatorItem1: TSpTBXSeparatorItem; TBXItem3: TSpTBXItem; TBXSeparatorItem2: TSpTBXSeparatorItem; cxGridViewTIPO: TcxGridDBColumn; cxGridViewRE: TcxGridDBColumn; cxGridViewIMPORTE_RE: TcxGridDBColumn; procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); procedure actClienteExecute(Sender: TObject); procedure actProvinciaExecute(Sender: TObject); procedure actProvinciaUpdate(Sender: TObject); procedure actClienteUpdate(Sender: TObject); procedure cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); procedure OnFiltroListaPropertiesChange(Sender: TObject); procedure OnFiltroListaPropertiesInitPopup(Sender: TObject); procedure CustomViewShow(Sender: TObject); procedure CustomViewDestroy(Sender: TObject); procedure CustomViewCreate(Sender: TObject); private //Filtros relativos a la vista procedure AnadirFiltroSituaciones; procedure AnadirFiltroFechas; procedure AnadirFiltroProvincia; protected FProvincias : TStringList; FFacturas: IBizFacturaCliente; function GetFacturas: IBizFacturaCliente; procedure SetFacturas(const Value: IBizFacturaCliente); procedure CargarProvincias; public procedure AnadirOtrosFiltros; override; property Facturas: IBizFacturaCliente read GetFacturas write SetFacturas; end; implementation uses uDataModuleFacturasCliente, DateUtils, uViewGridBase, uReferenciasUtils, cxVariants, uProvinciasPoblacionesController, uStringsUtils; {$R *.dfm} { TfrViewFacturasCliente } procedure TfrViewFacturasCliente.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 TfrViewFacturasCliente.actClienteUpdate(Sender: TObject); begin inherited; (Sender as TAction).Checked := not (cxGridViewNOMBRE.GroupIndex < 0); end; procedure TfrViewFacturasCliente.actProvinciaExecute(Sender: TObject); begin if (cxGridViewPROVINCIA.GroupIndex < 0) then begin cxGridViewPROVINCIA.GroupIndex := cxGridView.GroupedColumnCount; cxGridViewPROVINCIA.Visible := False; end else begin cxGridViewPROVINCIA.GroupIndex := -1; cxGridViewPROVINCIA.Visible := True; end; end; procedure TfrViewFacturasCliente.actProvinciaUpdate(Sender: TObject); begin inherited; (Sender as TAction).Checked := not (cxGridViewPROVINCIA.GroupIndex < 0); end; procedure TfrViewFacturasCliente.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_FACTURA'); FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2)); end; end; procedure TfrViewFacturasCliente.AnadirFiltroProvincia; var FFiltro : TcxFilterCriteriaItemList; begin //Solo se aplica este filtro en el caso de tener activo el panel de detalle de filtro //y sobre la lista de pedidos if frViewFiltroBase1.Visible then begin if (VarToStr(frViewFiltroBase1.eLista.EditValue) <> 'Todos') then begin FFiltro := AddFilterGrid(fboAnd); FFiltro.AddItem(cxGridViewPROVINCIA, foEqual, VarToStr(frViewFiltroBase1.eLista.EditValue), VarToStr(frViewFiltroBase1.eLista.EditValue)); end; end; end; procedure TfrViewFacturasCliente.AnadirFiltroSituaciones; var FFiltro : TcxFilterCriteriaItemList; begin FFiltro := AddFilterGrid(fboAnd); case cxGrid.ActiveLevel.Index of 1 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PENDIENTE, CTE_PENDIENTE); 2 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PARCIAMENTE_PAGADA, CTE_PARCIAMENTE_PAGADA); 3 : FFiltro.AddItem(cxGridViewSITUACION, foEqual, CTE_PAGADA, CTE_PAGADA); end; end; procedure TfrViewFacturasCliente.AnadirOtrosFiltros; begin inherited; AnadirFiltroSituaciones; AnadirFiltroFechas; AnadirFiltroProvincia; //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 TfrViewFacturasCliente.CargarProvincias; var i : integer; begin with TProvinciasPoblacionesController.Create do try FProvincias := DarListaProvincias; with frViewFiltroBase1.eLista.Properties.Items do begin BeginUpdate; try Clear; Add('Todos'); //Case 0 for i := 0 to FProvincias.Count - 1 do Add(FProvincias.Names[i]); frViewFiltroBase1.eLista.ItemIndex := 0; finally EndUpdate; end; end; finally Free; end; end; procedure TfrViewFacturasCliente.CustomViewCreate(Sender: TObject); begin inherited; FProvincias := NIL; end; procedure TfrViewFacturasCliente.CustomViewDestroy(Sender: TObject); begin frViewFiltroBase1.eLista.Properties.OnChange := Nil; frViewFiltroBase1.eLista.Properties.OnInitPopup := Nil; if Assigned(FProvincias) then FreeANDNIL(FProvincias); inherited; end; procedure TfrViewFacturasCliente.CustomViewShow(Sender: TObject); begin inherited; frViewFiltroBase1.eLista.Properties.OnChange := OnFiltroListaPropertiesChange; frViewFiltroBase1.eLista.Properties.OnInitPopup := OnFiltroListaPropertiesInitPopup; end; procedure TfrViewFacturasCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; RefrescarFiltro; end; procedure TfrViewFacturasCliente.cxGridViewDataControllerCompare( ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2, AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer); begin inherited; if ((AItemIndex = cxGridViewREFERENCIA.Index) or (AItemIndex = cxGridViewREFERENCIA_COMISION.Index)) and (VarType(V1) = VarType(V2)) and (VarType(V1) = varString) then Compare := CompararReferencias(V1, V2) else Compare := VarCompare(V1, V2); end; procedure TfrViewFacturasCliente.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 := VarToStr(ARecord.DisplayTexts[IndiceCol]); if (ASituacion = CTE_PAGADA) then AStyle.TextColor := cxStylePagada.TextColor else if (ASituacion = CTE_PENDIENTE) then AStyle.TextColor := cxStylePendientes.TextColor else if (ASituacion = CTE_PARCIAMENTE_PAGADA) then AStyle.TextColor := cxStyleParciales.TextColor; IndiceCol := cxGridViewIMPORTE_TOTAL.Index; if (Pos('-', ARecord.DisplayTexts[IndiceCol]) > 0) then AStyle.TextColor := cxStyleAbono.TextColor; end; end; function TfrViewFacturasCliente.GetFacturas: IBizFacturaCliente; begin Result := FFacturas; end; procedure TfrViewFacturasCliente.OnFiltroListaPropertiesChange(Sender: TObject); begin inherited; RefrescarFiltro; end; procedure TfrViewFacturasCliente.OnFiltroListaPropertiesInitPopup(Sender: TObject); begin inherited; ShowHourglassCursor; try if not Assigned(FProvincias) then CargarProvincias; finally HideHourglassCursor; end; end; procedure TfrViewFacturasCliente.SetFacturas(const Value: IBizFacturaCliente); begin FFacturas := Value; if Assigned(FFacturas) then dsDataSource.DataTable := FFacturas.DataTable; end; end.