public XmlElement generaNodoTimbreFiscal(DatosTimbreFiscalDigital datosTimbreFiscalDigital) { try { TimbreFiscalDigital tfc = contruyeTimbreFiscalDigital(datosTimbreFiscalDigital); XmlSerializer xmlSerializer = new XmlSerializer(typeof(TimbreFiscalDigital)); XmlDocument documento = new XmlDocument(); //XmlNode a = new XmlNode(); string doc = ""; using (var sww = new StringWriterWithEncoding(Encoding.UTF8)) { using (XmlWriter writter = XmlWriter.Create(sww)) { xmlSerializer.Serialize(writter, tfc); doc = sww.ToString(); documento.LoadXml(doc); } } return(documento.DocumentElement); } catch (Exception ex) { return(null); } }
public TimbreFiscalDigital contruyeTimbreFiscalDigital(DatosTimbreFiscalDigital datosTimbreFiscalDigital) { TimbreFiscalDigital timbreFiscalDigital = new TimbreFiscalDigital(); timbreFiscalDigital.FechaTimbrado = (datosTimbreFiscalDigital.fechaTimbrado); timbreFiscalDigital.NoCertificadoSAT = (datosTimbreFiscalDigital.noCertificadoSAT); timbreFiscalDigital.SelloCFD = (datosTimbreFiscalDigital.selloCFD); timbreFiscalDigital.SelloSAT = (datosTimbreFiscalDigital.selloSAT); timbreFiscalDigital.UUID = (datosTimbreFiscalDigital.uuid); timbreFiscalDigital.Version = (datosTimbreFiscalDigital.version); return(timbreFiscalDigital); }
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); }
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); }