public static bool gfb_GetDatosGenerales(string sNombreDB, int companynumber, int NumeroRegistro, int Tipo, ref Parametros parametros) { //Parametros parametros = new Parametros(); DataTable dtDatosArchivo = new DataTable(); DataTable dtDatosEmisor = new DataTable(); DataTable dtDatosEncabezado = new DataTable(); DataTable dtDatosSucursal = new DataTable(); DataTable dtDatosPais = new DataTable(); int icontabilizada, idocumenttype, idocumentinternet; // ======================================================================================= // Datos del archivo key , cer dtDatosArchivo = lfGetDatosArchivo(sNombreDB, companynumber, NumeroRegistro, Tipo); parametros.sRuta_Key = Convert.ToString(dtDatosArchivo.Rows[0][0]); parametros.sContrasenia_Key = Convert.ToString(dtDatosArchivo.Rows[0][1]); parametros.sRuta_Cer = Convert.ToString(dtDatosArchivo.Rows[0][2]); parametros.Anio_Aprobacion = Convert.ToInt32(dtDatosArchivo.Rows[0][3]); parametros.Num_Aprobacion = Convert.ToString(dtDatosArchivo.Rows[0][4]); parametros.emisor_logo = Convert.ToString(dtDatosArchivo.Rows[0][5]); // ======================================================================================= // Datos del Emisor dtDatosEmisor = lfGetDatosEmisor(sNombreDB, companynumber).Copy(); parametros.emisor_rfc = Convert.ToString(dtDatosEmisor.Rows[0][0]); parametros.emisor_nombre = Convert.ToString(dtDatosEmisor.Rows[0][1]); parametros.emisor_domicilioFiscal_calle = Convert.ToString(dtDatosEmisor.Rows[0][2]); parametros.emisor_domicilioFiscal_colonia = Convert.ToString(dtDatosEmisor.Rows[0][3]); parametros.emisor_domicilioFiscal_municipio = Convert.ToString(dtDatosEmisor.Rows[0][4]); parametros.emisor_domicilioFiscal_estado = Convert.ToString(dtDatosEmisor.Rows[0][5]); parametros.emisor_domicilioFiscal_codigoPostal = Convert.ToString(dtDatosEmisor.Rows[0][6]); parametros.emisor_regimenFiscal_regimen = Convert.ToString(dtDatosEmisor.Rows[0][8]); if (Convert.ToInt32(dtDatosEmisor.Rows[0][9]) == 0) parametros.lugarExpedicion = parametros.emisor_domicilioFiscal_municipio + " " + parametros.emisor_domicilioFiscal_estado; // sExpedido_En = sDel_Emisor + " " + sEstado_Emisor; else parametros.lugarExpedicion = "México D.F."; // PARCHE CPAE Y TDS //if (sNombreDB == "INTEGRA_CPAE" || sNombreDB == "INTEGRA_TDS") // parametros.lugarExpedicion = string.Concat(parametros.emisor_domicilioFiscal_calle, " ", parametros.emisor_domicilioFiscal_colonia, " ", parametros.emisor_domicilioFiscal_municipio, " ", parametros.emisor_domicilioFiscal_estado, " ", parametros.emisor_domicilioFiscal_codigoPostal); parametros.sNombreCortoEmisor = Convert.ToString(dtDatosEmisor.Rows[0][10]); //sNombreCortoEmisor = Convert.ToString(DatosEmisor.Rows[0][10]); parametros.emisor_expedidoEn_pais = Convert.ToString(dtDatosEmisor.Rows[0][7]); //sPais_Emisor = Convert.ToString(DatosEmisor.Rows[0][7]); int ifamily = 9; //dtDatosPais = lfGetPaisEmisor(sPais_Emisor, Convert.ToInt32(context.Session["Company"]), ifamily); dtDatosPais = lfGetPaisEmisor(sNombreDB, companynumber, ifamily, int.Parse(parametros.emisor_expedidoEn_pais)); parametros.emisor_expedidoEn_pais = dtDatosPais.Rows[0][0].ToString(); // ====================================================================================== // Encabezado // checar los valores si estan bien icontabilizada = 1; idocumenttype = -59; idocumentinternet = 1; dtDatosEncabezado = lfGetDatosEncabezado(sNombreDB, NumeroRegistro, Tipo, companynumber, icontabilizada, idocumenttype, idocumentinternet); if (dtDatosEncabezado.Rows[0][0] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][0]) != "") parametros.serie = Convert.ToString(dtDatosEncabezado.Rows[0][0]); // sCfdi_Serie = Convert.ToString(dtDatosEncabezado.Rows[0][0]); if (dtDatosEncabezado.Rows[0][1] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][1]) != "") parametros.folio = Convert.ToString(dtDatosEncabezado.Rows[0][1]); // sCfdi_Folio = Convert.ToString(dtDatosEncabezado.Rows[0][1]); if (dtDatosEncabezado.Rows[0][2] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][2]) != "") parametros.tipoDeComprobante = Convert.ToString(dtDatosEncabezado.Rows[0][2]); // sCfdi_TipoComprobante = Convert.ToString(dtDatosEncabezado.Rows[0][2]); if (dtDatosEncabezado.Rows[0][3] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][3]) != "") parametros.sCfdi_TipoDocumento = Convert.ToString(dtDatosEncabezado.Rows[0][3]); // sCfdi_TipoDocumento = Convert.ToString(dtDatosEncabezado.Rows[0][3]); if (dtDatosEncabezado.Rows[0][4] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][4]) != "") parametros.formaDePago = Convert.ToString(dtDatosEncabezado.Rows[0][4]); //sCfdi_FormaPago = Convert.ToString(dtDatosEncabezado.Rows[0][4]); if (dtDatosEncabezado.Rows[0][5] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][5]) != "") parametros.metodoDePago = Convert.ToString(dtDatosEncabezado.Rows[0][5]); //sCfdi_MetodoPago = Convert.ToString(dtDatosEncabezado.Rows[0][5]); if (dtDatosEncabezado.Rows[0][6] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][6]) != "") parametros.numCtaPago = Convert.ToString(dtDatosEncabezado.Rows[0][6]); if (parametros.numCtaPago.Length <= 2) parametros.numCtaPago = parametros.numCtaPago.PadLeft(4, '0'); if (dtDatosEncabezado.Rows[0][7] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][7]) != "") parametros.lugarExpedicion = Convert.ToString(dtDatosEncabezado.Rows[0][7]); //sLugarEX = Convert.ToString(dtDatosEncabezado.Rows[0][7]); if (dtDatosEncabezado.Rows[0][8] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][8]) != "") { parametros.condicionesDePago = Convert.ToString(dtDatosEncabezado.Rows[0][8]); parametros.sCfdi_Condiciones = Convert.ToString(dtDatosEncabezado.Rows[0][8]); // sCfdi_Condiciones = Convert.ToString(dtDatosEncabezado.Rows[0][8]); } if (dtDatosEncabezado.Rows[0][9] != DBNull.Value) parametros.subtotal = Convert.ToDecimal(dtDatosEncabezado.Rows[0][9]); // dCfdi_Subtotal = Convert.ToDouble(dtDatosEncabezado.Rows[0][9]); if (dtDatosEncabezado.Rows[0][10] != DBNull.Value) parametros.descuento = Convert.ToString(dtDatosEncabezado.Rows[0][10]); //dCfdi_Descuento = Convert.ToDouble(dtDatosEncabezado.Rows[0][10]); if (dtDatosEncabezado.Rows[0][11] != DBNull.Value) parametros.impuestos_dCfdi_ImporteIVA = Convert.ToDecimal(dtDatosEncabezado.Rows[0][11]); //dCfdi_ImporteIVA = Convert.ToDouble(dtDatosEncabezado.Rows[0][11]); if (dtDatosEncabezado.Rows[0][12] != DBNull.Value) parametros.traslado_tasa = Convert.ToDecimal(dtDatosEncabezado.Rows[0][12]); //dCfdi_TasaIVA = Convert.ToDouble(dtDatosEncabezado.Rows[0][12]); if (dtDatosEncabezado.Rows[0][13] != DBNull.Value) parametros.total = Convert.ToDecimal(dtDatosEncabezado.Rows[0][13]); // dCfdi_Total = Convert.ToDouble(dtDatosEncabezado.Rows[0][13]); if (dtDatosEncabezado.Rows[0][14] != DBNull.Value) parametros.tipoCambio = Convert.ToString(dtDatosEncabezado.Rows[0][14]); // dCfdi_TipoCambio = Convert.ToDouble(dtDatosEncabezado.Rows[0][14]); if (dtDatosEncabezado.Rows[0][15] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][15]) != "") parametros.moneda = Convert.ToString(dtDatosEncabezado.Rows[0][15]); // sCfdi_Moneda = Convert.ToString(dtDatosEncabezado.Rows[0][15]); if (dtDatosEncabezado.Rows[0][16] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][16]) != "") parametros.receptor_rfc = Convert.ToString(dtDatosEncabezado.Rows[0][16]); // sReceptor_Rfc = Convert.ToString(dtDatosEncabezado.Rows[0][16]); if (dtDatosEncabezado.Rows[0][17] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][17]) != "") parametros.receptor_nombre = Convert.ToString(dtDatosEncabezado.Rows[0][17]); // sReceptor_Nombre = Convert.ToString(dtDatosEncabezado.Rows[0][17]); if (dtDatosEncabezado.Rows[0][18] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][18]) != "") parametros.receptor_domicilio_calle = Convert.ToString(dtDatosEncabezado.Rows[0][18]); //sReceptor_Calle = Convert.ToString(dtDatosEncabezado.Rows[0][18]); if (dtDatosEncabezado.Rows[0][19] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][19]) != "") parametros.receptor_domicilio_noExterior = Convert.ToString(dtDatosEncabezado.Rows[0][19]); //sReceptor_NoExterior = Convert.ToString(dtDatosEncabezado.Rows[0][19]); if (dtDatosEncabezado.Rows[0][20] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][20]) != "") parametros.receptor_domicilio_noInterior = Convert.ToString(dtDatosEncabezado.Rows[0][20]); //sReceptor_NoInterior = Convert.ToString(dtDatosEncabezado.Rows[0][20]); if (dtDatosEncabezado.Rows[0][21] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][21]) != "") parametros.receptor_domicilio_colonia = Convert.ToString(dtDatosEncabezado.Rows[0][21]); // sReceptor_Colonia = Convert.ToString(dtDatosEncabezado.Rows[0][21]); if (dtDatosEncabezado.Rows[0][22] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][22]) != "") parametros.receptor_domicilio_localidad = Convert.ToString(dtDatosEncabezado.Rows[0][22]); //sReceptor_Localidad = Convert.ToString(dtDatosEncabezado.Rows[0][22]); if (dtDatosEncabezado.Rows[0][23] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][23]) != "") parametros.receptor_domicilio_referencia = Convert.ToString(dtDatosEncabezado.Rows[0][23]); // sReceptor_Referencia = Convert.ToString(dtDatosEncabezado.Rows[0][23]); if (dtDatosEncabezado.Rows[0][24] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][24]) != "") parametros.receptor_domicilio_municipio = Convert.ToString(dtDatosEncabezado.Rows[0][24]); // sReceptor_Municipio = Convert.ToString(dtDatosEncabezado.Rows[0][24]); if (dtDatosEncabezado.Rows[0][25] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][25]) != "") parametros.receptor_domicilio_estado = Convert.ToString(dtDatosEncabezado.Rows[0][25]); //sReceptor_Estado = Convert.ToString(dtDatosEncabezado.Rows[0][25]); if (dtDatosEncabezado.Rows[0][26] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][26]) != "") parametros.receptor_domicilio_codigoPostal = Convert.ToString(dtDatosEncabezado.Rows[0][26]); // sReceptor_Cp = Convert.ToString(dtDatosEncabezado.Rows[0][26]); if (dtDatosEncabezado.Rows[0][27] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][27]) != "") parametros.receptor_domicilio_pais = Convert.ToString(dtDatosEncabezado.Rows[0][27]); // sReceptor_Pais = Convert.ToString(dtDatosEncabezado.Rows[0][27]); if (dtDatosEncabezado.Rows[0][29] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][29]) != "") parametros.sObservaciones = Convert.ToString(dtDatosEncabezado.Rows[0][29]); //sObservaciones = Convert.ToString(dtDatosEncabezado.Rows[0][29]); if (dtDatosEncabezado.Rows[0][30] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][30]) != "") parametros.sDatoReporte = Convert.ToString(dtDatosEncabezado.Rows[0][30]); //sDatoReporte = Convert.ToString(dtDatosEncabezado.Rows[0][30]); if (dtDatosEncabezado.Rows[0][31] != DBNull.Value && Convert.ToString(dtDatosEncabezado.Rows[0][31]) != "") parametros.iDatoSucursal = Convert.ToInt32(dtDatosEncabezado.Rows[0][31]); //iDatoSucursal = Convert.ToInt32(dtDatosEncabezado.Rows[0][31]); if (parametros.iDatoSucursal != 0) { dtDatosSucursal = lfGetDatosSucursal(sNombreDB, parametros.iDatoSucursal, companynumber); parametros.sSucursal_Nombre = Convert.ToString(dtDatosSucursal.Rows[0][0]); //sSucursal_Nombre = Convert.ToString(dtdtDatosSucursal.Rows[0][0]); parametros.emisor_expedidoEn_calle = Convert.ToString(dtDatosSucursal.Rows[0][1]); //sSucursal_Calle = Convert.ToString(dtDatosSucursal.Rows[0][1]); parametros.emisor_expedidoEn_noExterior = Convert.ToString(dtDatosSucursal.Rows[0][1]); //sSucursal_NoExterior = Convert.ToString(dtDatosSucursal.Rows[0][2]); parametros.emisor_expedidoEn_noInterior = Convert.ToString(dtDatosSucursal.Rows[0][3]); //sSucursal_NoInterior = Convert.ToString(dtDatosSucursal.Rows[0][3]); parametros.emisor_expedidoEn_colonia = Convert.ToString(dtDatosSucursal.Rows[0][4]); //sSucursal_Colonia = Convert.ToString(dtDatosSucursal.Rows[0][4]); parametros.emisor_expedidoEn_localidad = Convert.ToString(dtDatosSucursal.Rows[0][5]); //sSucursal_Localidad = Convert.ToString(dtDatosSucursal.Rows[0][5]); parametros.emisor_expedidoEn_referencia = Convert.ToString(dtDatosSucursal.Rows[0][6]); //sSucursal_Referencia = Convert.ToString(dtDatosSucursal.Rows[0][6]); parametros.emisor_expedidoEn_municipio = Convert.ToString(dtDatosSucursal.Rows[0][7]); //sSucursal_Municipio = Convert.ToString(dtDatosSucursal.Rows[0][7]); parametros.emisor_expedidoEn_estado = Convert.ToString(dtDatosSucursal.Rows[0][8]); //sSucursal_Estado = Convert.ToString(dtDatosSucursal.Rows[0][8]); parametros.emisor_expedidoEn_pais = Convert.ToString(dtDatosSucursal.Rows[0][9]); //sSucursal_Pais = Convert.ToString(dtDatosSucursal.Rows[0][9]); parametros.emisor_expedidoEn_codigoPostal = Convert.ToString(dtDatosSucursal.Rows[0][10]); //sSucursal_Cp = Convert.ToString(dtDatosSucursal.Rows[0][10]); parametros.lugarExpedicion = Convert.ToString(dtDatosSucursal.Rows[0][11]); //sLugarEX = Convert.ToString(dtDatosSucursal.Rows[0][11]); //Globales.ICSucursal = sSucursal_Calle + sSucursal_Calle + sSucursal_NoExterior + sSucursal_NoInterior + sSucursal_Colonia + sSucursal_Localidad + sSucursal_Referencia + sSucursal_Municipio + sSucursal_Estado + sSucursal_Pais + sSucursal_Cp + sLugarEX; //HttpContext.Current.Session["GlobalesICSucursal"] = sSucursal_Calle + sSucursal_Calle + sSucursal_NoExterior + sSucursal_NoInterior + sSucursal_Colonia + sSucursal_Localidad + sSucursal_Referencia + sSucursal_Municipio + sSucursal_Estado + sSucursal_Pais + sSucursal_Cp + sLugarEX; } else { //parametros.sSucursal_Nombre = string.Empty; ////sSucursal_Nombre = ""; //parametros.emisor_expedidoEn_calle = string.Empty; ////sSucursal_Calle = ""; //parametros.emisor_expedidoEn_noExterior = string.Empty; ////sSucursal_NoExterior = ""; //parametros.emisor_expedidoEn_noInterior = string.Empty; ////sSucursal_NoInterior = ""; //parametros.emisor_expedidoEn_colonia = string.Empty; ////sSucursal_Colonia = ""; //parametros.emisor_expedidoEn_localidad = string.Empty; ////sSucursal_Localidad = ""; //parametros.emisor_expedidoEn_referencia = string.Empty; ////sSucursal_Referencia = ""; //parametros.emisor_expedidoEn_municipio = string.Empty; ////sSucursal_Municipio = ""; //parametros.emisor_expedidoEn_estado = string.Empty; ////sSucursal_Estado = ""; //parametros.emisor_expedidoEn_pais = string.Empty; ////sSucursal_Pais = ""; //parametros.emisor_expedidoEn_codigoPostal = string.Empty; ////sSucursal_Cp = ""; //parametros.lugarExpedicion = string.Empty; //sLugarEX = ""; } return true; }
private static int lfConsultaNodosXMLtoPDF(XmlDocument xdo, ref Parametros objPar, ref CFDIV3_2 ds) { string sRE, sRR, sTT, sID, sRetencionesImpuestosOtros = string.Empty; int iRespuesta = 0; var xdoc = XMLController.ToXDocument(xdo); XNamespace cfdi = @"http://www.sat.gob.mx/cfd/3"; XNamespace tfd = @"http://www.sat.gob.mx/TimbreFiscalDigital"; XNamespace xnAerolineas = @"http://www.sat.gob.mx/aerolineas"; try { //XDocument xdoc = XDocument.Load(@objPar.sNombreArchivo); var elementouuid = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Complemento").Element(tfd + "TimbreFiscalDigital"); var elementrfcEmisor = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Emisor"); var elementrfcEmisorDomicilio = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Emisor").Element(cfdi + "DomicilioFiscal"); var elementrfcEmisorRegimenFiscal = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Emisor").Element(cfdi + "RegimenFiscal"); var elementrfcEmisorExpedidoEn = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Emisor").Element(cfdi + "ExpedidoEn"); var elementrfcReceptor = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Receptor"); var elementrfcReceptorDomicilio = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Receptor").Element(cfdi + "Domicilio"); var elementConceptos = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Conceptos"); var elementImpuestos = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Impuestos").Element(cfdi + "Retenciones"); var elementImpuestosSinRetenciones = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Impuestos"); var elementoRoot = xdoc.Element(cfdi + "Comprobante"); var elementoAeroLineas = xdoc.Element(cfdi + "Comprobante").Element(cfdi + "Complemento").Element(xnAerolineas + "Aerolineas"); foreach (var item in elementConceptos.Elements()) { DataRow _concepto = ds.Concepto.NewRow(); _concepto["noIdentificacion"] = (string)item.Attribute("noIdentificacion") == null ? " " : (string)item.Attribute("noIdentificacion").Value; _concepto["descripcion"] = (string)item.Attribute("descripcion") == null ? " " : (string)item.Attribute("descripcion").Value; _concepto["unidad"] = (string)item.Attribute("unidad") == null ? " " : (string)item.Attribute("unidad").Value; _concepto["valorUnitario"] = (string)item.Attribute("valorUnitario") == null ? " " : (string)item.Attribute("valorUnitario").Value; _concepto["cantidad"] = (string)item.Attribute("cantidad") == null ? " " : (string)item.Attribute("cantidad").Value; _concepto["importe"] = (string)item.Attribute("importe") == null ? " " : (string)item.Attribute("importe").Value; _concepto["concepto_id"] = iRespuesta++; ds.Concepto.Rows.Add(_concepto); } // Obtiene impuestos con rentenciones if (elementImpuestos != null) { if (elementImpuestos.HasElements) { foreach (XElement item in elementImpuestos.Elements()) sRetencionesImpuestosOtros += (string)item.Attribute("impuesto") + ": " + (string)item.Attribute("importe") + "|"; } } DataRow _Impuestos = ds.Impuestos.NewRow(); _Impuestos["totalImpuestosRetenidos"] = 0; _Impuestos["totalImpuestosTrasladados"] = ((elementImpuestosSinRetenciones.Attribute("totalImpuestosTrasladados") == null) ? 0 : (decimal)elementImpuestosSinRetenciones.Attribute("totalImpuestosTrasladados")); ds.Impuestos.Rows.Add(_Impuestos); // Obtiene impuestos de aerolineas if (elementoAeroLineas != null) { if (elementoAeroLineas.HasElements) { foreach (XElement item in elementoAeroLineas.Elements()) { sRetencionesImpuestosOtros += "TUA " + ((elementoAeroLineas.Attribute("TUA") != null) ? (string)elementoAeroLineas.Attribute("TUA").Value + "|" : ""); if (item.HasElements) { foreach (XElement itemDetalle in item.Elements()) sRetencionesImpuestosOtros += "CARGO " + (string)itemDetalle.Attribute("CodigoCargo").Value + " " + (string)itemDetalle.Attribute("Importe").Value + "|"; } } } } objPar.sRetencionesEImpuestos = sRetencionesImpuestosOtros; // ================================================================================================ // COMPROBANTE objPar.serie = (string)elementoRoot.Attribute("serie"); objPar.folio = (string)elementoRoot.Attribute("folio"); objPar.fecha = (string)elementoRoot.Attribute("fecha"); objPar.formaDePago = (string)elementoRoot.Attribute("formaDePago"); objPar.condicionesDePago = (string)elementoRoot.Attribute("condicionesDePago"); // no se encuentra ver que se manda objPar.tipoCambio = (string)elementoRoot.Attribute("TipoCambio"); objPar.moneda = (string)elementoRoot.Attribute("Moneda"); objPar.tipoDeComprobante = ((string)elementoRoot.Attribute("tipoDeComprobante")).ToUpper(); objPar.metodoDePago = (string)elementoRoot.Attribute("metodoDePago"); objPar.lugarExpedicion = (string)elementoRoot.Attribute("LugarExpedicion"); objPar.numCtaPago = (string)elementoRoot.Attribute("NumCtaPago"); objPar.snoCertificado = (string)elementoRoot.Attribute("noCertificado"); objPar.total = (decimal)elementoRoot.Attribute("total"); // ================================================================================================ // EMISOR objPar.emisor_rfc = (string)elementrfcEmisor.Attribute("rfc"); objPar.emisor_nombre = (string)elementrfcEmisor.Attribute("nombre"); // aun por configurar objPar.emisor_logo = ""; //================================================================================================ //EMISOR REGIMENFISCAL objPar.emisor_regimenFiscal_regimen = (string)elementrfcEmisorRegimenFiscal.Attribute("Regimen"); //================================================================================================ //EMISOR DOMICILIO FISCAL objPar.emisor_domicilioFiscal_calle = (string)elementrfcEmisorDomicilio.Attribute("calle"); objPar.emisor_domicilioFiscal_colonia = (string)elementrfcEmisorDomicilio.Attribute("colonia"); objPar.emisor_domicilioFiscal_municipio = (string)elementrfcEmisorDomicilio.Attribute("municipio"); objPar.emisor_domicilioFiscal_estado = (string)elementrfcEmisorDomicilio.Attribute("estado"); objPar.emisor_domicilioFiscal_pais = (string)elementrfcEmisorDomicilio.Attribute("pais"); objPar.emisor_domicilioFiscal_codigoPostal = (string)elementrfcEmisorDomicilio.Attribute("codigoPostal"); //================================================================================================ // RECEPTOR objPar.receptor_rfc = (string)elementrfcReceptor.Attribute("rfc"); objPar.receptor_nombre = (string)elementrfcReceptor.Attribute("nombre"); //================================================================================================ // RECEPTOR DOMICILIO objPar.receptor_domicilio_calle = (string)elementrfcReceptorDomicilio.Attribute("calle"); objPar.receptor_domicilio_colonia = (string)elementrfcReceptorDomicilio.Attribute("colonia"); objPar.receptor_domicilio_municipio = (string)elementrfcReceptorDomicilio.Attribute("municipio"); objPar.receptor_domicilio_estado = (string)elementrfcReceptorDomicilio.Attribute("estado"); objPar.receptor_domicilio_pais = (string)elementrfcReceptorDomicilio.Attribute("pais"); objPar.receptor_domicilio_codigoPostal = (string)elementrfcReceptorDomicilio.Attribute("codigoPostal"); //================================================================================================ // Z // Aun por resolver objPar.sObservaciones = " - "; objPar.subtotal = (decimal)elementoRoot.Attribute("subTotal"); objPar.sImporteConLetraXML = ImporteConLetraXML((string)elementoRoot.Attribute("Moneda"), objPar.total, 1, 0); objPar.emisor_ExpedidoEnDirrecion_Completa = string.Concat((string)elementrfcEmisorExpedidoEn.Attribute("calle"), " ", (string)elementrfcEmisorExpedidoEn.Attribute("colonia"), " ", (string)elementrfcEmisorExpedidoEn.Attribute("localidad"), " ", (string)elementrfcEmisorExpedidoEn.Attribute("estado"), " ", (string)elementrfcEmisorExpedidoEn.Attribute("pais"), " ", (string)elementrfcEmisorExpedidoEn.Attribute("codigoPostal")); //================================================================================================ // TimbreFiscalDigital objPar.sUUID = (string)elementouuid.Attribute("UUID"); objPar.dfechaTimbre = (DateTime)elementouuid.Attribute("FechaTimbrado"); objPar.sselloSAT = (string)elementouuid.Attribute("selloSAT"); objPar.sselloCFD = (string)elementouuid.Attribute("selloCFD"); objPar.snoCertificadoSAT = (string)elementouuid.Attribute("noCertificadoSAT"); //================================================================================================ //elementConceptos.Attributes sRE = (string)elementrfcEmisor.Attribute("rfc"); sRR = (string)elementrfcReceptor.Attribute("rfc"); sTT = (string)elementoRoot.Attribute("total"); sID = (string)elementouuid.Attribute("UUID"); iRespuesta = lfCreaRegistroXMLtoPDF(sRE, sRR, sTT, sID, @objPar.sNombreArchivo); } catch (Exception ex) { BitacoraController.gfLogFacturaRegistroError(ex.Message, "FacturaController", "lfConsultaNodosXMLtoPDF"); iRespuesta = -1; } return iRespuesta; }
public static DataSet ConvierteXMLaPDF(string sNombreArchivoConExtension, XmlDocument xDoc, ref CFDIV3_2 ds) { string lfservicioQR = "http://zxing.org/w/chart?cht=qr&chs=230x230&chld=L&choe=ISO-8859-1&chl="; string sRE = string.Empty, sRR = string.Empty, sTT = string.Empty, sID = string.Empty, pNombreArchivo = string.Empty, sNombreArchivo = string.Empty, sRespuesta = string.Empty; ; //xDoc.Load(sNombreArchivoConExtension); sNombreArchivo = sNombreArchivoConExtension; Parametros objPar = new Parametros(); objPar.sNombreArchivo = sNombreArchivoConExtension; lfConsultaNodosXMLtoPDF(xDoc, ref objPar, ref ds); // ================================================================================================ // COMPROBANTE DataRow _comprobante = ds.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; _comprobante["noCertificado"] = objPar.snoCertificado; ; string sQr = string.Concat("?re=", objPar.emisor_rfc, ";rr=", objPar.receptor_rfc, ";tt=", objPar.total, ";id=", objPar.sUUID, ""); sQr = lfservicioQR + sQr; _comprobante["cbb"] = sQr; _comprobante["subTotal"] = objPar.subtotal; _comprobante["total"] = objPar.total; _comprobante["descuento"] = "0.00"; ds.Comprobante.Rows.Add(_comprobante); // ================================================================================================ // EMISOR DataRow _emisor = ds.Emisor.NewRow(); _emisor["rfc"] = objPar.emisor_rfc; _emisor["nombre"] = objPar.emisor_nombre; // Sera configurable el logotipo ya que se mostrara vacío //objPar.emisor_logo = objPar.emisor_logo.Replace(@"D:\", @"E:\"); _emisor["logo"] = objPar.emisor_logo; ds.Emisor.Rows.Add(_emisor); //================================================================================================ //EMISOR REGIMENFISCAL DataRow _regimenFiscal = ds.RegimenFiscal.NewRow(); _regimenFiscal["Regimen"] = objPar.emisor_regimenFiscal_regimen; ds.RegimenFiscal.Rows.Add(_regimenFiscal); //================================================================================================ //EMISOR DOMICILIO FISCAL DataRow _domicilioFiscal = ds.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; ds.DomicilioFiscal.Rows.Add(_domicilioFiscal); //================================================================================================ // RECEPTOR DataRow _receptor = ds.Receptor.NewRow(); _receptor["rfc"] = objPar.receptor_rfc; _receptor["nombre"] = objPar.receptor_nombre; ds.Receptor.Rows.Add(_receptor); //================================================================================================ // RECEPTOR DOMICILIO DataRow _domicilio = ds.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; ds.Domicilio.Rows.Add(_domicilio); //================================================================================================ DataRow _z = ds.Z.NewRow(); _z["Observaciones"] = objPar.sObservaciones; _z["subtotal"] = objPar.subtotal; _z["DomicilioEstablecimiento"] = objPar.emisor_ExpedidoEnDirrecion_Completa; _z["D1"] = objPar.condicionesDePago; _z["D2"] = objPar.sRetencionesEImpuestos.Replace("|", "\r\n"); _z["ImporteConLetra"] = objPar.sImporteConLetraXML; ds.Z.Rows.Add(_z); //================================================================================================ // CONCEPTOS // El detalle de partidas se toma de por un parametro de referencia // Retencion IVA // El detalle de partidas se toma de por un parametro de referencia DataRow _Retencion = ds.Retencion.NewRow(); _Retencion["importe"] = objPar.impuestos_dRETIVA.ToString("0.##"); _Retencion["impuesto"] = "RETENCION IVA"; ds.Retencion.Rows.Add(_Retencion); //================================================================================================ // TimbreFiscalDigital DataRow _TimbreFiscalDigital = ds.TimbreFiscalDigital.NewRow(); _TimbreFiscalDigital["UUID"] = objPar.sUUID; _TimbreFiscalDigital["FechaTimbrado"] = objPar.dfechaTimbre.ToString("dd/MM/yyyy"); _TimbreFiscalDigital["selloSAT"] = objPar.sselloSAT; _TimbreFiscalDigital["selloCFD"] = objPar.sselloCFD; _TimbreFiscalDigital["noCertificadoSAT"] = objPar.snoCertificadoSAT; ds.TimbreFiscalDigital.Rows.Add(_TimbreFiscalDigital); lfCreaPDFdesdeXMLSinRetencion("#", 0, true, sNombreArchivoConExtension, "#", ds); return null; }
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; } }
/// <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 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; } }
public List <Product> GetAllProductsByParams(Models.Parametros parametros) { List <Product> list = new List <Product>(); Product Category = new Product(); List <SqlParameter> _Parametros = new List <SqlParameter>(); try { if (parametros.Category != null) { _Parametros.Add(new SqlParameter("@Category", parametros.Category)); } if (parametros.Brand != null) { _Parametros.Add(new SqlParameter("@Brand", parametros.Brand)); } if (parametros.ShortBy != null) { _Parametros.Add(new SqlParameter("@ShortBy", parametros.ShortBy)); } if (parametros.ShortByDirection != null) { _Parametros.Add(new SqlParameter("@ShortByDirection", parametros.ShortByDirection)); } if (parametros.MinValor != null) { _Parametros.Add(new SqlParameter("@MinValor", parametros.MinValor)); } if (parametros.MaxValor > 0) { _Parametros.Add(new SqlParameter("@MaxValor", parametros.MaxValor)); } sql.PrepararProcedimiento("dbo.[PRODUCT.GetByParams]", _Parametros); DataTableReader dtr = sql.EjecutarTableReader(CommandType.StoredProcedure); if (dtr.HasRows) { while (dtr.Read()) { var Json = dtr["Producto"].ToString(); if (Json != string.Empty) { JArray arr = JArray.Parse(Json); foreach (JObject jsonOperaciones in arr.Children <JObject>()) { list.Add(new Product() { Id = Convert.ToInt32(jsonOperaciones["id_"].ToString()), Title = jsonOperaciones["title"].ToString(), Sku = jsonOperaciones["sku"].ToString(), Description = jsonOperaciones["description"].ToString(), CreateDate = DateTime.Parse(jsonOperaciones["create_date"].ToString()), Brand = jsonOperaciones["brand"].ToString(), UpdateDate = DateTime.Parse(jsonOperaciones["update_date"].ToString()), IdCategory = Convert.ToInt32(jsonOperaciones["id_category"].ToString()), Ranking = Convert.ToInt32(jsonOperaciones["ranking"].ToString()), Price = Convert.ToDouble(jsonOperaciones["price"].ToString()), SeelingPrice = Convert.ToDouble(jsonOperaciones["seeling_price"].ToString()), Status = jsonOperaciones["status"].ToString(), Imagen = jsonOperaciones["image"].ToString(), Category = jsonOperaciones["category"].ToString() }); } } } } } catch (SqlException sqlEx) { throw new Exception(sqlEx.Message, sqlEx); } catch (Exception ex) { throw new Exception(ex.Message, ex); } return(list); }
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; } }