unit uEditorRemesaProveedor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent,
  uBizRemesasProveedor, JvNavigationPane, ActnList,
  uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList,
  TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize,
  uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls,
  TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase,
  JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase,
  cxCustomData,
  uViewRemesasProveedor, uIEditorRemesaProveedor, uRemesasProveedorController, JvExComCtrls,
  JvStatusBar, dxLayoutLookAndFeels, uViewGridBase, uViewGrid,
  uViewRecibosRemesaProveedor, uViewTotales, uViewDetallesGenerico,
  uViewRemesaProveedor;

type
  TfEditorRemesaProveedor = class(TfEditorDBItem, IEditorRemesaProveedor)
    dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
    dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
    frViewTotales1: TfrViewTotales;
    actVolcarDisco: TAction;
    TBXSubmenuItem2: TTBXSubmenuItem;
    TBXItem7: TTBXItem;
    TBXItem33: TTBXItem;
    TBXSeparatorItem6: TTBXSeparatorItem;
    frViewRecibosRemesaProveedor1: TfrViewRecibosRemesaProveedor;
    frViewRemesaProveedor1: TfrViewRemesaProveedor;
    procedure FormShow(Sender: TObject);
    procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction);

    procedure actAnadirRecibosExecute(Sender: TObject);
    procedure actEliminarReciboExecute(Sender: TObject);
    procedure JvFormStorageRestorePlacement(Sender: TObject);
    procedure JvFormStorageSavePlacement(Sender: TObject);
    procedure frViewRecibosRemesaProveedor1cxGridViewDataControllerSummaryAfterSummary(
      ASender: TcxDataSummary);
    procedure actVolcarDiscoUpdate(Sender: TObject);
    procedure actVolcarDiscoExecute(Sender: TObject);
  private
    procedure OnRecibosChanged(Sender: TObject);
  protected
    FController : IRemesasProveedorController;
    FRemesaProveedor: IBizRemesaProveedor;
    FViewRemesaProveedor : IViewRemesaProveedor;

    function GetController : IRemesasProveedorController;
    procedure SetController (const Value : IRemesasProveedorController); virtual;
    function GetRemesaProveedor: IBizRemesaProveedor; virtual;
    procedure SetRemesaProveedor(const Value: IBizRemesaProveedor); virtual;
    function GetViewRemesaProveedor: IViewRemesaProveedor;
    procedure SetViewRemesaProveedor(const Value: IViewRemesaProveedor);
    property ViewRemesaProveedor: IViewRemesaProveedor read GetViewRemesaProveedor write SetViewRemesaProveedor;

    procedure GuardarInterno; override;
    procedure EliminarInterno; override;
    procedure PrevisualizarInterno; override;
    procedure ImprimirInterno; override;
    procedure CerrarInterno; override;

    procedure PonerTitulos(const ATitulo: string = ''); override;
    function GetModified: Boolean; override;

  public
    property RemesaProveedor: IBizRemesaProveedor read GetRemesaProveedor write SetRemesaProveedor;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

{$R *.dfm}

uses
  uDataTableUtils, cxControls, uDataModuleUsuarios, uDialogUtils, uCustomEditor,
  uDataModuleRemesasProveedor, uDataModuleBase, uBizFamilias, uFamiliasController;
//  uBancaElectronicaController;

{
******************************* TfEditorRemesaProveedor *******************************
}
function TfEditorRemesaProveedor.GetRemesaProveedor: IBizRemesaProveedor;
begin
  Result := FRemesaProveedor;
end;

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

function TfEditorRemesaProveedor.GetModified: Boolean;
var
  bCambiado : Boolean;
begin
  bCambiado := inherited GetModified;
  //Si no hay cambios miramos que no los halla en la lista de recibos
  if not bCambiado then
     bCambiado := frViewRecibosRemesaProveedor1.Modified;
  Result := bCambiado;
end;

function TfEditorRemesaProveedor.GetViewRemesaProveedor: IViewRemesaProveedor;
begin
  Result := FViewRemesaProveedor;
end;

procedure TfEditorRemesaProveedor.GuardarInterno;
var
  bEsNuevo : Boolean;
begin
  inherited;
  bEsNuevo := False;

  ShowHourglassCursor;
  frViewRecibosRemesaProveedor1.OnViewModified := Nil;
  //frViewDetallesFacturaProveedor1.SaveGridStatus; // Para guardar estado del grid
//  frViewDetallesFacturaProveedor1.BeginUpdate;  // Para que no se mueva el foco
  try
    bEsNuevo := FRemesaProveedor.EsNuevo;
    FController.Guardar(FRemesaProveedor);

  finally
//    frViewDetallesFacturaProveedor1.EndUpdate;
//    frViewDetallesFacturaProveedor1.RestoreGridStatus;
    HideHourglassCursor;
  end;

  if bEsNuevo then
    ShowInfoMessage('La remesa de pago se ha dado de alta con el código ' + FRemesaProveedor.REFERENCIA);
  Modified := False;
  frViewRecibosRemesaProveedor1.Modified := False;
  frViewRecibosRemesaProveedor1.OnViewModified := OnRecibosChanged;
end;

procedure TfEditorRemesaProveedor.ImprimirInterno;
begin
  inherited;
  FController.Print(FRemesaProveedor);
end;

procedure TfEditorRemesaProveedor.JvFormStorageRestorePlacement(Sender: TObject);
begin
  inherited;
  //frViewRecibosRemesaProveedor1.RestoreFromRegistry(JvAppRegistryStorage.Root);
end;

procedure TfEditorRemesaProveedor.JvFormStorageSavePlacement(Sender: TObject);
begin
  inherited;
  //frViewRecibosRemesaProveedor1.StoreToRegistry(JvAppRegistryStorage.Root);
end;

procedure TfEditorRemesaProveedor.OnRecibosChanged(Sender: TObject);
begin
  ActualizarEstadoEditor;
end;

procedure TfEditorRemesaProveedor.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  FTitulo := ATitulo;
  if (FTitulo = '') and Assigned(RemesaProveedor) then
  begin
    if RemesaProveedor.EsNuevo then
      FTitulo := 'Nueva remesa de pago'
    else
      FTitulo := 'Remesa de pago';
  end;

  inherited PonerTitulos(FTitulo);

  Self.Caption := FTitulo + ' (' + dmUsuarios.EmpresaActual.NOMBRE + ')';
end;

procedure TfEditorRemesaProveedor.PrevisualizarInterno;
begin
  inherited;
  FController.Preview(FRemesaProveedor);
end;

procedure TfEditorRemesaProveedor.SetRemesaProveedor(const Value: IBizRemesaProveedor);
begin
  FRemesaProveedor := Value;
  if Assigned(FRemesaProveedor) then
  begin
     dsDataTable.DataTable := FRemesaProveedor.DataTable;
     frViewRecibosRemesaProveedor1.RemesaProveedor := FRemesaProveedor;
     frViewRecibosRemesaProveedor1.OnViewModified := OnRecibosChanged;
  end
  else
  begin
     dsDataTable.DataTable := Nil;
     frViewRecibosRemesaProveedor1.RemesaProveedor := Nil;
     frViewRecibosRemesaProveedor1.OnViewModified := Nil;
  end;

  if Assigned(FViewRemesaProveedor) then
     FViewRemesaProveedor.RemesaProveedor := FRemesaProveedor;

  frViewTotales1.DADataSource.DataTable := dsDataTable.DataTable;
end;

procedure TfEditorRemesaProveedor.SetController(const Value: IRemesasProveedorController);
begin
  FController := Value;
  if Assigned(FController) then
  begin
    (ViewRemesaProveedor as IViewRemesaProveedor).Controller := (FController as IRemesasProveedorController);
    frViewRecibosRemesaProveedor1.Controller := (FController as IRemesasProveedorController);
  end;
end;

procedure TfEditorRemesaProveedor.SetViewRemesaProveedor(const Value: IViewRemesaProveedor);
begin
  FViewRemesaProveedor := Value;

  if Assigned(FViewRemesaProveedor) and Assigned(RemesaProveedor) then
  begin
    FViewRemesaProveedor.RemesaProveedor := RemesaProveedor;
    FViewRemesaProveedor.Controller := (FController as IRemesasProveedorController);
  end;
end;

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

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

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

  RemesaProveedor.DataTable.Active := True;

  //Falla si lo hacemos por dfm
  frViewRecibosRemesaProveedor1.cxGridView.OptionsSelection.MultiSelect := False;
end;

procedure TfEditorRemesaProveedor.frViewRecibosRemesaProveedor1cxGridViewDataControllerSummaryAfterSummary(ASender: TcxDataSummary);
Var
  AImporteTotal: Currency;
begin
  inherited;

  if VarIsNull(ASender.FooterSummaryValues[0]) then
    AImporteTotal := 0
  else
    AImporteTotal := ASender.FooterSummaryValues[0];

  if Assigned(RemesaProveedor) then
  begin
    if (RemesaProveedor.IMPORTE_TOTAL <> AImporteTotal) then
    begin
      if not RemesaProveedor.DataTable.Editing then
      begin
        RemesaProveedor.Edit;
        RemesaProveedor.IMPORTE_TOTAL := AImporteTotal;
        RemesaProveedor.Post;
      end;
    end;
  end;
end;

destructor TfEditorRemesaProveedor.Destroy;
begin
  // Utilizar mejor OnClose;
  inherited;
end;

procedure TfEditorRemesaProveedor.actAnadirRecibosExecute(Sender: TObject);
begin
  inherited;
//  HayCambios := FController.ElegirRecibosProveedor(RemesaProveedor) OR HayCambios;
end;

procedure TfEditorRemesaProveedor.actEliminarReciboExecute(Sender: TObject);
begin
  inherited;
//  FController.EliminarReciboProveedor(RemesaProveedor);
//  HayCambios := True;
end;

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

procedure TfEditorRemesaProveedor.actVolcarDiscoUpdate(Sender: TObject);
begin
//  (Sender as TAction).Enabled := HayDatos and (not FRemesaProveedor.EsNuevo);
end;

procedure TfEditorRemesaProveedor.CerrarInterno;
begin
  frViewRecibosRemesaProveedor1.OnViewModified := Nil;
  inherited;
end;

constructor TfEditorRemesaProveedor.Create(AOwner: TComponent);
begin
  inherited;
  pgPaginas.ActivePageIndex := 0;
  FViewRemesaProveedor := frViewRemesaProveedor1;
end;

procedure TfEditorRemesaProveedor.CustomEditorClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  dsDataTable.DataTable := NIL;
  FViewRemesaProveedor := NIL;
  FRemesaProveedor := NIL;
end;

procedure TfEditorRemesaProveedor.EliminarInterno;
begin
  if (Application.MessageBox('¿Desea borrar esta remesa de pago?', 'Atención', MB_YESNO) = IDYES) then
  begin
    inherited;
    if not FController.Eliminar(FRemesaProveedor) then
       actRefrescar.Execute;
  end;
end;

end.

