unit uEditorRemesasProveedor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorBase, ToolWin, ComCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewRemesasProveedor, uBizRemesasProveedor, 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, uIEditorRemesasProveedor, uEditorGridBase,
  JvComponentBase, uViewGridBase, uRemesasProveedorController, JvExComCtrls,
  JvStatusBar, JSDialog, uDAInterfaces;

type
  TfEditorRemesasProveedor = class(TfEditorGridBase, IEditorRemesasProveedor)
    actVolcarDisco: TAction;
    TBXSeparatorItem17: TTBXSeparatorItem;
    N4: TMenuItem;
    Volcaradisco1: TMenuItem;
    TBXSubmenuItem2: TTBXSubmenuItem;
    TBXItem38: TTBXItem;
    JsListaRemesasNoEliminadas: TJSDialog;
    JsPrevisualizarDialog: TJSDialog;
    JsImprimirDialog: TJSDialog;
    procedure FormShow(Sender: TObject);
    procedure actVolcarDiscoExecute(Sender: TObject);
    procedure actVolcarDiscoUpdate(Sender: TObject);
  private
    FRemesasProveedor: IBizRemesaProveedor;
    FController : IRemesasProveedorController;
  protected
    function GetRemesasProveedor: IBizRemesaProveedor;
    procedure SetRemesasProveedor(const Value: IBizRemesaProveedor);
    function GetController : IRemesasProveedorController; virtual;
    procedure SetController (const Value : IRemesasProveedorController); 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 RemesasProveedor: IBizRemesaProveedor read GetRemesasProveedor write SetRemesasProveedor;
    property Controller : IRemesasProveedorController read GetController write SetController;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  uCustomEditor, uDataModuleRemesasProveedor, uDataModuleUsuarios,
  uGridUtils, uDBSelectionListUtils, uFactuGES_App,
  uEditorDBBase,  uBizFamilias, uFamiliasController,
//  uBancaElectronicaController,
  cxGrid, cxGridCustomTableView; //, uListaRemesasProveedor;

{$R *.dfm}

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

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

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

  RemesasProveedor.DataTable.Active := True;
  ViewGrid.GotoFirst;
  //Para que coja el ancho automático
  actAnchoAuto.Execute;   
end;

function TfEditorRemesasProveedor.GetRemesasProveedor: IBizRemesaProveedor;
begin
  Result := FRemesasProveedor;
end;

procedure TfEditorRemesasProveedor.ImprimirInterno;
var
  Respuesta : Integer;
  ARemesasProveedor: IBizRemesaProveedor;
  AllItems: Boolean;
begin
  ARemesasProveedor := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  //Si esta agrupado solo podré imprimir la lista de elementos visibles
  if not ViewGrid.esSeleccionCeldaDatos then
     inherited
  else
  begin
    Respuesta := JsImprimirDialog.Execute;
    if Respuesta <> IDCANCEL then
    begin
      case JsImprimirDialog.CustomButtonResult of
        200   : begin   // Lista de elementos visibles
                  inherited;
                end;
        100   : begin   // Elemento Seleccionado
                  if AllItems then
                  begin
                    SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasProveedor as ISeleccionable).SelectedRecords);
                    ARemesasProveedor := (Controller as IRemesasProveedorController).ExtraerSeleccionados(RemesasProveedor) as IBizRemesaProveedor;
                  end
                  else
                    ARemesasProveedor := RemesasProveedor;

                  if Assigned(ARemesasProveedor) then
                     FController.Print(ARemesasProveedor, AllItems);
                end;
      end;
    end;
  end;
end;

function TfEditorRemesasProveedor.GetController: IRemesasProveedorController;
begin
  Result := FController;
end;

procedure TfEditorRemesasProveedor.ModificarInterno;
begin
  inherited;
  FController.Ver(RemesasProveedor);
end;

procedure TfEditorRemesasProveedor.NuevoInterno;
begin
  inherited;
  FController.Anadir(RemesasProveedor);
  FController.Ver(RemesasProveedor);
end;

procedure TfEditorRemesasProveedor.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := 'Lista de remesas de pago - ' + AppFactuGES.EmpresaActiva.NOMBRE;
  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorRemesasProveedor.PrevisualizarInterno;
var
  Respuesta : Integer;
  ARemesasProveedor: IBizRemesaProveedor;
  AllItems: Boolean;
begin
  ARemesasProveedor := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  //Si esta agrupado solo podré imprimir la lista de elementos visibles
  if not ViewGrid.esSeleccionCeldaDatos then
     inherited
  else
  begin
    Respuesta := JsPrevisualizarDialog.Execute;
    if Respuesta <> IDCANCEL then
    begin
      case JsPrevisualizarDialog.CustomButtonResult of
        200   : begin   // Lista de elementos visibles
                  inherited;
                end;
        100   : begin   // Elemento Seleccionado
                  if AllItems then
                  begin
                    SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasProveedor as ISeleccionable).SelectedRecords);
                    ARemesasProveedor := (Controller as IRemesasProveedorController).ExtraerSeleccionados(RemesasProveedor) as IBizRemesaProveedor;
                  end
                  else
                    ARemesasProveedor := RemesasProveedor;

                  if Assigned(ARemesasProveedor) then
                     FController.Preview(ARemesasProveedor, AllItems);
                end;
      end;
    end;
  end;
end;

procedure TfEditorRemesasProveedor.SetRemesasProveedor(const Value: IBizRemesaProveedor);
begin
  FRemesasProveedor := Value;
  dsDataTable.DataTable := FRemesasProveedor.DataTable;
  if Assigned(ViewGrid) then
    (ViewGrid as IViewRemesasProveedor).RemesasProveedor := RemesasProveedor;
end;

procedure TfEditorRemesasProveedor.SetController(const Value: IRemesasProveedorController);
begin
  FController := Value;
end;

destructor TfEditorRemesasProveedor.Destroy;
begin
  FRemesasProveedor := NIL;
  FController := NIl;
  inherited;
end;

procedure TfEditorRemesasProveedor.EliminarInterno;
var
  ACadena : String;
  ARemesas: IBizRemesaProveedor;
  AllItems: Boolean;
begin
  ARemesas := Nil;
  AllItems := False;

  if MultiSelect and Assigned(ViewGrid) then
     AllItems :=  (ViewGrid.NumSeleccionados > 1);

  if AllItems then
  begin
    if (Application.MessageBox('¿Desea borrar las remesas de proveedor seleccionadas?', 'Atención', MB_YESNO) = IDYES) then
    begin
      SeleccionarFilasDesdeGrid(ViewGrid._FocusedView, (RemesasProveedor as ISeleccionable).SelectedRecords);
      ARemesas := (Controller as IRemesasProveedorController).ExtraerSeleccionados(RemesasProveedor) as IBizRemesaProveedor;
    end
  end
  else begin
     if (Application.MessageBox('¿Desea borrar esta remesa de pago?', 'Atención', MB_YESNO) = IDYES) then
        ARemesas := RemesasProveedor;
  end;

  if Assigned(ARemesas) then
  begin
    FController.Eliminar(ARemesas, AllItems);
    if AllItems then
    begin
      if (ARemesas.DataTable.RecordCount > 0) then
      begin
        with  ARemesas.DataTable do
        begin
          First;
          while not EOF do
          begin
            JsListaRemesasNoEliminadas.Content.Add('Ref. remesa: ' + ARemesas.REFERENCIA + '  ' + ARemesas.NOMBRE);
            Next;
          end;
        end;
        JsListaRemesasNoEliminadas.Execute;
      end;
    end;
  end;

  actRefrescar.Execute;
  ViewGrid.GotoFirst;
end;

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

procedure TfEditorRemesasProveedor.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 TfEditorRemesasProveedor.AsignarVista;
begin
  ViewGrid := CreateView(TfrViewRemesasProveedor) as IViewRemesasProveedor;
end;

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

end.

  