unit uEditorRemesasCliente;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewRemesasCliente, uBizRemesasCliente, 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, uIEditorRemesasCliente, uEditorGridBase,
  JvComponentBase, uViewGridBase, uRemesasClienteController, JvExComCtrls,
  JvStatusBar;

type
  TfEditorRemesasCliente = class(TfEditorGridBase, IEditorRemesasCliente)
    actVolcarDisco: TAction;
    TBXItem37: TTBXItem;
    TBXSeparatorItem17: TTBXSeparatorItem;
    N4: TMenuItem;
    Volcaradisco1: TMenuItem;
    TBXSubmenuItem2: TTBXSubmenuItem;
    TBXItem38: TTBXItem;
    procedure FormShow(Sender: TObject);
    procedure actVolcarDiscoExecute(Sender: TObject);
    procedure actVolcarDiscoUpdate(Sender: TObject);
  private
    FRemesasCliente: IBizRemesaCliente;
    FController : IRemesasClienteController;
  protected
    function GetRemesasCliente: IBizRemesaCliente;
    procedure SetRemesasCliente(const Value: IBizRemesaCliente);
    function GetController : IRemesasClienteController; virtual;
    procedure SetController (const Value : IRemesasClienteController); virtual;

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


    //Si queremos crear otra vista para el editor heredado solo tendriamos que
    //sobreescribir este metodo
    procedure AsignarVista; virtual;

  public
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property RemesasCliente: IBizRemesaCliente read GetRemesasCliente write SetRemesasCliente;
    property Controller : IRemesasClienteController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  uCustomEditor, uDataModuleRemesasCliente, uDataModuleUsuarios,
  //uEditorRemesaCliente,
  uEditorDBBase,  uBizFamilias, uFamiliasController,
  uBancaElectronicaController,
  cxGrid, cxGridCustomTableView; //, uListaRemesasCliente;

{$R *.dfm}

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

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

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

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

function TfEditorRemesasCliente.GetRemesasCliente: IBizRemesaCliente;
begin
  Result := FRemesasCliente;
end;

procedure TfEditorRemesasCliente.ImprimirInterno;
begin
  inherited;
  FController.Print(RemesasCliente);
end;

function TfEditorRemesasCliente.GetController: IRemesasClienteController;
begin
  Result := FController;
end;

procedure TfEditorRemesasCliente.ModificarInterno;
begin
  inherited;
  FController.Ver(RemesasCliente);
end;

procedure TfEditorRemesasCliente.NuevoInterno;
begin
  inherited;
  FController.Anadir(RemesasCliente);
  FController.Ver(RemesasCliente);
end;

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

procedure TfEditorRemesasCliente.PrevisualizarInterno;
begin
  inherited;
  FController.Preview(RemesasCliente);
end;

procedure TfEditorRemesasCliente.SetRemesasCliente(const Value: IBizRemesaCliente);
begin
  FRemesasCliente := Value;
  dsDataTable.DataTable := FRemesasCliente.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewRemesasCliente).RemesasCliente := RemesasCliente;
end;

procedure TfEditorRemesasCliente.SetController(const Value: IRemesasClienteController);
begin
  FController := Value;
end;

destructor TfEditorRemesasCliente.Destroy;
begin
  FRemesasCliente := NIL;
  FController := NIl;
  inherited;
end;

procedure TfEditorRemesasCliente.EliminarInterno;
begin
  if (Application.MessageBox('¿Desea borrar esta remesa de cobro?', 'Atención', MB_YESNO) = IDYES) then
  begin
    inherited;
    //Para que en el caso de no poderse realizar la operación se refresquen
    //los datos y no nos permita eliminar un registro a la segunda
    if not FController.Eliminar(RemesasCliente) then
       actRefrescar.Execute;
  end;
end;

procedure TfEditorRemesasCliente.actVolcarDiscoExecute(Sender: TObject);
var
  ABancaController : IBancaElectronicaController;
begin
  inherited;
  ABancaController := TBancaElectronicaController.Create;
  try
    ABancaController.GenerarFicheroNorma19(FRemesasCliente.ID);
  finally
    ABancaController := NIL;
  end;
end;

procedure TfEditorRemesasCliente.actVolcarDiscoUpdate(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 TfEditorRemesasCliente.AsignarVista;
begin
  ViewGrid := CreateView(TfrViewRemesasCliente) as IViewRemesasCliente;
end;

constructor TfEditorRemesasCliente.Create(AOwner: TComponent);
begin
  inherited;
  AsignarVista;
end;

end.

