Beispiel #1
0
        /// <summary>
        /// Devuelve un serializador para una cadena de acceso
        /// utilizada como clave en el diccionario de serializadores.
        /// La cadena de acceso consiste en la concatenación de los
        /// indentificadores de impuestos.
        /// </summary>
        /// <param name="documento">Documento a serializar.</param>
        /// <returns>Serializador para el documento.</returns>
        private static ISerializador GetSerializador(Documento.Documento documento)
        {
            if (documento.DocumentoImpuestos == null)
            {
                throw new Exception($"El documento no tiene impuestos calculados.");
            }

            ISerializador serializador = null;
            string        keys         = "";

            foreach (var iva in documento.DocumentoImpuestos)
            {
                var key = $"{iva.IdentificadorImpuestos}.{iva.IdentificadorImpuestosRecargo}";
                keys = $"\n{key}";

                if (_Serializadores.ContainsKey(key))
                {
                    var candidato = _Serializadores[key];

                    if (serializador != null)
                    {
                        if (!serializador.Equals(candidato))
                        {
                            throw new InvalidOperationException($"En el documento conviven" +
                                                                $" indentificadores de impuestos que determinan serializadores" +
                                                                $" diferentes. {candidato.GetType().FullName}" +
                                                                $" and {serializador.GetType().FullName}");
                        }
                    }
                    else
                    {
                        serializador = _Serializadores[key];
                    }
                }
            }

            if (serializador == null)
            {
                throw new Exception($"No se encontró serializador para las claves:{keys}");
            }

            return(serializador);
        }
Beispiel #2
0
        /// <summary>
        /// Devuelve una instancia de TicketBai
        /// a partir de un documento.
        /// </summary>
        /// <param name="documento">Factura o justificante del cual se
        /// va a generar el TicketBai.</param>
        /// <returns>TicketBai que representa la factura o jusficante facilitados
        /// como argumento.</returns>
        public static TicketBai.TicketBai GetTicketBai(Documento.Documento documento)
        {
            ISerializador serializador = GetSerializador(documento);

            return(serializador.GetTicketBai(documento));
        }