unit uEditorExtractoMovimientos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewDiario, uBizAsientos, ActnList, DBActns, uViewGrid,
  Menus, uDataModuleBase, ImgList, PngImageList, TB2Dock, TB2Toolbar, TBX,
  TB2Item, StdActns, TB2ExtItems, TBXExtItems, TB2MRU, DB, uDADataTable,
  JvFormAutoSize, uDAScriptingProvider, uDACDSDataTable, JvAppStorage,
  JvAppRegistryStorage, JvFormPlacement, ExtCtrls, uCustomView, uViewBase,
  uViewBarraSeleccion, pngimage, uEditorGridBase, JvComponentBase, uViewGridBase,
  uAsientosController, JvExComCtrls, JvStatusBar, uDAInterfaces, uViewEpigrafes,
  uBizDiario, dxGDIPlusClasses, uViewExtractoMovimientos, uIEditorExtractoMovimientos;

type
  TfEditorExtractoMovimientos = class(TfEditorGridBase, IEditorExtractoMovimientos)
    frViewExtractoMovimientos1: TfrViewExtractoMovimientos;
    actCerrarCaja: TAction;
    TBXItem38: TTBXItem;
    procedure FormShow(Sender: TObject);
    procedure actModificarUpdate(Sender: TObject);
    procedure actEliminarUpdate(Sender: TObject);
    procedure actCerrarCajaExecute(Sender: TObject);
    procedure actCerrarCajaUpdate(Sender: TObject);

  private
    FDiario: IBizDiario;
    FController : IAsientosController;

  protected
    function GetDiario: IBizDiario;
    procedure SetDiario(const Value: IBizDiario);
    procedure OnExtractoChanged(Sender: TObject);

    function GetController : IAsientosController; virtual;
    procedure SetController (const Value : IAsientosController); virtual;

    procedure NuevoInterno; override;
    procedure EliminarInterno; override;
    procedure ModificarInterno; override;
    procedure PrevisualizarInterno; override;
    procedure ImprimirInterno; override;

  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property Diario: IBizDiario read GetDiario write SetDiario;
    property Controller : IAsientosController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  uFactuGES_App;

{$R *.dfm}

{
****************************** TfEditorAsientos *******************************
}
procedure TfEditorExtractoMovimientos.FormShow(Sender: TObject);
begin
  inherited;

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

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

  //Para que coja el ancho automático
  actAnchoAuto.Execute;
end;

function TfEditorExtractoMovimientos.GetDiario: IBizDiario;
begin
  Result := FDiario;
end;

procedure TfEditorExtractoMovimientos.ImprimirInterno;
begin
  inherited;
end;

function TfEditorExtractoMovimientos.GetController: IAsientosController;
begin
  Result := FController;
end;

procedure TfEditorExtractoMovimientos.ModificarInterno;
begin
  inherited;
  FController.Ver(FController.Buscar(Diario.ID_ASIENTO));
  actRefrescar.Execute;
end;

procedure TfEditorExtractoMovimientos.NuevoInterno;
begin
  inherited;
  FController.Ver(FController.Anadir(frViewExtractoMovimientos1.cxGrid.ActiveLevel.Tag));
  actRefrescar.Execute;
end;

procedure TfEditorExtractoMovimientos.OnExtractoChanged(Sender: TObject);
begin
  Diario := frViewExtractoMovimientos1.Diario;
end;

procedure TfEditorExtractoMovimientos.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Cajas / Bancos - ' + AppFactuGES.EmpresaActiva.NOMBRE + ' - ' + AppFactuGES.EjercicioActivo.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorExtractoMovimientos.PrevisualizarInterno;
begin
  inherited;
end;

procedure TfEditorExtractoMovimientos.SetDiario(const Value: IBizDiario);
begin
  FDiario := Value;
  if Assigned(FDiario) then
     dsDataTable.DataTable := FDiario.DataTable;
end;

procedure TfEditorExtractoMovimientos.SetController(const Value: IAsientosController);
begin
  FController := Value;
  if Assigned(FController) and Assigned(ViewGrid) then
    (ViewGrid as IViewExtractoMovimientos).Controller := FController;
end;

destructor TfEditorExtractoMovimientos.Destroy;
begin
  frViewExtractoMovimientos1.OnExtractoChange := Nil;
  FDiario := Nil;
  inherited;
end;

procedure TfEditorExtractoMovimientos.EliminarInterno;
begin
  if (Application.MessageBox('¿Está seguro que desea borrar el asiento seleccionado?', 'Atención', MB_YESNO) = IDYES) then
  begin
    inherited;
    if FController.Eliminar(Diario.ID_ASIENTO) then
       actRefrescar.Execute;
  end;
end;

procedure TfEditorExtractoMovimientos.actCerrarCajaExecute(Sender: TObject);
begin
  inherited;
  if FController.CerrarCajaBanco(frViewExtractoMovimientos1.cxGrid.ActiveLevel.Tag) then
     actRefrescar.Execute;
end;

procedure TfEditorExtractoMovimientos.actCerrarCajaUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := (actNuevo as TAction).Enabled;
end;

procedure TfEditorExtractoMovimientos.actEliminarUpdate(Sender: TObject);
begin
  inherited;

  if (Sender as TAction).Enabled then
     if Assigned(Diario) then
        (Sender as TAction).Enabled := Diario.ID_FACTURAIsNull
                                       and Diario.ID_PAGOIsNull;
end;

procedure TfEditorExtractoMovimientos.actModificarUpdate(Sender: TObject);
begin
  inherited;
  if (Sender as TAction).Enabled then
     if Assigned(Diario) then
        (Sender as TAction).Enabled := Diario.ID_FACTURAIsNull
                                       and Diario.ID_PAGOIsNull;
end;

constructor TfEditorExtractoMovimientos.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewExtractoMovimientos1;
  //Se establece este evento porque el control sobre el objeto de negocio recae en las vista ya que cambia
  //en función de la pestaña en la que se encuentre 
  frViewExtractoMovimientos1.OnExtractoChange := OnExtractoChanged;
end;

end.
