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, StdCtrls, ExtCtrls, cxLabel, dxPSGlbl, dxPSUtl,
  dxPSEngn, dxPrnPg, dxBkgnd, dxWrap, dxPrnDev, dxPSCompsProvider, dxPSFillPatterns,
  dxPSEdgePatterns, cxIntlPrintSys3, dxPSCore, dxPScxCommon, dxPScxGridLnk,
  cxImage, cxImageComboBox, ImgList, PngImageList, cxTextEdit, Grids, DBGrids,
  cxGridCustomPopupMenu, cxGridPopupMenu, uBizPresupuestos, cxCalendar,
  cxCurrencyEdit;

type
  IViewPresupuestos = interface(IViewGrid)
    ['{8C0A5647-E0E7-40CD-80EC-88DD46383368}']
    function GetPresupuestos: IBizPresupuesto;
    procedure SetPresupuestos(const Value: IBizPresupuesto);
    property Presupuestos: IBizPresupuesto read GetPresupuestos write SetPresupuestos;
  end;

  TfrViewPresupuestos = class(TfrViewGrid, IViewPresupuestos)
    cxGridLevelPendientes: TcxGridLevel;
    cxGridLevelAceptados: TcxGridLevel;
    cxGridLevelRechazados: TcxGridLevel;
    cxGridViewICONO: TcxGridDBColumn;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxGridViewVIGENCIAPRESUPUESTO: TcxGridDBColumn;
    PngImageList: TPngImageList;
    cxStyleRechazado: TcxStyle;
    cxStyleAceptado: TcxStyle;
    cxGridViewNIF_CIF: TcxGridDBColumn;
    cxGridViewCALLE: TcxGridDBColumn;
    cxGridViewPOBLACION: TcxGridDBColumn;
    cxGridViewPROVINCIA: TcxGridDBColumn;
    cxGridViewCODIGO_POSTAL: TcxGridDBColumn;
    cxGridViewTELEFONO_1: TcxGridDBColumn;
    cxGridViewTELEFONO_2: TcxGridDBColumn;
    cxGridViewFAX: TcxGridDBColumn;
    cxGridViewMOVIL_1: TcxGridDBColumn;
    cxGridViewMOVIL_2: TcxGridDBColumn;
    cxGridViewEMAIL_1: TcxGridDBColumn;
    cxGridViewEMAIL_2: TcxGridDBColumn;
    cxGridViewFECHA_PRESUPUESTO: TcxGridDBColumn;
    cxGridViewVIGENCIA: TcxGridDBColumn;
    cxGridViewFECHA_DECISION: TcxGridDBColumn;
    cxGridViewBASE_IMPONIBLE: TcxGridDBColumn;
    cxGridViewDESCUENTO: TcxGridDBColumn;
    cxGridViewIMPORTE_DESCUENTO: TcxGridDBColumn;
    cxGridViewIVA: TcxGridDBColumn;
    cxGridViewIMPORTE_IVA: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    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);
  protected
    FNivelFiltrado : TcxFilterCriteriaItemList;
    FPresupuestos: IBizPresupuesto;
    function GetPresupuestos: IBizPresupuesto;
    procedure SetPresupuestos(const Value: IBizPresupuesto);
    procedure FilterChanged(Sender : TObject); override;
  public
    property Presupuestos: IBizPresupuesto read GetPresupuestos write SetPresupuestos;
  end;


implementation

uses uDataModulePresupuestos, schPresupuestosClient_Intf;

{$R *.dfm}

procedure TfrViewPresupuestos.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
begin
  inherited;
  FreeAndNil(FNivelFiltrado);
  FilterChanged(self);
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;

procedure TfrViewPresupuestos.FilterChanged(Sender: TObject);
var
  AItemList: TcxFilterCriteriaItemList;
  AItemList2: TcxFilterCriteriaItemList;
begin
  inherited;

  cxGridView.DataController.Filter.BeginUpdate;

  AItemList := cxGridView.DataController.Filter.Root;
  AItemList2 := AItemList.AddItemList(fboAnd);
  FNivelFiltrado := AItemList2;

  case cxGrid.ActiveLevel.Index of
    1   : AItemList2.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PENDIENTE, SITUACION_PENDIENTE);
    2   : AItemList2.AddItem(cxGridViewSITUACION, foEqual, SITUACION_ACEPTADO, SITUACION_ACEPTADO);
    3   : AItemList2.AddItem(cxGridViewSITUACION, foEqual, SITUACION_RECHAZADO, SITUACION_RECHAZADO);
  end;
  AItemList := AItemList2;

  if cxGridView.DataController.Filter.IsEmpty
  then cxGridView.DataController.Filter.Active := False
  else cxGridView.DataController.Filter.Active := True;

  cxGridView.DataController.Filter.EndUpdate;
  cxGrid.ActiveLevel.GridView := cxGridView;
end;

function TfrViewPresupuestos.GetPresupuestos: IBizPresupuesto;
begin
  Result := FPresupuestos;
end;

procedure TfrViewPresupuestos.SetPresupuestos(const Value: IBizPresupuesto);
begin
  FPresupuestos := Value;
  if Assigned(FPresupuestos) then
    dsDataSource.DataTable := FPresupuestos.DataTable;
end;

end.
