unit uBizArticulos;

interface

uses
  uDAInterfaces, uDADataTable, schArticulosClient_Intf, uDBSelectionListUtils,
  uBizArticulosProveedores;

const
  BIZ_CLIENT_ARTICULO = 'Client.Articulo';

type
  IBizArticulo = interface(IArticulos)
  ['{06AB61B1-C225-4791-9F5E-00A60DBA7FFD}']
  	function EsNuevo : Boolean;
    function HayImagen: Boolean;
    procedure SalvarImagen(const AFileName: String);
    procedure CargarImagen(const AFileName: String);
    procedure QuitarImagen;

    function GetProveedores: IBizArticulosProveedores;
    procedure SetProveedores(Value: IBizArticulosProveedores);
    property Proveedores: IBizArticulosProveedores read GetProveedores write SetProveedores;
  end;

  TBizArticulo = class(TArticulosDataTableRules, IBizArticulo, ISeleccionable)
  protected
    FProveedores : IBizArticulosProveedores;
    FProveedoresLink : TDADataSource;
    FSeleccionableInterface : ISeleccionable;
    procedure OnNewRecord(Sender: TDADataTable); override;
    procedure PARAMETROSPRECIOOnChange(Sender: TDACustomField);
    function GetProveedores: IBizArticulosProveedores;
    procedure SetProveedores(Value: IBizArticulosProveedores);

  public
    procedure IniciarValoresArticuloNuevo; virtual;
    function HayImagen: Boolean;
    procedure SalvarImagen(const AFileName: String);
    procedure CargarImagen(const AFileName: String);
    procedure QuitarImagen;
    function EsNuevo : Boolean;
    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
    property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
        write FSeleccionableInterface implements ISeleccionable;
    property Proveedores: IBizArticulosProveedores read GetProveedores write SetProveedores;
  end;

implementation

uses
  uFactuGES_App, uDataTableUtils, SysUtils, uROClasses, Classes;

{ TBizArticulo }

procedure TBizArticulo.CargarImagen(const AFileName: String);
begin
{  inherited;
  DataTable.Edit;
  DataTable.FieldByName(fld_ArticulosIMAGEN).LoadFromFile(AFileName);
  DataTable.Post;}
end;

constructor TBizArticulo.Create(aDataTable: TDADataTable);
begin
  inherited;

  with aDataTable do
  begin
//    FieldByName('TIEMPO').OnChange := PARAMETROSPRECIOOnChange;
//    FieldByName('PARAM_TIEMPO').OnChange := PARAMETROSPRECIOOnChange;
//    FieldByName('PARAM_MARGEN').OnChange := PARAMETROSPRECIOOnChange;
  end;

  FProveedoresLink := TDADataSource.Create(NIL);
  FProveedoresLink.DataTable := aDataTable;

  FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;

destructor TBizArticulo.Destroy;
begin
  FProveedores := NIL;
  FProveedoresLink.Free;

  FSeleccionableInterface := NIL;
  inherited;
end;

function TBizArticulo.EsNuevo: Boolean;
begin
  Result := (ID < 0);
end;

function TBizArticulo.GetProveedores: IBizArticulosProveedores;
begin
  Result := FProveedores;
end;

function TBizArticulo.HayImagen: Boolean;
{var
  AStream : TMemoryStream;
  AROStream : IROStream;}
begin
{  AStream := TMemoryStream.Create;
  AROStream := TROStream.Create(AStream, False);
  try
    DataTable.FieldByName(fld_ArticulosIMAGEN).SaveToStream(AROStream);
    Result := (AROStream.Size > 0);
  finally
    AROStream := NIL;
    FreeAndNIL(AStream);
  end;}
end;

procedure TBizArticulo.IniciarValoresArticuloNuevo;
begin
  ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
  USUARIO := AppFactuGES.UsuarioActivo.UserName;
//  PARAM_TIEMPO := AppFactuGES.EmpresaActiva.PARAM_TIEMPO;
//  PARAM_MARGEN := AppFactuGES.EmpresaActiva.PARAM_MARGEN;
  INVENTARIABLE := 1;
  COMISIONABLE := 1;
  ELIMINADO := 0;
end;

procedure TBizArticulo.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
  IniciarValoresArticuloNuevo;
end;

procedure TBizArticulo.PARAMETROSPRECIOOnChange(Sender: TDACustomField);
begin
  if not Self.DataTable.Editing then
    Edit;

//  MANO_OBRA := TIEMPO * PARAM_TIEMPO;
      
  if Assigned(Self.Proveedores) then
  begin
    Self.Proveedores.RecalcularImportes;
  end;
end;

procedure TBizArticulo.QuitarImagen;
begin
{  DataTable.Edit;
  DataTable.Fields[idx_ArticulosIMAGEN].Clear;
  DataTable.Post;}
end;

procedure TBizArticulo.SalvarImagen(const AFileName: String);
begin
//  DataTable.FieldByName(fld_ArticulosIMAGEN).SaveToFile(AFileName);
end;

procedure TBizArticulo.SetProveedores(Value: IBizArticulosProveedores);
begin
  FProveedores := Value;
  EnlazarMaestroDetalle(FProveedoresLink, FProveedores);
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_ARTICULO, TBizArticulo);

finalization

end.
