unit uViewDetallesSinRecibir;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, 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, dxPScxGrid6Lnk, cxImage,
  cxImageComboBox, ImgList, PngImageList, cxTextEdit, Grids, DBGrids, cxDBLookupComboBox,
  cxButtonEdit, cxGridCustomPopupMenu, cxGridPopupMenu, uViewGrid,
  uBizInventario, uBizAlmacenes, cxSpinEdit, uViewFiltroBase, TB2Item, TBX,
  TB2Toolbar, TBXDkPanels, TB2Dock, dxPgsDlg, cxCurrencyEdit, uAlmacenesController;

type
  IViewDetalleSinRecibir = interface(IViewGrid)
  ['{AC8507FF-B6FB-48D3-9FEA-2380FE2F7699}']
    function GetDetalles: IBizDetalleSinRecibir;
    procedure SetDetalles(const Value: IBizDetalleSinRecibir);
    property Detalles: IBizDetalleSinRecibir read GetDetalles write SetDetalles;
//    function GetAlmacenes: IBizAlmacen;
//    procedure SetAlmacenes(const Value: IBizAlmacen);
//    property Almacenes: IBizAlmacen read GetAlmacenes write SetAlmacenes;
  end;

  TfrViewDetallesSinRecibir = class(TfrViewGrid, IViewDetalleSinRecibir)
    cxGridDBTableView1: TcxGridDBTableView;
    PngImageList: TPngImageList;
    cxStyleArticuloSinStock: TcxStyle;
    cxGridViewRecID: TcxGridDBColumn;
    cxGridViewREFERENCIA_PEDIDO: TcxGridDBColumn;
    cxGridViewFECHA_PEDIDO: TcxGridDBColumn;
    cxGridViewFECHA_CONFIRMACION: TcxGridDBColumn;
    cxGridViewID_PROVEEDOR: TcxGridDBColumn;
    cxGridViewPROVEEDOR: TcxGridDBColumn;
    cxGridViewID_ARTICULO: TcxGridDBColumn;
    cxGridViewFAMILIA: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn;
    cxGridViewDESCRIPCION: TcxGridDBColumn;
    cxGridViewCANTIDAD_PEDIDA: TcxGridDBColumn;
    cxGridViewCANTIDAD_RECIBIDA: TcxGridDBColumn;
    cxGridViewCANTIDAD_PENDIENTE: TcxGridDBColumn;
    TBXItem2: TTBXItem;
    TBXItem3: TTBXItem;
    actProveedores: TAction;
    actPedidos: TAction;
    TBXSeparatorItem1: TTBXSeparatorItem;
    TBXSeparatorItem2: TTBXSeparatorItem;

    procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
            ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out
            AStyle: TcxStyle);
    procedure actProveedoresExecute(Sender: TObject);
    procedure actProveedoresUpdate(Sender: TObject);
    procedure actPedidosExecute(Sender: TObject);
    procedure actPedidosUpdate(Sender: TObject);

  private
//    FAlmacenesController: IAlmacenesController;
//    FAlmacenes: IBizAlmacen;
//    function GetAlmacenes: IBizAlmacen;
//    procedure SetAlmacenes(const Value: IBizAlmacen);

    //Filtros relativos a la vista
//    procedure AnadirFiltroAlmacenes;

  protected
    FDetalles: IBizDetalleSinRecibir;
    function GetDetalles: IBizDetalleSinRecibir;
    procedure SetDetalles(const Value: IBizDetalleSinRecibir);
    procedure AnadirOtrosFiltros; override;

  public
//    property Almacenes: IBizAlmacen read GetAlmacenes write SetAlmacenes;
//    property DetalleReservas: IBizDetalleReservas read GetDetalleReservas write SetDetalleReservas;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation
{$R *.dfm}

uses uDataModuleInventario, schInventarioClient_Intf;

{
procedure TfrViewDetallesSinRecibir.AnadirFiltroAlmacenes;
var
  FFiltro : TcxFilterCriteriaItemList;
  CodigoAlmacen: String;
begin

  FFiltro := AddFilterGrid(fboAnd);

  CodigoAlmacen := IntToStr(cxGrid.Levels.Items[cxGrid.ActiveLevel.Index].Tag);
  if CodigoAlmacen <> '-1' then
  begin
     FFiltro.AddItem(cxGridViewID_ALMACEN_ALB, foEqual, CodigoAlmacen, CodigoAlmacen);
     cxGridViewALMACEN_ALB.Visible := False;
  end
  else
     cxGridViewALMACEN_ALB.Visible := True;
end;
}

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

procedure TfrViewDetallesSinRecibir.actProveedoresUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewPROVEEDOR.GroupIndex < 0);
end;

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

procedure TfrViewDetallesSinRecibir.actPedidosUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewREFERENCIA_PEDIDO.GroupIndex < 0);
end;

procedure TfrViewDetallesSinRecibir.AnadirOtrosFiltros;
begin
  inherited;

//  AnadirFiltroAlmacenes;

  //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;

constructor TfrViewDetallesSinRecibir.Create(AOwner: TComponent);
begin
  inherited;
//  FAlmacenesController := TAlmacenesController.Create;
//  Almacenes := FAlmacenesController.BuscarTodos;
end;

procedure TfrViewDetallesSinRecibir.cxGridViewStylesGetContentStyle(Sender:
        TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem:
        TcxCustomGridTableItem; out AStyle: TcxStyle);
var
  IndiceCol: Integer;
  AStock: Variant;
begin
  inherited;
{
  if Assigned(ARecord) then
  begin
    IndiceCol := (Sender as TcxGridDBTableView).GetColumnByFieldName(fld_DetalleReservasSTOCK).Index;
    AStock := ARecord.DisplayTexts[IndiceCol];
    if (AStock < 0) then
      AStyle := cxStyleArticuloSinStock;
  end;
}
end;

destructor TfrViewDetallesSinRecibir.Destroy;
begin
//  FAlmacenesController := Nil;
//  FAlmacenes := Nil;
  FDetalles := Nil;
  inherited;
end;

{function TfrViewDetallesSinRecibir.GetAlmacenes: IBizAlmacen;
begin
  Result := FAlmacenes;
end;
}

function TfrViewDetallesSinRecibir.GetDetalles: IBizDetalleSinRecibir;
begin
  Result := FDetalles;
end;
{
procedure TfrViewDetallesSinRecibir.SetAlmacenes(const Value: IBizAlmacen);
var
  Nivel: TcxGridLevel;
begin
  FAlmacenes := Value;

  if Assigned(FAlmacenes) then
  begin
    if not FAlmacenes.DataTable.Active then
       FAlmacenes.DataTable.Active := True;

    FAlmacenes.First;
    while not FAlmacenes.EOF do
    begin
      Nivel := cxGrid.Levels.Add;
      Nivel.Caption := FAlmacenes.NOMBRE;
      Nivel.Tag := FAlmacenes.ID;
      FAlmacenes.Next;
    end;
  end;
end;
}
procedure TfrViewDetallesSinRecibir.SetDetalles(const Value: IBizDetalleSinRecibir);
begin
  FDetalles := Value;
  if Assigned(FDetalles) then
     dsDataSource.DataTable := FDetalles.DataTable
  else
     dsDataSource.DataTable := Nil;
end;

end.
