Beispiel #1
0
        public List <object> cancelarAcuse(InfoATimbrar infoATimbrar, DBContextAdapter dbContext)
        {
            datosCancelados = new List <object>();
            cUUIDCancelado UUIDCancelado = null;

            try
            {
                WsSolucionfactibleCancelar.Cancelacion cancelacion = new WsSolucionfactibleCancelar.Cancelacion();
                WsSolucionfactibleCancelar.CancelacionAsincronoResponse response = new WsSolucionfactibleCancelar.CancelacionAsincronoResponse();
                cancelacion.Url = infoATimbrar.urlWebServices.Substring(0, infoATimbrar.urlWebServices.LastIndexOf("/") + 1) + "Cancelacion ";
                List <InfoExtra> extras = infoATimbrar.infoExtras;
                this.Url         = infoATimbrar.urlWebServices;
                this.Usuario     = infoATimbrar.usuario;
                this.Password    = infoATimbrar.password;
                this.PasswordCSD = infoATimbrar.passwordKey;
                this.KeyCSD      = infoATimbrar.archivoKey;
                this.CertCSD     = infoATimbrar.archivoPfx;



                for (int i = 0; i < extras.Count; i++)
                {
                    this.RFC            = extras[i].rfcEmisor;
                    this.folio          = extras[i].folio;
                    this.serie          = extras[i].serie;
                    this.cfdirecibo_id  = extras[i].cfdirecibo_id;
                    this.UsuarioSistema = extras[i].usuario;
                    UUIDCancelado       = cancelar(extras[i].UUID, dbContext);
                    datosCancelados.Add(UUIDCancelado);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(datosCancelados);
        }
Beispiel #2
0
        public List <object> generaTimbres(InfoATimbrar infoATimbrar, DBContextAdapter dbContext)
        {
            datosTimbrados = null;
            error          = "";
            try
            {
                if (infoATimbrar.urlWebServices.Contains("solucionfactible.com"))
                {
                    SolucionFactible solucionFact = new SolucionFactible();
                    if (infoATimbrar.tipoOperacion == TipoOperacionWS.TIMBRAR)
                    {
                        datosTimbrados = solucionFact.Timbrar(infoATimbrar);
                    }
                    else if (infoATimbrar.tipoOperacion == TipoOperacionWS.CANCELAR)
                    {
                        datosTimbrados = solucionFact.cancelarAcuse(infoATimbrar, dbContext);
                    }
                    else if (infoATimbrar.tipoOperacion == TipoOperacionWS.CANCELARSTATUS)
                    {
                        datosTimbrados = solucionFact.CancelarAcuseStatus(infoATimbrar, dbContext);
                    }
                    error = solucionFact.error;
                }
            }
            catch (Exception e)
            {
                if (error != "")
                {
                    error = e.Message;
                }

                // System.out.println(e.getMessage());
                // Utilerias.bitacora(e.getMessage());
            }
            return(datosTimbrados == null ? new List <object>() : datosTimbrados);
        }
        public List <CFDIEmpleado> generaComprobanteV33(TipoNomina tipoNomina, PeriodosNomina periodosNomina, List <CFDIEmpleado> listCFDIEmpleados, ConfiguraTimbrado configuraTimbrado, System.Xml.Xsl.XslCompiledTransform transformerCadenaOriginal, DBContextAdapter dbContextSimple)
        {
            Comprobante oComprobante = new Comprobante();
            //aqui va que agarre el certificado de donde se tiene configurado
            ConcepNomDefi conceptoNominaSubsidio = servicioCFDIEmpleado.getConceptoNominaSubsidio(dbContextSimple);

            /* string pathCer = ruta;
             * string pathKey = ruta;*/
            string pathXML = ruta;
            // string clavePrivada = null;
            SelloDigital oSelloDigital     = new SelloDigital();
            Certificados certificadoActual = new Certificados();


            listCFDIEmpleados = listCFDIEmpleados == null ? new List <CFDIEmpleado>() : listCFDIEmpleados;
            List <object> timbreFiscalDigitales;

            try
            {
                List <DatosEmpleadoComprobate> datosEmpleadoComprobates = new List <DatosEmpleadoComprobate>();
                if (listCFDIEmpleados.Count > 0)
                {
                    RazonesSociales razonSocial = listCFDIEmpleados[0].razonesSociales;
                    int             i, j;
                    String          nombreFile;
                    certificadoActual = servicioCertificado.certificadoActualId(razonSocial.id, dbContextSimple);


                    StringBuilder pathXmlExistentes = new StringBuilder();
                    pathXmlExistentes.Append(construyeRutaXML(razonSocial, tipoNomina, periodosNomina)).Append(System.IO.Path.DirectorySeparatorChar);
                    /*******************Busca documentos ya existentes********************/
                    Comprobante comprobanteExistentes;
                    ConstruyeTimbreFiscalDigital11 timbreDigitalCadenaOrig = null;
                    List <CFDIEmpleado>            listCFDIEmpleadosTimbrados = new List <CFDIEmpleado>();
                    String ruta2 = pathXmlExistentes.ToString(), nombreArchivo;
                    for (i = 0; i < listCFDIEmpleados.Count(); i++)
                    {
                        nombreArchivo = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, listCFDIEmpleados[i]);

                        if (listCFDIEmpleados[i].cfdiRecibo.statusTimbrado == StatusTimbrado.TIMBRADO)
                        {
                            XmlDocument  doc = new XmlDocument();
                            MemoryStream ms  = new MemoryStream(listCFDIEmpleados[i].cfdiRecibo.xmlTimbrado);
                            doc.Load(ms);
                            XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));
                            using (XmlReader writer = new XmlNodeReader(doc))
                            {
                                comprobanteExistentes = (Comprobante)oXmlSerializar.Deserialize(writer);
                            }

                            CreateXML(comprobanteExistentes, string.Concat(ruta2, nombreArchivo));
                            listCFDIEmpleadosTimbrados.Add(listCFDIEmpleados[i]);
                        }
                    }

                    if (listCFDIEmpleadosTimbrados.Count() > 0)
                    {
                        for (i = 0; i < listCFDIEmpleadosTimbrados.Count; i++)
                        {
                            listCFDIEmpleados.Remove(listCFDIEmpleadosTimbrados[i]);
                        }
                    }

                    Comprobante       comprobante = null;
                    ConstruyeNomina12 creaXmlNomina = new ConstruyeNomina12();
                    Nomina            nomina12;

                    if (listCFDIEmpleados.Count > 0)
                    {
                        for (i = 0; i < listCFDIEmpleados.Count; i++)
                        {
                            if (listCFDIEmpleados[i].cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                listCFDIEmpleados[i].certificadoAsignado = certificadoActual;
                                comprobante = construyeComprobante(listCFDIEmpleados[i]);
                                listCFDIEmpleados[i].cfdiRecibo.fechaEmision = fechaGeneraXML;
                                nomina12 = creaXmlNomina.generaComplementoNomina(listCFDIEmpleados[i], conceptoNominaSubsidio);
                                if (creaXmlNomina.mensajeNomina.noError > 0)
                                {
                                    DatosEmpleadoComprobate errorNominaDatos = new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante);
                                    datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                                    errorNominaDatos.cfdiEmpleado.mensaje = creaXmlNomina.mensajeNomina.error;
                                }
                                else
                                {
                                    comprobante = agregarComplementoNomina(comprobante, nomina12);
                                    datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                                }
                            }
                            else if (listCFDIEmpleados[i].cfdiRecibo.statusXmlSat == StatusXmlSat.ENVIADO_SAT)
                            {
                                try
                                {
                                    XmlDocument  doc = new XmlDocument();
                                    MemoryStream ms  = new MemoryStream(listCFDIEmpleados[i].cfdiRecibo.xmlTimbrado);
                                    doc.Load(ms);
                                    XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante));
                                    using (XmlReader writer = new XmlNodeReader(doc))
                                    {
                                        comprobante = (Comprobante)oXmlSerializar.Deserialize(writer);
                                    }
                                }
                                catch (Exception)
                                {
                                    listCFDIEmpleados[i].certificadoAsignado     = certificadoActual;
                                    listCFDIEmpleados[i].cfdiRecibo.statusXmlSat = StatusXmlSat.NINGUNO;
                                    comprobante = construyeComprobante(listCFDIEmpleados[i]);
                                    listCFDIEmpleados[i].cfdiRecibo.fechaEmision = fechaGeneraXML;
                                    nomina12    = creaXmlNomina.generaComplementoNomina(listCFDIEmpleados[i], conceptoNominaSubsidio);
                                    comprobante = agregarComplementoNomina(comprobante, nomina12);
                                }
                                datosEmpleadoComprobates.Add(new DatosEmpleadoComprobate(listCFDIEmpleados[i], comprobante));
                            }
                        }
                        CFDIRecibo recibo;
                        for (i = 0; i < datosEmpleadoComprobates.Count; i++)
                        {
                            if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                nombreFile = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, datosEmpleadoComprobates[i].cfdiEmpleado);
                                CreateXML(datosEmpleadoComprobates[i].comprobante, string.Concat(ruta2, nombreFile));
                                string cadenaOriginal = getCadenaoriginal(string.Concat(ruta2, nombreFile));


                                //byte[] ClavePrivada1 = razonSocial.llaveSAT;
                                byte[] ClavePrivada1 = certificadoActual.llavePrivada;
                                datosEmpleadoComprobates[i].comprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, ClavePrivada1, certificadoActual.password);
                                CreateXML(datosEmpleadoComprobates[i].comprobante, string.Concat(ruta2, nombreFile));
                                recibo                   = datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo;
                                recibo.total             = Convert.ToDouble(datosEmpleadoComprobates[i].comprobante.Total);
                                recibo.folioCFDI         = datosEmpleadoComprobates[i].comprobante.Folio;
                                recibo.noCertificado     = datosEmpleadoComprobates[i].comprobante.NoCertificado;
                                recibo.sello             = (datosEmpleadoComprobates[i].comprobante.Sello);
                                recibo.serieCFDI         = (datosEmpleadoComprobates[i].comprobante.Serie);
                                recibo.cadenaCertificado = (datosEmpleadoComprobates[i].comprobante.Certificado);
                                recibo.version           = (datosEmpleadoComprobates[i].comprobante.Version);
                                recibo.serie             = (datosEmpleadoComprobates[i].comprobante.Serie);

                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo = (recibo);

                                datosEmpleadoComprobates[i].archivoByte   = System.IO.File.ReadAllBytes(string.Concat(ruta2, nombreFile));
                                datosEmpleadoComprobates[i].nombreArchivo = nombreFile;
                            }
                            else if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.ENVIADO_SAT)
                            {
                                nombreFile = nomenclaturaNombreArchivo(tipoNomina, periodosNomina, datosEmpleadoComprobates[i].cfdiEmpleado);
                                datosEmpleadoComprobates[i].archivoByte   = datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.xmlTimbrado;
                                datosEmpleadoComprobates[i].nombreArchivo = nombreFile;
                            }
                        }

                        List <InfoExtra> infoExtras = new List <InfoExtra>();
                        InfoExtra        infoExtra;

                        for (i = 0; i < datosEmpleadoComprobates.Count; i++)
                        {
                            datosEmpleadoComprobates[i].statusTimbrado = (StatusTimbrado.EN_PROCESO);
                            infoExtra = new InfoExtra();

                            infoExtra.archivoXML    = (datosEmpleadoComprobates[i].archivoByte);
                            infoExtra.nombreArchivo = (datosEmpleadoComprobates[i].nombreArchivo);
                            infoExtra.rfcEmisor     = (datosEmpleadoComprobates[i].comprobante.Emisor.Rfc);
                            infoExtra.rfcReceptor   = (datosEmpleadoComprobates[i].comprobante.Receptor.Rfc);
                            infoExtra.version       = (datosEmpleadoComprobates[i].comprobante.Version);
                            infoExtra.folio         = (datosEmpleadoComprobates[i].comprobante.Folio);
                            infoExtras.Add(infoExtra);
                            if (datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat == StatusXmlSat.NINGUNO)
                            {
                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.statusXmlSat = (StatusXmlSat.ENVIADO_SAT);
                                datosEmpleadoComprobates[i].cfdiEmpleado.cfdiRecibo.xmlTimbrado  = (datosEmpleadoComprobates[i].archivoByte);
                                if (datosEmpleadoComprobates[i].cfdiEmpleado.id != 0)
                                {
                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[i].cfdiEmpleado, dbContextSimple);
                                }
                            }
                        }

                        //timbrar
                        if (infoExtras.Count > 0)
                        {
                            //datos de timbrar desde la razon social
                            TimbrarXmlSat timbrarXmlSat = new TimbrarXmlSat();
                            InfoATimbrar  infoATimbrar  = new InfoATimbrar();
                            infoATimbrar.tipoOperacion  = (TipoOperacionWS.TIMBRAR);
                            infoATimbrar.infoExtras     = (infoExtras);
                            infoATimbrar.password       = configuraTimbrado.contraseña;
                            infoATimbrar.urlWebServices = configuraTimbrado.URL;
                            infoATimbrar.usuario        = configuraTimbrado.usuario;

                            timbreFiscalDigitales = timbrarXmlSat.generaTimbres(infoATimbrar, dbContextSimple);
                            if (timbrarXmlSat.error != null)
                            {
                                mensaje.noError   = 101;
                                mensaje.resultado = (timbrarXmlSat.error);
                                if (timbreFiscalDigitales.Count > 0)
                                {
                                    for (i = 0; i < timbreFiscalDigitales.Count; i++)
                                    {
                                        j = 0;
                                        DatosTimbreFiscalDigital info = (DatosTimbreFiscalDigital)timbreFiscalDigitales[i];

                                        while (j < datosEmpleadoComprobates.Count)
                                        {
                                            if (info.error != 0)
                                            {
                                                if (string.Equals((datosEmpleadoComprobates[j].folio == null ? "" : datosEmpleadoComprobates[j].folio), (info.folio == null ? "" : info.folio), StringComparison.OrdinalIgnoreCase))
                                                {
                                                    datosEmpleadoComprobates[j].cfdiEmpleado.mensaje = info.descripcion;
                                                }
                                            }

                                            j++;
                                        }
                                    }
                                }
                            }
                            timbreFiscalDigitales = timbreFiscalDigitales == null ? new List <object>() : timbreFiscalDigitales;

                            if (timbreFiscalDigitales.Count > 0)
                            {
                                XmlNode tfd;
                                ConstruyeTimbreFiscalDigital11 digital11 = new ConstruyeTimbreFiscalDigital11(ruta);

                                j = 0;
                                listCFDIEmpleados.Clear();
                                for (i = 0; i < timbreFiscalDigitales.Count; i++)
                                {
                                    while (j < datosEmpleadoComprobates.Count)
                                    {
                                        DatosTimbreFiscalDigital timbre = (DatosTimbreFiscalDigital)timbreFiscalDigitales[i];


                                        if (string.Equals((datosEmpleadoComprobates[j].folio == null ? "" : datosEmpleadoComprobates[j].folio), (timbre.folio == null ? "" : timbre.folio), StringComparison.OrdinalIgnoreCase))
                                        {
                                            if (string.Equals(timbre.status, "200", StringComparison.OrdinalIgnoreCase) || string.Equals(timbre.status, "307", StringComparison.OrdinalIgnoreCase))
                                            {
                                                //CreateXMLTimbreFiscal(digital11.contruyeTimbreFiscalDigital(timbreFiscalDigitales[i]), string.Concat(ruta2, "pruebaTimbre.xml"));

                                                recibo = datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo;
                                                CreateXML(datosEmpleadoComprobates[j].comprobante, string.Concat(ruta2, datosEmpleadoComprobates[j].nombreArchivo));
                                                string cadenaOriginal = getCadenaoriginal(string.Concat(ruta2, datosEmpleadoComprobates[j].nombreArchivo));
                                                recibo.cadenaCertificado   = cadenaOriginal;
                                                recibo.certificadoTimbrado = (timbre.noCertificadoSAT);
                                                recibo.noCertificadoSAT    = (timbre.noCertificadoSAT);
                                                recibo.fechaHoraTimbrado   = (timbre.fechaTimbrado);
                                                recibo.selloTimbrado       = (timbre.selloSAT);
                                                recibo.selloSAT            = (timbre.selloSAT);
                                                recibo.UUID           = (timbre.uuid);
                                                recibo.rfcProvCertif  = (timbre.referenciasProveedor);
                                                recibo.statusTimbrado = (StatusTimbrado.TIMBRADO);
                                                recibo.statusXmlSat   = (StatusXmlSat.RECIBIDO_SAT);
                                                recibo.xmlTimbrado    = (timbre.xmlTimbrado);


                                                string cadenaOriginalSAT1 = "||" + timbre.version + "|" + timbre.uuid + "|" + timbre.fechaTimbrado + "|" + timbre.referenciasProveedor;
                                                if (timbre.descripcion != "")
                                                {
                                                    cadenaOriginalSAT1 += "|" + timbre.descripcion + "|" + timbre.selloCFD + "|" + timbre.noCertificadoSAT + "||";
                                                }
                                                else
                                                {
                                                    cadenaOriginalSAT1 += "|" + timbre.selloCFD + "|" + timbre.noCertificadoSAT + "||";
                                                }

                                                recibo.cadenaOriginalTimbrado = cadenaOriginalSAT1;


                                                datosEmpleadoComprobates[j].cfdiEmpleado.recienTimbrado = (true);
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo     = (recibo);



                                                if (datosEmpleadoComprobates[i].cfdiEmpleado.id != 0)
                                                {
                                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[j].cfdiEmpleado, dbContextSimple);
                                                }
                                            }
                                            else
                                            {
                                                datosEmpleadoComprobates[j].statusTimbrado = StatusTimbrado.ERROR;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.mensajeRec = (timbre.descripcion);

                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.statusTimbrado = StatusTimbrado.ERROR;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.statusXmlSat   = StatusXmlSat.NINGUNO;
                                                datosEmpleadoComprobates[j].cfdiEmpleado.cfdiRecibo.xmlTimbrado    = null;
                                                if (datosEmpleadoComprobates[j].cfdiEmpleado.id != 0)
                                                {
                                                    servicioCFDIEmpleado.actualizar(datosEmpleadoComprobates[j].cfdiEmpleado, dbContextSimple);
                                                }
                                            }

                                            datosEmpleadoComprobates[j].cfdiEmpleado.mensaje = (timbre.descripcion);
                                            listCFDIEmpleados.Add(datosEmpleadoComprobates[j].cfdiEmpleado);
                                            // datosEmpleadoComprobates.RemoveAt(j);
                                            j = 0;
                                            break;
                                        }

                                        else
                                        {
                                            j++;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (listCFDIEmpleadosTimbrados.Count() > 0)
                    {
                        listCFDIEmpleados.AddRange(listCFDIEmpleadosTimbrados);
                        //                    Utilerias.ordena(listCFDIEmpleados, uuidCxn);
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }


            return(listCFDIEmpleados);
        }
Beispiel #4
0
        public List <object> Timbrar(InfoATimbrar infoATimbrar)
        {
            try
            {
                WsSolucionfactible.Timbrado                   timbrar    = new WsSolucionfactible.Timbrado();
                WsSolucionfactible.CFDICertificacion          certificar = new WsSolucionfactible.CFDICertificacion();
                WsSolucionfactible.CFDIResultadoCertificacion response   = new WsSolucionfactible.CFDIResultadoCertificacion();

                List <InfoExtra>         extras = infoATimbrar.infoExtras;
                DatosTimbreFiscalDigital datosTimbreFiscalDigital;
                datosTimbreFiscalDigitales = new List <object>();
                if (extras != null)
                {
                    List <byte[]> xmlCfdi = new List <byte[]>();
                    for (int i = 0; i < extras.Count; i++)
                    {
                        timbrar.Url = infoATimbrar.urlWebServices;
                        certificar  = timbrar.timbrar(infoATimbrar.usuario, infoATimbrar.password, extras[i].archivoXML, false, true);
                        if (certificar.status == 200)
                        {
                            response = certificar.resultados[0];
                            byte[] inter_byte = certificar.resultados[0].cfdiTimbrado;



                            if (response.status == 200 | response.status == 307)
                            {
                                datosTimbreFiscalDigital = new DatosTimbreFiscalDigital();
                                //datosTimbreFiscalDigital.setDescripcion("");
                                datosTimbreFiscalDigital.error            = 0;
                                datosTimbreFiscalDigital.fechaTimbrado    = (response.fechaTimbrado.GetValueOrDefault());
                                datosTimbreFiscalDigital.noCertificadoSAT = (response.certificadoSAT);
                                //datosTimbreFiscalDigital.setSelloCFD(cfdiCertificacion.getSelloCFD());
                                datosTimbreFiscalDigital.selloSAT             = (response.selloSAT);
                                datosTimbreFiscalDigital.uuid                 = (response.uuid);
                                datosTimbreFiscalDigital.version              = (response.versionTFD);
                                datosTimbreFiscalDigital.status               = (response.status.ToString());
                                datosTimbreFiscalDigital.referenciasProveedor = ("SFE0807172W8");
                                datosTimbreFiscalDigital.folio                = (extras[i].folio);
                                datosTimbreFiscalDigital.xmlTimbrado          = inter_byte;
                                datosTimbreFiscalDigitales.Add(datosTimbreFiscalDigital);
                            }
                            else
                            {
                                datosTimbreFiscalDigital             = new DatosTimbreFiscalDigital();
                                datosTimbreFiscalDigital.status      = Convert.ToString(response.status);
                                datosTimbreFiscalDigital.error       = response.status;
                                datosTimbreFiscalDigital.descripcion = response.mensaje;
                                datosTimbreFiscalDigital.folio       = (extras[i].folio);
                                datosTimbreFiscalDigitales.Add(datosTimbreFiscalDigital);
                                this.error = response.mensaje;
                            }
                        }
                        else
                        {
                            this.error = certificar.mensaje;
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(datosTimbreFiscalDigitales);
        }
Beispiel #5
0
        public List <object> CancelarAcuseStatus(InfoATimbrar infoATimbrar, DBContextAdapter dbContext)
        {
            datosCancelados = new List <object>();
            try
            {
                cUUIDCancelado UUIDCancelado = null;

                WsSolucionfactibleCancelar.Cancelacion Cancelacion            = new WsSolucionfactibleCancelar.Cancelacion();
                WsSolucionfactibleCancelar.StatusCancelacionResponse response = new WsSolucionfactibleCancelar.StatusCancelacionResponse();
                BITCancelacion bITCancelacion = new BITCancelacion();
                Cancelacion.Url = infoATimbrar.urlWebServices.Substring(0, infoATimbrar.urlWebServices.LastIndexOf("/") + 1) + "Cancelacion ";
                XmlDocument      xmlAcuse = new XmlDocument();
                List <InfoExtra> extras   = infoATimbrar.infoExtras;

                this.Url         = infoATimbrar.urlWebServices;
                this.Usuario     = infoATimbrar.usuario;
                this.Password    = infoATimbrar.password;
                this.PasswordCSD = infoATimbrar.passwordKey;
                this.KeyCSD      = infoATimbrar.archivoKey;
                this.CertCSD     = infoATimbrar.archivoPfx;


                for (int i = 0; i < extras.Count; i++)
                {
                    this.RFC            = extras[i].rfcEmisor;
                    this.folio          = extras[i].folio;
                    this.serie          = extras[i].serie;
                    this.cfdirecibo_id  = extras[i].cfdirecibo_id;
                    this.UsuarioSistema = extras[i].usuario;


                    response = Cancelacion.getStatusCancelacionAsincrona(this.Usuario, this.Password, extras[i].UUID, null);
                    switch (response.status)
                    {
                    case 200:

                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.ObtuvoAcuse;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);

                        MemoryStream msXMLT = new MemoryStream(response.acuseSat);
                        msXMLT.Position = 0;
                        xmlAcuse.Load(msXMLT);

                        UUIDCancelado           = new cUUIDCancelado();
                        UUIDCancelado.UUID      = extras[i].UUID;
                        UUIDCancelado.status    = "100";
                        UUIDCancelado.statusSAT = StatusXmlSat.SOLICITUDREGISTRADA;
                        UUIDCancelado.Acuse     = System.Text.Encoding.UTF8.GetBytes(xmlAcuse.OuterXml);
                        datosCancelados.Add(UUIDCancelado);
                        break;

                    case 202:
                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.SolicitudRegistrada;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);

                        UUIDCancelado               = cancelar(extras[i].UUID, dbContext);
                        UUIDCancelado.UUID          = extras[i].UUID;
                        UUIDCancelado.statusSAT     = StatusXmlSat.SOLICITUDREGISTRADA;
                        UUIDCancelado.status        = "100";
                        UUIDCancelado.observaciones = "";
                        datosCancelados.Add(UUIDCancelado);
                        break;

                    case 204:

                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.NoCancelable;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);

                        UUIDCancelado               = new cUUIDCancelado();
                        UUIDCancelado.UUID          = extras[i].UUID;
                        UUIDCancelado.statusSAT     = StatusXmlSat.NOCANCELABLE;
                        UUIDCancelado.status        = "100";
                        UUIDCancelado.observaciones = "[" + response.status.ToString() + "] " + response.mensaje;
                        datosCancelados.Add(UUIDCancelado);
                        break;

                    case 211:
                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.EnProcesoAceptacion;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);

                        UUIDCancelado               = new cUUIDCancelado();
                        UUIDCancelado.UUID          = extras[i].UUID;
                        UUIDCancelado.statusSAT     = StatusXmlSat.ENPROCESOACEPTACION;
                        UUIDCancelado.status        = "100";
                        UUIDCancelado.observaciones = "[" + response.status.ToString() + "] " + response.mensaje;
                        datosCancelados.Add(UUIDCancelado);
                        break;

                    case 213:

                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.SolicitudRechazada;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);

                        UUIDCancelado               = new cUUIDCancelado();
                        UUIDCancelado.UUID          = extras[i].UUID;
                        UUIDCancelado.statusSAT     = StatusXmlSat.SOLICITUDRECHAZADA;
                        UUIDCancelado.status        = "100";
                        UUIDCancelado.observaciones = "[" + response.status.ToString() + "] " + response.mensaje;
                        datosCancelados.Add(UUIDCancelado);
                        break;

                    default:
                        bITCancelacion.fechaYHora    = DateTime.Now;
                        bITCancelacion.usuario       = this.UsuarioSistema;
                        bITCancelacion.proceso       = ProcesoBitcancelacion.GETSTATUSCANCELACION;
                        bITCancelacion.status        = StatusBitcancelacion.SolicitudRegistrada;
                        bITCancelacion.cfdiRecibo_ID = this.cfdirecibo_id;
                        bITCancelacion.statusMsj     = "[" + response.status.ToString() + "] " + response.mensaje;
                        bitCancelacionDAO.agregar(bITCancelacion, dbContext);


                        UUIDCancelado               = new cUUIDCancelado();
                        UUIDCancelado.UUID          = extras[i].UUID;
                        UUIDCancelado.status        = "160";
                        UUIDCancelado.statusSAT     = StatusXmlSat.SOLICITUDREGISTRADA;
                        UUIDCancelado.observaciones = "Error al obtener el status de la cancelación: [" + response.status.ToString() + "] " + response.mensaje;
                        datosCancelados.Add(UUIDCancelado);
                        break;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(datosCancelados);
        }