unit uViewPedidosProveedor;

interface

uses
  Types, 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, uBizPedidosProveedor, cxCurrencyEdit, Forms, uViewFiltroBase, ActnList,
  TB2Item, SpTBXItem, TB2Toolbar, SpTBXDkPanels, TB2Dock, dxPgsDlg, uDAInterfaces,
  uCustomView, uViewBase;
    
type
  IViewPedidosProveedor = interface(IViewGrid)
  ['{DF3B0989-5449-4F3A-8EF3-69CE35A62AAA}']
    function GetPedidos: IBizPedidoProveedor;
    procedure SetPedidos(const Value: IBizPedidoProveedor);
    property Pedidos: IBizPedidoProveedor read GetPedidos write SetPedidos;
  end;

  TfrViewPedidosProveedor = class(TfrViewGrid, IViewPedidosProveedor)
    cxGridDBTableView1: TcxGridDBTableView;
    cxGridLevel1: TcxGridLevel;
    cxGridLevel2: TcxGridLevel;
    cxGridLevel3: TcxGridLevel;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewINCIDENCIASACTIVAS: TcxGridDBColumn;
    cxGridViewNOMBRE: TcxGridDBColumn;
    cxGridViewFECHA_PEDIDO: TcxGridDBColumn;
    cxGridViewFECHA_CONFIRMACION: TcxGridDBColumn;
    cxGridViewFECHA_ENTREGA: TcxGridDBColumn;
    cxGridViewCALLE: TcxGridDBColumn;
    cxGridViewPOBLACION: TcxGridDBColumn;
    cxGridViewPROVINCIA: TcxGridDBColumn;
    cxGridViewCODIGO_POSTAL: TcxGridDBColumn;
    cxGridViewPERSONA_CONTACTO: TcxGridDBColumn;
    cxGridViewTELEFONO: TcxGridDBColumn;
    cxGridViewFECHA_ENVIO: TcxGridDBColumn;
    cxGridViewNOMBRE_ALMACEN: TcxGridDBColumn;
    cxGridViewREF_PED_CLIENTE: TcxGridDBColumn;
    cxGridViewSITUACION: TcxGridDBColumn;
    cxStylePendientes: TcxStyle;
    cxStyleParciales: TcxStyle;
    cxStyleRecibidos: TcxStyle;
    cxGridViewIMPORTE_TOTAL: TcxGridDBColumn;
    actProveedor: TAction;
    actAlmacen: TAction;
    TBXItem2: TSpTBXItem;
    TBXSeparatorItem1: TSpTBXSeparatorItem;
    TBXItem3: TSpTBXItem;
    TBXSeparatorItem2: TSpTBXSeparatorItem;
    cxGridViewINCIDENCIAS: TcxGridDBColumn;
    cxGridViewREF_FACTURA_PROV: TcxGridDBColumn;
    cxGridViewNOMBRE_OBRA: TcxGridDBColumn;
    procedure cxGridActiveTabChanged(Sender: TcxCustomGrid; ALevel:
            TcxGridLevel);
    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 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);

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

  protected
    FPedidos: IBizPedidoProveedor;
    function GetPedidos: IBizPedidoProveedor;
    procedure SetPedidos(const Value: IBizPedidoProveedor);
  public
    procedure AnadirOtrosFiltros; override;
    property Pedidos: IBizPedidoProveedor read GetPedidos write SetPedidos;
  end;

implementation

uses
  SysUtils, Variants, Windows,
  uDataModulePedidosProveedor, schPedidosProveedorClient_Intf,
  uReferenciasUtils, cxVariants;

{$R *.dfm}

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

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

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

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

  case cxGrid.ActiveLevel.Index of
    1   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_PENDIENTE, SITUACION_PEDIDO_PENDIENTE);
    2   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_PARCIAL, SITUACION_PEDIDO_PARCIAL);
    3   : FFiltro.AddItem(cxGridViewSITUACION, foEqual, SITUACION_PEDIDO_RECIBIDO, SITUACION_PEDIDO_RECIBIDO);
  end;
end;

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

procedure TfrViewPedidosProveedor.cxGridViewDataControllerCompare(
  ADataController: TcxCustomDataController; ARecordIndex1, ARecordIndex2,
  AItemIndex: Integer; const V1, V2: Variant; var Compare: Integer);
begin
  inherited;
  if ((AItemIndex = cxGridViewREFERENCIA.Index) or
      (AItemIndex = cxGridViewREF_PED_CLIENTE.Index)) and
     (VarType(V1) = VarType(V2)) and (VarType(V1) = varString) then
    Compare := CompararReferencias(V1, V2)
  else
    Compare := VarCompare(V1, V2);
end;

procedure TfrViewPedidosProveedor.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 TfrViewPedidosProveedor.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_PedidosProveedorSITUACION).Index;
    ASituacion := UPPERCASE(VarToStr(ARecord.DisplayTexts[IndiceCol]));

    if (ASituacion = SITUACION_PEDIDO_PENDIENTE) then
      AStyle.TextColor := cxStylePendientes.TextColor
    else if (ASituacion = SITUACION_PEDIDO_PARCIAL) then
        AStyle.TextColor := cxStyleParciales.TextColor
    else if (ASituacion = SITUACION_PEDIDO_RECIBIDO) then
        AStyle.TextColor := cxStyleRecibidos.TextColor;
  end;
end;

function TfrViewPedidosProveedor.GetPedidos: IBizPedidoProveedor;
begin
  Result := FPedidos;
end;

procedure TfrViewPedidosProveedor.SetPedidos(const Value: IBizPedidoProveedor);
begin
  FPedidos := Value;
  if Assigned(FPedidos) then
    dsDataSource.DataTable := FPedidos.DataTable;
end;

end.
