unit uEditorPresupuestos;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  uCustomEditor,  ImgList,
  PngImageList, StdActns, ActnList, TB2ExtItems, TBXExtItems, TBX, TB2Item,
  TB2Dock, TB2Toolbar, JvExControls, JvComponent, JvNavigationPane,
  uViewPresupuestos, Menus, DB, uDADataTable, ComCtrls, uViewGrid,
  uDAScriptingProvider, uDACDSDataTable, JvAppStorage,
  JvAppRegistryStorage, JvFormPlacement, pngimage, ExtCtrls, uCustomView,
  uViewBase, uViewBarraSeleccion, JvComponentBase, uIEditorPresupuestos,
  uEditorGridBase, uBizPresupuestos, uPresupuestosController, uViewGridBase,
  JvExComCtrls, JvStatusBar;

type
  TfEditorPresupuestos = class(TfEditorGridBase, IEditorPresupuestos)
    frViewPresupuestos1: TfrViewPresupuestos;
    actCambiarSituacion: TAction;
    TBXItem38: TTBXItem;
    TBXSubmenuItem2: TTBXSubmenuItem;
    Cambiarlasituacin1: TMenuItem;

    procedure FormShow(Sender: TObject);
    procedure frViewBarraSeleccionactSeleccionarExecute(Sender: TObject);
    procedure frViewBarraSeleccionbCancelarClick(Sender: TObject);
    procedure actCambiarSituacionExecute(Sender: TObject);
    procedure actCambiarSituacionUpdate(Sender: TObject);

  private
    FPresupuestos: IBizPresupuesto;
    FController : IPresupuestosController;
    function HayPresupuestos : Boolean;
  protected
    function GetPresupuestos: IBizPresupuesto;
    procedure SetPresupuestos(const Value: IBizPresupuesto);
    function GetController : IPresupuestosController; virtual;
    procedure SetController (const Value : IPresupuestosController); virtual;
    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;
    procedure DuplicarInterno; override;
  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property Controller : IPresupuestosController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Presupuestos: IBizPresupuesto read GetPresupuestos write
            SetPresupuestos;
  end;

var
  fEditorPresupuestos : TfEditorPresupuestos;

implementation

uses
  cxControls, uDataModulePresupuestos, uEditorBase, uDataModuleUsuarios,
  DateUtils;

{$R *.DFM}

{
***************************** TfEditorPresupuestos *****************************
}
constructor TfEditorPresupuestos.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewPresupuestos1;
end;

destructor TfEditorPresupuestos.Destroy;
begin
  FPresupuestos := NIL;
  inherited;
end;

procedure TfEditorPresupuestos.DuplicarInterno;
var
  APresupuesto : IBizPresupuesto;
begin
  inherited;
  APresupuesto := FController.Duplicar(Presupuestos);
  try
    FController.Ver(APresupuesto);
  finally
    actRefrescar.Execute;
  end;
end;

procedure TfEditorPresupuestos.EliminarInterno;
begin
  if (Application.MessageBox('¿Desea borrar este presupuesto?', 'Atención', MB_YESNO) = IDYES) then
  begin
    FController.Eliminar(Presupuestos);
    inherited;
  end;
end;

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

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

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

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

procedure TfEditorPresupuestos.frViewBarraSeleccionactSeleccionarExecute(
        Sender: TObject);
begin
  inherited;
  if (Presupuestos.DataTable.RecordCount > 0) then
  begin
//    ViewGrid.SyncFocusedRecordsFromGrid;
    ModalResult := mrOK;
  end;
end;

procedure TfEditorPresupuestos.frViewBarraSeleccionbCancelarClick(Sender:
        TObject);
begin
  inherited;
//  frViewBarraSeleccion.actCancelarExecute(Sender);
end;

function TfEditorPresupuestos.GetController: IPresupuestosController;
begin
  Result := FController;
end;

function TfEditorPresupuestos.GetPresupuestos: IBizPresupuesto;
begin
  Result := FPresupuestos;
end;

function TfEditorPresupuestos.HayPresupuestos: Boolean;
begin
  Result := Assigned(FPresupuestos) and (FPresupuestos.DataTable.Active) and
     (not FPresupuestos.DataTable.Opening) and
     (not FPresupuestos.DataTable.Closing) and
     (not FPresupuestos.DataTable.Fetching) and
     (not FPresupuestos.DataTable.Opening) and
     (not FPresupuestos.DataTable.IsEmpty);
end;

procedure TfEditorPresupuestos.ModificarInterno;
begin
  inherited;
  FController.Ver(Presupuestos);
end;

procedure TfEditorPresupuestos.NuevoInterno;
begin
  inherited;
  FController.Anadir(Presupuestos);
  FController.Ver(Presupuestos);
end;

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

procedure TfEditorPresupuestos.SetController(const Value: IPresupuestosController);
begin
  FController := Value;
end;

procedure TfEditorPresupuestos.SetPresupuestos(const Value: IBizPresupuesto);
begin
  FPresupuestos := Value;
  dsDataTable.DataTable := FPresupuestos.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewPresupuestos).Presupuestos := Presupuestos;
end;

procedure TfEditorPresupuestos.actCambiarSituacionExecute(Sender: TObject);
begin
  inherited;
  FController.CambiarSituacion(FPresupuestos);
end;

procedure TfEditorPresupuestos.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;

end.

