unit uViewArticulosAlmacen; 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, StdCtrls, ExtCtrls, cxLabel, dxPSGlbl, dxPSUtl, dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns, dxPSEdgePatterns, cxIntlPrintSys3, dxPSCore, dxPScxCommon, dxPScxGridLnk, cxImage, cxImageComboBox, ImgList, PngImageList, cxTextEdit, Grids, DBGrids, uBizArticulos, cxDBLookupComboBox, cxButtonEdit, uViewFiltroBase; type IViewArticulosAlmacen = interface(IViewGrid) ['{DDB60E80-F34F-42D7-AD44-10AEF3068078}'] function GetArticulosAlmacen: IBizArticulosAlmacen; procedure SetArticulosAlmacen(const Value: IBizArticulosAlmacen); property ArticulosAlmacen: IBizArticulosAlmacen read GetArticulosAlmacen write SetArticulosAlmacen; end; TfrViewArticulosAlmacen = class(TfrViewGrid, IViewArticulosAlmacen) cxGridDBTableView1: TcxGridDBTableView; cxGridViewCODIGO: TcxGridDBColumn; cxGridViewCODIGOALMACEN: TcxGridDBColumn; cxGridViewDESCRIPCION: TcxGridDBColumn; cxGridViewCODIGOMONTAJE: TcxGridDBColumn; cxGridViewCODIGOPEDIDO: TcxGridDBColumn; PngImageList: TPngImageList; cxGridViewREFERENCIAMONTAJE: TcxGridDBColumn; cxGridViewALMACEN: TcxGridDBColumn; cxGridViewICONO: TcxGridDBColumn; cxStyleArticuloReservado: TcxStyle; cxGridViewCLIENTE: TcxGridDBColumn; procedure SelectionChanged(Sender: TcxCustomGridTableView); override; 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 AnadirFiltroAlmacen; protected FNivelFiltrado : TcxFilterCriteriaItemList; FArticulosAlmacen: IBizArticulosAlmacen; function GetArticulosAlmacen: IBizArticulosAlmacen; procedure SetArticulosAlmacen(const Value: IBizArticulosAlmacen); procedure AnadirOtrosFiltros; override; public property ArticulosAlmacen: IBizArticulosAlmacen read GetArticulosAlmacen write SetArticulosAlmacen; constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var frViewArticulosAlmacen: TfrViewArticulosAlmacen; implementation uses uDataModuleArticulos, schArticulosClient_Intf, uDBSelectionList, uBizAlmacenes, uDataModuleAlmacenes; {$R *.dfm} constructor TfrViewArticulosAlmacen.Create(AOwner: TComponent); begin inherited; Self.MultiSelection := True; end; procedure TfrViewArticulosAlmacen.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel); begin inherited; RefrescarFiltro; end; procedure TfrViewArticulosAlmacen.cxGridViewCODIGOCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); var R: TRect; begin inherited; R := AViewInfo.ContentBounds; ACanvas.FillRect(R); if Length(AViewInfo.Text) = 0 then ACanvas.DrawImage(PngImageList, R.Left, R.Top, 0) else ACanvas.DrawImage(PngImageList, R.Left, R.Top, 1); ADone := True; end; procedure TfrViewArticulosAlmacen.cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out AStyle: TcxStyle); var IndiceCol: Integer; AMontaje: string; begin inherited; if Assigned(ARecord) then begin IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_ARTICULOSREFERENCIAMONTAJE).Index; AMontaje := VarToStr(ARecord.DisplayTexts[IndiceCol]); if (Length(AMontaje) > 0) then AStyle := cxStyleArticuloReservado; end; end; destructor TfrViewArticulosAlmacen.Destroy; begin inherited; end; function TfrViewArticulosAlmacen.GetArticulosAlmacen: IBizArticulosAlmacen; begin Result := FArticulosAlmacen; end; procedure TfrViewArticulosAlmacen.SetArticulosAlmacen(const Value: IBizArticulosAlmacen); var Nivel: TcxGridLevel; i: Integer; AAlmacenes: IBizAlmacen; begin FArticulosAlmacen := Value; if Assigned(FArticulosAlmacen) then begin DADataSource.DataTable := FArticulosAlmacen.DataTable; try AAlmacenes := dmAlmacenes.GetItems; AAlmacenes.DataTable.Active := True; AAlmacenes.First; while not AAlmacenes.EOF do begin Nivel := cxGrid.Levels.Add; Nivel.Caption := AAlmacenes.NOMBRE; Nivel.Tag := AAlmacenes.CODIGO; AAlmacenes.Next; end; finally AAlmacenes := Nil; end; end; end; procedure TfrViewArticulosAlmacen.SelectionChanged(Sender: TcxCustomGridTableView); var ABookmark : Pointer; i, pos: Integer; begin inherited; pos := (Sender as TcxGridDBTableView).GetColumnByFieldName('CODIGO').Index; if FArticulosAlmacen <> NIL then begin FArticulosAlmacen.DataTable.DisableControls; ABookmark := FArticulosAlmacen.DataTable.GetBookMark; (FArticulosAlmacen as ISelectedRowList).SelectedRows.Clear; for i:=0 to Sender.Controller.SelectedRecordCount-1 do begin FArticulosAlmacen.DataTable.Locate('CODIGO', Sender.Controller.SelectedRecords[i].Values[pos],[]); (FArticulosAlmacen as ISelectedRowList).SelectedRows.CurrentRowSelected := True; end; (FArticulosAlmacen as ISelectedRowList).SelectedRows.Count; FArticulosAlmacen.DataTable.GotoBookmark(ABookmark); FArticulosAlmacen.DataTable.FreeBookmark(ABookmark); FArticulosAlmacen.DataTable.EnableControls; end; end; procedure TfrViewArticulosAlmacen.AnadirFiltroAlmacen; var CodigoAlmacen: String; FFiltro : TcxFilterCriteriaItemList; begin cxGridView.DataController.Filter.Options := [fcoCaseInsensitive, fcoSoftCompare]; FFiltro := AddFilterGrid(fboAnd); CodigoAlmacen := IntToStr(cxGrid.Levels.Items[cxGrid.ActiveLevel.Index].Tag); if CodigoAlmacen <> '-1' then FFiltro.AddItem(cxGridViewCODIGOALMACEN, foEqual, CodigoAlmacen, CodigoAlmacen); end; procedure TfrViewArticulosAlmacen.AnadirOtrosFiltros; begin inherited; AnadirFiltroAlmacen; //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; end.