unit uBizComisiones;

interface

uses
  Classes, uDAInterfaces, uDADataTable, schComisionesClient_Intf, uDBSelectionListUtils;

const
  BIZ_CLIENT_COMISIONES = 'Client.Comisiones';
  BIZ_CLIENT_FACTURAS_COMISION = 'Client.FacturasComisiones';
  BIZ_CLIENT_VENDEDORES_COMISION = 'Client.VendedoresComisiones';

type
  IBizFacturasComision = interface(IFacturas_Comision)
  ['{C2AB9B3F-BCAA-4F99-BDEC-105365BFB364}']
  end;

  IBizVendedoresComision = interface(IVendedores_Comision)
  ['{8F74E0CA-5988-4ABD-8F99-31915C1C1B97}']
  end;

  IBizComisiones = interface(IComisiones)
  ['{40E2637E-C002-42AB-8DD5-7A438490C23D}']
    function GetFacturas: IBizFacturasComision;
    procedure SetFacturas(const Value: IBizFacturasComision);
    property Facturas: IBizFacturasComision read GetFacturas write SetFacturas;
    function GetVendedores: IBizVendedoresComision;
    procedure SetVendedores(const Value: IBizVendedoresComision);
    property Vendedores: IBizVendedoresComision read GetVendedores write SetVendedores;
  	function EsNuevo : Boolean;
  end;

  TBizFacturasComision = class(TFacturas_ComisionDataTableRules, IBizFacturasComision)
  end;

  TBizVendedoresComision = class(TVendedores_ComisionDataTableRules, IBizVendedoresComision)
  end;

  TBizComisiones = class(TComisionesDataTableRules, IBizComisiones, ISeleccionable)
  protected
    FFacturas: IBizFacturasComision;
    FFacturasLink : TDADataSource;
    FVendedores: IBizVendedoresComision;
    FVendedoresLink : TDADataSource;
    FSeleccionableInterface : ISeleccionable;

    function GetFacturas: IBizFacturasComision;
    procedure SetFacturas(const Value: IBizFacturasComision);
    function GetVendedores: IBizVendedoresComision;
    procedure SetVendedores(const Value: IBizVendedoresComision);

    procedure OnNewRecord(Sender: TDADataTable); override;
  public
    property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
        write FSeleccionableInterface implements ISeleccionable;
    property Facturas: IBizFacturasComision read GetFacturas write SetFacturas;
    property Vendedores: IBizVendedoresComision read GetVendedores write SetVendedores;

    procedure IniciarValoresComisionLiquidacionNuevo; virtual;
    function EsNuevo : Boolean;
    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
  end;

implementation

uses SysUtils, uDataTableUtils, uDataModuleUsuarios, uFactuGES_App;

{ TBizComisiones }

constructor TBizComisiones.Create(aDataTable: TDADataTable);
begin
  inherited;
  FFacturas := Nil;
  FFacturasLink := TDADataSource.Create(NIL);
  FFacturasLink.DataTable := aDataTable;

  FVendedores := Nil;
  FVendedoresLink := TDADataSource.Create(NIL);
  FVendedoresLink.DataTable := aDataTable;

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

destructor TBizComisiones.Destroy;
begin
  FFacturas := Nil;
  FFacturasLink.Free;
  FVendedores := Nil;
  FVendedoresLink.Free;
  FSeleccionableInterface := NIL;
  inherited;
end;

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

function TBizComisiones.GetFacturas: IBizFacturasComision;
begin
  Result := FFacturas;
end;

function TBizComisiones.GetVendedores: IBizVendedoresComision;
begin
  Result := FVendedores;
end;

procedure TBizComisiones.IniciarValoresComisionLiquidacionNuevo;
begin
  ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
  USUARIO := AppFactuGES.UsuarioActivo.UserName;
  FECHA := Date;
  DESCRIPCION := 'Liquidación de comisiones del mes de ' + UpperCase(FormatDateTime('mmmm', date));
end;

procedure TBizComisiones.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
//  ID := GetRecNo; // -1, -2, -3...
  IniciarValoresComisionLiquidacionNuevo;
end;

procedure TBizComisiones.SetFacturas(const Value: IBizFacturasComision);
begin
  FFacturas := Value;
  EnlazarMaestroDetalle(FFacturasLink, FFacturas);

  if Assigned(FFacturas) then
     if not FFacturas.DataTable.Active then
        FFacturas.DataTable.Active := True;
end;

procedure TBizComisiones.SetVendedores(const Value: IBizVendedoresComision);
begin
  FVendedores := Value;
  EnlazarMaestroDetalle(FVendedoresLink, FVendedores);

  if Assigned(FVendedores) then
     if not FVendedores.DataTable.Active then
        FVendedores.DataTable.Active := True;
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_COMISIONES, TBizComisiones);
  RegisterDataTableRules(BIZ_CLIENT_FACTURAS_COMISION, TBizFacturasComision);
  RegisterDataTableRules(BIZ_CLIENT_VENDEDORES_COMISION, TBizVendedoresComision);

end.
