unit uViewPresupuestosCliente;

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,
  uBizPresupuestosCliente, cxCurrencyEdit, Forms, uViewFiltroBase, ActnList, TB2Item,
  TBX, TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces;

type
  IViewPresupuestosCliente = interface(IViewGrid)
  ['{96821714-55CF-4BC1-A0C1-16E027B2EF16}']
    function GetPresupuestos: IBizPresupuestoCliente;
    procedure SetPresupuestos(const Value: IBizPresupuestoCliente);
    property Presupuestos: IBizPresupuestoCliente read GetPresupuestos write SetPresupuestos;
  end;

  TfrViewPresupuestosCliente = class(TfrViewGrid, IViewPresupuestosCliente)
    cxGridDBTableView1: TcxGridDBTableView;
    cxGridViewID: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxGridViewFECHA_PRESUPUESTO: TcxGridDBColumn;
    cxGridViewCLIENTE_FINAL: TcxGridDBColumn;
    cxGridViewFACTURA: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    cxGridLevelPendientes: TcxGridLevel;
    cxGridLevelEnProceso: TcxGridLevel;
    cxGridLevelServidor: TcxGridLevel;
    cxStylePENDIENTES: TcxStyle;
    cxStyleENPROCESO: TcxStyle;
    cxStyleSERVIDOS: TcxStyle;
    actCliente: TAction;
    actProvincia: TAction;
    TBXItem2: TTBXItem;
    TBXSeparatorItem1: TTBXSeparatorItem;
    TBXSeparatorItem2: TTBXSeparatorItem;
    TBXItem3: TTBXItem;
    cxGridViewFECHA_DECISION: TcxGridDBColumn;
    cxGridViewNIF_CIF: TcxGridDBColumn;
    cxGridViewTIENDA: 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 actProvinciaExecute(Sender: TObject);
    procedure actProvinciaUpdate(Sender: TObject);
    procedure cxGridViewMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

  private
    //Filtros relativos a la vista
    procedure AnadirFiltroSituaciones;
    procedure AnadirFiltroFechas;

  protected
    FPresupuestos: IBizPresupuestoCliente;
    function GetPresupuestos: IBizPresupuestoCliente;
    procedure SetPresupuestos(const Value: IBizPresupuestoCliente);
  public
    procedure AnadirOtrosFiltros; override;
    property Presupuestos: IBizPresupuestoCliente read GetPresupuestos write SetPresupuestos;
  end;

implementation

uses SysUtils, variants, windows, uDataModulePresupuestosCliente, schPresupuestosClienteClient_Intf,
  uViewGridBase;

{$R *.dfm}

procedure TfrViewPresupuestosCliente.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 TfrViewPresupuestosCliente.actClienteUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewNOMBRE.GroupIndex < 0);
end;

procedure TfrViewPresupuestosCliente.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 TfrViewPresupuestosCliente.actProvinciaUpdate(Sender: TObject);
begin
{
  inherited;
  (Sender as TAction).Checked := not (cxGridViewPROVINCIA.GroupIndex < 0);
}  
end;

procedure TfrViewPresupuestosCliente.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_Presupuesto');
    FFiltro.AddItem(Columna, foBetween, varArrayOf([Fecha1, Fecha2]), VarToStr(Fecha1) + ' and ' + VarToStr(Fecha2));
  end;
end;

procedure TfrViewPresupuestosCliente.AnadirFiltroSituaciones;
var
  FFiltro : TcxFilterCriteriaItemList;
begin
  FFiltro := AddFilterGrid(fboAnd);

  case cxGrid.ActiveLevel.Index of
    1   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PRESUPUESTO_PENDIENTE, SITUACION_PRESUPUESTO_PENDIENTE);
    2   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PRESUPUESTO_ACEPTADO, SITUACION_PRESUPUESTO_ACEPTADO);
    3   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PRESUPUESTO_ANULADO, SITUACION_PRESUPUESTO_ANULADO);
  end;
end;

procedure TfrViewPresupuestosCliente.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 TfrViewPresupuestosCliente.cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel: TcxGridLevel);
begin
  inherited;
  RefrescarFiltro;
end;

procedure TfrViewPresupuestosCliente.cxGridViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  Site     : TcxGridSite;
  HitTest  : TcxCustomGridHitTest;
  Item     : TcxCustomGridTableItem;
  Rec      : TcxCustomGridRecord;
  sNewHint : string;
begin
{Este método desaparecerá cuando se migre la aplicación, es para sacar la causa de la incidencia sin necesidad de entrar en el documento}
  Site := Sender as TcxGridSite;
  HitTest := Site.GridView.ViewInfo.GetHitTest(X, Y);
  if HitTest is TcxGridRecordCellHitTest then begin
    Item := TcxGridRecordCellHitTest(HitTest).Item;
    Rec := TcxGridRecordCellHitTest(HitTest).GridRecord;

    if  (Item.Index = cxGridView.GetColumnByFieldName(fld_PresupuestosClienteINCIDENCIAS_ACTIVAS).Index)
    and (Rec.Selected)
    and (Presupuestos.DataTable.FieldByName(fld_PresupuestosClienteINCIDENCIAS_ACTIVAS).AsInteger = 1) then begin
      sNewHint := Presupuestos.DataTable.FieldByName(fld_PresupuestosClienteINCIDENCIAS).AsString;
      if (cxGrid.Hint <> sNewHint) then begin
        cxGrid.ShowHint := false;
        cxGrid.Hint     := sNewHint;
      end
      else cxGrid.ShowHint := true;
    end
    else begin
      cxGrid.ShowHint := false;
    end;
  end;
end;

procedure TfrViewPresupuestosCliente.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_PresupuestosClienteSITUACION).Index;
    ASituacion := VarToStr(ARecord.DisplayTexts[IndiceCol]);
    if ASituacion = SITUACION_PRESUPUESTO_PENDIENTE then
      AStyle := cxStylePENDIENTES
    else if ASituacion = SITUACION_PRESUPUESTO_ACEPTADO then
        AStyle := cxStyleENPROCESO
    else if ASituacion = SITUACION_PRESUPUESTO_ANULADO then
        AStyle := cxStyleSERVIDOS;
  end;
end;

function TfrViewPresupuestosCliente.GetPresupuestos: IBizPresupuestoCliente;
begin
  Result := FPresupuestos;
end;

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

end.
 