unit uViewDetallesSinAlbaran;

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, dxPScxGridLnk, 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
  IViewDetalleSinAlbaran = interface(IViewGrid)
  ['{4417F53A-5BB1-4B99-8760-4C0E1D449582}']
    function GetDetalles: IBizDetalleSinAlbaran;
    procedure SetDetalles(const Value: IBizDetalleSinAlbaran);
    property Detalles: IBizDetalleSinAlbaran read GetDetalles write SetDetalles;
//    function GetAlmacenes: IBizAlmacen;
//    procedure SetAlmacenes(const Value: IBizAlmacen);
//    property Almacenes: IBizAlmacen read GetAlmacenes write SetAlmacenes;
  end;

  TfrViewDetallesSinAlbaran = class(TfrViewGrid, IViewDetalleSinAlbaran)
    cxGridDBTableView1: TcxGridDBTableView;
    PngImageList: TPngImageList;
    cxStyleArticuloSinStock: TcxStyle;
    cxGridViewRecID: TcxGridDBColumn;
    cxGridViewREFERENCIA_PEDIDO: TcxGridDBColumn;
    cxGridViewFECHA_PEDIDO: TcxGridDBColumn;
    cxGridViewFECHA_PREVISTA_PEDIDO: TcxGridDBColumn;
    cxGridViewID_CLIENTE: TcxGridDBColumn;
    cxGridViewCLIENTE: TcxGridDBColumn;
    cxGridViewID_ARTICULO: TcxGridDBColumn;
    cxGridViewFAMILIA: TcxGridDBColumn;
    cxGridViewREFERENCIA: TcxGridDBColumn;
    cxGridViewREFERENCIA_PROVEEDOR: TcxGridDBColumn;
    cxGridViewDESCRIPCION: TcxGridDBColumn;
    cxGridViewCANTIDAD_PEDIDA: TcxGridDBColumn;
    cxGridViewCANTIDAD_RESERVADA: TcxGridDBColumn;
    cxGridViewCANTIDAD_ENVIADA: TcxGridDBColumn;
    cxGridViewCANTIDAD_SERVIDA: TcxGridDBColumn;
    cxGridViewCANTIDAD_PENDIENTE: TcxGridDBColumn;
    TBXItem2: TTBXItem;
    TBXItem3: TTBXItem;
    actClientes: TAction;
    actPedidos: TAction;
    TBXSeparatorItem1: TTBXSeparatorItem;
    TBXSeparatorItem2: TTBXSeparatorItem;

    procedure cxGridViewStylesGetContentStyle(Sender: TcxCustomGridTableView;
            ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; out
            AStyle: TcxStyle);
    procedure actClientesExecute(Sender: TObject);
    procedure actClientesUpdate(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: IBizDetalleSinAlbaran;
    function GetDetalles: IBizDetalleSinAlbaran;
    procedure SetDetalles(const Value: IBizDetalleSinAlbaran);
    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 TfrViewDetallesSinAlbaran.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 TfrViewDetallesSinAlbaran.actClientesExecute(Sender: TObject);
begin
  if (cxGridViewCLIENTE.GroupIndex < 0) then
  begin
    cxGridViewCLIENTE.GroupIndex := cxGridView.GroupedColumnCount;
    cxGridViewCLIENTE.Visible := False;
  end
  else
  begin
    cxGridViewCLIENTE.GroupIndex := -1;
    cxGridViewCLIENTE.Visible := True;
  end;
end;

procedure TfrViewDetallesSinAlbaran.actClientesUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Checked := not (cxGridViewCLIENTE.GroupIndex < 0);
end;

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

procedure TfrViewDetallesSinAlbaran.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 TfrViewDetallesSinAlbaran.Create(AOwner: TComponent);
begin
  inherited;
//  FAlmacenesController := TAlmacenesController.Create;
//  Almacenes := FAlmacenesController.BuscarTodos;
end;

procedure TfrViewDetallesSinAlbaran.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 TfrViewDetallesSinAlbaran.Destroy;
begin
//  FAlmacenesController := Nil;
//  FAlmacenes := Nil;
  FDetalles := Nil;
  inherited;
end;

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

function TfrViewDetallesSinAlbaran.GetDetalles: IBizDetalleSinAlbaran;
begin
  Result := FDetalles;
end;
{
procedure TfrViewDetallesSinAlbaran.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 TfrViewDetallesSinAlbaran.SetDetalles(const Value: IBizDetalleSinAlbaran);
begin
  FDetalles := Value;
  if Assigned(FDetalles) then
     dsDataSource.DataTable := FDetalles.DataTable
  else
     dsDataSource.DataTable := Nil;
end;

end.
