unit uEditorMontajes;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, DB, uDADataTable, JvAppStorage,
  JvAppRegistryStorage, JvComponent, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, ComCtrls, TB2ExtItems, TBXExtItems,
  TBX, TB2Item, TB2Dock, TB2Toolbar, ExtCtrls, JvExControls,
  JvNavigationPane, uViewGrid, pngimage, JvComponentBase,
  uEditorGridBase,  uCustomView, uViewBase, uViewBarraSeleccion, uViewGridBase,
  uBizMontajes, uIEditorMontajes, uMontajesController,
  uViewMontajes, JvExComCtrls, JvStatusBar;

type

  TfEditorMontajes = class(TfEditorGridBase, IEditorMontajes)
    frViewMontajes1: TfrViewMontajes;
    actCambiarSituacion: TAction;
    TBXItem37: TTBXItem;
    TBXSeparatorItem17: TTBXSeparatorItem;
    procedure FormShow(Sender: TObject);
    procedure actNuevoExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actModificarExecute(Sender: TObject);
    procedure actDuplicarExecute(Sender: TObject);
    procedure actCambiarSituacionExecute(Sender: TObject);
    procedure actCambiarSituacionUpdate(Sender: TObject);
  private
    FMontajes: IBizMontaje;
    FController : IMontajesController;
    function HayMontajes : Boolean;    
  protected
    function GetMontajes: IBizMontaje;
    procedure SetMontajes(const Value: IBizMontaje);

    function GetController : IMontajesController; virtual;
    procedure SetController (const Value : IMontajesController); virtual;
  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property Montajes: IBizMontaje read GetMontajes write SetMontajes;
    property Controller : IMontajesController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;


implementation

uses
  uDataModuleMontajes, uDataModuleUsuarios;

{$R *.dfm}

{
*************************** TfEditorMontajes ***************************
}
constructor TfEditorMontajes.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewMontajes1; //  CreateView(TfrViewMontajes) as IViewMontajes;
end;

destructor TfEditorMontajes.Destroy;
begin
  FMontajes := NIL;
  inherited;
end;

procedure TfEditorMontajes.FormShow(Sender: TObject);
begin
  inherited;

  if not Assigned(ViewGrid) then
    raise Exception.Create('No hay ninguna vista asignada');

  if not Assigned(Montajes) then
    raise Exception.Create('No hay ningún presupuesto asignado');

  Montajes.DataTable.Active := True;
  ViewGrid.GotoFirst;  
end;

procedure TfEditorMontajes.actCambiarSituacionExecute(Sender: TObject);
begin
  inherited;
  FController.CambiarSituacion(FMontajes);
end;

procedure TfEditorMontajes.actCambiarSituacionUpdate(Sender: TObject);
begin
  inherited;
  if HayDatos and Assigned(ViewGrid) then
    (Sender as TAction).Enabled := not (dsDataTable.DataTable.State in dsEditModes)
      and not ViewGrid.IsEmpty
  else
    (Sender as TAction).Enabled := False;
end;

procedure TfEditorMontajes.actDuplicarExecute(Sender: TObject);
var
  AMontaje : IBizMontaje;
begin
  inherited;
  AMontaje := FController.Duplicar(FMontajes);
  try
    FController.Ver(AMontaje);
  finally
    actRefrescar.Execute;
  end;
end;

procedure TfEditorMontajes.actEliminarExecute(Sender: TObject);
begin
  if (Application.MessageBox('¿Desea borrar este montaje de cliente?', 'Atención', MB_YESNO) = IDYES) then
  begin
    FController.Eliminar(Montajes);
    inherited;
  end;
end;

procedure TfEditorMontajes.actModificarExecute(Sender: TObject);
begin
  inherited;
  FController.Ver(Montajes);
end;

procedure TfEditorMontajes.actNuevoExecute(Sender: TObject);
begin
  inherited;
  FController.Anadir(Montajes);
  FController.Ver(Montajes);
end;

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

function TfEditorMontajes.GetMontajes: IBizMontaje;
begin
  Result := FMontajes;
end;

function TfEditorMontajes.HayMontajes: Boolean;
begin
  Result := Assigned(FMontajes) and (FMontajes.DataTable.Active) and
     (not FMontajes.DataTable.Opening) and
     (not FMontajes.DataTable.Closing) and
     (not FMontajes.DataTable.Fetching) and
     (not FMontajes.DataTable.Opening) and
     (not FMontajes.DataTable.IsEmpty);
end;

procedure TfEditorMontajes.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Lista de Montajes de cliente - ' + dmUsuarios.EmpresaActual.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

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

procedure TfEditorMontajes.SetMontajes(const Value: IBizMontaje);
begin
  FMontajes := Value;
  dsDataTable.DataTable := FMontajes.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewMontajes).Montajes := Montajes;
end;

end.
