/// <summary> /// Devuelve el campo que se corresponde con la descripción facilitada /// o null si no lo encuentra. /// </summary> /// <param name="descripcion">Descipción del campo.</param> /// <returns>Devuelve el campo que se corresponde con la descripción facilitada /// o null si no lo encuentra.</returns> public RegistroCampo this[string descripcion] { get { throw new NotImplementedException(Errores.MostrarMensaje("Conversor.000", "indexador Conversor[string descripcion]")); } }
/// <summary> /// Recupera la url donde se encuentra el servicio de la aeat requerido /// por la petición y su modelo. /// </summary> /// <param name="test">True para pruebas y false para produccíón.</param> /// <returns>Url del servicio de la aeat correspondiente al modelo de la petición.</returns> protected virtual string GeneraEnlace(bool test) { var enlace = test ? Modelo.Enlaces.UrlPruebas : Modelo.Enlaces.UrlProduccion; if (enlace == null) { throw new Exception(Errores.MostrarMensaje("Peticion.001", $"{Modelo.GetType().Name}")); } return(enlace); }
/// <summary> /// Inicializa el certificado a utilizar para transmitir la /// petición a la aeat. /// </summary> /// <param name="certRef">Ruta de certificado para la presentación, en caso de que se utilice uno externo.</param> /// <param name="certClave">Contraseña del certificado.</param> private void InicializaCertificado(string certRef, string certClave) { _Certificado = Certificado.Cargar(certRef, certClave); _CertificadoTitular = Certificado.Titular(_Certificado); if (_CertificadoTitular == null) { throw new Exception(Errores.MostrarMensaje("Peticion.000", $"{_Certificado.Subject}")); } }
/// <summary> /// Devuelve el certificado establecido en la configuración. /// </summary> /// <param name="certRef">>Referencia para la carga del certificado, /// según el modo: /// <para>AlmacenWindows: Huella del certificado.</para> /// <para>Archivo: Ruta al cerfificado.</para> /// </param> /// <param name="certClave">Contraseña del certificado.</param> /// <returns>Devuelve el certificado de la configuración.</returns> public static X509Certificate2 Cargar(string certRef = null, string certClave = null) { bool isWindows = (Environment.OSVersion.Platform == PlatformID.Win32NT) || (Environment.OSVersion.Platform == PlatformID.Win32S) || (Environment.OSVersion.Platform == PlatformID.Win32Windows) || (Environment.OSVersion.Platform == PlatformID.WinCE); if (Parametros.Actuales?.Certificados?.CertificadoModo == CertificadosModos.AlmacenWindows && !isWindows) { throw new PlatformNotSupportedException( Errores.MostrarMensaje("Certificado.000", $"'{Parametros.Actuales?.Certificados?.CertificadoModo}'", $"{Environment.OSVersion.Platform}") ); } X509Certificate2 certificado = null; if (Parametros.Actuales?.Certificados?.CertificadoModo == CertificadosModos.AlmacenWindows) { certificado = CargarPorHuella(certRef, certClave); if (certificado == null) { throw new Exception( Errores.MostrarMensaje("Certificado.001", $"'{Parametros.Actuales?.Certificados?.HuellaDigital}'") ); } } if (Parametros.Actuales?.Certificados?.CertificadoModo == CertificadosModos.Archivo) { certificado = CargarPorArchivo(certRef, certClave); if (certificado == null) { throw new Exception( Errores.MostrarMensaje("Certificado.002", $"'{Parametros.Actuales?.Certificados?.RutaArchivo}'") ); } } if (certificado.NotAfter < DateTime.Now) { throw new ArgumentNullException( Errores.MostrarMensaje("Certificado.003", $"{certificado.NotAfter}") ); } return(certificado); }
/// <summary> /// Recupera la representación del /// segmento de fichero preparada para incorporarse /// al mismo. /// </summary> /// <returns> Representación del /// segmento de fichero preparada para incorporarse /// al mismo.</returns> public override string AFichero() { string resultado = $"{_RegistroCampo.Valor}"; int largoPendiente = _RegistroCampo.Longitud - resultado.Length; if (largoPendiente < 0) { throw new InvalidCastException( Errores.MostrarMensaje("ConversorTexto.000", $"'{resultado}'", $"{resultado.Length}", $"'{_RegistroCampo.Descripcion}'", $"{_RegistroCampo.Longitud}") ); } string relleno = null; if (largoPendiente > 0) { relleno = new string(' ', largoPendiente); } resultado = $"{resultado}{relleno}"; if (_RegistroCampo.ValorFichero != resultado) { _RegistroCampo.ValorFichero = resultado; } if (resultado.Length > _RegistroCampo.Longitud) { resultado = resultado.Substring(resultado.Length - _RegistroCampo.Longitud, _RegistroCampo.Longitud); } return(resultado); }
/// <summary> /// Recupera la representación del /// segmento de fichero preparada para incorporarse /// al mismo. /// </summary> /// <returns> Representación del /// segmento de fichero preparada para incorporarse /// al mismo.</returns> public override string AFichero() { string resultado = null; if (_RegistroCampo.Valor == null) { resultado = new string('0', _RegistroCampo.Longitud); } else { decimal numero = Convert.ToDecimal(_RegistroCampo.Valor); string cadenaFormato = $"#,##0" + $"{((_RegistroCampo.Decimales == 0) ? "" : ".")}" + $"{new string('0', _RegistroCampo.Decimales)}"; resultado = numero.ToString(cadenaFormato); resultado = Regex.Replace(resultado, @"\D", ""); int largoPendiente = _RegistroCampo.Longitud - resultado.Length; string relleno = null; if (_RegistroCampo.Negativo && numero < 0) { largoPendiente = largoPendiente - 1; } if (largoPendiente > 0) { relleno = new string('0', largoPendiente); } if (_RegistroCampo.Negativo && numero < 0) { if (largoPendiente == -1) { throw new Exception(Errores.MostrarMensaje("ConversorNumero.000")); } else { relleno = $"N{relleno}"; } } resultado = $"{relleno}{resultado}"; } if (resultado.Length > _RegistroCampo.Longitud) { resultado = resultado.Substring(resultado.Length - _RegistroCampo.Longitud, _RegistroCampo.Longitud); } if (_RegistroCampo.ValorFichero != resultado) { _RegistroCampo.ValorFichero = resultado; } return(resultado); }
/// <summary> /// Compone un empaquetable a partir de su forma /// en texto de fichero. /// </summary> /// <param name="texto">Segmento de texto.</param> /// <returns>Objeto IEmpaquetable representado /// por el segmento de texto</returns> public object DeFichero(string texto) { throw new NotImplementedException(Errores.MostrarMensaje("Conversor.000", "método DeFichero(string texto) de la clase Conversor")); }
/// <summary> /// Recupera la representación del /// segmento de fichero preparada para incorporarse /// al mismo. /// </summary> /// <returns> Representación del /// segmento de fichero preparada para incorporarse /// al mismo.</returns> public virtual string AFichero() { throw new NotImplementedException(Errores.MostrarMensaje("Conversor.000", "método AFichero(string texto) de la clase Conversor")); }