unit uViewArticulosProveedores;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, uViewBase, uViewDetallesGenerico, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ActnList, ImgList,
  PngImageList, uDADataTable, ComCtrls, ToolWin, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid, cxDBLookupComboBox, cxSpinEdit,
  uBizContactos, uProveedoresController, uDAInterfaces, 
  uBizArticulos, uArticulosController,
  cxTextEdit;

type
  IViewArticulosProveedores = interface(IViewBase)
  ['{65206152-786D-47AE-A037-5EF480BC056C}']
    function GetArticulo: IBizArticulo;
    procedure SetArticulo(const Value: IBizArticulo);
    property Articulo: IBizArticulo read GetArticulo write SetArticulo;

    function GetController : IArticulosController;
    procedure SetController (const Value : IArticulosController);
    property Controller : IArticulosController read GetController write SetController;
  end;

  TfrViewArticulosProveedores = class(TfrViewDetallesGenerico, IViewArticulosProveedores)
    dsProveedores: TDADataSource;
    cxGridViewPROVEEDOR: TcxGridDBColumn;
    cxGridViewDESCUENTO: TcxGridDBColumn;
    cxGridViewREFERENCIA_PROV: TcxGridDBColumn;
    cxGridViewPRECIO_COSTE: TcxGridDBColumn;
    cxGridViewPRECIO_NETO: TcxGridDBColumn;
    cxGridViewPRECIO_PORTE: TcxGridDBColumn;
    cxGridViewPRECIO_PVP_VENTA: TcxGridDBColumn;
    cxGridViewPRECIO_PVP_TOTAL: TcxGridDBColumn;
    cxGridViewID_PROVEEDOR: TcxGridDBColumn;
    cxGridViewID_ARTICULO: TcxGridDBColumn;
    procedure cxGridViewPROVEEDORPropertiesEditValueChanged(Sender: TObject);
    procedure CustomViewShow(Sender: TObject);
  protected
    FArticulo: IBizArticulo;
    FController: IArticulosController;
    FProvController : IProveedoresController;
    FProveedores : IBizProveedor;
    function GetArticulo: IBizArticulo;
    procedure SetArticulo(const Value: IBizArticulo);

    function GetController : IArticulosController;
    procedure SetController (const Value : IArticulosController);

    procedure AnadirInterno; override;    

  public
    property Articulo: IBizArticulo read GetArticulo write SetArticulo;
    property Controller : IArticulosController read GetController write SetController;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

procedure TfrViewArticulosProveedores.AnadirInterno;
begin
  dsDetalles.DataTable.Append;
end;

constructor TfrViewArticulosProveedores.Create(AOwner: TComponent);
begin
  inherited;
  FProvController := TProveedoresController.Create;
  FProveedores := (FProvController.BuscarTodos as IBizProveedor);
  dsProveedores.DataTable := FProveedores.DataTable;

  if not dsProveedores.DataTable.Active then
     dsProveedores.DataTable.Active := True;
end;

procedure TfrViewArticulosProveedores.CustomViewShow(Sender: TObject);
begin
  inherited;
  cxGridView.ApplyBestFit;
end;

procedure TfrViewArticulosProveedores.cxGridViewPROVEEDORPropertiesEditValueChanged(Sender: TObject);
begin
  inherited;

  //Signamos el descuento del proveedor seleccionado
  if not Articulo.Proveedores.DataTable.Editing then
     Articulo.Proveedores.DataTable.Edit;

  Articulo.Proveedores.DESCUENTO := FProveedores.DESCUENTO;
end;

destructor TfrViewArticulosProveedores.Destroy;
begin
  if dsProveedores.DataTable.Active then
    dsProveedores.DataTable.Active := False;

  FProveedores := NIL;
  FProvController := NIL;
  inherited;
end;

function TfrViewArticulosProveedores.GetArticulo: IBizArticulo;
begin
  Result := FArticulo;
end;

function TfrViewArticulosProveedores.GetController: IArticulosController;
begin
  Result := FController; 
end;

procedure TfrViewArticulosProveedores.SetArticulo(const Value: IBizArticulo);
begin
  FArticulo := Value;
  dsDetalles.DataTable := FArticulo.Proveedores.DataTable;
end;

procedure TfrViewArticulosProveedores.SetController(const Value: IArticulosController);
begin
  FController := Value;
end;

end.
