unit uViewDatosYSeleccionMontaje;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uViewBase, StdCtrls, cxControls, cxContainer, cxEdit, cxLabel,
  cxDBLabel, ExtCtrls, DB, uDADataTable, uBizMontajes,
  ComCtrls, ToolWin, ActnList, ImgList, PngImageList, cxTextEdit, cxDBEdit,
  pngimage, JvExControls, JvComponent, JvButton, JvTransparentButton, Mask,
  DBCtrls,
  uMontajesController, dxLayoutControl, Buttons, cxMaskEdit, cxDropDownEdit,
  cxCalendar;

type
  IViewDatosYSeleccionMontaje = interface(IViewBase)
    ['{BCC2B36B-4A19-4981-B69A-56E258A898F0}']
    function GetController: IMontajesController;
    procedure SetController(Value: IMontajesController);
    property Controller: IMontajesController read GetController write SetController;

    function GetMontaje: IBizMontaje;
    procedure SetMontaje(Value: IBizMontaje);
    property Montaje: IBizMontaje read GetMontaje write SetMontaje;

    function GetOnMontajeChanged : TNotifyEvent;
    procedure SetOnMontajeChanged (const Value : TNotifyEvent);
    property OnMontajeChanged : TNotifyEvent read GetOnMontajeChanged
      write SetOnMontajeChanged;
  end;

  TfrViewDatosYSeleccionMontaje = class(TfrViewBase, IViewDatosYSeleccionMontaje)
    DADataSource: TDADataSource;
    ActionList1: TActionList;
    actElegirMontaje: TAction;
    actAnadirMontaje: TAction;
    actVerMontaje: TAction;
    PngImageList: TPngImageList;
    dxLayoutControl1Group_Root: TdxLayoutGroup;
    dxLayoutControl1: TdxLayoutControl;
    dxLayoutControl1Item1: TdxLayoutItem;
    edtlReferencia: TcxDBTextEdit;
    Button1: TBitBtn;
    dxLayoutControl1Item7: TdxLayoutItem;
    Button2: TBitBtn;
    dxLayoutControl1Item8: TdxLayoutItem;
    Button3: TBitBtn;
    dxLayoutControl1Item9: TdxLayoutItem;
    dxLayoutControl1Group1: TdxLayoutGroup;
    procedure actElegirMontajeExecute(Sender: TObject);
    procedure actAnadirMontajeExecute(Sender: TObject);
    procedure actVerMontajeExecute(Sender: TObject);
    procedure actVerMontajeUpdate(Sender: TObject);
  private
    FController : IMontajesController;
    FMontaje : IBizMontaje;
    FOnMontajeChanged : TNotifyEvent;

  protected
    function GetController: IMontajesController;
    procedure SetController(Value: IMontajesController);
    function GetMontaje: IBizMontaje;
    procedure SetMontaje(Value: IBizMontaje);
    function GetOnMontajeChanged : TNotifyEvent;
    procedure SetOnMontajeChanged (const Value : TNotifyEvent);
  public
    property Controller: IMontajesController read GetController write SetController;
    property Montaje: IBizMontaje read GetMontaje write SetMontaje;
    property OnMontajeChanged : TNotifyEvent read GetOnMontajeChanged write SetOnMontajeChanged;
  end;

implementation
{$R *.dfm}

uses
  uDataModuleMontajes, Math;

procedure TfrViewDatosYSeleccionMontaje.actElegirMontajeExecute(Sender: TObject);
var
  AMontaje : IBizMontaje;
begin
  inherited;
  AMontaje := (Controller.ElegirMontaje(Controller.BuscarTodos, '', False) as IBizMontaje);
  if Assigned(AMontaje) then
    Montaje := AMontaje;
end;

procedure TfrViewDatosYSeleccionMontaje.actAnadirMontajeExecute(
  Sender: TObject);
var
  AMontaje : IBizMontaje;
begin
  inherited;
  AMontaje := (FController.Nuevo as IBizMontaje);
  FController.Ver(AMontaje);
  Montaje := AMontaje;
end;

procedure TfrViewDatosYSeleccionMontaje.actVerMontajeExecute(Sender: TObject);
begin
  inherited;
  FController.Ver(Montaje);
end;

procedure TfrViewDatosYSeleccionMontaje.actVerMontajeUpdate(Sender: TObject);
begin
  inherited;
  (Sender as TAction).Enabled := Length(edtlReferencia.Text) > 0;
end;

function TfrViewDatosYSeleccionMontaje.GetMontaje: IBizMontaje;
begin
  Result := FMontaje;
end;

function TfrViewDatosYSeleccionMontaje.GetController: IMontajesController;
begin
  Result := FController;
end;

procedure TfrViewDatosYSeleccionMontaje.SetMontaje(Value: IBizMontaje);
begin
  FMontaje := Value;
  if Assigned(FMontaje) then
  begin
    DADataSource.DataTable := FMontaje.DataTable;
    if not FMontaje.DataTable.Active then
      FMontaje.DataTable.Active := True;
  end
  else
    DADataSource.DataTable := NIL;

  if Assigned(FOnMontajeChanged) then
    FOnMontajeChanged(Self);
end;

procedure TfrViewDatosYSeleccionMontaje.SetController(Value: IMontajesController);
begin
  FController := Value;
end;

function TfrViewDatosYSeleccionMontaje.GetOnMontajeChanged: TNotifyEvent;
begin
  Result := FOnMontajeChanged;
end;

procedure TfrViewDatosYSeleccionMontaje.SetOnMontajeChanged(const Value: TNotifyEvent);
begin
  FOnMontajeChanged := Value;
end;

end.
