{
===============================================================================
  Copyright (©) 2007. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión:
  Versión actual: 1.0.0
  Fecha versión actual:
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit uBancaElectronicaController;

interface

uses
  Classes, SysUtils, uDADataTable, uControllerBase;

type
  IBancaElectronicaController = interface(IControllerBase)
  ['{9E37DF46-D02C-47C4-BCBE-414FB97A7751}']
    procedure GenerarFicheroNorma19 (const IDRemesa : Integer);
  end;

  TBancaElectronicaController = class(TControllerBase, IBancaElectronicaController)
  private
    function DarParametrosParaExportar(var Entidad : Integer; var Oficina : Integer;
              var AFechaCargo : TDateTime; var AFileName : String): Boolean;
  public
    procedure GenerarFicheroNorma19 (const IDRemesa : Integer);
  end;

implementation

uses
  cxControls, Controls, Windows,
  CVBNorma1958CSB,
  uEditorRegistryUtils, 

  uBizEmpresas, uEmpresasController,
  uBizContactos, uClientesController,  
  uBizRemesasCliente, uRemesasClienteController, schRemesasClienteClient_Intf,
  schRecibosClienteClient_Intf, Dialogs,
  uIEditorExportacionNorma19;


{ TBancaElectronicaController }

procedure TBancaElectronicaController.GenerarFicheroNorma19(
  const IDRemesa: Integer);
var
  ARemesasController : IRemesasClienteController;
  AEmpresasController : IEmpresasController;
  AClientesController : IClientesController;

  ARemesa : IBizRemesaCliente;
  AEmpresa : IBizEmpresa;
  ACliente : IBizCliente;
    
  ANorma19 : TCVBNorma1958CSB;
  I: integer;
  AEntidad : Integer;
  AOficina : Integer;
begin
  ARemesasController := TRemesasClienteController.Create;
  AEmpresasController := TEmpresasController.Create;
  AClientesController := TClientesController.Create;

  ANorma19 := TCVBNorma1958CSB.Create(NIL);
  try
    ARemesa := ARemesasController.Buscar(IDRemesa);
    ARemesa.DataTable.Active := True;
    ARemesasController.RecuperarRecibos(ARemesa);

    if ARemesa.ID <> IDRemesa then
      raise Exception.CreateFmt('No existe la remesa con ID %d', [IDRemesa]);

    AEmpresa := AEmpresasController.Buscar(ARemesa.ID_EMPRESA);
    AEmpresa.DataTable.Active := True;

    if AEmpresa.ID <> ARemesa.ID_EMPRESA then
      raise Exception.CreateFmt('No existe la empresa con ID %d', [ARemesa.ID_EMPRESA]);

    ANorma19.FNomFic := 'REM' + ARemesa.REFERENCIA + '.C19';
    ANorma19.FecAbono := ARemesa.FECHA_REMESA;

    if not DarParametrosParaExportar(AEntidad, AOficina, ANorma19.FecAbono, ANorma19.FNomFic) then
      Exit;

    ANorma19.EntRecepPres := IntToStr(AEntidad);
    ANorma19.OfiRecepPres := IntToStr(AOficina);

    with ANorma19 do
    begin
      _NORMA_ := 19;
      Procedimiento := prPrimero; // <= ????????????????????????????????????
      Euros := True;
      Depura := True;

      Abrir;

      FecCargo := Now; // <= Fecha de generación del fichero
      //FecVcto := ARemesa.FECHA_REMESA; // <= sólo para norma 58

      // PRESENTADOR
      Presentador := AEmpresa.NIF_CIF;
      SufijoPres := ARemesa.SUFIJO_N19;
      NomCliPres := AEmpresa.NOMBRE;

      CompCabecera;

      // el que cobra
      Ordenante := AEmpresa.NIF_CIF;
      SufijoOrd:= ARemesa.SUFIJO_N19;
      NomCliOrd:= AEmpresa.NOMBRE;
      EntOrde:= ARemesa.ENTIDAD;
      OfiOrde:= ARemesa.SUCURSAL;
      DcOrde:= ARemesa.DC;
      CcOrde:= ARemesa.CUENTA;
      LocalidadOrd:= '';
      CodLocalOrd:= '';
      //FecOrigFormCred:=  <= Sólo para norma 58

      CompOrdenante;

      ARemesa.Recibos.DataTable.First;
      for I := 0 to (ARemesa.Recibos.DataTable.RecordCount - 1) do
      begin
        ACliente := (AClientesController.Buscar(ARemesa.Recibos.ID_CLIENTE) as IBizCliente);
        ACliente.DataTable.Active := True;
        
        // el que paga
        Referencia := ACliente.REFERENCIA;
        NomTitDom := ARemesa.Recibos.NOMBRE_CLIENTE;
//        EntTitDom := ARemesa.Recibos.ENTIDAD_CLIENTE;
//        OfiTitDom := ARemesa.Recibos.SUCURSAL_CLIENTE;
//        DcTitDom := ARemesa.Recibos.DC_CLIENTE;
//        CcTitDom := ARemesa.Recibos.CUENTA_CLIENTE;
        NomTitCta := ARemesa.Recibos.NOMBRE_CLIENTE;
        DomTitCta := '';
        PlzTitCta := '';
        CPtTitCta := '';
        CampConc1 := 'Recibo ' + ARemesa.Recibos.REFERENCIA;
        fImporteEu := ARemesa.Recibos.IMPORTE_TOTAL;

        CompRegistro;

        ARemesa.Recibos.DataTable.Next;
      end;

      FinOrdenan;
      Cerrar;
    end;
  finally
    ARemesasController := NIL;
    AEmpresasController := NIL;
    AClientesController := NIL;

    AEmpresa := NIL;
    
    FreeAndNil(ANorma19);
  end;
end;

function TBancaElectronicaController.DarParametrosParaExportar (
  var Entidad : Integer; var Oficina : Integer; var AFechaCargo : TDateTime;
  var AFileName : String): Boolean;
var
  AEditor : IEditorExportacionNorma19;
begin
  Result := False;
  AEditor := NIL;	

  CreateEditor('EditorExportacionNorma19', IEditorExportacionNorma19, AEditor);
  if Assigned(AEditor) then
    try
       AEditor.CodigoEntidad := Entidad;
       AEditor.CodigoAgencia := Oficina;
       AEditor.FechaCargo := AFechaCargo;
       AEditor.Fichero := AFileName;

       if (AEditor.ShowModal = mrOk) then
       begin
         AEditor.Entidad := CodigoEntidad;
         AEditor.Oficina := CodigoAgencia;
         AFechaCargo := AEditor.FechaCargo;
         AFileName := AEditor.Fichero;
         Result := True;
       end;
    finally
      AEditor.Release;
    end;
end;


end.
