public List <string> ObtenerPlantillaObligaciones(dynamic parametro, out string formulario, out int codigoRespuesta) { List <string> plantillas = new List <string>(); string[] xmlPlantillas = null; string xmlDeclaracionTemporal = string.Empty; string xmlDeclaracionVigente = string.Empty; codigoRespuesta = (int)CodigoRespuestaGeneral.OK; string forma = "new"; string mensaje = string.Empty; try { string rfc = parametro.Rfc; long idDeclaracion = parametro.NoDeclaracion ?? 0; string xmlTemporal = string.Empty; var obligaciones = new List <string>(); if (idDeclaracion > 0) { AdministradorDeclaracionClasificador administrador = new AdministradorDeclaracionClasificador(); DeclaracionClasificador declaraClasificador = administrador.ObtenerDeclaracionPorDypLlave(parametro.Rfc.ToString(), idDeclaracion.ToString()); if (declaraClasificador != null) { parametro.DeclaracionClasificador = declaraClasificador.Consecutivo; } else { parametro.DeclaracionClasificador = 1; Exception ex = new Exception($"No encontro declaracion clasificardor: {parametro.Rfc} - {idDeclaracion}"); RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name); } } #region Obtenemos la informacion del contribuyente, ya sea por Precarga, Selector, Temporal var plantillaData = new Descarga.Entities.PrecargaContribuyente() { rfc = parametro.Rfc, ejercicio = parametro.ejercicio != null?Convert.ToString(parametro.ejercicio) : null, periodo = parametro.periodo != null ? parametro.periodo : null, tipoContribuyente = parametro.TipoContribuyente, metodoAutenticacion = parametro.MetodoAutenticacion, declaracionID = idDeclaracion, reformaID = parametro.NoReforma != null ? parametro.NoReforma : null, alscEmpleado = parametro.idAlscEmpleado, rfcEmpleado = parametro.rfcEmpleado, presentaDeclaracion = parametro.presentaDeclaracion ?? false, OpcionCalculoISR = parametro.OpcionCalculoISR ?? "-1", consecutivo = parametro.DeclaracionClasificador.ToString(), MuestraCalculoISR = parametro.muestraOCISR.ToString() }; using (var prec = new Descarga.PreCarga()) { prec.DeclaracionDatos += (s, m, u) => { try { return(Consultas.Consulta.InfoDeclaracion(s, m, u)); } catch (Exception ex) { RegistraEvento.Instancia.EscribeEvento(ex); RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name); return(null); } }; prec.ejecutaAccion += (p, a) => { switch (a) { case Descarga.PreCarga.accion.Totales: if (obtieneTotales != null) { return(obtieneTotales(p[0], p[1], p[2], p[3])); } break; case Descarga.PreCarga.accion.Plantillas: for (int i = 4; i <= p.Length - 1; i++) { obligaciones.Add(p[i] /*.Replace("0145", "ISR").Replace("0309", "IVA")*/); } xmlPlantillas = ServicioObtienePlantillas(p[1], p[2], p[3] ?? parametro.periodicidad.ToString(), obligaciones.ToArray()); break; case Descarga.PreCarga.accion.Complementaria: Dictionary <string, string> listaConceptos = new Dictionary <string, string>(); foreach (string c in p[3].Split('|').Where(d => !string.IsNullOrEmpty(d))) { listaConceptos.Add(c.Split(',')[0], c.Split(',')[1]); } xmlDeclaracionVigente = RecuperarXmlConceptos(listaConceptos, p[0]); break; case Descarga.PreCarga.accion.Temporal: if (RecuperaEntidadDeclaracionTemporal(p[0], p[3]) != null) { xmlTemporal = RecuperarXmlDeclaracionTemporal(p[0], p[3]); } if (!string.IsNullOrEmpty(xmlTemporal)) { forma = "tmp"; } break; } return(null); }; try { mensaje = prec.ObtenerDatosContribuyente(plantillaData, out codigoRespuesta); } catch (Exception ex) { RegistraEvento.Instancia.EscribeEvento(ex); RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name); } } #endregion formulario = forma; plantillas.Add(mensaje); plantillas.Add(xmlTemporal); plantillas.Add(xmlDeclaracionVigente); if (xmlPlantillas != null) { plantillas.AddRange(xmlPlantillas); } else { plantillas.AddRange(new string[6]); } plantillas.Add(obligaciones.Count(o => o == TipoObligacion.ISR.ToDescription()).ToString().ToLower()); } catch (Exception ex) { RegistraEvento.Instancia.EscribeEvento(ex); RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name); throw ex; } return(plantillas); }