unit uViewContratosCliente;

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

type
  IViewContratosCliente = interface(IViewGrid)
  ['{89FCCB14-46E9-4B45-BADD-847C881CCE1A}']
    function GetContratos: IBizContratoCliente;
    procedure SetContratos(const Value: IBizContratoCliente);
    property Contratos: IBizContratoCliente read GetContratos write SetContratos;
  end;

  TfrViewContratosCliente = class(TfrViewGrid, IViewContratosCliente)
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxGridViewFECHA_CONTRATO: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    cxGridLevelPendientes: TcxGridLevel;
    cxGridLevelTerminados: TcxGridLevel;
    cxStylePENDIENTES: TcxStyle;
    cxStyleACEPTADO: TcxStyle;
    actCliente: TAction;
    TBXSeparatorItem2: TTBXSeparatorItem;
    TBXItem3: TTBXItem;
    cxGridViewNIF_CIF: TcxGridDBColumn;
    cxGridViewINCIDENCIAS: TcxGridDBColumn;
    cxStyleRECHAZADO: TcxStyle;
    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 cxGridViewICONOCustomDrawCell(Sender: TcxCustomGridTableView;
      ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo;
      var ADone: Boolean);
    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 frViewFiltroBase1actQuitarFiltroExecute(Sender: TObject);

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

  protected
    FContratos: IBizContratoCliente;
    function GetContratos: IBizContratoCliente;
    procedure SetContratos(const Value: IBizContratoCliente);
  public
    procedure AnadirOtrosFiltros; override;
    property Contratos: IBizContratoCliente read GetContratos write SetContratos;
  end;

implementation

uses
  SysUtils, variants, uDataModuleContratosCliente, schContratosClienteClient_Intf,
  uViewGridBase,
  //uReferenciasUtils,
  cxVariants;

{$R *.dfm}

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

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

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

  case cxGrid.ActiveLevel.Index of
    1   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_CONTRATO_PENDIENTE, SITUACION_CONTRATO_PENDIENTE);
    2   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_CONTRATO_TERMINADO, SITUACION_CONTRATO_TERMINADO);
  end;
end;

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

procedure TfrViewContratosCliente.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 TfrViewContratosCliente.cxGridViewICONOCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
{var
  R : TRect;}
begin
  inherited; 
{  R := AViewInfo.ContentBounds;
  ACanvas.FillRect(R);

  if (cxGridView.DataController.DisplayTexts[AViewInfo.GridRecord.RecordIndex,
    cxGridViewINCIDENCIASACTIVAS.Index] = 'Sin incidencias') then
    ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top + 2, 1)
  else
    ACanvas.DrawImage(GridPNGImageList, R.Left + 2, R.Top + 2, 2);
  ADone := True;}
end;

procedure TfrViewContratosCliente.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 TfrViewContratosCliente.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_ContratosClienteSITUACION).Index;
    ASituacion := VarToStr(ARecord.DisplayTexts[IndiceCol]);
    if ASituacion = SITUACION_CONTRATO_PENDIENTE then
      AStyle.TextColor := cxStylePENDIENTES.TextColor
    else if ASituacion = SITUACION_CONTRATO_TERMINADO then
      AStyle.TextColor := cxStyleRECHAZADO.TextColor
  end;
end;

procedure TfrViewContratosCliente.frViewFiltroBase1actQuitarFiltroExecute(Sender: TObject);
begin
  frViewFiltroBase1.txtFiltroTodo.Clear;
end;

function TfrViewContratosCliente.GetContratos: IBizContratoCliente;
begin
  Result := FContratos;
end;

procedure TfrViewContratosCliente.SetContratos(const Value: IBizContratoCliente);
begin
  FContratos := Value;
  if Assigned(FContratos) then
    dsDataSource.DataTable := FContratos.DataTable;
end;

end.
