unit uCobrosMontajeController;

interface


uses
//  Classes, SysUtils, uDADataTable, uControllerBase, uIDataModuleCobrosCliente,
//  uClientesController, uBizCobrosCliente;

  uEditorDBItem,
  uCobrosClienteController, uMontajesDetallesController, uBizCobrosCliente,
  uBizCobrosMontaje;


type
  ICobrosMontajeController = interface(ICobrosClienteController)
  ['{573BEBB7-C4ED-4041-8373-0FEF3B201E83}']
    function GetMontajeController: IMontajesDetallesController;
    procedure SetMontajeController(const Value: IMontajesDetallesController);
    property MontajeController: IMontajesDetallesController read GetMontajeController write SetMontajeController;
    function BuscarCobrosMontaje(const ID: Integer): IBizCobroMontaje;
  end;

  TCobrosMontajeController = class(TCobrosClienteController, ICobrosMontajeController)
  protected
    FMontajeController : IMontajesDetallesController;
    function GetMontajeController: IMontajesDetallesController;
    procedure SetMontajeController(const Value: IMontajesDetallesController);
    procedure RecuperarMontaje(ACobro : IBizCobroMontaje);

    //Estos son los tres métodos a sobre escribir si se desea heredar toda la logica de
    //este controller
    procedure AsignarDataModule; override;
    procedure RecuperarObjetos(ACobro: IBizCobroCliente); override;
    procedure AsignarEditor(out AEditor: IEditorDBItem); override;

  public
    property MontajeController: IMontajesDetallesController read GetMontajeController write SetMontajeController;
    function BuscarCobrosMontaje(const ID: Integer): IBizCobroMontaje;
    constructor Create;
    destructor Destroy; override;

    procedure Preview(ACobro : IBizCobroCliente); override;
    procedure Print(ACobro : IBizCobroCliente); override;
  end;

implementation

uses
  uIEditorCobroMontaje, uDataModuleCobrosMontaje, uBizMontajesDetalles,
  uIDataModuleCobrosMontaje, uCobrosMontajeReportController;

{ TCobrosMontajeController }

procedure TCobrosMontajeController.AsignarDataModule;
begin
  inherited;
  FDataModule := TDataModuleCobrosMontaje.Create(Nil);
end;

procedure TCobrosMontajeController.AsignarEditor(out AEditor: IEditorDBItem);
begin
//  inherited; No descomentar así crea solo el editor hijo
  CreateEditor('EditorCobroMontaje', IEditorCobroMontaje, AEditor);
end;

function TCobrosMontajeController.BuscarCobrosMontaje(const ID: Integer): IBizCobroMontaje;
begin
  Result := (FDataModule as IDataModuleCobrosMontaje).GetItemsMontaje(ID);
  FiltrarEmpresa(Result);
end;

constructor TCobrosMontajeController.Create;
begin
  inherited;
  FMontajeController := TMontajesDetallesController.Create;
end;

destructor TCobrosMontajeController.Destroy;
begin
  FMontajeController := Nil;
  inherited;
end;

function TCobrosMontajeController.GetMontajeController: IMontajesDetallesController;
begin
  Result := FMontajeController;
end;

procedure TCobrosMontajeController.Preview(ACobro: IBizCobroCliente);
var
  AReportController : ICobrosMontajeReportController;
begin
  inherited;
  AReportController := TCobrosMontajeReportController.Create;
  try
    AReportController.Preview(ACobro.ID);
  finally
    AReportController := NIL;
  end;
end;

procedure TCobrosMontajeController.Print(ACobro: IBizCobroCliente);
var
  AReportController : ICobrosMontajeReportController;
begin
  inherited;
  AReportController := TCobrosMontajeReportController.Create;
  try
    AReportController.Print(ACobro.ID);
  finally
    AReportController := NIL;
  end;
end;

procedure TCobrosMontajeController.RecuperarMontaje(ACobro: IBizCobroMontaje);
begin
  ACobro.Montaje := (FMontajeController.Buscar(ACobro.ID_MONTAJE) as IBizMontajeDetalles);
end;

procedure TCobrosMontajeController.RecuperarObjetos(ACobro: IBizCobroCliente);
begin
  inherited;
  if not Assigned((ACobro as IBizCobroMontaje).Montaje)
  or ((ACobro as IBizCobroMontaje).ID_MONTAJE <> (ACobro as IBizCobroMontaje).Montaje.ID) then
     RecuperarMontaje((ACobro as IBizCobroMontaje));
end;

procedure TCobrosMontajeController.SetMontajeController(const Value: IMontajesDetallesController);
begin
  FMontajeController := Value;
end;

end.
