/// <summary>
        /// Almacena una declaración temporal en el Blob
        /// </summary>
        /// <param name="declaracionBase64">Archivo en base 64 de la declaración</param>
        /// <param name="rfc">Rfc del contribuyente</param>
        /// <param name="regimen">Regimen a presentar</param>
        /// <param name="ejercicio">Identificador del ejercicio</param>
        /// <param name="periodo">Identificador del periodo</param>
        /// <param name="periododescripcion">Descripción del periodo</param>
        /// <param name="tipoDeclaracion">Tipo de declaración presentada</param>
        /// <param name="tipoDeclaracionDescripcion">Descripción de la declaración</param>
        /// <param name="tipoComplementaria">Tipo de complemetaria</param>
        /// <param name="tipoComplementariaDescripcion">Decripción del tipo de complementaria</param>
        /// <param name="tipoPersona">Tipo de persona F o M</param>
        /// <param name="subregimen">Identificadores de subregimen separados con "," </param>
        /// <param name="areageografica">Identificador del area geografica</param>
        /// <param name="sinCalculo">Bandera que indica si se implementara calculo automatico</param>
        /// <returns>Uri del Blob</returns>
        public string AlmacenarDeclaracionTemporal(string declaracionBase64, string rfcContribuyente, string idDeclaracion, int ejercicio,
                                                   string periodo, string periodoDescripcion, string periodicidad, string periodicidadDescripcion,
                                                   string tipoDeclaracion, string tipoDeclaracionDescripcion, string tipoComplementaria, string tipoComplementariaDescripcion, string NoReforma,
                                                   bool contieneErrores = false)
        {
            string uriBlob = string.Empty;

            try
            {
                RegistroEvento.Informacion(String.Format("Inicia AlmacenarDeclaracionTemporal con los sigs datos, rfc {0}, idDeclaracion {1}, ejercicio {2}, tipo decla {3}",
                                                         rfcContribuyente, idDeclaracion, ejercicio, tipoDeclaracion), CodigoEvento.InformacionNegocio, String.Empty, "Declaracion");

                string declaracion = Utileria.Instancia.DeCodificarBase64(declaracionBase64);
                using (var administrador = new AdministradorDeclaracion())
                {
                    uriBlob = administrador.AlmacenarDeclaracionTemporal(declaracion, rfcContribuyente, idDeclaracion, ejercicio,
                                                                         periodo, periodoDescripcion, periodicidad, periodicidadDescripcion,
                                                                         tipoDeclaracion, tipoDeclaracionDescripcion, tipoComplementaria, tipoComplementariaDescripcion, NoReforma, contieneErrores);
                }

                RegistroEvento.Informacion(String.Format("Termino sin Error AlmacenarDeclaracionTemporal con los sigs datos, rfc {0}, idDeclaracion {1}, ejercicio {2}, tipo decla {3}",
                                                         rfcContribuyente, idDeclaracion, ejercicio, tipoDeclaracion), CodigoEvento.InformacionNegocio, String.Empty, "Declaracion");
            }
            catch (Exception ex)
            {
                RegistraEvento.Instancia.EscribeEvento(ex);
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
                throw ex;
            }
            return(uriBlob);
        }
Пример #2
0
        public bool AddRegistroSesion(string loggedUser, byte tipoAccion, byte tipoObjeto, int?idRegistro, string origen)
        {
            var keyUsuario = 1;

            try
            {
                if (loggedUser != "1")
                {
                    var usuarioLog = _db.Usuarios.FirstOrDefault(u => u.Id == loggedUser);
                    if (usuarioLog != null)
                    {
                        keyUsuario = usuarioLog.UsuarioKey;
                    }
                }

                var regSesion = new RegistroEvento()
                {
                    UsuarioKey   = keyUsuario,
                    EventoFecha  = DateTime.Now,
                    IdTipoAccion = tipoAccion,
                    IdTipoObjeto = tipoObjeto,
                    IdRegistro   = idRegistro,
                    Origen       = origen
                };

                _db.RegistroEventos.Add(regSesion);
                _db.SaveChanges();
            }
            catch (Exception)
            {
                return(false);
            }

            return(true);
        }
Пример #3
0
        public ActionResult PresentaDeclaracion(string id)
        {
            ActionResult vista = this.View(RecursoClasificador.ParcialErrorEnPermisos);

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                if (!string.IsNullOrEmpty(id) && this.PeticionDesdeLugarReferido() && contribuyente.Espms)
                {
                    string strMensaje = "";
                    id = new Sat.DyP.Herramientas.Encripcion.Encripcion().DesencriptaCadena(id, Sat.DyP.Herramientas.Encripcion.TipoEncripcion.Base64URL);
                    this.ViewBag.idDeclaracion = id;
                    this.ViewBag.RFC           = Utileria.Instancia.CodificarBase64(contribuyente.Rfc);

                    vista = this.View();

                    using (var declaracion = new Declaracion())
                    {
                        ViewBag.Devolucion = declaracion.obtieneMontoDevolucion(contribuyente.Rfc, id, out strMensaje);
                    }
                }
            }
            catch (Exception ex)
            {
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion, null, null, origen: RecursoClasificador.ClasificadorOrigen);
            }

            return(vista);
        }
        public string RecibeDeclaracionFirmada(DyP.Herramientas.Entidad.Declaracion.ReciboDeclaracionFirmada rdf, out string mensajeRespuesta)
        {
            string uriBlob = string.Empty;

            mensajeRespuesta = string.Empty;
            try
            {
                DeclaracionTemporal temporal = this.RecuperaEntidadDeclaracionTemporal(rdf.rfc, rdf.idDeclaracion);
                if (temporal != null)
                {
                    string declaracion    = RecuperarXmlDeclaracionTemporal(rdf.rfc, rdf.idDeclaracion, false);
                    string xmlDeclaracion = agregaValoresDeclaracion(declaracion, true, rdf.numeroCertificado, "", rdf.firma, rdf.folioFirmado);

                    uriBlob = preparaDeclaracionProvisional(xmlDeclaracion, rdf.rfc, rdf.idDeclaracion, temporal, out mensajeRespuesta);
                }
                else
                {
                    mensajeRespuesta = "No existe la declaracion temporal";
                }
            }
            catch (Exception ex)
            {
                RegistraEvento.Instancia.EscribeEvento(ex);
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
                throw ex;
            }
            return(uriBlob);
        }
 public byte[] RecuperaPDF(string uriBlob)
 {
     byte[] archivoDeBytes = null;
     try
     {
         if (!string.IsNullOrEmpty(uriBlob))
         {
             using (var administradorConfiguracion = new AdministradorConfiguracion())
             {
                 Stream stream = administradorConfiguracion.RecuperarArchivoBlob(uriBlob);
                 if (stream != null)
                 {
                     stream.Seek(0, SeekOrigin.Begin);
                     // El stream ya contiene el pdf
                     using (MemoryStream memStream = new MemoryStream())
                     {
                         stream.CopyTo(memStream);
                         archivoDeBytes = memStream.ToArray();
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         RegistraEvento.Instancia.EscribeEvento(ex);
         RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
         throw ex;
     }
     return(archivoDeBytes);
 }
        public string AlmacenarDeclaracionProvisional(DeclaracionProvisional pro, string xmlDeclaracion, string xmlSatMessage, string pdfBase64, string htmlBase64)
        {
            string uriBlob = string.Empty;

            try
            {
                RegistroEvento.Informacion(String.Format("Inicia AlmacenarDeclaracionProvisional con los sigs datos, rfc {0}, idDeclaracion {1}, ejercicio {2}, tipo decla {3}",
                                                         pro.rfc, pro.idDeclaracion, pro.ejercicio, pro.tipoDeclaracion), CodigoEvento.InformacionNegocio, String.Empty, "Declaracion");


                using (var administrador = new AdministradorDeclaracion())
                {
                    uriBlob = administrador.RecibeDeclaracionDyp(pro, xmlDeclaracion, xmlSatMessage, pdfBase64, htmlBase64);
                }

                RegistroEvento.Informacion(String.Format("Termino sin Error AlmacenarDeclaracionProvisional con los sigs datos, rfc {0}, idDeclaracion {1}, ejercicio {2}, tipo decla {3}",
                                                         pro.rfc, pro.idDeclaracion, pro.ejercicio, pro.tipoDeclaracion), CodigoEvento.InformacionNegocio, String.Empty, "Declaracion");
            }
            catch (Exception ex)
            {
                RegistraEvento.Instancia.EscribeEvento(ex);
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
                throw ex;
            }
            return(uriBlob);
        }
Пример #7
0
        public ActionResult RecibeDeclaracion(string data)
        {
            ResultadoViewModel resultado = null;

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                string idDeclaracion = data;
                string mensajeError;
                string uriArchivoAcuse;


                using (Declaracion negocioDeclaracion = new Declaracion())
                {
                    uriArchivoAcuse = negocioDeclaracion.RecibeDeclaracion(contribuyente.Rfc, idDeclaracion, out mensajeError);
                }

                if (string.IsNullOrEmpty(mensajeError))
                {
                    resultado = new ResultadoViewModel()
                    {
                        EsValido = true,
                        Archivo  = uriArchivoAcuse,
                    };
                }
                else
                {
                    resultado = new ResultadoViewModel()
                    {
                        EsValido = false, Mensaje = mensajeError
                    };
                }
            }
            catch (Exception ex)
            {
                resultado = new ResultadoViewModel()
                {
                    EsValido = false,
                    Mensaje  =
                        "Se generó un error al recibir la declaración. Inténtelo nuevamente."
                };

                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "DeclaracionController");
            }

            var jsonResult = this.Json(resultado, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;
            return(jsonResult);
        }
        /// <summary>
        /// Agregamos valores fijos a la declaración
        /// </summary>
        /// <param name="declaracion">Declaración</param>
        /// <param name="conFirma">Variable si la declaración viene firmada</param>
        /// <param name="numeroCertificado">Numero de certificado</param>
        /// <param name="certificado">Certificado</param>
        /// <param name="firma">Firma</param>
        /// <returns>Declaración con los valores agregados</returns>
        private string agregaValoresDeclaracion(string declaracion, bool conFirma, string numeroCertificado = "", string certificado = "", string firma = "", string folioFirmado = "")
        {
            XDocument doc = XDocument.Parse(declaracion);

            string rfcTermina, alscTermina;

            rfcTermina = alscTermina = string.Empty;
            try
            {
                XElement entidad = doc.XPathSelectElement("//*[local-name()='modeloDatos']/*[local-name()='entidad' and @tipo='SAT_DATOS_GENERALES']");

                if (conFirma)
                {
                    Dictionary <string, string> atributosFirma = new Dictionary <string, string>()
                    {
                        { "43", "true" },
                        { "44", numeroCertificado },
                        { "48", certificado },
                        { "49", firma }
                    };


                    foreach (var dic in atributosFirma)
                    {
                        var propiedad = (from p in entidad.Elements()
                                         where (string)p.Attribute("id") == dic.Key
                                         select p
                                         ).SingleOrDefault();

                        propiedad.Value = dic.Value ?? "";
                    }
                }
            }
            catch (Exception ex)
            {
                RegistraEvento.Instancia.EscribeEvento(ex);
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
                throw ex;
            }

            return(doc.ToString());
        }
        public string ObtenerCadenaOriginal(string rfc, string idDeclaracion)
        {
            string cadenaOriginalBase64 = string.Empty;

            try
            {
                // Obtenemos la declaración temporal
                string declaracion = RecuperarXmlDeclaracionTemporal(rfc, idDeclaracion, false);
                // Obtenemos la cadena original
                string cadenaOriginal = Sellado.Herramienta.CadenaOriginal.Instancia.ObtenCadenaOriginal(declaracion, TipoCadenaOriginal.FirmaCliente);
                cadenaOriginalBase64 = Utileria.Instancia.CodificarBase64(cadenaOriginal);
            }
            catch (Exception ex)
            {
                RegistraEvento.Instancia.EscribeEvento(ex);
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorInfraestrucura, GetType().Name);
                throw ex;
            }
            return(cadenaOriginalBase64);
        }
Пример #10
0
        public ActionResult VistaPrevia(string id)
        {
            ActionResult vista      = this.View(RecursoClasificador.ParcialErrorEnPermisos);
            var          encabezado = new EncabezadoDypClasificador();

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                if (!string.IsNullOrEmpty(id) && this.PeticionDesdeLugarReferido() && contribuyente.Espms)
                {
                    vista = RedirectToAction("Abrir", new { id });
                }
            }
            catch (Exception ex)
            {
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion, null, null, origen: RecursoClasificador.ClasificadorOrigen);
            }
            TempData[TEMP_DATA_ENCABEZADO] = encabezado;
            return(vista);
        }
Пример #11
0
        public ActionResult ObtenerCadenaOriginal(string data)
        {
            ResultadoViewModel resultado = null;

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                string cadenaOriginal = string.Empty;
                var    parametro      = System.Web.Helpers.Json.Decode(data);
                string rfc            = contribuyente.Rfc;
                string idDeclaracion  = parametro["idDeclaracion"];

                using (var declaracion = new Declaracion())
                {
                    cadenaOriginal = declaracion.ObtenerCadenaOriginal(rfc, idDeclaracion);
                }

                resultado = new ResultadoViewModel()
                {
                    EsValido      = true,
                    Archivo       = cadenaOriginal,
                    Contribuyente = contribuyente
                };
            }
            catch (Exception ex)
            {
                resultado = new ResultadoViewModel()
                {
                    EsValido = false,
                    Mensaje  = "Se generó un error al obtener la cadena original. Inténtelo nuevamente."
                };
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "DeclaracionController");
            }

            var jsonResult = this.Json(resultado, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;
            return(jsonResult);
        }
Пример #12
0
        public ActionResult AbrirEmpleado(string id)
        {
            ActionResult vista       = this.View(RecursoClasificador.ParcialErrorEnPermisos);
            var          declaracion = new DeclaracionClasificador();

            string limpio = string.Empty;

            try
            {
                if (ConfiguracionApp.AdaptadorCloud.RecuperarBoolean("IsPortalEmpleado"))
                {
                    var empleado     = this.ObtieneInfoEmpleado();
                    var encriptador  = new Sat.DyP.Herramientas.Encripcion.Encripcion();
                    var datosEntrada = encriptador.DesencriptaCadena(id, Sat.DyP.Herramientas.Encripcion.TipoEncripcion.Base64URL);

                    if (!string.IsNullOrEmpty(datosEntrada))
                    {
                        var configs          = datosEntrada.Split(',').Where(x => x.Contains("re:")).FirstOrDefault();
                        var rfcContribuyente = datosEntrada.Split(',').Where(x => x.Contains("r:")).FirstOrDefault();
                        var rfcEmpleado      = string.Empty;
                        if (!string.IsNullOrEmpty(configs))
                        {
                            rfcEmpleado      = configs.Replace("re:", string.Empty);
                            rfcContribuyente = !string.IsNullOrEmpty(rfcContribuyente) ? rfcContribuyente.Replace("r:", string.Empty) : rfcEmpleado;
                            // Llamada desde empleado
                            if (rfcEmpleado == empleado.Rfc)
                            {
                                bool contribuyenteValido = this.ObtieneInfoContribuyenteEmpleado(rfcContribuyente);
                                if (contribuyenteValido)
                                {
                                    ContribuyenteInfo contribuyente = MemberCache.Instancia.UsuarioActual;
                                    if (!string.IsNullOrEmpty(id) && contribuyente.Espms)
                                    {
                                        declaracion = DeclaracionClasificadorComplementos.ObtenerDeclaracionDedeUrl(id);
                                        var declaracionTemporal = declaracion.ActualizarDeclaracionPorAbrirDeclaracion();

                                        if (contribuyente.Rfc == declaracion.Rfc)
                                        {
                                            var idencriptado = declaracionTemporal.CodigoDeterminacionEncirptado(string.Empty);
                                            vista = Redirect(string.Format(RecursoClasificador.UrlDeterminacion, idencriptado));
                                        }
                                        else
                                        {
                                            var ex = new Exception("Rfc no es el mismo");
                                            RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion,
                                                                 limpio, null, origen: System.Reflection.MethodBase.GetCurrentMethod().Name);
                                        }
                                    }
                                    else
                                    {
                                        var ex = new Exception("Intento entrar");
                                        RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion, limpio, null, origen: System.Reflection.MethodBase.GetCurrentMethod().Name);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion, null, null, origen: System.Reflection.MethodBase.GetCurrentMethod().Name);
            }

            return(vista);
        }
        string preparaDeclaracionProvisional(string xmlDeclaracion, string rfc, string idDeclaracion, DeclaracionTemporal temporal, out string mensaje)
        {
            string uriBlob = string.Empty;

            mensaje = string.Empty;

            try
            {
                TransformadorSATMessage procesaMensaje   = new TransformadorSATMessage();
                RespuestaServicioDyP    respuestaProceso = procesaMensaje.EnviarMensajeSAT(xmlDeclaracion, idDeclaracion, rfc);

                if (respuestaProceso.Procesado)
                {
                    if (string.IsNullOrEmpty(new DeterminacionPagoDyP().ConsultarOpcPagoISREnClasificador(temporal.Ejercicio, rfc)))
                    {
                        /*Apartado para determinar si el contribuyente seleccionó ingreso menos gasto o coeficiente de utilidad en el formulario de ISR*/
                        try
                        {
                            XDocument xdocTmp = XDocument.Parse(xmlDeclaracion);
                            var       nodoISR = xdocTmp.XPathSelectElement("//*[local-name()='modeloDatos']/*[local-name()='entidad' and @tipo='SAT_DETERMINACION_IMPUESTO' and @claveimpuesto='" + TipoObligacion.ISR.ToDescription() + "']/*[local-name()='propiedad' and @claveinformativa='OCISR']");
                            if (nodoISR != null)
                            {
                                string misr = nodoISR.Value == "1" ? "CU" : "IG";
                                var    pago = new DeterminacionPagoDyP();
                                pago.AgregarOpcPagoISR(temporal.Ejercicio, rfc, misr);
                                pago.MarcarComoCerrada(temporal.Ejercicio, rfc);
                            }
                        }
                        catch (Exception _ex)
                        {
                            RegistraEvento.Instancia.EscribeEvento(_ex);
                            RegistroEvento.Error(ref _ex, CodigoEvento.ErrorDatos, GetType().Name);
                        }
                    }

                    uriBlob = respuestaProceso.PDF;

                    var declaraProvisional = new DeclaracionProvisional
                    {
                        rfc                           = rfc,
                        ejercicio                     = temporal.Ejercicio,
                        idDeclaracion                 = idDeclaracion,
                        NoReforma                     = temporal.VersionReforma,
                        periodicidad                  = temporal.Periodicidad,
                        periodicidadDescripcion       = temporal.PeriodicidadDescripcion,
                        periodo                       = temporal.Periodo,
                        tipoDeclaracion               = temporal.TipoDeclaracion,
                        tipoDeclaracionDescripcion    = temporal.TipoDeclaracionDescripcion,
                        periodoDescripcion            = temporal.PeriodoDescripcion,
                        tipoComplementaria            = temporal.TipoComplementaria,
                        tipoComplementariaDescripcion = temporal.TipoComplementariaDescripcion,
                    };

                    uriBlob = AlmacenarDeclaracionProvisional(declaraProvisional, xmlDeclaracion, respuestaProceso.XmlMessage, respuestaProceso.PDF, respuestaProceso.HTML);

                    EliminarDeclaracionTemporal(rfc, idDeclaracion);

                    using (AdministradorEnvioDeclaracionConceptos administrador = new AdministradorEnvioDeclaracionConceptos())
                    {
                        try
                        {
                            administrador.EnviarMensaje(rfc, idDeclaracion);
                        }
                        catch (Exception ex)
                        {
                            RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "Generacion del mensaje de recepción de declaracion.");
                        }
                    }


                    try
                    {
                        using (var administrador = new AdministradorDeclaracionClasificador())
                        {
                            //var declaracionClasificador = administrador.ObtenerDeclaracionPorDypLlave(rfc, idDeclaracion);
                            //declaracionClasificador.EstadoActual = (int)Sat.DyP.Clasificador.Entidades.Enumeraciones.EstadoDeclaracion.Enviada;
                            //administrador.AgregarActualizarDeclaracion(declaracionClasificador);
                            //
                            var declaracionAlmacenada = DeclaracionClasificadorComplementos.MarcarComoDeclaracionEnviada(rfc, idDeclaracion, temporal.VersionReforma);
                            if (declaracionAlmacenada != null)
                            {
                                administrador.EncolarCfdisReportes(declaracionAlmacenada.RowKey);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "Marcar como enviada y crear petición para worker de datos.");
                    }
                }
                else
                {
                    mensaje = respuestaProceso.Mensaje + respuestaProceso.PDF;
                }
            }
            catch (Exception ex) { throw ex; }
            return(uriBlob);
        }
        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);
        }
Пример #15
0
        public ActionResult AlmacenarDeclaracionTemporal(string data = "")
        {
            ResultadoViewModel resultado     = new ResultadoViewModel();
            ContribuyenteInfo  contribuyente = this.ContribuyenteAutenticado();

            try
            {
                if (!string.IsNullOrEmpty(data))
                {
                    dynamic parametro                     = Newtonsoft.Json.JsonConvert.DeserializeObject(data);
                    string  xmldeclaracion                = parametro.xmldeclaracion;
                    string  rfc                           = contribuyente.Rfc;
                    string  idDeclaracion                 = parametro.iddeclaracion;
                    int     ejercicio                     = parametro.ejercicio;
                    string  periodo                       = parametro.periodo;
                    string  periodoDescripcion            = parametro.periododesc;
                    string  periodicidad                  = parametro.periodicidad;
                    string  periodicidadDescripcion       = parametro.periodicidaddesc;
                    string  tipoDeclaracion               = parametro.tipodeclaracion;
                    string  tipoDeclaracionDescripcion    = parametro.tipodeclaraciondesc;
                    string  tipoComplementaria            = parametro.tipocomplementaria;
                    string  tipoComplementariaDescripcion = parametro.tipocomplementariadesc;
                    string  NoReforma                     = parametro.noreforma;
                    bool    contieneErrores               = parametro.errores ?? false;

                    string uriBlob = string.Empty;
                    using (var declaracion = new Declaracion())
                    {
                        uriBlob = declaracion.AlmacenarDeclaracionTemporal(xmldeclaracion, rfc, idDeclaracion, ejercicio,
                                                                           periodo, periodoDescripcion, periodicidad, periodicidadDescripcion,
                                                                           tipoDeclaracion, tipoDeclaracionDescripcion, tipoComplementaria, tipoComplementariaDescripcion, NoReforma,
                                                                           contieneErrores);
                    }

                    if (string.IsNullOrWhiteSpace(uriBlob))
                    {
                        resultado = new ResultadoViewModel()
                        {
                            Excepcion = "Error desconocido.",
                            EsValido  = false,
                            Mensaje   = "Se generó un error al guardar la declaración. Inténtelo nuevamente."
                        };

                        var ex =
                            new Exception("Se generó un error al guardar la declaración, URI vacío en AlmacenarDeclaracionTemporal");

                        RegistroEvento.Error(
                            ref ex,
                            CodigoEvento.ErrorNegocio,
                            "DeclaracionController",
                            rfc: rfc,
                            regimen: idDeclaracion,
                            ejercicio: ejercicio.ToString(),
                            tipoDeclaracion: tipoDeclaracion,
                            origen: "Portal");
                    }
                    else
                    {
                        /*Se regresa el idDeclaración encriptado para envíos en claro desde la url*/
                        resultado = new ResultadoViewModel()
                        {
                            EsValido = true,
                            Mensaje  = new Sat.DyP.Herramientas.Encripcion.Encripcion().EncriptaCadena(idDeclaracion, Sat.DyP.Herramientas.Encripcion.TipoEncripcion.Base64URL)
                        };
                    }
                }
                else
                {
                    string mensajeError =
                        string.Format(
                            "El parametro viene vacio en AlmacenarDeclaracionTemporal para el RFC: {0}",
                            contribuyente != null && !string.IsNullOrEmpty(contribuyente.Rfc)
                                ? contribuyente.Rfc
                                : "NULO");

                    RegistroEvento.Informacion(
                        mensajeError,
                        CodigoEvento.InformacionNegocio,
                        "DeclaracionController",
                        null);

                    resultado = new ResultadoViewModel()
                    {
                        Excepcion =
                            "El parámetro data viene vecío en AlmacenarDeclaracionTemporal",
                        EsValido = false,
                        Mensaje  = mensajeError
                    };
                }
            }
            catch (Exception ex)
            {
                resultado = new ResultadoViewModel()
                {
                    EsValido = false,
                    Mensaje  =
                        "Se generó un error al guardar la declaración. Inténtelo nuevamente."
                };
                RegistroEvento.Error(
                    ref ex,
                    CodigoEvento.ErrorNegocio,
                    "DeclaracionController",
                    rfc: contribuyente != null && !string.IsNullOrEmpty(contribuyente.Rfc) ? contribuyente.Rfc : "NULO");
            }

            return(this.Json(resultado, JsonRequestBehavior.AllowGet));
        }
Пример #16
0
        public ActionResult RecibeDeclaracionFirmada(string data)
        {
            ResultadoViewModel resultado = null;

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                string uriArchivoAcuse = string.Empty;

                var parametro = System.Web.Helpers.Json.Decode(data);

                string mensajeError;
                string rfc               = contribuyente.Rfc;
                string idDeclaracion     = parametro["idDeclaracion"];
                string numeroCertificado = parametro["numeroCertificado"];
                string firma             = parametro["firma"];
                string folioFirmado      = parametro["folioStampCertificado"];

                using (var declaracion = new Declaracion())
                {
                    uriArchivoAcuse = declaracion.RecibeDeclaracionFirmada(
                        new Sat.DyP.Herramientas.Entidad.Declaracion.ReciboDeclaracionFirmada()
                    {
                        rfc               = rfc,
                        firma             = firma,
                        folioFirmado      = folioFirmado,
                        idDeclaracion     = idDeclaracion,
                        numeroCertificado = numeroCertificado
                    }, out mensajeError);
                }

                if (string.IsNullOrEmpty(mensajeError))
                {
                    resultado = new ResultadoViewModel()
                    {
                        EsValido = true,
                        Archivo  = uriArchivoAcuse,
                        Mensaje  = ""
                    };
                }
                else
                {
                    resultado = new ResultadoViewModel()
                    {
                        EsValido = false, Mensaje = mensajeError
                    };
                }
            }
            catch (Exception ex)
            {
                resultado = new ResultadoViewModel()
                {
                    EsValido = false,
                    Mensaje  =
                        "Se generó un error al recibir la declaración. Inténtelo nuevamente."
                };
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "DeclaracionController");
            }

            var jsonResult = this.Json(resultado, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;
            return(jsonResult);
        }
Пример #17
0
        public ActionResult ObtenerPlantilla(string data)
        {
            ResultadoViewModel resultado = null;

            try
            {
                ContribuyenteInfo contribuyente  = this.ContribuyenteAutenticado();
                string            idAlscEmpleado = string.Empty;
                string            rfcEmpleado    = string.Empty;
                string            mensaje        = string.Empty;
                string            formulario     = "new";
                int           codigoRespuesta    = (int)CodigoRespuestaGeneral.OK;
                List <string> xmlBase64          = new List <string>();

                if (contribuyente == null)
                {
                    new HomeController().ObtieneInfoFederacion();
                    contribuyente = MemberCache.Instancia.UsuarioActual;
                }

                if (ConfiguracionApp.AdaptadorCloud.RecuperarBoolean("IsPortalEmpleado"))
                {
                    idAlscEmpleado = MemberCache.Instancia.EmpleadoActual.Alsc;
                    rfcEmpleado    = MemberCache.Instancia.EmpleadoActual.Rfc;
                }

                dynamic parametro = JsonConvert.DeserializeObject(data);
                parametro.Rfc = contribuyente.Rfc;
                parametro.TipoContribuyente   = contribuyente.TipoContribuyente;
                parametro.MetodoAutenticacion = contribuyente.MetodoAutenticacion;
                parametro.idAlscEmpleado      = idAlscEmpleado;
                parametro.rfcEmpleado         = rfcEmpleado;
                var declaracion = new Sat.DeclaracionesAnuales.Portal.Negocio.Declaraciones.Declaracion();
                declaracion.obtieneTotales += (r, e, p, d) => {
                    return(new Sat.DyP.Clasificador.Negocio.AdministradorTotalesClasificador(int.Parse(e)).ObtenerTotalesGuardadosCalculados(r, int.Parse(e), int.Parse(p), int.Parse(d)));
                };
                xmlBase64 = declaracion.ObtenerPlantillaObligaciones(parametro, out formulario, out codigoRespuesta);

                resultado = new ResultadoViewModel()
                {
                    EsValido      = (CodigoRespuestaGeneral)codigoRespuesta == CodigoRespuestaGeneral.OK,
                    Xml           = xmlBase64,
                    Formulario    = formulario,
                    Contribuyente = contribuyente
                };
            }
            catch (Exception ex)
            {
                resultado = new ResultadoViewModel()
                {
                    EsValido = false,
                    Mensaje  = "Se generó un error al obtener la plantilla de la declaración. Inténtelo nuevamente."
                };

                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, "DeclaracionController");
            }

            var jsonResult = this.Json(resultado, JsonRequestBehavior.AllowGet);

            jsonResult.MaxJsonLength = int.MaxValue;
            return(jsonResult);
        }
Пример #18
0
        public ActionResult Abrir(string id)
        {
            ActionResult vista      = this.View(RecursoClasificador.ParcialErrorEnPermisos);
            var          encabezado = new EncabezadoDypClasificador();

            try
            {
                ContribuyenteInfo contribuyente = this.ContribuyenteAutenticado();

                // TODO: Incluir la petición desde lugar referido
                // this.PeticionDesdeLugarReferido() :
                if (!string.IsNullOrEmpty(id) && contribuyente.Espms)
                {
                    DeclaracionClasificador declaracion = DeclaracionClasificadorComplementos.ObtenerDeclaracionDedeUrl(id);
                    var encriptador = new Sat.DyP.Herramientas.Encripcion.Encripcion();
                    var limpio      = encriptador.DesencriptaCadena(id, Sat.DyP.Herramientas.Encripcion.TipoEncripcion.Base64URL);

                    this.ImportarDatos(declaracion);

                    if (contribuyente.Rfc == declaracion.Rfc)
                    {
                        declaracion.ActualizarDeclaracionPorAbrirDeclaracion();

                        var  pago      = new DeterminacionPagoDyP();
                        var  respuesta = pago.ConsultarOpcPagoISREnClasificador(declaracion.Ejercicio, declaracion.Rfc);
                        bool ocisr     = string.IsNullOrEmpty(respuesta);

                        var idencriptado = declaracion.CodigoEncirptado(contribuyente.Token);
                        encabezado = declaracion.ObtenerEncabezado();
                        /********************************************************************************************************************/
                        var    parameters    = new Dictionary <int, Dictionary <string, string> >();
                        string IdDeclaracion = limpio.Split(',').Where(i => i.Contains("idd")).FirstOrDefault().Split(':')[1];
                        string IdReforma     = limpio.Split(',').Where(i => i.Contains("ref")).FirstOrDefault().Split(':')[1];

                        //if (limpio.Split(',').Where(i => i.Contains("redi")).FirstOrDefault() == null)
                        //{
                        //    vista = Redirect("VistaPrevia/" + encriptador.EncriptaCadena("r:" + declaracion.Rfc + ",idd:" + IdDeclaracion + ",ref:" + IdReforma + "redi:0", Sat.DyP.Herramientas.Encripcion.TipoEncripcion.Base64URL));
                        //}
                        //else
                        //{
                        parameters.Add(0, new Dictionary <string, string>()
                        {
                            { "NoReforma", IdReforma },
                            { "OpcionCalculoISR", ocisr ? "-1" : respuesta }
                        });

                        parameters.Add(1, new Dictionary <string, string>()
                        {
                            { "NoDeclaracion", IdDeclaracion },
                            { "presentaDeclaracion", "true" },
                            { "muestraOCISR", ocisr ? "1" : "0" }
                        });
                        /********************************************************************************************************************/

                        this.ViewBag.Info    = declaracion.ParametrosVistaPrevia(parameters);
                        ViewBag.idencriptado = idencriptado;
                        vista = View("VistaPrevia");
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                RegistroEvento.Error(ref ex, CodigoEvento.ErrorNegocio, RecursoClasificador.ErrorEnAutenticacion, null, null, origen: RecursoClasificador.ClasificadorOrigen);
            }

            TempData[TEMP_DATA_ENCABEZADO] = encabezado;
            return(vista);
        }