/// <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); }
/// <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)); }