Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
        /// <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;
            }
        }
Пример #6
0
        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;
            }

        }
Пример #7
0
        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);
        }
Пример #8
0
        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;
            }
        }