public string gfCreaCFDI_Donativo(string sNombreDB, int iNumeroFactura, int iTipoFacturaNotaCredito, int iNumeroCompania, int iNumeroPersona, string sParametroOpcional) { #region variables CFDIV3_2 dsPM = new CFDIV3_2(); string sTempParam = string.Concat("iNumeroFactura=", iNumeroFactura.ToString(), "|iTipoFacturaNotaCredito=", iTipoFacturaNotaCredito.ToString(), "|sDataBaseName=", sNombreDB, "|iNumeroCompania=", iNumeroCompania.ToString(), "|iNumeroPersona=", iNumeroPersona, "|sParametroOpcional=", sParametroOpcional); Parametros objPar = new Parametros(); string sRutaArchivos = string.Empty; string sUUID = string.Empty; string sPATH = string.Empty; string sMensaje = string.Empty; string sResultado = string.Empty; string sTempPath = string.Empty; objPar.companynumber = iNumeroCompania; objPar.Persona = iNumeroPersona.ToString(); int mes; FacturaController ctrl = new FacturaController(); DataTable table = new DataTable(), tableadenda = new DataTable(), tablequote = new DataTable(); string sReporte_CDFI = string.Empty, sAnio_Mes = string.Empty, sNombre_ArchivoTMP = string.Empty, spathString = string.Empty; int idError = -1; string Error = string.Empty, uuid = string.Empty, xmlTimbrado = string.Empty; DateTime fechaTimbre = new DateTime(); string lfservicioQR = "http://zxing.org/w/chart?cht=qr&chs=230x230&chld=L&choe=UTF-8&chl="; ICFD objCFDi = new CFDI32(); string strDestino = ConfigurationManager.AppSettings["strDestino"]; string strDestino48 = string.Empty; bool banderaPAC = false; string noCertificadoSAT = string.Empty; string noCertificado = string.Empty; string selloSAT = string.Empty; string selloCFD = string.Empty; string sCbb = string.Empty; string sPAC = string.Empty; #endregion if (FacturaController.gfValidaSiEsFactura(sNombreDB, iNumeroFactura, iNumeroCompania.ToString(), iTipoFacturaNotaCredito) > 0) { if (iTipoFacturaNotaCredito == 0) FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, iTipoFacturaNotaCredito, ref objPar); else FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, 1, ref objPar); } else return string.Concat("sMensaje:", "OK", "|sUUID:", "", "|", "sPATH:", ""); try { sPAC = "PROFACT"; Comprobante cfdi = new Comprobante(); cfdi.version = "3.2"; cfdi.serie = objPar.serie;// sCfdi_Serie; cfdi.folio = objPar.folio; cfdi.fecha = DateTime.Now; cfdi.formaDePago = objPar.formaDePago; cfdi.condicionesDePago = objPar.condicionesDePago; cfdi.tipoCambio = objPar.tipoCambio; cfdi.moneda = objPar.moneda; cfdi.tipoDeComprobante = objPar.tipoDeComprobante; cfdi.metodoDePago = objPar.metodoDePago; cfdi.lugarExpedicion = objPar.lugarExpedicion; cfdi.numCtaPago = (objPar.numCtaPago.Length == 3) ? objPar.numCtaPago.PadLeft(4, '0') : objPar.numCtaPago; cfdi.emisor.rfc = objPar.emisor_rfc; cfdi.emisor.nombre = objPar.emisor_nombre; cfdi.emisor.regimenFiscal.regimen = objPar.emisor_regimenFiscal_regimen; cfdi.emisor.domicilioFiscal.calle = objPar.emisor_domicilioFiscal_calle; cfdi.emisor.domicilioFiscal.colonia = objPar.emisor_domicilioFiscal_colonia; cfdi.emisor.domicilioFiscal.municipio = objPar.emisor_domicilioFiscal_municipio; cfdi.emisor.domicilioFiscal.estado = objPar.emisor_domicilioFiscal_estado; cfdi.emisor.domicilioFiscal.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.domicilioFiscal.codigoPostal = objPar.emisor_domicilioFiscal_codigoPostal; /********************************************************************/ //Comprobante DataRow _comprobante = dsPM.Comprobante.NewRow(); _comprobante["version"] = "3.2"; _comprobante["serie"] = objPar.serie; _comprobante["folio"] = objPar.folio; _comprobante["fecha"] = DateTime.Now.ToString("dd'/'MM'/'yyyy HH:mm:ss"); _comprobante["formaDePago"] = objPar.formaDePago; _comprobante["condicionesDePago"] = objPar.condicionesDePago; _comprobante["tipoCambio"] = objPar.tipoCambio; _comprobante["moneda"] = objPar.moneda; _comprobante["tipoDeComprobante"] = objPar.tipoDeComprobante.ToUpper(); _comprobante["metodoDePago"] = objPar.metodoDePago; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; _comprobante["numCtaPago"] = objPar.numCtaPago; /********************************************************************/ //Emisor DataRow _emisor = dsPM.Emisor.NewRow(); _emisor["rfc"] = objPar.emisor_rfc; _emisor["nombre"] = objPar.emisor_nombre; objPar.emisor_logo = objPar.emisor_logo.Replace(@ConfigurationManager.AppSettings["emisor_logo_Origen"], @ConfigurationManager.AppSettings["emisor_logo_Destino"]); _emisor["logo"] = objPar.emisor_logo; dsPM.Emisor.Rows.Add(_emisor); /********************************************************************/ //Emisor regimenFiscal DataRow _regimenFiscal = dsPM.RegimenFiscal.NewRow(); _regimenFiscal["Regimen"] = objPar.emisor_regimenFiscal_regimen; dsPM.RegimenFiscal.Rows.Add(_regimenFiscal); /********************************************************************/ //Emisor domicilioFiscal DataRow _domicilioFiscal = dsPM.DomicilioFiscal.NewRow(); _domicilioFiscal["calle"] = objPar.emisor_domicilioFiscal_calle; _domicilioFiscal["colonia"] = objPar.emisor_domicilioFiscal_colonia; _domicilioFiscal["municipio"] = objPar.emisor_domicilioFiscal_municipio; _domicilioFiscal["estado"] = objPar.emisor_domicilioFiscal_estado; _domicilioFiscal["pais"] = objPar.emisor_domicilioFiscal_pais; _domicilioFiscal["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.DomicilioFiscal.Rows.Add(_domicilioFiscal); /********************************************************************/ if (objPar.emisor_expedidoEn_calle != "") { cfdi.emisor.expedidoEn = new Ubicacion(); cfdi.emisor.expedidoEn.calle = objPar.emisor_expedidoEn_calle; cfdi.emisor.expedidoEn.noExterior = objPar.emisor_expedidoEn_noExterior; cfdi.emisor.expedidoEn.noInterior = objPar.emisor_expedidoEn_noInterior; cfdi.emisor.expedidoEn.colonia = objPar.emisor_expedidoEn_colonia; cfdi.emisor.expedidoEn.localidad = objPar.emisor_expedidoEn_localidad; cfdi.emisor.expedidoEn.referencia = objPar.emisor_expedidoEn_referencia; cfdi.emisor.expedidoEn.municipio = objPar.emisor_expedidoEn_municipio; cfdi.emisor.expedidoEn.estado = objPar.emisor_expedidoEn_estado; cfdi.emisor.expedidoEn.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.expedidoEn.codigoPostal = objPar.emisor_expedidoEn_codigoPostal; //sSucursal_Tmp = string.Empty; objPar.sRuta_ArchivoTMP = ""; cfdi.lugarExpedicion = objPar.lugarExpedicion; /********************************************************************/ //expedidoEn DataRow _expedidoEn = dsPM.ExpedidoEn.NewRow(); _expedidoEn["calle"] = objPar.emisor_domicilioFiscal_calle; _expedidoEn["colonia"] = objPar.emisor_domicilioFiscal_colonia; _expedidoEn["localidad"] = objPar.emisor_expedidoEn_localidad; _expedidoEn["referencia"] = objPar.emisor_expedidoEn_referencia; _expedidoEn["municipio"] = objPar.emisor_domicilioFiscal_municipio; _expedidoEn["estado"] = objPar.emisor_domicilioFiscal_estado; _expedidoEn["pais"] = objPar.emisor_expedidoEn_pais; _expedidoEn["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.ExpedidoEn.Rows.Add(_expedidoEn); /********************************************************************/ } else { cfdi.lugarExpedicion = objPar.lugarExpedicion; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; } cfdi.receptor.rfc = objPar.receptor_rfc; cfdi.receptor.nombre = objPar.receptor_nombre; /********************************************************************/ //receptor DataRow _receptor = dsPM.Receptor.NewRow(); _receptor["rfc"] = objPar.receptor_rfc; _receptor["nombre"] = objPar.receptor_nombre; dsPM.Receptor.Rows.Add(_receptor); /********************************************************************/ cfdi.receptor.domicilio = new Ubicacion(); cfdi.receptor.domicilio.calle = objPar.receptor_domicilio_calle; cfdi.receptor.domicilio.noExterior = objPar.receptor_domicilio_noExterior; cfdi.receptor.domicilio.noInterior = objPar.receptor_domicilio_noInterior; cfdi.receptor.domicilio.colonia = objPar.receptor_domicilio_colonia; cfdi.receptor.domicilio.localidad = objPar.receptor_domicilio_localidad; cfdi.receptor.domicilio.referencia = objPar.receptor_domicilio_referencia; cfdi.receptor.domicilio.municipio = objPar.receptor_domicilio_municipio; cfdi.receptor.domicilio.estado = objPar.receptor_domicilio_estado; cfdi.receptor.domicilio.pais = objPar.receptor_domicilio_pais; cfdi.receptor.domicilio.codigoPostal = objPar.receptor_domicilio_codigoPostal; /********************************************************************/ //domicilio DataRow _domicilio = dsPM.Domicilio.NewRow(); _domicilio["calle"] = objPar.receptor_domicilio_calle; _domicilio["noExterior"] = objPar.receptor_domicilio_noExterior; _domicilio["noInterior"] = objPar.receptor_domicilio_noInterior; _domicilio["colonia"] = objPar.receptor_domicilio_colonia; _domicilio["localidad"] = objPar.receptor_domicilio_localidad; _domicilio["referencia"] = objPar.receptor_domicilio_referencia; _domicilio["municipio"] = objPar.receptor_domicilio_municipio; _domicilio["estado"] = objPar.receptor_domicilio_estado; _domicilio["pais"] = objPar.receptor_domicilio_pais; _domicilio["codigoPostal"] = objPar.receptor_domicilio_codigoPostal; dsPM.Domicilio.Rows.Add(_domicilio); int icontabilizada, idocumenttype, idocumentinternet; icontabilizada = 1; idocumenttype = -59; idocumentinternet = 1; table = FacturaController.GetPartidasGeneral(sNombreDB, iNumeroFactura, iTipoFacturaNotaCredito, objPar.companynumber, icontabilizada, idocumenttype, idocumentinternet); Concepto objConcepto = null; if (table.Rows.Count > 0) { foreach (DataRow row in table.Rows) { objConcepto = new Concepto(); objConcepto.noIdentificacion = row[4].ToString(); objConcepto.descripcion = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); objConcepto.unidad = row[6].ToString(); objConcepto.valorUnitario = Convert.ToDouble(row[8]); objConcepto.cantidad = Convert.ToDouble(row[7]); objConcepto.importe = objConcepto.cantidad * objConcepto.valorUnitario; cfdi.addConcepto(objConcepto); /********************************************************************/ //concepto DataRow _concepto = dsPM.Concepto.NewRow(); _concepto["noIdentificacion"] = row[4].ToString(); _concepto["descripcion"] = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); _concepto["unidad"] = row[6].ToString(); _concepto["valorUnitario"] = Convert.ToDouble(row[8]).ToString("G"); _concepto["cantidad"] = Convert.ToDouble(row[7]); _concepto["importe"] = (objConcepto.cantidad * objConcepto.valorUnitario).ToString("G"); dsPM.Concepto.Rows.Add(_concepto); } } else throw new Exception("*Sin detalle de partidas"); //Traslado Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)objPar.impuestos_dCfdi_ImporteIVA; cfdi.impuestos.addTraslado(objTraslado); cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPM.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = (objPar.impuestos_dRETISR + objPar.impuestos_dRETIVA).ToString("0.##"); _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; /********************************************************************/ // Z detalles DataRow _z = dsPM.Z.NewRow(); _z["Observaciones"] = string.IsNullOrEmpty(objPar.sObservaciones) ? " " : objPar.sObservaciones; _z["subtotal"] = objPar.subtotal.ToString(); _z["DomicilioEstablecimiento"] = FacturaController.lfDomicilioEstablecimientoGet(sNombreDB, objPar.iDatoSucursal, objPar.companynumber); string sImporteConLetra = FacturaController.import_to_string(sNombreDB, objPar.companynumber, objPar.total, 0, iNumeroFactura, iTipoFacturaNotaCredito).Rows[0][0].ToString(); _z["ImporteConLetra"] = sImporteConLetra; _z["D1"] = (objPar.sCfdi_Condiciones != null) ? objPar.sCfdi_Condiciones.ToUpper() : ""; dsPM.Z.Rows.Add(_z); if (string.IsNullOrEmpty(objPar.descuento)) { cfdi.descuento = 0.00000000000001; _comprobante["descuento"] = "0.00"; } else { cfdi.descuento = double.Parse(objPar.descuento); _comprobante["descuento"] = objPar.descuento; } cfdi.total = (double)objPar.total; _comprobante["total"] = (double)objPar.total; mes = DateTime.Today.Month; string smes; smes = Convert.ToString(mes); if (smes.Length == 1) sAnio_Mes = DateTime.Today.Year + "-0" + mes; else sAnio_Mes = DateTime.Today.Year + "-" + mes; sNombre_ArchivoTMP = objPar.emisor_rfc + "-" + objPar.serie + "" + objPar.folio; string sfecha = Convert.ToString(DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")); string suser = objPar.Persona; string sTemp = string.Empty; if (!string.IsNullOrEmpty(objPar.sSucursal_Nombre)) { sTemp = Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); spathString = Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); } else { sTemp = System.IO.Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); spathString = System.IO.Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); } sRutaArchivos = sTemp; try { if (!Directory.Exists(@spathString)) Directory.CreateDirectory(@spathString); } catch (Exception ex) { BitacoraController.gfLog("Servicio.CreateDirectory", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + " no timbro,error al crear directorio " + spathString + ex.Message, "gfs_generaComprobantteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } objPar.sRuta_Cer = objPar.sRuta_Cer.Replace(@ConfigurationManager.AppSettings["sRuta_Cer_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Cer_Replace_Destino"]); objPar.sRuta_Key = objPar.sRuta_Key.Replace(@ConfigurationManager.AppSettings["sRuta_Key_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Key_Replace_Destino"]); // Construye el XML con el certificado string xml = string.Empty; try { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString); } catch (Exception ex) { return string.Concat("sMensaje:", " Incidencia ,", ex.Message, ", " + ex.InnerException.ToString() + "|sUUID:", "Error", "|", "sPATH:", ex.Message); } XmlDocument xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); try { xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); sRutaArchivos += "|" + spathString + "\\" + sNombre_ArchivoTMP + ".xml"; } catch (Exception ex) { BitacoraController.gfLog("Servicio.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura + " no logro timbrar , detalle al guardarlo xml para enviar xml a timbrar" + ex.Message, "gfs_generaComprobantteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } #region Swicht de PAC FacturaController ctrlfactura = new FacturaController(); banderaPAC = new PACController().lfPROFACTCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam, objPar.sRuta_Cer, objPar.sRuta_Key, objPar.sContrasenia_Key); if (banderaPAC == false) { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString, -1, false, false); xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); new PACController().lfSERVISIMCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam); sPAC = "SERVISIM"; } #endregion if (idError != 0) { BitacoraController.gfLogFacturaRegistroError("Servisim", string.Concat("NO TIMBRO|", "-", Error), @sTempParam); sMensaje = "Error"; uuid = Error; sPATH = "ErrorAltimbrar"; return string.Concat("sMensaje:", "Error,", Error, "|sUUID:", Error, "|", "sPATH:", sPATH); } else { // ============================================================= // Busca elementos dentro del string ya timbrado ctrlfactura.gfXMLConsultaElementos(xmlTimbrado, ref noCertificadoSAT, ref noCertificado, ref selloSAT, ref selloCFD); sCbb = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", uuid); _comprobante["cbb"] = string.Concat(lfservicioQR + sCbb); dsPM.Comprobante.Rows.Add(_comprobante); /********************************************************************/ // TimbreFiscalDigital DataRow _TimbreFiscalDigital = dsPM.TimbreFiscalDigital.NewRow(); _TimbreFiscalDigital["UUID"] = uuid; _TimbreFiscalDigital["FechaTimbrado"] = fechaTimbre.ToString("dd/MM/yyyy"); _TimbreFiscalDigital["selloSAT"] = selloSAT; _TimbreFiscalDigital["selloCFD"] = selloCFD; _TimbreFiscalDigital["noCertificadoSAT"] = noCertificadoSAT; //noCertificado _comprobante["noCertificado"] = noCertificado; dsPM.TimbreFiscalDigital.Rows.Add(_TimbreFiscalDigital); //============================================== XmlDocument objXmlTimbrado = new XmlDocument(); xml = xmlTimbrado.ToString(); //objXmlTimbrado.LoadXml(xml); if (iTipoFacturaNotaCredito == 0) { //Ingreso //Adendas //ya tableadenda = ctrl.GetAdenda(sNombreDB, iNumeroFactura, objPar.companynumber); if (tableadenda != null) { if (tableadenda.Rows[0][0] != DBNull.Value) { int iTipoAdendaTemp = Convert.ToInt32(tableadenda.Rows[0][0]); switch (iTipoAdendaTemp) { //Adenda PHILLIPS case 0: if (!AddendaController.AdendaPhillips(sNombreDB, iNumeroFactura, 0, iNumeroCompania, ref xml)) return "false"; break; //Adenda METALSA case 1: if (!AddendaController.AdendaMetalsa(sNombreDB, iNumeroFactura, 0, iNumeroCompania, sNombre_ArchivoTMP + ".pdf", ref xml)) return "false"; break; // Adenda HP case 2: if (!AddendaController.AdendaHP(sNombreDB, iNumeroFactura, iNumeroCompania, ref xml)) return "false"; break; default: break; } } } objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "ingreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sTempParam, objPar.emisor_rfc); } catch (Exception ex) { BitacoraController.gfLog("Servicio.objXmlTimbrado.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + "se timbro,pero hubo una incidencia al guardar en el servidor 19," + sTempParam + ex.Message, "gfs_generaComprobanteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } else { objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "egreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sTempParam); } catch (Exception ex) { BitacoraController.gfLog("Servicio.objXmlTimbrado.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + "se timbro,pero hubo una incidencia al guardar en el servidor 19," + sTempParam + ex.Message, "gfs_generaComprobanteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } sMensaje = "OK"; sTempPath = string.Concat(strDestino.Replace(".xml", ".pdf")); using (ReportDocument reporte = (Reports.Reports.gfReporteDonativos(dsPM))) reporte.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, sTempPath); try { FacturaController.gfDatosCorreoCliente(sNombreDB, iNumeroPersona, iNumeroCompania, objPar.sArchivo, sParametroOpcional, iNumeroFactura, iTipoFacturaNotaCredito, cfdi.receptor.nombre, cfdi.receptor.rfc, cfdi.emisor.nombre, cfdi.emisor.rfc, (objPar.serie + objPar.folio), (objPar.tipoDeComprobante + " " + objPar.moneda), objPar.total.ToString()); } catch { } objPar.sArchivo = sTempPath; FacturaController.gfSendFilesAllServers(sRutaArchivos, objPar.sArchivo); } strDestino48 = sTempPath.Replace(@ConfigurationManager.AppSettings["strDestino48_Origen"] , @ConfigurationManager.AppSettings["strDestino48_Destino"]); sResultado = string.Concat("sMensaje:", sMensaje, "|sUUID:", uuid, "|", "sPATH:", strDestino48); return sResultado; } catch (Exception ex) { string sMensajeCancelacion = string.Empty; //FacturacionCancelacionController fcc = new FacturacionCancelacionController(); //decimal dTotal = 0; //int iNumFac_TablaFactura = fcc.lfConsultaNumeroFactura(iNumeroFactura, iNumeroCompania, Globales.sNombreDB, ref iNumeroPersona, ref dTotal); //fcc.lfCreaProcesoCancelacion(iNumeroFactura, iNumFac_TablaFactura, iNumeroCompania, Globales.sNombreDB, iTipoFacturaNotaCredito, Convert.ToInt32(iNumeroPersona), dTotal, ref sMensajeCancelacion); //if (!string.IsNullOrEmpty(uuid)) // sResultado = string.Concat("sMensaje:", "OK", "|sUUID:", uuid, "|", "sPATH:", sTempPath.Replace(@WebConfigurationManager.AppSettings["strDestino48_Origen"], @WebConfigurationManager.AppSettings["strDestino48_Destino"])); //else sResultado = string.Concat("sMensaje:", " Error facturación intente nuevamente,", sMensajeCancelacion, " ,", ex.Message, ",", ex.InnerException, " |sUUID:", " Error", "|", "sPATH:", ex.InnerException); return sResultado; } }
public string gfCreaCFDI(string sNombreDB, int iNumeroFactura, int iTipoFacturaNotaCredito, int iNumeroCompania, int iNumeroPersona, string sParametroOpcional) { #region Variables CFDIV3_2 dsPM = new CFDIV3_2(); bool bandera_tar = false; string noCertificadoSAT = string.Empty; string noCertificado = string.Empty; string selloSAT = string.Empty; string selloCFD = string.Empty; string sCbb = string.Empty; Parametros objPar = new Parametros(); string sRutaArchivos = string.Empty; string sUUID = string.Empty; string sPATH = string.Empty; string sMensaje = string.Empty; string sResultado = string.Empty; string sTempPath = string.Empty; objPar.companynumber = iNumeroCompania; objPar.Persona = iNumeroPersona.ToString(); int mes; FacturaController ctrl = new FacturaController(); DataTable table = new DataTable(), tableadenda = new DataTable(), tablequote = new DataTable(); string sReporte_CDFI = string.Empty, sAnio_Mes = string.Empty, sNombre_ArchivoTMP = string.Empty, spathString = string.Empty; int idError = -1; string Error = string.Empty, uuid = string.Empty, xmlTimbrado = string.Empty; DateTime fechaTimbre = new DateTime(); ; string lfservicioQR = "http://zxing.org/w/chart?cht=qr&chs=230x230&chld=L&choe=UTF-8&chl="; ICFD objCFDi = new CFDI32(); string strDestino = @ConfigurationManager.AppSettings["strDestino"]; string strDestino48 = string.Empty; string[] asParametroOpcional; string sTempParam = string.Concat("iNumeroFactura=", iNumeroFactura.ToString(), "|iTipoFacturaNotaCredito=", iTipoFacturaNotaCredito.ToString(), "|sDataBaseName=", sNombreDB, "|iNumeroCompania=", iNumeroCompania.ToString(), "|iNumeroPersona=", iNumeroPersona, "|sParametroOpcional=", sParametroOpcional); int iproviene = -1, ibanderanodosorigen = -1; string sreporte = string.Empty; int idecimal = -1; string simpuestoretencion = string.Empty; string simpuestoIEPS = string.Empty; decimal dImporteIEPS = -1; decimal dTasaIEPS = -1; decimal dImporteIEPSFederal = -1; decimal iImporteretencion = -1; bool banderaFacturaFisica = false, banderaPAC = false, banderaIEPS = false, banderaIEPS_FEDERAL = false; string sPAC = "PROFACT"; #endregion if (string.IsNullOrEmpty(sParametroOpcional)) throw new Exception("* Parametro Opcional son necesarios"); asParametroOpcional = sParametroOpcional.Split('|'); foreach (string item in asParametroOpcional) { string[] astemp = item.Split('='); switch (astemp[0].ToUpper()) { case "PROVIENE": iproviene = int.Parse(astemp[1]); break; case "REPORTE": sreporte = astemp[1]; break; case "DECIMAL": idecimal = int.Parse(astemp[1]); break; case "IMPUESTORETENCION": simpuestoretencion = astemp[1]; break; case "IMPORTERETENCION": iImporteretencion = decimal.Parse(astemp[1]); banderaFacturaFisica = true; break; case "NODOSORIG": ibanderanodosorigen = int.Parse(astemp[1]); break; case "IEPS": string sTempIPS = astemp[1]; try { dTasaIEPS = decimal.Parse(sTempIPS.Split(',')[0]); dImporteIEPS = decimal.Parse(sTempIPS.Split(',')[1]); } catch { dTasaIEPS = 0; dImporteIEPS = 0; } banderaIEPS = true; if (banderaFacturaFisica) banderaFacturaFisica = true; break; case "IEPS_FEDERAL": string sTempIPSFEDERAL = astemp[1]; try { dImporteIEPSFederal = decimal.Parse(astemp[1]); } catch { dImporteIEPSFederal = 0; } banderaIEPS_FEDERAL = true; if (banderaFacturaFisica) banderaFacturaFisica = true; break; default: break; } } if (FacturaController.gfValidaSiEsFactura(sNombreDB, iNumeroFactura, iNumeroCompania.ToString(), iTipoFacturaNotaCredito) > 0) { if (iTipoFacturaNotaCredito == 0) lfb_ZambranoGetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, iTipoFacturaNotaCredito, ref objPar, iproviene, sreporte, idecimal, simpuestoretencion, iImporteretencion); else lfb_ZambranoGetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, iTipoFacturaNotaCredito, ref objPar, iproviene, sreporte, idecimal, simpuestoretencion, iImporteretencion); } else return string.Concat("sMensaje:", "OK", "|sUUID:", "", "|", "sPATH:", ""); try { Comprobante cfdi = new Comprobante(); cfdi.version = "3.2"; cfdi.serie = objPar.serie;// sCfdi_Serie; cfdi.folio = objPar.folio; cfdi.fecha = DateTime.Now; cfdi.formaDePago = objPar.formaDePago; cfdi.condicionesDePago = objPar.condicionesDePago; cfdi.tipoCambio = objPar.tipoCambio; cfdi.moneda = objPar.moneda; cfdi.tipoDeComprobante = objPar.tipoDeComprobante; cfdi.metodoDePago = objPar.metodoDePago; cfdi.lugarExpedicion = objPar.lugarExpedicion; cfdi.numCtaPago = (objPar.numCtaPago.Length == 3) ? objPar.numCtaPago.PadLeft(4, '0') : objPar.numCtaPago; cfdi.emisor.rfc = objPar.emisor_rfc; cfdi.emisor.nombre = objPar.emisor_nombre; cfdi.emisor.regimenFiscal.regimen = objPar.emisor_regimenFiscal_regimen; cfdi.emisor.domicilioFiscal.calle = objPar.emisor_domicilioFiscal_calle; cfdi.emisor.domicilioFiscal.colonia = objPar.emisor_domicilioFiscal_colonia; cfdi.emisor.domicilioFiscal.municipio = objPar.emisor_domicilioFiscal_municipio; cfdi.emisor.domicilioFiscal.estado = objPar.emisor_domicilioFiscal_estado; cfdi.emisor.domicilioFiscal.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.domicilioFiscal.codigoPostal = objPar.emisor_domicilioFiscal_codigoPostal; /********************************************************************/ //Comprobante //INTEGRAReports.dsPersonasFisicas dsPM = new dsPersonasFisicas(); DataRow _comprobante = dsPM.Comprobante.NewRow(); _comprobante["version"] = "3.2"; _comprobante["serie"] = objPar.serie; _comprobante["folio"] = objPar.folio; _comprobante["fecha"] = DateTime.Now.ToString("dd'/'MM'/'yyyy HH:mm:ss"); _comprobante["formaDePago"] = objPar.formaDePago; _comprobante["condicionesDePago"] = objPar.condicionesDePago; _comprobante["tipoCambio"] = objPar.tipoCambio; _comprobante["moneda"] = objPar.moneda; _comprobante["tipoDeComprobante"] = objPar.tipoDeComprobante.ToUpper(); _comprobante["metodoDePago"] = objPar.metodoDePago; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; _comprobante["numCtaPago"] = objPar.numCtaPago; /********************************************************************/ //Emisor DataRow _emisor = dsPM.Emisor.NewRow(); _emisor["rfc"] = objPar.emisor_rfc; _emisor["nombre"] = objPar.emisor_nombre; objPar.emisor_logo = objPar.emisor_logo.Replace(ConfigurationManager.AppSettings["emisor_logo_Origen"], @ConfigurationManager.AppSettings["emisor_logo_Destino"]); _emisor["logo"] = objPar.emisor_logo; dsPM.Emisor.Rows.Add(_emisor); /********************************************************************/ //Emisor regimenFiscal DataRow _regimenFiscal = dsPM.RegimenFiscal.NewRow(); _regimenFiscal["Regimen"] = objPar.emisor_regimenFiscal_regimen; dsPM.RegimenFiscal.Rows.Add(_regimenFiscal); /********************************************************************/ //Emisor domicilioFiscal DataRow _domicilioFiscal = dsPM.DomicilioFiscal.NewRow(); _domicilioFiscal["calle"] = objPar.emisor_domicilioFiscal_calle; _domicilioFiscal["colonia"] = objPar.emisor_domicilioFiscal_colonia; _domicilioFiscal["municipio"] = objPar.emisor_domicilioFiscal_municipio; _domicilioFiscal["estado"] = objPar.emisor_domicilioFiscal_estado; _domicilioFiscal["pais"] = objPar.emisor_domicilioFiscal_pais; _domicilioFiscal["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.DomicilioFiscal.Rows.Add(_domicilioFiscal); /********************************************************************/ if (String.IsNullOrEmpty(objPar.emisor_expedidoEn_calle)) { cfdi.emisor.expedidoEn = new Ubicacion(); cfdi.emisor.expedidoEn.calle = objPar.emisor_expedidoEn_calle; cfdi.emisor.expedidoEn.noExterior = objPar.emisor_expedidoEn_noExterior; cfdi.emisor.expedidoEn.noInterior = objPar.emisor_expedidoEn_noInterior; cfdi.emisor.expedidoEn.colonia = objPar.emisor_expedidoEn_colonia; cfdi.emisor.expedidoEn.localidad = objPar.emisor_expedidoEn_localidad; cfdi.emisor.expedidoEn.referencia = objPar.emisor_expedidoEn_referencia; cfdi.emisor.expedidoEn.municipio = objPar.emisor_expedidoEn_municipio; cfdi.emisor.expedidoEn.estado = objPar.emisor_expedidoEn_estado; cfdi.emisor.expedidoEn.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.expedidoEn.codigoPostal = objPar.emisor_expedidoEn_codigoPostal; //sSucursal_Tmp = string.Empty; objPar.sRuta_ArchivoTMP = ""; cfdi.lugarExpedicion = objPar.lugarExpedicion; /********************************************************************/ //expedidoEn DataRow _expedidoEn = dsPM.ExpedidoEn.NewRow(); _expedidoEn["calle"] = objPar.emisor_domicilioFiscal_calle; _expedidoEn["colonia"] = objPar.emisor_domicilioFiscal_colonia; _expedidoEn["localidad"] = objPar.emisor_expedidoEn_localidad; _expedidoEn["referencia"] = objPar.emisor_expedidoEn_referencia; _expedidoEn["municipio"] = objPar.emisor_domicilioFiscal_municipio; _expedidoEn["estado"] = objPar.emisor_domicilioFiscal_estado; _expedidoEn["pais"] = objPar.emisor_domicilioFiscal_pais; _expedidoEn["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.ExpedidoEn.Rows.Add(_expedidoEn); /********************************************************************/ } else { cfdi.lugarExpedicion = objPar.lugarExpedicion; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; } cfdi.receptor.rfc = objPar.receptor_rfc; cfdi.receptor.nombre = objPar.receptor_nombre; /********************************************************************/ //receptor DataRow _receptor = dsPM.Receptor.NewRow(); _receptor["rfc"] = objPar.receptor_rfc; _receptor["nombre"] = objPar.receptor_nombre; dsPM.Receptor.Rows.Add(_receptor); /********************************************************************/ cfdi.receptor.domicilio = new Ubicacion(); cfdi.receptor.domicilio.calle = objPar.receptor_domicilio_calle; cfdi.receptor.domicilio.noExterior = objPar.receptor_domicilio_noExterior; cfdi.receptor.domicilio.noInterior = objPar.receptor_domicilio_noInterior; cfdi.receptor.domicilio.colonia = objPar.receptor_domicilio_colonia; cfdi.receptor.domicilio.localidad = objPar.receptor_domicilio_localidad; cfdi.receptor.domicilio.referencia = objPar.receptor_domicilio_referencia; cfdi.receptor.domicilio.municipio = objPar.receptor_domicilio_municipio; cfdi.receptor.domicilio.estado = objPar.receptor_domicilio_estado; cfdi.receptor.domicilio.pais = objPar.receptor_domicilio_pais; cfdi.receptor.domicilio.codigoPostal = objPar.receptor_domicilio_codigoPostal; /********************************************************************/ //domicilio DataRow _domicilio = dsPM.Domicilio.NewRow(); _domicilio["calle"] = objPar.receptor_domicilio_calle; _domicilio["noExterior"] = objPar.receptor_domicilio_noExterior; _domicilio["noInterior"] = objPar.receptor_domicilio_noInterior; _domicilio["colonia"] = objPar.receptor_domicilio_colonia; _domicilio["localidad"] = objPar.receptor_domicilio_localidad; _domicilio["referencia"] = objPar.receptor_domicilio_referencia; _domicilio["municipio"] = objPar.receptor_domicilio_municipio; _domicilio["estado"] = objPar.receptor_domicilio_estado; _domicilio["pais"] = objPar.receptor_domicilio_pais; _domicilio["codigoPostal"] = objPar.receptor_domicilio_codigoPostal; dsPM.Domicilio.Rows.Add(_domicilio); int icontabilizada, idocumenttype, idocumentinternet; icontabilizada = 1; idocumenttype = -59; idocumentinternet = 1; table = lfdt_ZambranoGetPartidasGeneral(sNombreDB, iNumeroFactura, icontabilizada, idocumenttype, idocumentinternet, objPar.companynumber, iTipoFacturaNotaCredito, iproviene, idecimal).Copy(); Concepto objConcepto = null; int idPartida = 0; if (table.Rows.Count > 0) { foreach (DataRow row in table.Rows) { objConcepto = new Concepto(); objConcepto.noIdentificacion = (banderaIEPS_FEDERAL) ? string.Concat("IEPS:", "%", (string.IsNullOrEmpty(row["ieps_porcentaje"].ToString())) ? 0 : Convert.ToDouble(row["ieps_porcentaje"]), ",$", (string.IsNullOrEmpty(row["ieps_precio"].ToString())) ? 0 : Convert.ToDouble(row["ieps_precio"])) : row[4].ToString(); objConcepto.descripcion = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); objConcepto.unidad = row[6].ToString(); objConcepto.valorUnitario = (row[8] == null) ? 0 : Convert.ToDouble(row[8]); objConcepto.cantidad = (row[7] == null) ? 0 : Convert.ToDouble(row[7]); objConcepto.importe = (row["importe"] == null) ? 0 : Convert.ToDouble(row["importe"]); objConcepto.IEPS_porcentaje = (string.IsNullOrEmpty(row["ieps_porcentaje"].ToString())) ? 0 : Convert.ToDouble(row["ieps_porcentaje"]); objConcepto.IEPS_importe = (string.IsNullOrEmpty(row["ieps_precio"].ToString())) ? 0 : Convert.ToDouble(row["ieps_precio"]); DataRow _concepto = dsPM.Concepto.NewRow(); if (row["tar_clave"] != DBNull.Value) if (!string.IsNullOrEmpty(row["tar_clave"].ToString())) { bandera_tar = true; ComplementoConcepto cco = new ComplementoConcepto(); cco.Version = "1.0"; cco.TAR = row["tar_clave"].ToString(); objConcepto.complementoConcepto = cco; _concepto["Conceptos_Id"] = row["tar_clave"].ToString(); } cfdi.addConcepto(objConcepto); /********************************************************************/ //concepto _concepto["Concepto_Id"] = ++idPartida; _concepto["noIdentificacion"] = row[4].ToString(); _concepto["descripcion"] = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); _concepto["unidad"] = row[6].ToString(); _concepto["valorUnitario"] = objConcepto.valorUnitario; _concepto["cantidad"] = objConcepto.cantidad; _concepto["importe"] = objConcepto.importe; _concepto["concepto_id"] = row["dato_partida"].ToString(); dsPM.Concepto.Rows.Add(_concepto); } } else throw new Exception("* Sin detalle de partidas"); // ===================================================================== // Factura Fisicas (con retenciones) y sin IEPS if (banderaFacturaFisica && banderaIEPS == false && banderaIEPS_FEDERAL == false) { // ===================================================================== //Agregar RET IVA objPar.impuestos_dRETIVA = iImporteretencion; //objPar.traslado_importe = iImporteretencion; Retencion objReteII = new Retencion(); objReteII.importe = (double)objPar.impuestos_dRETIVA; objReteII.impuesto = "IVA"; cfdi.impuestos.addRetencion(objReteII); //Retencion IVA DataRow _Retencion = dsPM.Retencion.NewRow(); _Retencion["importe"] = objPar.impuestos_dRETIVA.ToString("0.##"); _Retencion["impuesto"] = "RETENCION IVA"; dsPM.Retencion.Rows.Add(_Retencion); // ===================================================================== ////Agregar RET ISR //Retencion objRete = new Retencion(); //objRete.importe = (double)objPar.impuestos_dRETISR; //objRete.impuesto = "ISR"; //cfdi.impuestos.addRetencion(objRete); ////Retencion ISR //DataRow _ISR = dsPF.Retencion.NewRow(); //_ISR["importe"] = objPar.impuestos_dRETISR.ToString("0.00"); ; //_ISR["impuesto"] = "RETENCION ISR"; //dsPF.Retencion.Rows.Add(_ISR); //******************************************************************/ //Traslado Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)objPar.impuestos_dCfdi_ImporteIVA; cfdi.impuestos.addTraslado(objTraslado); //cfdi.impuestos.totalImpuestosTrasladados = Convert.ToDouble(dCfdi_ImporteIVA); aparece como de solo lectura cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPM.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = (iImporteretencion == -1) ? 0 : iImporteretencion; _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; goto Termina; } // ===================================================================== // Factura IEPS(sin retenciones) if (banderaIEPS || banderaIEPS_FEDERAL && banderaFacturaFisica == false) { Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)objPar.impuestos_dCfdi_ImporteIVA; cfdi.impuestos.addTraslado(objTraslado); //******************************************************************/ if ((double)dImporteIEPS > 0 && banderaIEPS_FEDERAL == false) { //Traslado IEPS Traslado objTrasladoIEPS = new Traslado(); objTrasladoIEPS.tasa = (double)dTasaIEPS; objTrasladoIEPS.impuesto = "IEPS"; objTrasladoIEPS.importe = (double)dImporteIEPS; cfdi.impuestos.addTraslado(objTrasladoIEPS); DataRow _IEPS = dsPM.Deducciones.NewRow(); _IEPS["TotalGravado"] = objTrasladoIEPS.tasa.ToString(); _IEPS["TotalExento"] = objTrasladoIEPS.importe.ToString(); dsPM.Deducciones.Rows.Add(_IEPS); } else { //Traslado IEPS ESTATAL Traslado objTrasladoIEPS = new Traslado(); objTrasladoIEPS.tasa = (double)dTasaIEPS; objTrasladoIEPS.impuesto = "IEPS"; objTrasladoIEPS.importe = (double)dImporteIEPS; cfdi.impuestos.addTraslado(objTrasladoIEPS); DataRow _IEPS = dsPM.Deducciones.NewRow(); _IEPS["TotalGravado"] = objTrasladoIEPS.tasa.ToString(); _IEPS["TotalExento"] = objTrasladoIEPS.importe.ToString(); dsPM.Deducciones.Rows.Add(_IEPS); //Traslado IEPS FEDERAL objTrasladoIEPS = new Traslado(); objTrasladoIEPS.tasa = objConcepto.IEPS_porcentaje; objTrasladoIEPS.impuesto = "IEPS"; objTrasladoIEPS.importe = (double)dImporteIEPSFederal; cfdi.impuestos.addTraslado(objTrasladoIEPS); } //cfdi.impuestos.totalImpuestosTrasladados = Convert.ToDouble(dCfdi_ImporteIVA); aparece como de solo lectura cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPM.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = (iImporteretencion == -1) ? 0 : iImporteretencion; _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; goto Termina; } if (banderaIEPS == false && banderaFacturaFisica == false) { // ***************************************************************** // Factura Morales (sin retenciones) //Traslado Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)objPar.impuestos_dCfdi_ImporteIVA; cfdi.impuestos.addTraslado(objTraslado); cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPM.Impuestos.NewRow(); //_Impuestos["totalImpuestosRetenidos"] = (objPar.impuestos_dRETISR + objPar.impuestos_dRETIVA).ToString("0.##"); _Impuestos["totalImpuestosRetenidos"] = (iImporteretencion == -1) ? 0 : iImporteretencion; _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; /********************************************************************/ goto Termina; } Termina: // Z detalles DataRow _z = dsPM.Z.NewRow(); _z["Observaciones"] = string.IsNullOrEmpty(objPar.sObservaciones) ? " " : objPar.sObservaciones; _z["subtotal"] = objPar.subtotal.ToString(); _z["DomicilioEstablecimiento"] = FacturaController.lfDomicilioEstablecimientoGet(sNombreDB, objPar.iDatoSucursal, objPar.companynumber); string sImporteConLetra = FacturaController.import_to_string(sNombreDB, objPar.companynumber, objPar.total, 0, iNumeroFactura, iTipoFacturaNotaCredito).Rows[0][0].ToString(); _z["ImporteConLetra"] = sImporteConLetra; _z["D1"] = (objPar.sCfdi_Condiciones != null) ? objPar.sCfdi_Condiciones.ToUpper() : ""; _z["D2"] = objPar.domicilio_completo; // IEPS FEDERAL _z["IEPS_FEDERAL_PORCENTAJE"] = objConcepto.IEPS_porcentaje; _z["IEPS_FEDERAL_IMPORTE"] = objConcepto.IEPS_importe; _z["IEPS_FEDERAL_PRECIO"] = dImporteIEPSFederal; dsPM.Z.Rows.Add(_z); /********************************************************************/ if (string.IsNullOrEmpty(objPar.descuento)) { cfdi.descuento = 0.00000000000001; _comprobante["descuento"] = "0.00"; } else { cfdi.descuento = double.Parse(objPar.descuento); _comprobante["descuento"] = objPar.descuento; } _comprobante["total"] = (double)objPar.total; if (idecimal == 1) sreporte = string.Concat(sreporte, "?2DECIMALES"); if (string.IsNullOrEmpty(objPar.descuento)) { cfdi.descuento = 0.00000000000001; _comprobante["descuento"] = "0.00"; } else { cfdi.descuento = double.Parse(objPar.descuento); _comprobante["descuento"] = objPar.descuento; } cfdi.total = (double)objPar.total; _comprobante["total"] = (double)objPar.total; mes = DateTime.Today.Month; string smes; smes = Convert.ToString(mes); if (smes.Length == 1) sAnio_Mes = DateTime.Today.Year + "-0" + mes; else sAnio_Mes = DateTime.Today.Year + "-" + mes; sNombre_ArchivoTMP = objPar.emisor_rfc + "-" + objPar.serie + "" + objPar.folio; string sfecha = Convert.ToString(DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")); string suser = objPar.Persona; string sTemp = string.Empty; if (!string.IsNullOrEmpty(objPar.sSucursal_Nombre)) { sTemp = Path.Combine("RPT_" + sNombreDB.Replace("KONEXUS_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); sTemp = Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); spathString = Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); } else { sTemp = System.IO.Path.Combine("RPT_" + sNombreDB.Replace("KONEXUS_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); sTemp = System.IO.Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); spathString = System.IO.Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); } sRutaArchivos = sTemp; try { if (!Directory.Exists(@spathString)) Directory.CreateDirectory(@spathString); } catch (Exception ex) { BitacoraController.gfLog("Servicio.CreateDirectory", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + " no timbro,error al crear directorio " + spathString + ex.Message, "gfs_generaComprobantteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error", "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } objPar.sRuta_Cer = objPar.sRuta_Cer.Replace(@ConfigurationManager.AppSettings["sRuta_Cer_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Cer_Replace_Destino"]); objPar.sRuta_Key = objPar.sRuta_Key.Replace(@ConfigurationManager.AppSettings["sRuta_Key_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Key_Replace_Destino"]); string xml = string.Empty; try { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString, ibanderanodosorigen, bandera_tar); } catch (Exception ex) { return string.Concat("sMensaje:", " Incidencia ,", ex.Message, ", " + ex.InnerException.ToString() + "|sUUID:", "Error", "|", "sPATH:", ex.Message); } XmlDocument xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); try { xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); sRutaArchivos += "|" + spathString + "\\" + sNombre_ArchivoTMP + ".xml"; } catch (Exception ex) { BitacoraController.gfLog("Servicio.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura + " no logro timbrar , detalle al guardarlo xml para enviar xml a timbrar" + ex.Message, "gfs_generaComprobantteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error", "|sUUID:", "Error", "|", "sPATH:", ex.Message); } #region Swicht de PAC banderaPAC = new PACController().lfPROFACTCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam, objPar.sRuta_Cer, objPar.sRuta_Key, objPar.sContrasenia_Key); if (banderaPAC == false) { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString, -1, false, false); xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); new PACController().lfSERVISIMCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam); sPAC = "SERVISIM"; } #endregion if (idError != 0) { FacturaController.gfEmailSend(string.Concat("ZambranoController,gfCreaCFDI", sPAC, " El tiempo de espera es demasiado |Incidencia", Error, "|BD:", sNombreDB, "|Parametros:" + sTempParam), FacturaController.listaContactosIncidenciaEmail, "INCIDENCIA FACTURACIÓN"); sMensaje = "Error"; uuid = Error; sPATH = "ErrorAltimbrar"; return string.Concat("sMensaje:", "Error", "|sUUID:", Error, "|", "sPATH:", sPATH); } else { // ============================================================= // Busca elementos dentro del string ya timbrado new FacturaController().gfXMLConsultaElementos(xmlTimbrado, ref noCertificadoSAT, ref noCertificado, ref selloSAT, ref selloCFD); sCbb = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", uuid); _comprobante["cbb"] = string.Concat(lfservicioQR + sCbb); _comprobante["noCertificado"] = noCertificado; dsPM.Comprobante.Rows.Add(_comprobante); /********************************************************************/ // TimbreFiscalDigital DataRow _TimbreFiscalDigital = dsPM.TimbreFiscalDigital.NewRow(); _TimbreFiscalDigital["UUID"] = uuid; _TimbreFiscalDigital["FechaTimbrado"] = fechaTimbre.ToString("dd/MM/yyyy"); _TimbreFiscalDigital["selloSAT"] = selloSAT; _TimbreFiscalDigital["selloCFD"] = selloCFD; _TimbreFiscalDigital["noCertificadoSAT"] = noCertificadoSAT; //noCertificado dsPM.TimbreFiscalDigital.Rows.Add(_TimbreFiscalDigital); //============================================== XmlDocument objXmlTimbrado = new XmlDocument(); xml = xmlTimbrado.ToString(); //objXmlTimbrado.LoadXml(xml); if (iTipoFacturaNotaCredito == 0) { tableadenda = ctrl.GetAdenda(sNombreDB, iNumeroFactura, objPar.companynumber); if (tableadenda != null) { if (tableadenda.Rows[0][0] != DBNull.Value) { int iTipoAdendaTemp = Convert.ToInt32(tableadenda.Rows[0][0]); switch (iTipoAdendaTemp) { //Adenda PHILLIPS case 0: if (!AddendaController.AdendaPhillips(sNombreDB, iNumeroFactura, 0, iNumeroCompania, ref xml)) return "false"; break; //Adenda METALSA case 1: if (!AddendaController.AdendaMetalsa(sNombreDB, iNumeroFactura, 0, iNumeroCompania, sNombre_ArchivoTMP + ".pdf", ref xml)) return "false"; break; // Adenda HP case 2: if (!AddendaController.AdendaHP(sNombreDB, iNumeroFactura, iNumeroCompania, ref xml)) return "false"; break; default: break; } } } objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "ingreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sTempParam, objPar.emisor_rfc); } catch (Exception ex) { BitacoraController.gfLog("Servicio.objXmlTimbrado.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + "se timbro,pero hubo una incidencia al guardar en el servidor 19," + sTempParam + ex.Message, "gfs_generaComprobanteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error", "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } else { objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "egreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sTempParam); } catch (Exception ex) { BitacoraController.gfLog("Servicio.objXmlTimbrado.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + "se timbro,pero hubo una incidencia al guardar en el servidor 19," + sTempParam + ex.Message, "gfs_generaComprobanteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error", "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } sMensaje = "OK"; sTempPath = string.Concat(strDestino.Replace(".xml", ".pdf")); if (idecimal == 1) sreporte = string.Concat(sreporte, "?2DECIMALES"); if (dImporteIEPS > 0) sreporte = string.Concat(sreporte, "?IEPS"); if (banderaIEPS_FEDERAL) sreporte = string.Concat(sreporte, "?FEDERAL"); if (bandera_tar) sreporte = string.Concat(sreporte, "?CONTIENE_TAR"); // ================================================================================================ if (!lfCreaPDFZambrano(sreporte, sNombreDB, sTempPath, sTempParam, dsPM)) return string.Concat("sMensaje:", "Error al crear PDF, cancelar factura y comunicarse a sistemas |sUUID:", " Error al crear PDF, cancelar factura y comunicarse a sistemas ", "|", "sPATH:"); // ================================================================================================ try { FacturaController.gfDatosCorreoCliente(sNombreDB, iNumeroPersona, iNumeroCompania, objPar.sArchivo, sParametroOpcional, iNumeroFactura, iTipoFacturaNotaCredito, cfdi.receptor.nombre, cfdi.receptor.rfc, cfdi.emisor.nombre, cfdi.emisor.rfc, (objPar.serie + objPar.folio), (objPar.tipoDeComprobante + " " + objPar.moneda), objPar.total.ToString()); } catch { } FacturaController.gfSendFilesAllServers(sRutaArchivos, objPar.sArchivo); } strDestino48 = sTempPath.Replace(@ConfigurationManager.AppSettings["strDestino48_Origen"], @ConfigurationManager.AppSettings["strDestino48_Destino"]); // strDestino48 = sTempPath.Replace(@"\\VMS00001392", @"D:\Program files"); sResultado = string.Concat("sMensaje:", sMensaje, "|sUUID:", uuid, "|", "sPATH:", strDestino48); return sResultado; } catch (Exception ex) { string sMensajeCancelacion = string.Empty; //FacturacionCancelacionController fcc = new FacturacionCancelacionController(); //decimal dTotal = 0; //int iNumFac_TablaFactura = fcc.lfConsultaNumeroFactura(iNumeroFactura, iNumeroCompania, Globales.sNombreDB, ref iNumeroPersona, ref dTotal); //fcc.lfCreaProcesoCancelacion(iNumeroFactura, iNumFac_TablaFactura, iNumeroCompania, Globales.sNombreDB, iTipoFacturaNotaCredito, Convert.ToInt32(iNumeroPersona), dTotal, ref sMensajeCancelacion); //if (!string.IsNullOrEmpty(uuid)) // sResultado = string.Concat("sMensaje:", "OK", "|sUUID:", uuid, "|", "sPATH:", sTempPath.Replace(@WebConfigurationManager.AppSettings["strDestino48_Origen"], @WebConfigurationManager.AppSettings["strDestino48_Destino"])); //else sResultado = string.Concat("sMensaje:", " Error facturación intente nuevamente,", sMensajeCancelacion, " ,", ex.Message, ",", ex.InnerException, " |sUUID:", " Error", "|", "sPATH:", ex.InnerException); return sResultado; } }
/// <summary> /// Genera pre-xml para mandar petición de 'timbrado' al SAT y regresa el XML autorizado del cual se genera un pdf de la factura concebida /// </summary> /// <param name="iNumeroFactura">Número de factura</param> /// <param name="iTipoFacturaNotaCredito">0 Factura , 1 Nota de credito</param> /// <param name="sDataBaseName">Nombre de la Base de datos</param> /// <param name="iNumeroCompania">Numero de Empresa</param> /// <param name="iNumeroPersona">Persona a enviar email o persona del cual tomar contactos y enviar el email</param> /// <param name="sParametroOpcional">Parametros opcionales</param> /// <returns>Resultado</returns> public string gfCreaCFDI(string sNombreDB, int iNumeroFactura, int iTipoFacturaNotaCredito, int iNumeroCompania, int iNumeroPersona, string sParametroOpcional) { #region Variables CFDIV3_2 dsPM = new CFDIV3_2(); string sTempParam = string.Concat("iNumeroFactura=", iNumeroFactura.ToString(), "|iTipoFacturaNotaCredito=", iTipoFacturaNotaCredito.ToString(), "|sDataBaseName=", sNombreDB, "|iNumeroCompania=", iNumeroCompania.ToString(), "|iNumeroPersona=", iNumeroPersona, "|sParametroOpcional=", sParametroOpcional); string sNombreTipoDocumento = (iTipoFacturaNotaCredito == 0) ? "ingreso" : "egreso"; string sRutaArchivos = string.Empty, sUUID = string.Empty, sPATH = string.Empty, sMensaje = string.Empty, sResultado = string.Empty, sTempPath = string.Empty, sPAC = "PROFACT"; string sReporte_CDFI = string.Empty, sAnio_Mes = string.Empty, sNombre_ArchivoTMP = string.Empty, spathString = string.Empty; DataTable table = new DataTable(), tableadenda = new DataTable(), tablequote = new DataTable(); string Error = string.Empty, uuid = string.Empty, xmlTimbrado = string.Empty; string lfservicioQR = "http://zxing.org/w/chart?cht=qr&chs=230x230&chld=L&choe=UTF-8&chl="; string strDestino = ConfigurationManager.AppSettings["strDestino"]; ICFD objCFDi = new CFDI32(); Parametros objPar = new Parametros(); FacturaController ctrl = new FacturaController(); objPar.companynumber = iNumeroCompania; objPar.Persona = iNumeroPersona.ToString(); int mes = 0, idError = -1; bool banderaFacturaLibre = false, banderaPAC = false; DateTime fechaTimbre = new DateTime(); string strDestino48 = string.Empty; int icontabilizada = 1, idocumenttype = -59, idocumentinternet = 1; Concepto objConcepto = null; string noCertificadoSAT = string.Empty; string noCertificado = string.Empty; string selloSAT = string.Empty; string selloCFD = string.Empty; string sCbb = string.Empty; #endregion if (FacturaController.gfValidaSiEsFactura(sNombreDB, iNumeroFactura, iNumeroCompania.ToString(), iTipoFacturaNotaCredito) > 0) { if (iTipoFacturaNotaCredito == 0) FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, iTipoFacturaNotaCredito, ref objPar); else FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, 1, ref objPar); } else return string.Concat("sMensaje:", "OK", "|sUUID:", "", "|", "sPATH:", ""); try { Comprobante cfdi = new Comprobante(); cfdi.version = "3.2"; cfdi.serie = objPar.serie; cfdi.folio = objPar.folio; cfdi.fecha = DateTime.Now; cfdi.formaDePago = objPar.formaDePago; cfdi.condicionesDePago = objPar.condicionesDePago; cfdi.tipoCambio = objPar.tipoCambio; cfdi.moneda = objPar.moneda; cfdi.tipoDeComprobante = objPar.tipoDeComprobante; cfdi.metodoDePago = objPar.metodoDePago; cfdi.lugarExpedicion = objPar.lugarExpedicion; cfdi.numCtaPago = (objPar.numCtaPago.Length == 3) ? objPar.numCtaPago.PadLeft(4, '0') : objPar.numCtaPago; cfdi.emisor.rfc = objPar.emisor_rfc; cfdi.emisor.nombre = objPar.emisor_nombre; cfdi.emisor.regimenFiscal.regimen = objPar.emisor_regimenFiscal_regimen; cfdi.emisor.domicilioFiscal.calle = objPar.emisor_domicilioFiscal_calle; cfdi.emisor.domicilioFiscal.colonia = objPar.emisor_domicilioFiscal_colonia; cfdi.emisor.domicilioFiscal.municipio = objPar.emisor_domicilioFiscal_municipio; cfdi.emisor.domicilioFiscal.estado = objPar.emisor_domicilioFiscal_estado; cfdi.emisor.domicilioFiscal.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.domicilioFiscal.codigoPostal = objPar.emisor_domicilioFiscal_codigoPostal; /********************************************************************/ //Comprobante DataRow _comprobante = dsPM.Comprobante.NewRow(); _comprobante["version"] = "3.2"; _comprobante["serie"] = objPar.serie; _comprobante["folio"] = objPar.folio; _comprobante["fecha"] = DateTime.Now.ToString("dd'/'MM'/'yyyy HH:mm:ss"); _comprobante["formaDePago"] = objPar.formaDePago; _comprobante["condicionesDePago"] = objPar.condicionesDePago; _comprobante["tipoCambio"] = objPar.tipoCambio; _comprobante["moneda"] = objPar.moneda; _comprobante["tipoDeComprobante"] = objPar.tipoDeComprobante.ToUpper(); _comprobante["metodoDePago"] = objPar.metodoDePago; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; _comprobante["numCtaPago"] = objPar.numCtaPago; /********************************************************************/ //Emisor DataRow _emisor = dsPM.Emisor.NewRow(); _emisor["rfc"] = objPar.emisor_rfc; _emisor["nombre"] = objPar.emisor_nombre; objPar.emisor_logo = objPar.emisor_logo.Replace(@ConfigurationManager.AppSettings["emisor_logo_Origen"], @ConfigurationManager.AppSettings["emisor_logo_Destino"]); _emisor["logo"] = objPar.emisor_logo; dsPM.Emisor.Rows.Add(_emisor); /********************************************************************/ //Emisor regimenFiscal DataRow _regimenFiscal = dsPM.RegimenFiscal.NewRow(); _regimenFiscal["Regimen"] = objPar.emisor_regimenFiscal_regimen; dsPM.RegimenFiscal.Rows.Add(_regimenFiscal); /********************************************************************/ //Emisor domicilioFiscal DataRow _domicilioFiscal = dsPM.DomicilioFiscal.NewRow(); _domicilioFiscal["calle"] = objPar.emisor_domicilioFiscal_calle; _domicilioFiscal["colonia"] = objPar.emisor_domicilioFiscal_colonia; _domicilioFiscal["municipio"] = objPar.emisor_domicilioFiscal_municipio; _domicilioFiscal["estado"] = objPar.emisor_domicilioFiscal_estado; _domicilioFiscal["pais"] = objPar.emisor_domicilioFiscal_pais; _domicilioFiscal["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.DomicilioFiscal.Rows.Add(_domicilioFiscal); //if (objPar.emisor_expedidoEn_calle != "") DataRow _expedidoEn = dsPM.ExpedidoEn.NewRow(); if (!string.IsNullOrEmpty(objPar.emisor_expedidoEn_calle)) { cfdi.emisor.expedidoEn = new Ubicacion(); cfdi.emisor.expedidoEn.calle = objPar.emisor_expedidoEn_calle; cfdi.emisor.expedidoEn.noExterior = objPar.emisor_expedidoEn_noExterior; cfdi.emisor.expedidoEn.noInterior = objPar.emisor_expedidoEn_noInterior; cfdi.emisor.expedidoEn.colonia = objPar.emisor_expedidoEn_colonia; cfdi.emisor.expedidoEn.localidad = objPar.emisor_expedidoEn_localidad; cfdi.emisor.expedidoEn.referencia = objPar.emisor_expedidoEn_referencia; cfdi.emisor.expedidoEn.municipio = objPar.emisor_expedidoEn_municipio; cfdi.emisor.expedidoEn.estado = objPar.emisor_expedidoEn_estado; cfdi.emisor.expedidoEn.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.expedidoEn.codigoPostal = objPar.emisor_expedidoEn_codigoPostal; objPar.sRuta_ArchivoTMP = ""; cfdi.lugarExpedicion = objPar.lugarExpedicion; /********************************************************************/ //expedidoEn _expedidoEn["calle"] = objPar.emisor_domicilioFiscal_calle; _expedidoEn["colonia"] = objPar.emisor_domicilioFiscal_colonia; _expedidoEn["localidad"] = objPar.emisor_expedidoEn_localidad; _expedidoEn["referencia"] = objPar.emisor_expedidoEn_referencia; _expedidoEn["municipio"] = objPar.emisor_domicilioFiscal_municipio; _expedidoEn["estado"] = objPar.emisor_domicilioFiscal_estado; _expedidoEn["pais"] = objPar.emisor_domicilioFiscal_pais; _expedidoEn["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPM.ExpedidoEn.Rows.Add(_expedidoEn); /********************************************************************/ } else { cfdi.lugarExpedicion = objPar.lugarExpedicion; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; _expedidoEn["calle"] = string.Concat(objPar.emisor_domicilioFiscal_calle, " ", objPar.emisor_domicilioFiscal_colonia, " ", objPar.emisor_domicilioFiscal_municipio, " ", objPar.emisor_domicilioFiscal_estado, " ", objPar.emisor_domicilioFiscal_codigoPostal); dsPM.ExpedidoEn.Rows.Add(_expedidoEn); } //if (sNombreDB == "INTEGRA_CPAE" || sNombreDB == "INTEGRA_TDS" && string.IsNullOrEmpty(objPar.emisor_expedidoEn_calle)) //{ // parametros.lugarExpedicion = string.Concat(parametros.emisor_domicilioFiscal_calle, " ", parametros.emisor_domicilioFiscal_colonia, " ", parametros.emisor_domicilioFiscal_municipio, " ", parametros.emisor_domicilioFiscal_estado, " ", parametros.emisor_domicilioFiscal_codigoPostal); //} cfdi.receptor.rfc = objPar.receptor_rfc; cfdi.receptor.nombre = objPar.receptor_nombre; /********************************************************************/ //receptor DataRow _receptor = dsPM.Receptor.NewRow(); _receptor["rfc"] = objPar.receptor_rfc; _receptor["nombre"] = objPar.receptor_nombre; dsPM.Receptor.Rows.Add(_receptor); /********************************************************************/ cfdi.receptor.domicilio = new Ubicacion(); cfdi.receptor.domicilio.calle = objPar.receptor_domicilio_calle; cfdi.receptor.domicilio.noExterior = objPar.receptor_domicilio_noExterior; cfdi.receptor.domicilio.noInterior = objPar.receptor_domicilio_noInterior; cfdi.receptor.domicilio.colonia = objPar.receptor_domicilio_colonia; cfdi.receptor.domicilio.localidad = objPar.receptor_domicilio_localidad; cfdi.receptor.domicilio.referencia = objPar.receptor_domicilio_referencia; cfdi.receptor.domicilio.municipio = objPar.receptor_domicilio_municipio; cfdi.receptor.domicilio.estado = objPar.receptor_domicilio_estado; cfdi.receptor.domicilio.pais = objPar.receptor_domicilio_pais; cfdi.receptor.domicilio.codigoPostal = objPar.receptor_domicilio_codigoPostal; /********************************************************************/ //domicilio DataRow _domicilio = dsPM.Domicilio.NewRow(); _domicilio["calle"] = objPar.receptor_domicilio_calle; _domicilio["noExterior"] = objPar.receptor_domicilio_noExterior; _domicilio["noInterior"] = objPar.receptor_domicilio_noInterior; _domicilio["colonia"] = objPar.receptor_domicilio_colonia; _domicilio["localidad"] = objPar.receptor_domicilio_localidad; _domicilio["referencia"] = objPar.receptor_domicilio_referencia; _domicilio["municipio"] = objPar.receptor_domicilio_municipio; _domicilio["estado"] = objPar.receptor_domicilio_estado; _domicilio["pais"] = objPar.receptor_domicilio_pais; _domicilio["codigoPostal"] = objPar.receptor_domicilio_codigoPostal; dsPM.Domicilio.Rows.Add(_domicilio); // Consulta Partidas de factura table = FacturaController.GetPartidasGeneral(sNombreDB, iNumeroFactura, iTipoFacturaNotaCredito, objPar.companynumber, icontabilizada, idocumenttype, idocumentinternet); if (table.Rows.Count > 0) { if (sNombreDB == "INTEGRA_TABLADECO") banderaFacturaLibre = (Convert.ToInt32(table.Rows[0]["FACTURADESCRIPCION"]) == -105) ? true : false; if (sNombreDB == "INTEGRA_CPAE" && table.Rows[0]["Caracteristicas"] != DBNull.Value) sTempParam = string.Concat(sParametroOpcional, "PDFNORMAL"); foreach (DataRow row in table.Rows) { string sTempCadena = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); // PARCHE PARA CPAE sTempCadena = (sTempCadena == "-" && sNombreDB == "INTEGRA_CPAE") ? row["Caracteristicas"].ToString() : sTempCadena; objConcepto = new Concepto(); objConcepto.noIdentificacion = row[4].ToString(); objConcepto.descripcion = sTempCadena; objConcepto.unidad = row[6].ToString(); objConcepto.valorUnitario = Convert.ToDouble(row[8]); objConcepto.cantidad = Convert.ToDouble(row[7]); objConcepto.importe = objConcepto.cantidad * objConcepto.valorUnitario; cfdi.addConcepto(objConcepto); /********************************************************************/ //concepto DataRow _concepto = dsPM.Concepto.NewRow(); _concepto["noIdentificacion"] = row[4].ToString(); _concepto["descripcion"] = sTempCadena; _concepto["unidad"] = row[6].ToString(); _concepto["valorUnitario"] = Convert.ToDouble(row[8]).ToString("G"); _concepto["cantidad"] = Convert.ToDouble(row[7]); _concepto["importe"] = (objConcepto.cantidad * objConcepto.valorUnitario).ToString("G"); dsPM.Concepto.Rows.Add(_concepto); /********************************************************************/ } } else throw new Exception("*Sin detalle de partidas"); // Consulta traslados (impuestos) IVA E IEPS DataTable dtTraslados = FacturaController.ConsultaTrasladosxIDFactura(sNombreDB, iNumeroCompania, iNumeroFactura); if (dtTraslados != null) { foreach (DataRow item in dtTraslados.Rows) { if (item["Operacion"].ToString() == "+") { Traslado ot = new Traslado(); ot.tasa = Convert.ToDouble(item["tasa"]); ot.impuesto = item["impuesto"].ToString(); ot.importe = Convert.ToDouble(item["importe"]); ; cfdi.impuestos.addTraslado(ot); cfdi.subTotal = (double)objPar.subtotal; //============================================= // PARCHE TABLADECO if (sNombreDB == "INTEGRA_TABLADECO") sTempParam = string.Concat(sTempParam, "PDFRETENCION"); DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); //MEGA PARCHE DataRow _Impuestos = dsPM.Impuestos.NewRow(); //_Impuestos["totalImpuestosRetenidos"] = ot.importe _Impuestos["totalImpuestosTrasladados"] = ot.importe.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; //} //else //{ // //DataRow _Traslado2 = dsPM.Traslado.NewRow(); //_Traslado2["tasa"] = objPar.traslado_tasa; //_Traslado2["impuesto"] = objPar.traslado_impuesto; //_Traslado2["importe"] = objPar.traslado_importe; //dsPM.Traslado.Rows.Add(_Traslado2); //_comprobante["subTotal"] = (double)objPar.subtotal; //DataRow _Impuestos2 = dsPM.Impuestos.NewRow(); ////_Impuestos2["totalImpuestosRetenidos"] = (objPar.impuestos_dRETISR + objPar.impuestos_dRETIVA).ToString("0.##"); //_Impuestos2["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); //dsPM.Impuestos.Rows.Add(_Impuestos2); //} //==================================================================== } if (item["Operacion"].ToString() == "-") { Retencion or = new Retencion(); or.impuesto = item["impuesto"].ToString(); or.importe = Convert.ToDouble(item["importe"]); cfdi.impuestos.addRetencion(or); cfdi.subTotal = (double)objPar.subtotal; DataRow _Retencion = dsPM.Retencion.NewRow(); // ==================================================================================== //MEGA PARCHE if (sNombreDB == "INTEGRA_TABLADECO") _Retencion["impuesto"] = "RETENCION " + or.impuesto.ToString() + " 4%"; else _Retencion["impuesto"] = or.impuesto.ToString(); // ==================================================================================== _Retencion["importe"] = or.importe.ToString("0.##"); dsPM.Retencion.Rows.Add(_Retencion); } } } else { Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)objPar.impuestos_dCfdi_ImporteIVA; cfdi.impuestos.addTraslado(objTraslado); cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPM.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPM.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPM.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = (objPar.impuestos_dRETISR + objPar.impuestos_dRETIVA).ToString("0.##"); _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPM.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; } /********************************************************************/ // Z detalles DataRow _z = dsPM.Z.NewRow(); _z["Observaciones"] = string.IsNullOrEmpty(objPar.sObservaciones) ? " " : objPar.sObservaciones; _z["subtotal"] = objPar.subtotal.ToString(); //_z["DomicilioEstablecimiento"] = (objPar.iDatoSucursal == 0 && !string.IsNullOrEmpty(objPar.lugarExpedicion)) ? objPar.lugarExpedicion : FacturaController.lfDomicilioEstablecimientoGet(sNombreDB, objPar.iDatoSucursal, objPar.companynumber); _z["DomicilioEstablecimiento"] = FacturaController.lfDomicilioEstablecimientoGet(sNombreDB, objPar.iDatoSucursal, objPar.companynumber); string sImporteConLetra = FacturaController.import_to_string(sNombreDB, objPar.companynumber, objPar.total, 0, iNumeroFactura, iTipoFacturaNotaCredito).Rows[0][0].ToString(); _z["ImporteConLetra"] = sImporteConLetra; _z["D1"] = (objPar.sCfdi_Condiciones != null) ? objPar.sCfdi_Condiciones.ToUpper() : ""; if (sNombreDB == "KONEXUS_IQELECTRONICS") _z["D2"] = ctrl.ConsultaOrdendeCompra(sNombreDB, iNumeroFactura, iNumeroCompania, 0); dsPM.Z.Rows.Add(_z); if (string.IsNullOrEmpty(objPar.descuento)) { cfdi.descuento = 0.00000000000001; _comprobante["descuento"] = "0.00"; } else { cfdi.descuento = double.Parse(objPar.descuento); _comprobante["descuento"] = objPar.descuento; } cfdi.total = (double)objPar.total; _comprobante["total"] = (double)objPar.total; mes = DateTime.Today.Month; string smes; smes = Convert.ToString(mes); if (smes.Length == 1) sAnio_Mes = DateTime.Today.Year + "-0" + mes; else sAnio_Mes = DateTime.Today.Year + "-" + mes; sNombre_ArchivoTMP = objPar.emisor_rfc + "-" + objPar.serie + "" + objPar.folio; string sfecha = Convert.ToString(DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")); string suser = objPar.Persona; string sTemp = string.Empty; if (!string.IsNullOrEmpty(objPar.sSucursal_Nombre)) { sTemp = Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); spathString = Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); } else { sTemp = System.IO.Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); spathString = System.IO.Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); } sRutaArchivos = sTemp; try { if (!Directory.Exists(@spathString)) Directory.CreateDirectory(@spathString); } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("CrearCarpetaPersonaMoral", string.Concat("NO TIMBRO,ERROR AL CREAR DIRECTORIO|gfs_generaComprobanteMoral|", spathString, "-", ex.Message), @sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } objPar.sRuta_Cer = objPar.sRuta_Cer.Replace(@ConfigurationManager.AppSettings["sRuta_Cer_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Cer_Replace_Destino"]); objPar.sRuta_Key = objPar.sRuta_Key.Replace(@ConfigurationManager.AppSettings["sRuta_Key_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Key_Replace_Destino"]); // Construye el XML con el certificado string xml = string.Empty; try { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString); } catch (Exception ex) { return string.Concat("sMensaje:", " Incidencia ,", ex.Message, ", " + ex.InnerException.ToString() + "|sUUID:", "Error", "|", "sPATH:", ex.Message); } XmlDocument xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); try { //sTempPath = spathString + "\\" + sNombre_ArchivoTMP + ".xml"; xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); sRutaArchivos += "|" + spathString + "\\" + sNombre_ArchivoTMP + ".xml"; } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("GuardarXMLPersonaMoral", string.Concat("NO LOGRO TIMBRAR , DETALLE AL GUARDARLO XML PARA ENVIAR XML A TIMBRAR|gfs_generaComprobanteMoral|", "-", ex.Message), @sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } //#region Pruebas sCbb = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", uuid); _comprobante["cbb"] = string.Concat(lfservicioQR + sCbb); dsPM.Comprobante.Rows.Add(_comprobante); sTempPath = spathString + "\\" + sNombre_ArchivoTMP + ".pdf"; // ================================================================================= FacturaController.gfCreaPDF(sNombreDB, iTipoFacturaNotaCredito, banderaFacturaLibre, sTempPath, sTempParam, dsPM); //#endregion #region Swicht de PAC banderaPAC = new PACController().lfPROFACTCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam, objPar.sRuta_Cer, objPar.sRuta_Key, objPar.sContrasenia_Key); if (banderaPAC == false) { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString, -1, false, false); xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); new PACController().lfSERVISIMCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam); sPAC = "SERVISIM"; } #endregion if (idError != 0) { sMensaje = "Error"; uuid = Error; sPATH = "ErrorAltimbrar"; return string.Concat("sMensaje:", "Error,", Error, "|sUUID:", Error, "|", "sPATH:", sPATH); } else { // ============================================================= // Busca elementos dentro del string ya timbrado sCbb = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", uuid); new FacturaController().gfXMLConsultaElementos(xmlTimbrado, ref noCertificadoSAT, ref noCertificado, ref selloSAT, ref selloCFD); _comprobante["cbb"] = string.Concat(lfservicioQR + sCbb); dsPM.Comprobante.Rows.Add(_comprobante); /********************************************************************/ // TimbreFiscalDigital DataRow _TimbreFiscalDigital = dsPM.TimbreFiscalDigital.NewRow(); _TimbreFiscalDigital["UUID"] = uuid; _TimbreFiscalDigital["FechaTimbrado"] = fechaTimbre.ToString("dd/MM/yyyy"); _TimbreFiscalDigital["selloSAT"] = selloSAT; _TimbreFiscalDigital["selloCFD"] = selloCFD; _TimbreFiscalDigital["noCertificadoSAT"] = noCertificadoSAT; //noCertificado _comprobante["noCertificado"] = noCertificado; dsPM.TimbreFiscalDigital.Rows.Add(_TimbreFiscalDigital); //============================================== XmlDocument objXmlTimbrado = new XmlDocument(); xml = xmlTimbrado.ToString(); if (iTipoFacturaNotaCredito == 0) { tableadenda = ctrl.GetAdenda(sNombreDB, iNumeroFactura, objPar.companynumber); if (tableadenda.Rows[0][0] != DBNull.Value) { int iTipoAdendaTemp = Convert.ToInt32(tableadenda.Rows[0][0]); switch (iTipoAdendaTemp) { //Adenda PHILLIPS case 0: if (!AddendaController.AdendaPhillips(sNombreDB, iNumeroFactura, 0, iNumeroCompania, ref xml)) return "false"; break; //Adenda METALSA case 1: if (!AddendaController.AdendaMetalsa(sNombreDB, iNumeroFactura, 0, iNumeroCompania, sNombre_ArchivoTMP + ".pdf", ref xml)) return "false"; break; // Adenda HP case 2: if (!AddendaController.AdendaHP(sNombreDB, iNumeroFactura, iNumeroCompania, ref xml)) return "false"; break; default: break; } } objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "" + sNombreTipoDocumento + ".xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sPAC + "-" + sTempParam, objPar.emisor_rfc); } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("CrearDirectorio", string.Concat("NO TIMBRO,ERROR AL CREAR DIRECTORIO|gfs_generaComprobanteMoral|", "-", ex.Message), @sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } else { objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "egreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, sPAC + "-" + sTempParam); } catch (Exception ex) { BitacoraController.gfLog("Servicio.objXmlTimbrado.Save", "DB=" + sNombreDB + "|Empresa" + iNumeroCompania.ToString() + " *Factura " + iNumeroFactura.ToString() + "se timbro,pero hubo una incidencia al guardar en el servidor 19," + sTempParam + ex.Message, "gfs_generaComprobanteFisica", "Servicio.asmx"); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } sMensaje = "OK"; sTempPath = string.Concat(strDestino.Replace(".xml", ".pdf")); // ================================================================================= if (!FacturaController.gfCreaPDF(sNombreDB, iTipoFacturaNotaCredito, banderaFacturaLibre, sTempPath, sTempParam, dsPM)) return string.Concat("sMensaje:", "Error al crear PDF, cancelar factura y comunicarse a sistemas |sUUID:", " Error al crear PDF, cancelar factura y comunicarse a sistemas ", "|", "sPATH:"); //lfCreaPDFSinRetencion(sDataBaseName, iTipoFacturaNotaCredito, banderaFacturaLibre, sTempPath, sTempParam); // ================================================================================= try { FacturaController.gfDatosCorreoCliente(sNombreDB, iNumeroPersona, iNumeroCompania, objPar.sArchivo, sParametroOpcional, iNumeroFactura, iTipoFacturaNotaCredito, cfdi.receptor.nombre, cfdi.receptor.rfc, cfdi.emisor.nombre, cfdi.emisor.rfc, (objPar.serie + objPar.folio), (objPar.tipoDeComprobante + " " + objPar.moneda), objPar.total.ToString()); } catch { } FacturaController.gfSendFilesAllServers(sRutaArchivos, objPar.sArchivo); } strDestino48 = sTempPath.Replace(@ConfigurationManager.AppSettings["strDestino48_Origen"], @ConfigurationManager.AppSettings["strDestino48_Destino"]); sResultado = string.Concat("sMensaje:", sMensaje, "|sUUID:", uuid, "|", "sPATH:", strDestino48); return sResultado; } catch (Exception ex) { string sMensajeCancelacion = string.Empty; //if (Globales.sNombreDB == "INTEGRA_TABLADECO") //{ // FacturacionCancelacionController fcc = new FacturacionCancelacionController(); // decimal dTotal = 0; // int iNumFac_TablaFactura = fcc.lfConsultaNumeroFactura(iNumeroFactura, iNumeroCompania, Globales.sNombreDB, ref iNumeroPersona, ref dTotal); // fcc.lfCreaProcesoCancelacion(iNumeroFactura, iNumFac_TablaFactura, iNumeroCompania, Globales.sNombreDB, iTipoFacturaNotaCredito, Convert.ToInt32(iNumeroPersona), dTotal, ref sMensajeCancelacion); //} sResultado = string.Concat("sMensaje:", " Error facturación intente nuevamente,", sMensajeCancelacion, " ,", ex.Message, ",", ex.InnerException, " |sUUID:", " Error", "|", "sPATH:", ex.InnerException); return sResultado; } }
public string lfCreaCFDIFacturaLibre(string sNombreDB, int iNumeroFactura, int iTipoFacturaNotaCredito, int iNumeroCompania, int iNumeroPersona, string sParametroOpcional) { CFDIV3_2 dsPF = new CFDIV3_2(); #region Inicialización de Variables string sTempParam = string.Concat("iNumeroFactura=", iNumeroFactura.ToString(), "|iTipoFacturaNotaCredito=", iTipoFacturaNotaCredito.ToString(), "|sDataBaseName=", sNombreDB, "|iNumeroCompania=", iNumeroCompania.ToString(), "|iNumeroPersona=", iNumeroPersona, "|sParametroOpcional=", sParametroOpcional); string sRutaArchivos = string.Empty, sUUID = string.Empty, sPATH = string.Empty, sMensaje = string.Empty, sResultado = string.Empty, sTempPath = string.Empty, strDestino48 = string.Empty; string lfservicioQR = "http://zxing.org/w/chart?cht=qr&chs=230x230&chld=L&choe=UTF-8&chl=", strDestino = ConfigurationManager.AppSettings["strDestino"]; string sReporte_CDFI = string.Empty, sAnio_Mes = string.Empty, sNombre_ArchivoTMP = string.Empty, spathString = string.Empty; int mes = 0, idError = -1; DataSet table = new DataSet(); DataTable tableadenda = new DataTable(), tablequote = new DataTable(); string Error = string.Empty, uuid = string.Empty, xmlTimbrado = string.Empty; Parametros objPar = new Parametros(); objPar.companynumber = iNumeroCompania; objPar.Persona = iNumeroPersona.ToString(); FacturaController ctrl = new FacturaController(); ICFD objCFDi = new CFDI32(); DateTime fechaTimbre = new DateTime(); bool banderaPAC = false; string sPAC = "PROFACT"; decimal dtotalImpuestosRetenidos = 0; decimal dtotalImpuestosTrasladados = 0; #endregion if (iTipoFacturaNotaCredito == 0) { if (FacturaController.gfValidaSiEsFactura(sNombreDB, iNumeroFactura, iNumeroCompania.ToString(), iTipoFacturaNotaCredito) > 0) FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, iTipoFacturaNotaCredito, ref objPar); else FacturaController.gfb_GetDatosGenerales(sNombreDB, iNumeroCompania, iNumeroFactura, 1, ref objPar); } try { Comprobante cfdi = new Comprobante(); cfdi.version = "3.2"; cfdi.serie = objPar.serie;// sCfdi_Serie; cfdi.folio = objPar.folio; cfdi.fecha = DateTime.Now; cfdi.formaDePago = objPar.formaDePago; cfdi.condicionesDePago = objPar.condicionesDePago; cfdi.tipoCambio = objPar.tipoCambio; cfdi.moneda = objPar.moneda; cfdi.tipoDeComprobante = objPar.tipoDeComprobante; cfdi.metodoDePago = objPar.metodoDePago; cfdi.lugarExpedicion = objPar.lugarExpedicion; cfdi.numCtaPago = (objPar.numCtaPago.Length == 3) ? objPar.numCtaPago.PadLeft(4, '0') : objPar.numCtaPago; cfdi.emisor.rfc = objPar.emisor_rfc; cfdi.emisor.nombre = objPar.emisor_nombre; cfdi.emisor.regimenFiscal.regimen = objPar.emisor_regimenFiscal_regimen; cfdi.emisor.domicilioFiscal.calle = objPar.emisor_domicilioFiscal_calle; cfdi.emisor.domicilioFiscal.colonia = objPar.emisor_domicilioFiscal_colonia; cfdi.emisor.domicilioFiscal.municipio = objPar.emisor_domicilioFiscal_municipio; cfdi.emisor.domicilioFiscal.estado = objPar.emisor_domicilioFiscal_estado; cfdi.emisor.domicilioFiscal.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.domicilioFiscal.codigoPostal = objPar.emisor_domicilioFiscal_codigoPostal; /********************************************************************/ //Comprobante //INTEGRAReports.dsPersonasFisicas dsPF = new dsPersonasFisicas(); DataRow _comprobante = dsPF.Comprobante.NewRow(); _comprobante["version"] = "3.2"; _comprobante["serie"] = objPar.serie; _comprobante["folio"] = objPar.folio; _comprobante["fecha"] = DateTime.Now.ToString("dd'/'MM'/'yyyy HH:mm:ss"); _comprobante["formaDePago"] = objPar.formaDePago; _comprobante["condicionesDePago"] = objPar.condicionesDePago; _comprobante["tipoCambio"] = objPar.tipoCambio; _comprobante["moneda"] = objPar.moneda; _comprobante["tipoDeComprobante"] = objPar.tipoDeComprobante.ToUpper(); _comprobante["metodoDePago"] = objPar.metodoDePago; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; _comprobante["numCtaPago"] = objPar.numCtaPago; /********************************************************************/ //Emisor DataRow _emisor = dsPF.Emisor.NewRow(); _emisor["rfc"] = objPar.emisor_rfc; _emisor["nombre"] = objPar.emisor_nombre; objPar.emisor_logo = objPar.emisor_logo.Replace(@ConfigurationManager.AppSettings["emisor_logo_Origen"], @ConfigurationManager.AppSettings["emisor_logo_Destino"]); _emisor["logo"] = objPar.emisor_logo; dsPF.Emisor.Rows.Add(_emisor); /********************************************************************/ //Emisor regimenFiscal DataRow _regimenFiscal = dsPF.RegimenFiscal.NewRow(); _regimenFiscal["Regimen"] = objPar.emisor_regimenFiscal_regimen; dsPF.RegimenFiscal.Rows.Add(_regimenFiscal); /********************************************************************/ //Emisor domicilioFiscal DataRow _domicilioFiscal = dsPF.DomicilioFiscal.NewRow(); _domicilioFiscal["calle"] = objPar.emisor_domicilioFiscal_calle; _domicilioFiscal["colonia"] = objPar.emisor_domicilioFiscal_colonia; _domicilioFiscal["municipio"] = objPar.emisor_domicilioFiscal_municipio; _domicilioFiscal["estado"] = objPar.emisor_domicilioFiscal_estado; _domicilioFiscal["pais"] = objPar.emisor_domicilioFiscal_pais; _domicilioFiscal["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPF.DomicilioFiscal.Rows.Add(_domicilioFiscal); /********************************************************************/ if (objPar.emisor_expedidoEn_calle != "") { cfdi.emisor.expedidoEn = new Ubicacion(); cfdi.emisor.expedidoEn.calle = objPar.emisor_expedidoEn_calle; cfdi.emisor.expedidoEn.noExterior = objPar.emisor_expedidoEn_noExterior; cfdi.emisor.expedidoEn.noInterior = objPar.emisor_expedidoEn_noInterior; cfdi.emisor.expedidoEn.colonia = objPar.emisor_expedidoEn_colonia; cfdi.emisor.expedidoEn.localidad = objPar.emisor_expedidoEn_localidad; cfdi.emisor.expedidoEn.referencia = objPar.emisor_expedidoEn_referencia; cfdi.emisor.expedidoEn.municipio = objPar.emisor_expedidoEn_municipio; cfdi.emisor.expedidoEn.estado = objPar.emisor_expedidoEn_estado; cfdi.emisor.expedidoEn.pais = objPar.emisor_expedidoEn_pais; cfdi.emisor.expedidoEn.codigoPostal = objPar.emisor_expedidoEn_codigoPostal; //sSucursal_Tmp = string.Empty; objPar.sRuta_ArchivoTMP = ""; cfdi.lugarExpedicion = objPar.lugarExpedicion; /********************************************************************/ //expedidoEn DataRow _expedidoEn = dsPF.ExpedidoEn.NewRow(); _expedidoEn["calle"] = objPar.emisor_domicilioFiscal_calle; _expedidoEn["colonia"] = objPar.emisor_domicilioFiscal_colonia; _expedidoEn["localidad"] = objPar.emisor_expedidoEn_localidad; _expedidoEn["referencia"] = objPar.emisor_expedidoEn_referencia; _expedidoEn["municipio"] = objPar.emisor_domicilioFiscal_municipio; _expedidoEn["estado"] = objPar.emisor_domicilioFiscal_estado; _expedidoEn["pais"] = objPar.emisor_domicilioFiscal_pais; _expedidoEn["codigoPostal"] = objPar.emisor_domicilioFiscal_codigoPostal; dsPF.ExpedidoEn.Rows.Add(_expedidoEn); /********************************************************************/ } else { cfdi.lugarExpedicion = objPar.lugarExpedicion; _comprobante["lugarExpedicion"] = objPar.lugarExpedicion; } cfdi.receptor.rfc = objPar.receptor_rfc; cfdi.receptor.nombre = objPar.receptor_nombre; /********************************************************************/ //receptor DataRow _receptor = dsPF.Receptor.NewRow(); _receptor["rfc"] = objPar.receptor_rfc; _receptor["nombre"] = objPar.receptor_nombre; dsPF.Receptor.Rows.Add(_receptor); /********************************************************************/ cfdi.receptor.domicilio = new Ubicacion(); cfdi.receptor.domicilio.calle = objPar.receptor_domicilio_calle; cfdi.receptor.domicilio.noExterior = objPar.receptor_domicilio_noExterior; cfdi.receptor.domicilio.noInterior = objPar.receptor_domicilio_noInterior; cfdi.receptor.domicilio.colonia = objPar.receptor_domicilio_colonia; cfdi.receptor.domicilio.localidad = objPar.receptor_domicilio_localidad; cfdi.receptor.domicilio.referencia = objPar.receptor_domicilio_referencia; cfdi.receptor.domicilio.municipio = objPar.receptor_domicilio_municipio; cfdi.receptor.domicilio.estado = objPar.receptor_domicilio_estado; cfdi.receptor.domicilio.pais = objPar.receptor_domicilio_pais; cfdi.receptor.domicilio.codigoPostal = objPar.receptor_domicilio_codigoPostal; /********************************************************************/ //domicilio DataRow _domicilio = dsPF.Domicilio.NewRow(); _domicilio["calle"] = objPar.receptor_domicilio_calle; _domicilio["noExterior"] = objPar.receptor_domicilio_noExterior; _domicilio["noInterior"] = objPar.receptor_domicilio_noInterior; _domicilio["colonia"] = objPar.receptor_domicilio_colonia; _domicilio["localidad"] = objPar.receptor_domicilio_localidad; _domicilio["referencia"] = objPar.receptor_domicilio_referencia; _domicilio["municipio"] = objPar.receptor_domicilio_municipio; _domicilio["estado"] = objPar.receptor_domicilio_estado; _domicilio["pais"] = objPar.receptor_domicilio_pais; _domicilio["codigoPostal"] = objPar.receptor_domicilio_codigoPostal; dsPF.Domicilio.Rows.Add(_domicilio); /********************************************************************/ // Obtiene origen de partidas acorde ala base de datos switch (sNombreDB) { case "INTEGRA_TDS": table = ctrl.gfConsultatPartidasFacturaLibre(sNombreDB, iNumeroFactura, iNumeroCompania, 1); //sReporte_CDFI = "CFDi_TDS.Rpt"; break; default: table = ctrl.gfConsultatPartidasFacturaLibre(sNombreDB, iNumeroFactura, iNumeroCompania, 1); break; } /********************************************************************/ Concepto objConcepto = null; if (table.Tables[0].Rows.Count > 0) { int iIndiceFacturaLibre = 0; foreach (DataRow row in table.Tables[0].Rows) { objConcepto = new Concepto(); objConcepto.noIdentificacion = row[4].ToString(); objConcepto.descripcion = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); objConcepto.unidad = row[6].ToString(); objConcepto.valorUnitario = Convert.ToDouble(row[8]); objConcepto.cantidad = Convert.ToDouble(row[7]); objConcepto.importe = objConcepto.cantidad * objConcepto.valorUnitario; cfdi.addConcepto(objConcepto); /********************************************************************/ //concepto DataRow _concepto = dsPF.Concepto.NewRow(); _concepto["noIdentificacion"] = row[4].ToString(); _concepto["descripcion"] = string.IsNullOrEmpty(row[5].ToString()) ? "-" : row[5].ToString(); _concepto["unidad"] = row[6].ToString(); _concepto["valorUnitario"] = Convert.ToDouble(row[8]).ToString("G"); _concepto["cantidad"] = Convert.ToDouble(row[7]); _concepto["importe"] = (objConcepto.cantidad * objConcepto.valorUnitario).ToString("G"); dsPF.Concepto.Rows.Add(_concepto); /********************************************************************/ // CONSULTA INFORMACION PARA PARTIDAS CON/SIN IVA //objPar.impuestos_dRETIVA = (decimal)row["RET_IVA"]; objPar.impuestos_dRETIVA = (decimal)table.Tables[1].Rows[iIndiceFacturaLibre]["IVA"]; dtotalImpuestosTrasladados += objPar.impuestos_dRETIVA; //objPar.impuestos_dRETISR = (decimal)row["RET_ISR"]; objPar.impuestos_dCfdi_ImporteIVA = (decimal)row["Iva"]; objPar.impuestos_dCfdi_ImporteIVA = (decimal)table.Tables[1].Rows[iIndiceFacturaLibre]["IVA"]; //objPar.total += objPar.impuestos_dRETIVA; iIndiceFacturaLibre++; } } else throw new Exception("*Sin detalle de partidas"); /********************************************************************/ objPar.total = dtotalImpuestosTrasladados + objPar.subtotal; //Agregar RET IVA Retencion objReteII = new Retencion(); objReteII.importe = (double)dtotalImpuestosRetenidos; objReteII.impuesto = "IVA"; cfdi.impuestos.addRetencion(objReteII); //Retencion IVA DataRow _Retencion = dsPF.Retencion.NewRow(); _Retencion["importe"] = dtotalImpuestosTrasladados.ToString("0.##"); _Retencion["impuesto"] = "RETENCION IVA"; dsPF.Retencion.Rows.Add(_Retencion); /********************************************************************/ //////Agregar RET ISR //Retencion objRete = new Retencion(); //objRete.importe = (double)objPar.impuestos_dRETISR; //objRete.impuesto = "ISR"; //cfdi.impuestos.addRetencion(objRete); ////Retencion ISR //DataRow _ISR = dsPF.Retencion.NewRow(); //_ISR["importe"] = objPar.impuestos_dRETISR.ToString("0.00"); ; //_ISR["impuesto"] = "RETENCION ISR"; //dsPF.Retencion.Rows.Add(_ISR); //******************************************************************/ //Traslado Traslado objTraslado = new Traslado(); objTraslado.tasa = (double)objPar.traslado_tasa; objTraslado.impuesto = "IVA"; objTraslado.importe = (double)dtotalImpuestosTrasladados; cfdi.impuestos.addTraslado(objTraslado); cfdi.subTotal = (double)objPar.subtotal; DataRow _Traslado = dsPF.Traslado.NewRow(); _Traslado["tasa"] = objPar.traslado_tasa; _Traslado["impuesto"] = objPar.traslado_impuesto; _Traslado["importe"] = objPar.traslado_importe; dsPF.Traslado.Rows.Add(_Traslado); DataRow _Impuestos = dsPF.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = (objPar.impuestos_dRETISR + objPar.impuestos_dRETIVA).ToString("0.##"); _Impuestos["totalImpuestosTrasladados"] = objPar.impuestos_dCfdi_ImporteIVA.ToString("0.##"); dsPF.Impuestos.Rows.Add(_Impuestos); _comprobante["subTotal"] = (double)objPar.subtotal; /********************************************************************/ // Z detalles DataRow _z = dsPF.Z.NewRow(); _z["Observaciones"] = string.IsNullOrEmpty(objPar.sObservaciones) ? " " : objPar.sObservaciones; _z["subtotal"] = (double)objPar.subtotal; _z["DomicilioEstablecimiento"] = FacturaController.lfDomicilioEstablecimientoGet(sNombreDB, objPar.iDatoSucursal, objPar.companynumber); if (string.IsNullOrEmpty(objPar.descuento)) { cfdi.descuento = 0.00000000000001; _comprobante["descuento"] = "0.00"; } else { cfdi.descuento = double.Parse(objPar.descuento); _comprobante["descuento"] = objPar.descuento; } //double temp = ((double)objPar.subtotal + (double)objPar.impuestos_dCfdi_ImporteIVA); //temp = temp - (double)objPar.impuestos_dRETISR - (double)objPar.impuestos_dRETIVA; //objPar.total = (decimal)temp; cfdi.total = (double)objPar.total; _comprobante["total"] = (double)objPar.total; string sImporteConLetra = FacturaController.import_to_string(sNombreDB, objPar.companynumber, objPar.total, 1, iNumeroFactura, iTipoFacturaNotaCredito).Rows[0][0].ToString(); _z["ImporteConLetra"] = sImporteConLetra; _z["D1"] = objPar.sCfdi_Condiciones.ToUpper(); dsPF.Z.Rows.Add(_z); mes = DateTime.Today.Month; string smes; smes = Convert.ToString(mes); if (smes.Length == 1) sAnio_Mes = DateTime.Today.Year + "-0" + mes; else sAnio_Mes = DateTime.Today.Year + "-" + mes; sNombre_ArchivoTMP = objPar.emisor_rfc + "-" + objPar.serie + "" + objPar.folio; string sfecha = Convert.ToString(DateTime.Now.Year + "-" + DateTime.Now.Month.ToString("d2")); string suser = objPar.Persona; string sTemp = string.Empty; if (!string.IsNullOrEmpty(objPar.sSucursal_Nombre)) { sTemp = Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); spathString = Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha, objPar.sSucursal_Nombre); } else { sTemp = System.IO.Path.Combine("RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); spathString = System.IO.Path.Combine(strDestino, "RPT_" + sNombreDB.Replace("INTEGRA_", ""), "CFDI", objPar.sNombreCortoEmisor, sfecha); } sRutaArchivos = sTemp; try { if (!Directory.Exists(@spathString)) Directory.CreateDirectory(@spathString); } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("CreacionCarpetaPersonaFisica", string.Concat("gfs_generaComprobanteFisica|CreateDirectory|", ex.Message), sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } objPar.sRuta_Cer = objPar.sRuta_Cer.Replace(@ConfigurationManager.AppSettings["sRuta_Cer_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Cer_Replace_Destino"]); objPar.sRuta_Key = objPar.sRuta_Key.Replace(@ConfigurationManager.AppSettings["sRuta_Key_Replace_Origen"], @ConfigurationManager.AppSettings["sRuta_Key_Replace_Destino"]); // Construye el XML con el certificado string xml = string.Empty; try { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString); } catch (Exception ex) { return string.Concat("sMensaje:", " Incidencia ,", ex.Message, ", " + ex.InnerException.ToString() + "|sUUID:", "Error", "|", "sPATH:", ex.Message); } XmlDocument xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); try { xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); sRutaArchivos += "|" + spathString + "\\" + sNombre_ArchivoTMP + ".xml"; } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("GuardarArchivoPersonaFisica", string.Concat("gfs_generaComprobanteFisica|", "No logro timbrar , detalle al guardarlo xml para enviar xml a timbrar" + ex.Message), sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } #region Swicht de PAC FacturaController ctrlfactura = new FacturaController(); banderaPAC = new PACController().lfPROFACTCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam, objPar.sRuta_Cer, objPar.sRuta_Key, objPar.sContrasenia_Key); if (banderaPAC == false) { xml = objCFDi.getXML(cfdi, objPar.sRuta_Key, objPar.sContrasenia_Key, objPar.sRuta_Cer, sNombre_ArchivoTMP, spathString, -1, false, false); xDoc1 = new XmlDocument(); xDoc1.LoadXml(xml); xDoc1.Save(spathString + "\\" + sNombre_ArchivoTMP + ".xml"); new PACController().lfSERVISIMCreaCFDI(spathString, sNombre_ArchivoTMP, objPar.emisor_rfc, objPar.serie, objPar.folio, ref idError, ref Error, ref uuid, ref fechaTimbre, ref xmlTimbrado, sTempParam); sPAC = "SERVISIM"; } #endregion if (idError != 0) { BitacoraController.gfLogFacturaRegistroError(sPAC, Error, sTempParam); FacturaController.gfEmailSend(string.Concat("lfConsumeServicioServisim,ServicioWeb El tiempo de espera es demasiado |Incidencia", Error, "|BD:", sNombreDB, "|Parametros:" + sTempParam), FacturaController.listaContactosIncidenciaEmail, "INCIDENCIA"); sMensaje = "Error"; uuid = ""; sPATH = "ErrorAltimbrar"; return string.Concat("sMensaje:", "Error,", Error, "|sUUID:", Error, "|", "sPATH:", sPATH); } else { XDocument xdoc = XDocument.Parse(xmlTimbrado); XNamespace xcfdi = @"http://www.sat.gob.mx/cfd/3"; XNamespace xtfd = @"http://www.sat.gob.mx/TimbreFiscalDigital"; string sCbb = string.Empty; var elementouuid = xdoc.Element(xcfdi + "Comprobante").Element(xcfdi + "Complemento").Element(xtfd + "TimbreFiscalDigital"); var elementoCertificado = xdoc.Element(xcfdi + "Comprobante"); string noCertificadoSAT = (string)elementouuid.Attribute("noCertificadoSAT"); string noCertificado = (string)elementoCertificado.Attribute("noCertificado"); string selloSAT = (string)elementouuid.Attribute("selloSAT"); string selloCFD = (string)elementouuid.Attribute("selloCFD"); sCbb = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", uuid); _comprobante["cbb"] = string.Concat(lfservicioQR + sCbb); _comprobante["noCertificado"] = noCertificado; dsPF.Comprobante.Rows.Add(_comprobante); /********************************************************************/ // TimbreFiscalDigital DataRow _TimbreFiscalDigital = dsPF.TimbreFiscalDigital.NewRow(); _TimbreFiscalDigital["UUID"] = uuid; _TimbreFiscalDigital["FechaTimbrado"] = fechaTimbre.ToString("dd/MM/yyyy"); _TimbreFiscalDigital["selloSAT"] = selloSAT; _TimbreFiscalDigital["selloCFD"] = selloCFD; _TimbreFiscalDigital["noCertificadoSAT"] = noCertificadoSAT; //noCertificado dsPF.TimbreFiscalDigital.Rows.Add(_TimbreFiscalDigital); //============================================== XmlDocument objXmlTimbrado = new XmlDocument(); xml = xmlTimbrado.ToString(); if (iTipoFacturaNotaCredito == 0) { //Ingreso //Adendas //ya tableadenda = ctrl.GetAdenda(sNombreDB, iNumeroFactura, objPar.companynumber); if (tableadenda != null) { if (tableadenda.Rows[0][0] != DBNull.Value) { if (Convert.ToInt32(tableadenda.Rows[0][0]) == 0)//Phillips { int iTipoAdendaTemp = Convert.ToInt32(tableadenda.Rows[0][0]); switch (iTipoAdendaTemp) { //Adenda PHILLIPS case 0: if (!AddendaController.AdendaPhillips(sNombreDB, iNumeroFactura, 0, iNumeroCompania, ref xml)) return "false"; break; //Adenda METALSA case 1: if (!AddendaController.AdendaMetalsa(sNombreDB, iNumeroFactura, 0, iNumeroCompania, sNombre_ArchivoTMP + ".pdf", ref xml)) return "false"; break; // Adenda HP case 2: if (!AddendaController.AdendaHP(sNombreDB, iNumeroFactura, iNumeroCompania, ref xml)) return "false"; break; default: break; } } } } objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "ingreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, (sPAC + "|" + sTempParam), objPar.emisor_rfc); } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError("GuardarArchivoServidor72", string.Concat("Se timbro,pero hubo una incidencia al guardar en el servidor 72|", ex.Message), sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } else { objXmlTimbrado.LoadXml(xml); objPar.sArchivo = spathString + "\\" + objPar.serie + "" + objPar.folio + "egreso.xml"; strDestino = objPar.sArchivo; try { sRutaArchivos += "|" + strDestino; objXmlTimbrado.Save(strDestino); BitacoraController.gfLogFacturaOK(uuid, strDestino, (sPAC + "|" + sTempParam)); } catch (Exception ex) { //BITACORA.gfLogFacturaInsertaIncidencia(string.Concat("Se timbro,pero hubo una incidencia al guardar en el servidor 72|", ex.Message), sTempParam); BitacoraController.gfLogFacturaRegistroError("GuardarArchivoServidor72", string.Concat("Se timbro,pero hubo una incidencia al guardar en el servidor 72|", ex.Message), sTempParam); sResultado = string.Concat("sMensaje:", "Error,", ex.Message, "|sUUID:", "Error", "|", "sPATH:", ex.Message); throw new Exception(sResultado); } } sMensaje = "OK"; sTempPath = string.Concat(strDestino.Replace(".xml", ".pdf")); // ============================================================ if (!lfCreaPDFFacturaLibre(sTempPath, sTempParam, dsPF)) return string.Concat("sMensaje:", "Error al crear PDF, cancelar factura y comunicarse a sistemas |sUUID:", " Error al crear PDF, cancelar factura y comunicarse a sistemas ", "|", "sPATH:"); // ============================================================ try { FacturaController.gfDatosCorreoCliente(sNombreDB, iNumeroPersona, iNumeroCompania, objPar.sArchivo, sParametroOpcional, iNumeroFactura, iTipoFacturaNotaCredito, cfdi.receptor.nombre, cfdi.receptor.rfc, cfdi.emisor.nombre, cfdi.emisor.rfc, (objPar.serie + objPar.folio), (objPar.tipoDeComprobante + " " + objPar.moneda), objPar.total.ToString()); } catch { } objPar.sArchivo = sTempPath; FacturaController.gfSendFilesAllServers(sRutaArchivos, objPar.sArchivo); } strDestino48 = sTempPath.Replace(@ConfigurationManager.AppSettings["strDestino48_Origen"], @ConfigurationManager.AppSettings["strDestino48_Destino"]); sResultado = string.Concat("sMensaje:", sMensaje, "|sUUID:", uuid, "|", "sPATH:", strDestino48); return sResultado; } catch (Exception ex) { string sMensajeCancelacion = string.Empty; //FacturacionCancelacionController fcc = new FacturacionCancelacionController(); //decimal dTotal = 0; //int iNumFac_TablaFactura = fcc.lfConsultaNumeroFactura(iNumeroFactura, iNumeroCompania, Globales.sNombreDB, ref iNumeroPersona, ref dTotal); //fcc.lfCreaProcesoCancelacion(iNumeroFactura, iNumFac_TablaFactura, iNumeroCompania, Globales.sNombreDB, iTipoFacturaNotaCredito, Convert.ToInt32(iNumeroPersona), dTotal, ref sMensajeCancelacion); //if (!string.IsNullOrEmpty(uuid)) // sResultado = string.Concat("sMensaje:", "OK", "|sUUID:", uuid, "|", "sPATH:", sTempPath.Replace(@WebConfigurationManager.AppSettings["strDestino48_Origen"], @WebConfigurationManager.AppSettings["strDestino48_Destino"])); //else sResultado = string.Concat("sMensaje:", " Error facturación intente nuevamente,", sMensajeCancelacion, " ,", ex.Message, ",", ex.InnerException, " |sUUID:", " Error", "|", "sPATH:", ex.InnerException); return sResultado; } }