unit uViewAlbaranesProveedor;

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, dxPScxGridLnk,
  uDADataTable, cxGridLevel, cxClasses, cxControls, cxGridCustomView, Classes,
  cxGrid, uBizAlbaranesProveedor, cxCurrencyEdit, Forms, uViewFiltroBase,
  ActnList, TB2Item, TBX, TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, cxTextEdit;

type
  IViewAlbaranesProveedor = interface(IViewGrid)
  ['{DFD9B90C-E3AE-48E1-A13F-AA75A05BBF3E}']
    function GetAlbaranes: IBizAlbaranProveedor;
    procedure SetAlbaranes(const Value: IBizAlbaranProveedor);
    property Albaranes: IBizAlbaranProveedor read GetAlbaranes write SetAlbaranes;
  end;

  TfrViewAlbaranesProveedor = class(TfrViewGrid, IViewAlbaranesProveedor)
    PngImageList: TPngImageList;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewFECHA_ALBARAN: TcxGridDBColumn;
    cxGridViewINCIDENCIAS_ACTIVAS: TcxGridDBColumn;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewCALLE: TcxGridDBColumn;
    cxGridViewCODIGO_POSTAL: TcxGridDBColumn;
    cxGridViewPOBLACION: TcxGridDBColumn;
    cxGridViewPROVINCIA: TcxGridDBColumn;
    cxGridViewPERSONA_CONTACTO: TcxGridDBColumn;
    cxGridViewTELEFONO: TcxGridDBColumn;
    cxGridViewNOMBRE_ALMACEN: TcxGridDBColumn;
    cxGridViewREF_PED_PROVEEDOR: TcxGridDBColumn;
    cxGridViewREF_FACTURA: TcxGridDBColumn;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    actProveedor: TAction;
    actAlmacen: TAction;
    TBXItem2: TTBXItem;
    TBXSeparatorItem1: TTBXSeparatorItem;
    TBXItem3: TTBXItem;
    TBXSeparatorItem2: TTBXSeparatorItem;
    cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn;
    cxGridViewREF_FACTURA_PROV: 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);
    procedure actProveedorExecute(Sender: TObject);
    procedure actProveedorUpdate(Sender: TObject);
    procedure actAlmacenExecute(Sender: TObject);
    procedure actAlmacenUpdate(Sender: TObject);
    procedure cxGridViewMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

  private
    //Filtros relativos a la vista
    procedure AnadirFiltroFechas;

  protected
    FAlbaranes: IBizAlbaranProveedor;
    function GetAlbaranes: IBizAlbaranProveedor;
    procedure SetAlbaranes(const Value: IBizAlbaranProveedor);
  public
    procedure AnadirOtrosFiltros; override;
    property Albaranes: IBizAlbaranProveedor read GetAlbaranes write SetAlbaranes;
  end;

implementation

uses SysUtils, variants, windows, uDataModuleAlbaranesProveedor, schAlbaranesProveedorClient_Intf,
  uViewGridBase;

{$R *.dfm}

procedure TfrViewAlbaranesProveedor.actAlmacenExecute(Sender: TObject);
begin
  if (cxGridViewNOMBRE_ALMACEN.GroupIndex < 0) then
  begin
    cxGridViewNOMBRE_ALMACEN.GroupIndex := cxGridView.GroupedColumnCount;
    cxGridViewNOMBRE_ALMACEN.Visible := False;
  end
  else
  begin
    cxGridViewNOMBRE_ALMACEN.GroupIndex := -1;
    cxGridViewNOMBRE_ALMACEN.Visible := True;
  end;
end;

procedure TfrViewAlbaranesProveedor.actAlmacenUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewNOMBRE_ALMACEN.GroupIndex < 0);
end;

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

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

procedure TfrViewAlbaranesProveedor.AnadirOtrosFiltros;
begin
  inherited;

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

procedure TfrViewAlbaranesProveedor.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 TfrViewAlbaranesProveedor.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_AlbaranesProveedorINCIDENCIAS_ACTIVAS).Index)
    and (Rec.Selected)
    and (Albaranes.DataTable.FieldByName(fld_AlbaranesProveedorINCIDENCIAS_ACTIVAS).AsInteger = 1) then begin
      sNewHint := Albaranes.DataTable.FieldByName(fld_AlbaranesProveedorINCIDENCIAS).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 TfrViewAlbaranesProveedor.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;

function TfrViewAlbaranesProveedor.GetAlbaranes: IBizAlbaranProveedor;
begin
  Result := FAlbaranes;
end;

procedure TfrViewAlbaranesProveedor.SetAlbaranes(const Value: IBizAlbaranProveedor);
begin
  FAlbaranes := Value;
  if Assigned(FAlbaranes) then
    dsDataSource.DataTable := FAlbaranes.DataTable;
end;

end.
