unit uBizMontajes;

interface

uses
  uDAInterfaces, uDADataTable, schMontajesClient_Intf,
  uBizContactos, Classes, uDBSelectionListUtils;

const
  BIZ_CLIENT_MONTAJE = 'Client.Montaje';

  SITUACION_MONTAJE_PENDIENTE = 'Pendiente';
  SITUACION_MONTAJE_EJECUCION = 'En ejecución';
  SITUACION_MONTAJE_TERMINADO = 'Terminado';
  SITUACION_MONTAJE_PAGADO = 'Terminado y pagado';  

type
  IBizMontaje = interface(IMontajes)
  ['{8B782153-C15D-4454-BF82-DFB19AB4A60A}']

    procedure SetCliente(AValue : IBizCliente);
    function GetCliente : IBizCliente;
    property Cliente : IBizCliente read GetCliente write SetCliente;

    function DarListaSituaciones: TStringList;
		function EsNuevo : Boolean;

    function GetSelectedRecords: ISelectedRecords;
    property SelectedRecords : ISelectedRecords read GetSelectedRecords;
  end;

  TBizMontaje = class(TMontajesDataTableRules, IBizMontaje, ISelectedRecords)
  private
    function GetSelected: Boolean;
    procedure SetSelected(const Value: Boolean);

  protected
    FCliente : IBizCliente;
    FSelectedRecords : TSelectedRecords;

    procedure SetCliente(AValue : IBizCliente);
    function GetCliente : IBizCliente;
    procedure OnNewRecord(Sender: TDADataTable); override;

  public
    function DarListaSituaciones: TStringList;
		function EsNuevo : Boolean;
    function GetSelectedRecords: ISelectedRecords;
    property SelectedRecords : ISelectedRecords read GetSelectedRecords implements ISelectedRecords;
    property Selected : Boolean read GetSelected write SetSelected;
    property Cliente : IBizCliente read GetCliente write SetCliente;
    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
  end;

implementation

uses
  SysUtils, uDataTableUtils, DB, uDateUtils, DateUtils, uDataModuleUsuarios,
  Variants, cxDateUtils;

{ TBizMontaje }

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

constructor TBizMontaje.Create(aDataTable: TDADataTable);
begin
  inherited;
  FCliente := Nil;
  FSelectedRecords := TSelectedRecords.Create(aDataTable);
end;

function TBizMontaje.DarListaSituaciones: TStringList;
begin
  Result := TStringList.Create;
  with Result do
  begin
    Add(SITUACION_MONTAJE_PENDIENTE);
    Add(SITUACION_MONTAJE_EJECUCION);
    Add(SITUACION_MONTAJE_TERMINADO);
    Add(SITUACION_MONTAJE_PAGADO);    
  end;
end;

destructor TBizMontaje.Destroy;
begin
  FCliente := NIL;
  FreeAndNIL(FSelectedRecords);
  inherited;
end;

function TBizMontaje.GetCliente: IBizCliente;
begin
  Result := FCliente;
end;

function TBizMontaje.GetSelected: Boolean;
begin
  Result := FSelectedRecords.CurrentRowSelected;
end;

function TBizMontaje.GetSelectedRecords: ISelectedRecords;
begin
  Result := FSelectedRecords;
end;

procedure TBizMontaje.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
  ID := GetRecNo; // -1, -2, -3...
  ID_EMPRESA := dmUsuarios.IDEmpresaActual;
  USUARIO := dmUsuarios.LoginInfo.Usuario;
  SITUACION := SITUACION_MONTAJE_PENDIENTE;
  FECHA_INICIO := DateOf(Now);
  ID_CLIENTE := ID_NULO;
end;

procedure TBizMontaje.SetCliente(AValue: IBizCliente);
var
  bEnEdicion : Boolean;
begin
  FCliente := AValue;

  bEnEdicion := (DataTable.State in dsEditModes);
  if not bEnEdicion then
    Edit;
  if Assigned(FCliente) then
  begin
    if not FCliente.DataTable.Active then
      FCliente.DataTable.Active := True;

    ID_CLIENTE := FCliente.ID;
    REFERENCIA := FCliente.NOMBRE;
    Post;
    if bEnEdicion then
      Edit;
  end
end;

procedure TBizMontaje.SetSelected(const Value: Boolean);
begin
  FSelectedRecords.CurrentRowSelected := True;
end;

initialization
  RegisterDataTableRules(BIZ_CLIENT_MONTAJE, TBizMontaje);

finalization

end.

