////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Draw QR Code
        /// </summary>
        /// <param name="QRCode">QR Code resource</param>
        /// <param name="OriginX">Origin X</param>
        /// <param name="OriginY">Origin Y</param>
        /// <param name="Width">Display width and height</param>
        /// <remarks>
        /// <para>
        /// The QR Code is saved in the PDF document as an image.
        /// </para>
        /// <para>
        /// QR Code is a square. The display height is the same as the width. 
        /// </para>
        /// </remarks>
        ////////////////////////////////////////////////////////////////////
        public void DrawQRCode(
			PdfQRCode	QRCode,
			Double		OriginX,
			Double		OriginY,
			Double		Width
			)
        {
            // add QR code to current list of resources
            AddToUsedResources(QRCode);

            // draw QR Code
            ContentsString.AppendFormat(NFI.PeriodDecSep, "q {0} 0 0 {0} {1} {2} cm {3} Do Q\n",
            ToPt(Width), ToPt(OriginX), ToPt(OriginY), QRCode.ResourceCode);
            return;
        }
        private void WebView_DownloadCompleted(object sender, DownloadEventArgs e)
        {
            try
            {
                if (this.Cancelar)
                {
                    this.Cursor = System.Windows.Forms.Cursors.Arrow;
                    this.webControl1.Cursor = System.Windows.Forms.Cursors.Arrow;
                //    Mensaje.MostrarMensaje(Constantes.TipoMensaje.Detenido, "Descarga", "Proceso cancelado por el usuario");
                }
                else
                {
                    DownloadItem archivoXML = e.Item;

                    String full = archivoXML.FullPath;
                    if (new FileInfo(full).Length == 0)
                    {
                        // empty
                        System.Windows.Forms.Clipboard.SetText("archivo vacio");

                        this.cuantosNoSeInsertaron++;

                    }
                    else
                    {
                        String[] fullArray = full.Split('\\');
                        String nombreDelArchivo = fullArray.Last();

                        XmlDocument doc = new XmlDocument();
                        doc.Load(full);
                        XmlNodeList titles = doc.GetElementsByTagName("tfd:TimbreFiscalDigital");
                        XmlNode obj = titles.Item(0);

                        String noCertificadoSAT = "";
                        bool isNoCertificado = obj.Attributes["noCertificadoSAT"] != null;
                        if (isNoCertificado)
                        {
                            noCertificadoSAT = obj.Attributes["noCertificadoSAT"].InnerText;
                        }

                        String selloCFD = "";
                        bool isselloCFD = obj.Attributes["selloCFD"] != null;
                        if (isselloCFD)
                        {
                            selloCFD = obj.Attributes["selloCFD"].InnerText;
                        }

                        String selloSAT = "";
                        bool isselloSAT = obj.Attributes["selloSAT"] != null;
                        if (isselloSAT)
                        {
                            selloSAT = obj.Attributes["selloSAT"].InnerText;
                        }

                        String folio_fiscal = obj.Attributes["UUID"].InnerText;
                        folio_fiscal = folio_fiscal.ToUpper();

                        XmlNodeList titlesx = doc.GetElementsByTagName("cfdi:Receptor");
                        if (titlesx.Count == 0)
                        {
                            titlesx = doc.GetElementsByTagName("Receptor");
                        }

                        XmlNode objx = titlesx.Item(0);
                        String rfcReceptor = "";
                        String nombreReceptor = "";
                        bool isRFCrfcReceptor = objx.Attributes["rfc"] != null;
                        if (isRFCrfcReceptor)
                        {
                            rfcReceptor = objx.Attributes["rfc"].InnerText.Trim();
                        }
                        bool isRFCNombreReceptor = objx.Attributes["nombre"] != null;
                        if (isRFCNombreReceptor)
                        {
                            nombreReceptor = objx.Attributes["nombre"].InnerText;
                        }

                        XmlNodeList titles1 = doc.GetElementsByTagName("cfdi:Emisor");
                        if (titles1.Count == 0)
                        {
                            titles1 = doc.GetElementsByTagName("Emisor");
                        }

                        XmlNode obj1 = titles1.Item(0);
                        String rfc = "";
                        bool isRFC = obj1.Attributes["rfc"] != null;
                        if (isRFC)
                        {
                            rfc = obj1.Attributes["rfc"].InnerText.Trim();
                        }
                        //revisar que el RFC coincida , por lo menos uno de los 2
                        if (!rfc.Equals(Properties.Settings.Default.RFC))
                        {
                            if (!rfcReceptor.Equals(Properties.Settings.Default.RFC))
                            {
                                return;//naranjas
                            }
                        }

                        String razon = "";
                        bool isRazon = obj1.Attributes["nombre"] != null;
                        if (isRazon)
                        {
                            razon = obj1.Attributes["nombre"].InnerText;
                            razon = razon.Replace('\'', ' ');
                        }

                        XmlNodeList titles2 = doc.GetElementsByTagName("cfdi:Comprobante");
                        if (titles2.Count == 0)
                        {
                            titles2 = doc.GetElementsByTagName("Comprobante");
                        }

                        XmlNode obj2 = titles2.Item(0);

                        XmlNodeList titlesY = doc.GetElementsByTagName("cfdi:DomicilioFiscal");
                        if (titlesY.Count == 0)
                        {
                            titlesY = doc.GetElementsByTagName("DomicilioFiscal");
                        }
                        String calle = "";
                        String noExterior = "";
                        String colonia = "";
                        String municipio = "";
                        String estado = "";

                        if (titlesY.Count > 0)
                        {
                            XmlNode objY = titlesY.Item(0);
                            bool isCalle = objY.Attributes["calle"] != null;
                            if (isCalle)
                            {
                                calle = objY.Attributes["calle"].InnerText;
                            }

                            bool isnoExterior = objY.Attributes["noExterior"] != null;
                            if (isnoExterior)
                            {
                                noExterior = objY.Attributes["noExterior"].InnerText;
                            }

                            bool iscolonia = objY.Attributes["colonia"] != null;
                            if (iscolonia)
                            {
                                colonia = objY.Attributes["colonia"].InnerText;
                            }

                            bool ismunicipio = objY.Attributes["municipio"] != null;
                            if (ismunicipio)
                            {
                                municipio = objY.Attributes["municipio"].InnerText;
                            }

                            bool isestado = objY.Attributes["estado"] != null;
                            if (isestado)
                            {
                                estado = objY.Attributes["estado"].InnerText;
                            }
                        }

                        XmlNodeList titles4 = doc.GetElementsByTagName("cfdi:Impuestos");
                        if (titles4.Count == 0)
                        {
                            titles4 = doc.GetElementsByTagName("Impuestos");
                        }

                        XmlNode obj4 = titles4.Item(0);

                        String iva = "0";
                        bool isIva = obj4.Attributes["totalImpuestosTrasladados"] != null;
                        if (isIva)
                        {
                            iva = obj4.Attributes["totalImpuestosTrasladados"].InnerText;
                        }
                        else
                        {
                            XmlNodeList traslados = doc.GetElementsByTagName("cfdi:Traslado");
                            if (traslados.Count == 0)
                            {
                                traslados = doc.GetElementsByTagName("Traslado");
                            }
                            int i;
                            for (i = 0; i < traslados.Count; i++)
                            {
                                XmlNode objn = traslados.Item(i);
                                String cantidad = "0";
                                bool isCantidad = objn.Attributes["importe"] != null;
                                if (isCantidad)
                                {
                                    cantidad = objn.Attributes["importe"].InnerText;
                                }
                                iva = Convert.ToString(float.Parse(iva) + float.Parse(cantidad));
                            }
                        }

                        String subTotal = "";
                        bool isSubTotal = obj2.Attributes["subTotal"] != null;
                        if (isSubTotal)
                        {
                            subTotal = obj2.Attributes["subTotal"].InnerText;
                        }

                        String tipoDeComprobante = "INGRESO";
                        bool istipoDeComprobante = obj2.Attributes["tipoDeComprobante"] != null;
                        if (istipoDeComprobante)
                        {
                            tipoDeComprobante = obj2.Attributes["tipoDeComprobante"].InnerText.Trim().ToUpper();
                        }

                        String total = "";
                        bool isTotal = obj2.Attributes["total"] != null;
                        if (isTotal)
                        {
                            total = obj2.Attributes["total"].InnerText;
                        }

                        bool isFecha = obj2.Attributes["fecha"] != null;
                        String fecha = "";
                        if (isFecha)
                        {
                            fecha = obj2.Attributes["fecha"].InnerText;
                        }
                        bool isFolio = obj2.Attributes["folio"] != null;
                        String folio = "";
                        if (isFolio)
                        {
                            folio = obj2.Attributes["folio"].InnerText;
                        }
                        if (estoyEnCancelados)
                        {
                            String query1 = "UPDATE [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] set STATUS = '0' WHERE folioFiscal = '" + folio_fiscal + "'";
                            totalDeCancelados++;
                            try
                            {
                                using (SqlConnection connection = new SqlConnection(connString))
                                {
                                    connection.Open();
                                    SqlCommand cmd = new SqlCommand(query1, connection);
                                    cmd.ExecuteNonQuery();

                                    String queryCheck1 = "SELECT BUNIT, JRNAL_NO, JRNAL_LINE, CONCEPTO, FUNCION, PROJECT, descripcionLI, AMOUNT, Consecutivo, FOLIO_FISCAL FROM [" + Properties.Settings.Default.Database + "].[dbo].[FISCAL_xml] WHERE folioFiscal = '" + folio_fiscal + "'";
                                    SqlCommand cmdCheck = new SqlCommand(queryCheck1, connection);
                                    SqlDataReader reader = cmdCheck.ExecuteReader();

                                    if (reader.HasRows)
                                    {
                                        String BUNIT = "";
                                        String JRNAL_NO = "";
                                        String JRNAL_LINE = "";
                                        String CONCEPTO = "";
                                        String FUNCION = "";
                                        String PROJECT = "";
                                        String descripcionLI = "";
                                        String AMOUNT = "";
                                        String Consecutivo = "";
                                        String FOLIO_FISCAL = "";
                                        mensajeParaElCorreo.Append(this.Enters + "Los cancelados estan ligados a los siguientes movimientos: ");
                                        while (reader.Read())
                                        {
                                            BUNIT = reader.GetString(0).Trim();
                                            JRNAL_NO = Convert.ToString(reader.GetInt32(1));
                                            JRNAL_LINE = Convert.ToString(reader.GetInt32(2));
                                            CONCEPTO = reader.GetString(3).Trim();
                                            FUNCION = reader.GetString(4).Trim();
                                            PROJECT = reader.GetString(5).Trim();
                                            descripcionLI = reader.GetString(6).Trim();
                                            AMOUNT = Convert.ToString(reader.GetDecimal(7));
                                            Consecutivo = reader.GetString(8).Trim();
                                            FOLIO_FISCAL = reader.GetString(9).Trim();

                                            mensajeParaElCorreo.Append(this.Enters + BUNIT + " " + JRNAL_NO + " " + JRNAL_LINE + " " + CONCEPTO + " " + FUNCION + " " + PROJECT + " " + descripcionLI + " " + AMOUNT + " " + FOLIO_FISCAL + " " + Consecutivo);

                                        }
                                    }
                                }
                            }
                            catch (Exception ex1)
                            {
                                System.Windows.Forms.MessageBox.Show(ex1.ToString(), "Error Message1", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }

                        }
                        else
                        {

                            String query = "";
                            int STATUS = -1;
                            if (this.AnoSel.IndexOf("Emitidos") != -1)
                            {
                                if (tipoDeComprobante.Equals("INGRESO"))
                                {
                                    STATUS = 2;
                                    query = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] (folioFiscal,nombreArchivoXML,ruta,rfc,razonSocial,total,folio,fechaExpedicion,nombreArchivoPDF,STATUS,ocultaEnLigar,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + nombreDelArchivo + "', '" + carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual + "', '" + rfcReceptor + "', '" + nombreReceptor + "', " + total + ", '" + folio + "' , '" + fecha + "', '" + folio_fiscal + ".pdf','2',0,'" + Properties.Settings.Default.RFC + "')";
                                }
                                else
                                {
                                    STATUS = 1;
                                    query = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] (folioFiscal,nombreArchivoXML,ruta,rfc,razonSocial,total,folio,fechaExpedicion,nombreArchivoPDF,STATUS,ocultaEnLigar,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + nombreDelArchivo + "', '" + carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual + "', '" + rfcReceptor + "', '" + nombreReceptor + "', " + total + ", '" + folio + "' , '" + fecha + "', '" + folio_fiscal + ".pdf','1',0,'" + Properties.Settings.Default.RFC + "')";
                                }
                                insertaProveedor(rfcReceptor, nombreReceptor);
                                sincroniza(fecha, rfcReceptor, nombreReceptor, STATUS, total, folio, folio_fiscal, Properties.Settings.Default.RFC, "");
                            }
                            else
                            {
                                if (tipoDeComprobante.Equals("INGRESO"))
                                {
                                    STATUS = 1;
                                    query = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] (folioFiscal,nombreArchivoXML,ruta,rfc,razonSocial,total,folio,fechaExpedicion,nombreArchivoPDF,STATUS,ocultaEnLigar,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + nombreDelArchivo + "', '" + carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual + "', '" + rfc + "', '" + razon + "', " + total + ", '" + folio + "' , '" + fecha + "', '" + folio_fiscal + ".pdf','1',0,'" + Properties.Settings.Default.RFC + "')";
                                }
                                else
                                {
                                    STATUS = 2;
                                    query = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] (folioFiscal,nombreArchivoXML,ruta,rfc,razonSocial,total,folio,fechaExpedicion,nombreArchivoPDF,STATUS,ocultaEnLigar,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + nombreDelArchivo + "', '" + carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual + "', '" + rfc + "', '" + razon + "', " + total + ", '" + folio + "' , '" + fecha + "', '" + folio_fiscal + ".pdf','2',0,'" + Properties.Settings.Default.RFC + "')";
                                }
                                //query = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] (folioFiscal,nombreArchivoXML,ruta,rfc,razonSocial,total,folio,fechaExpedicion,nombreArchivoPDF,STATUS,ocultaEnLigar) VALUES ('" + folio_fiscal + "', '" + nombreDelArchivo + "', '" + carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual + "', '" + rfc + "', '" + razon + "', " + total + ", '" + folio + "' , '" + fecha + "', '" + folio_fiscal + ".pdf','1',0)";
                                insertaProveedor(rfc, razon);
                                sincroniza(fecha, rfc,  razon,  STATUS,  total,  folio,  folio_fiscal, Properties.Settings.Default.RFC, "");
                            }
                            String queryCheck = "SELECT * FROM [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] WHERE folioFiscal = '" + folio_fiscal + "'";

                            try
                            {
                                using (SqlConnection connection = new SqlConnection(connString))
                                {
                                    connection.Open();
                                    SqlCommand cmdCheck = new SqlCommand(queryCheck, connection);
                                    SqlDataReader reader = cmdCheck.ExecuteReader();
                                    if (!reader.Read())
                                    {
                                        reader.Close();
                                        connection.Close();
                                        connection.Open();
                                        SqlCommand cmd = new SqlCommand(query, connection);
                                        cmd.ExecuteNonQuery();
                                        PdfContents Contents = null;
                                        PdfPage Page = null;
                                        const Double Width = 5.15;
                                        const Double Height = 10.65;
                                        const Double FontSize = 9.0;
                                        PdfFileWriter.TextBox Box = null;
                                        if (cadaCuantasHorasGlobal == 0 || 1 == 1)//no estoy en modo de horas
                                        {
                                            String FileName = carpeta.Text + (object)Path.DirectorySeparatorChar + this.AnoSel + (object)Path.DirectorySeparatorChar + this.MesSel + (object)Path.DirectorySeparatorChar + diaActual.ToString() + (object)Path.DirectorySeparatorChar + folio_fiscal + ".pdf";
                                            Document = new PdfDocument(PaperType.Letter, false, UnitOfMeasure.Inch, FileName);
                                            DefineFontResources();
                                            DefineTilingPatternResource();
                                            Page = new PdfPage(Document);
                                            Contents = new PdfContents(Page);
                                            Contents.SaveGraphicsState();
                                            Contents.Translate(0.1, 0.1);
                                            Box = new PdfFileWriter.TextBox(Width, 0.25);
                                        }
                                        XmlNodeList conceptos = doc.GetElementsByTagName("cfdi:Concepto");
                                        if (conceptos.Count == 0)
                                        {
                                            conceptos = doc.GetElementsByTagName("Concepto");
                                        }

                                        int i;
                                        String conceptosString = "";
                                        for (i = 0; i < conceptos.Count; i++)
                                        {
                                            XmlNode objy = conceptos.Item(i);
                                            String cantidadc = "";
                                            bool isCantidadc = objy.Attributes["cantidad"] != null;
                                            if (isCantidadc)
                                            {
                                                cantidadc = objy.Attributes["cantidad"].InnerText;
                                            }
                                            String unidadc = "";
                                            bool isUnidadc = objy.Attributes["unidad"] != null;
                                            if (isUnidadc)
                                            {
                                                unidadc = objy.Attributes["unidad"].InnerText;
                                            }
                                            String descripcionc = "";
                                            bool isdescripcionc = objy.Attributes["descripcion"] != null;
                                            if (isdescripcionc)
                                            {
                                                descripcionc = objy.Attributes["descripcion"].InnerText;
                                            }
                                            String importec = "";
                                            bool isimportec = objy.Attributes["importe"] != null;
                                            if (isimportec)
                                            {
                                                importec = objy.Attributes["importe"].InnerText;
                                            }
                                            conceptosString = conceptosString + "\n" + cantidadc + " " + descripcionc + " $" + importec;
                                        }
                                        String impuestosString = "";
                                        double totalDeRetenciones = 0;
                                        XmlNodeList retencionesLocales = doc.GetElementsByTagName("implocal:RetencionesLocales");
                                        if (retencionesLocales.Count == 0)
                                        {
                                            retencionesLocales = doc.GetElementsByTagName("RetencionesLocales");
                                        }
                                        for (i = 0; i < retencionesLocales.Count; i++)
                                        {
                                            XmlNode objn = retencionesLocales.Item(i);
                                            String cantidad = "0";
                                            String impuesto = "";
                                            float tasa = 0;
                                            bool isCantidad = objn.Attributes["Importe"] != null;
                                            if (isCantidad)
                                            {
                                                totalDeRetenciones += Convert.ToDouble(objn.Attributes["Importe"].InnerText);
                                                cantidad = objn.Attributes["Importe"].InnerText;
                                                impuesto = objn.Attributes["ImpLocRetenido"].InnerText;
                                                tasa = float.Parse(objn.Attributes["TasadeRetencion"].InnerText);
                                                float importe = float.Parse(cantidad);
                                                String queryCheckImpuesto = "SELECT * FROM [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] WHERE folioFiscal = '" + folio_fiscal + "' and impuesto = '" + impuesto + "' and tasa = " + tasa + " and importe = " + importe;
                                                SqlCommand cmdCheckImpuesto = new SqlCommand(queryCheckImpuesto, connection);
                                                SqlDataReader readerImpuesto = cmdCheckImpuesto.ExecuteReader();
                                                impuestosString = impuestosString + "\nImpuesto: " + impuesto + "\nTasa: " + tasa + "\nImporte: " + importe;
                                                if (!readerImpuesto.HasRows)
                                                {
                                                    readerImpuesto.Close();
                                                    String queryImpuesto = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] (folioFiscal,impuesto,tasa,importe,tipo,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + impuesto + "', " + tasa + ", " + importe + ",2,'" + Properties.Settings.Default.RFC + "')";
                                                    SqlCommand cmdImpuesto = new SqlCommand(queryImpuesto, connection);
                                                    cmdImpuesto.ExecuteNonQuery();
                                                }
                                                else
                                                {
                                                    readerImpuesto.Close();
                                                }
                                            }
                                            iva = Convert.ToString(float.Parse(iva) + float.Parse(cantidad));
                                        }

                                        XmlNodeList retenciones = doc.GetElementsByTagName("cfdi:Retencion");
                                        if (retenciones.Count == 0)
                                        {
                                            retenciones = doc.GetElementsByTagName("Retencion");
                                        }

                                        for (i = 0; i < retenciones.Count; i++)
                                        {
                                            XmlNode objn = retenciones.Item(i);
                                            String cantidad = "0";
                                            String impuesto = "";
                                            float tasa = 0;
                                            bool isCantidad = objn.Attributes["importe"] != null;
                                            if (isCantidad)
                                            {
                                                totalDeRetenciones += Convert.ToDouble(objn.Attributes["importe"].InnerText);
                                                cantidad = objn.Attributes["importe"].InnerText;
                                                impuesto = objn.Attributes["impuesto"].InnerText;
                                                tasa = 0;
                                                float importe = float.Parse(cantidad);
                                                String queryCheckImpuesto = "SELECT * FROM [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] WHERE folioFiscal = '" + folio_fiscal + "' and impuesto = '" + impuesto + "' and tasa = " + tasa + " and importe = " + importe;
                                                SqlCommand cmdCheckImpuesto = new SqlCommand(queryCheckImpuesto, connection);
                                                SqlDataReader readerImpuesto = cmdCheckImpuesto.ExecuteReader();
                                                impuestosString = impuestosString + "\nImpuesto: " + impuesto + "\nImporte: " + importe;
                                                if (!readerImpuesto.HasRows)
                                                {
                                                    readerImpuesto.Close();
                                                    String queryImpuesto = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] (folioFiscal,impuesto,tasa,importe,tipo,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + impuesto + "', " + tasa + ", " + importe + ",2,'" + Properties.Settings.Default.RFC + "')";
                                                    SqlCommand cmdImpuesto = new SqlCommand(queryImpuesto, connection);
                                                    cmdImpuesto.ExecuteNonQuery();
                                                }
                                                else
                                                {
                                                    readerImpuesto.Close();
                                                }
                                            }
                                            iva = Convert.ToString(float.Parse(iva) + float.Parse(cantidad));
                                        }

                                        if (totalDeRetenciones > 0.0)
                                        {
                                            double nuevoTotal = Math.Round(totalDeRetenciones + Convert.ToDouble(total), 2);
                                            String query2 = "UPDATE [" + Properties.Settings.Default.Database + "].[dbo].[facturacion_XML] set total = " + nuevoTotal + "  WHERE folioFiscal = '" + folio_fiscal + "'";
                                            try
                                            {
                                                using (SqlCommand cmdx = new SqlCommand(query2, connection))
                                                {
                                                    cmd.ExecuteNonQuery();
                                                }
                                            }
                                            catch (Exception ex3)
                                            {
                                                ex3.ToString();
                                            }
                                        }

                                        XmlNodeList trasladosLocales = doc.GetElementsByTagName("implocal:TrasladosLocales");
                                        if (trasladosLocales.Count == 0)
                                        {
                                            trasladosLocales = doc.GetElementsByTagName("TrasladosLocales");
                                        }
                                        for (i = 0; i < trasladosLocales.Count; i++)
                                        {
                                            XmlNode objn = trasladosLocales.Item(i);
                                            String cantidad = "0";
                                            String impuesto = "";
                                            float tasa = 0;
                                            bool isCantidad = objn.Attributes["Importe"] != null;
                                            if (isCantidad)
                                            {
                                                cantidad = objn.Attributes["Importe"].InnerText;
                                                impuesto = objn.Attributes["ImpLocTrasladado"].InnerText;
                                                tasa = float.Parse(objn.Attributes["TasadeTraslado"].InnerText);
                                                float importe = float.Parse(cantidad);
                                                String queryCheckImpuesto = "SELECT * FROM [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] WHERE folioFiscal = '" + folio_fiscal + "' and impuesto = '" + impuesto + "' and tasa = " + tasa + " and importe = " + importe;
                                                SqlCommand cmdCheckImpuesto = new SqlCommand(queryCheckImpuesto, connection);
                                                SqlDataReader readerImpuesto = cmdCheckImpuesto.ExecuteReader();
                                                impuestosString = impuestosString + "\nImpuesto: " + impuesto + "\nTasa: " + tasa + "\nImporte: " + importe;
                                                if (!readerImpuesto.HasRows)
                                                {
                                                    readerImpuesto.Close();
                                                    String queryImpuesto = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] (folioFiscal,impuesto,tasa,importe,tipo,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + impuesto + "', " + tasa + ", " + importe + ",1,'" + Properties.Settings.Default.RFC + "')";
                                                    SqlCommand cmdImpuesto = new SqlCommand(queryImpuesto, connection);
                                                    cmdImpuesto.ExecuteNonQuery();
                                                }
                                                else
                                                {
                                                    readerImpuesto.Close();
                                                }
                                            }
                                            iva = Convert.ToString(float.Parse(iva) + float.Parse(cantidad));
                                        }

                                        XmlNodeList traslados = doc.GetElementsByTagName("cfdi:Traslado");
                                        if (traslados.Count == 0)
                                        {
                                            traslados = doc.GetElementsByTagName("Traslado");
                                        }
                                        for (i = 0; i < traslados.Count; i++)
                                        {
                                            XmlNode objn = traslados.Item(i);
                                            String cantidad = "0";
                                            String impuesto = "";
                                            float tasa = 0;
                                            bool isCantidad = objn.Attributes["importe"] != null;
                                            if (isCantidad)
                                            {
                                                cantidad = objn.Attributes["importe"].InnerText;
                                                impuesto = objn.Attributes["impuesto"].InnerText;
                                                tasa = float.Parse(objn.Attributes["tasa"].InnerText);
                                                float importe = float.Parse(cantidad);
                                                String queryCheckImpuesto = "SELECT * FROM [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] WHERE folioFiscal = '" + folio_fiscal + "' and impuesto = '" + impuesto + "' and tasa = " + tasa + " and importe = " + importe;
                                                SqlCommand cmdCheckImpuesto = new SqlCommand(queryCheckImpuesto, connection);
                                                SqlDataReader readerImpuesto = cmdCheckImpuesto.ExecuteReader();
                                                impuestosString = impuestosString + "\nImpuesto: " + impuesto + "\nTasa: " + tasa + "\nImporte: " + importe;
                                                if (!readerImpuesto.HasRows)
                                                {
                                                    readerImpuesto.Close();
                                                    String queryImpuesto = "INSERT INTO [" + Properties.Settings.Default.Database + "].[dbo].[impuestos] (folioFiscal,impuesto,tasa,importe,tipo,rfcRaiz) VALUES ('" + folio_fiscal + "', '" + impuesto + "', " + tasa + ", " + importe + ",1,'" + Properties.Settings.Default.RFC + "')";
                                                    SqlCommand cmdImpuesto = new SqlCommand(queryImpuesto, connection);
                                                    cmdImpuesto.ExecuteNonQuery();
                                                }
                                                else
                                                {
                                                    readerImpuesto.Close();
                                                }
                                            }
                                            iva = Convert.ToString(float.Parse(iva) + float.Parse(cantidad));
                                        }
                                        if (cadaCuantasHorasGlobal == 0 || 1 == 1)//no estoy en modo de horas
                                        {
                                            Box.AddText(ArialNormal, FontSize,
                                           "Cliente: " + nombreReceptor + "\n" +
                                           "RFC: " + rfcReceptor + "\n" +
                                           "Emisor: " + razon + "\n" +
                                           "RFC: " + rfc + "\n" +
                                           "Domicilio Fiscal: " + calle + " " + noExterior + " " + colonia + " " + municipio + " " + estado + "\n" +
                                           "Folio: " + folio + "\nFolio Fiscal: " + folio_fiscal + "\nTotal: $" + total + "\nFecha de Expedicion: " + fecha + conceptosString + impuestosString + "\nNo de Serie del Certificado del SAT: " + noCertificadoSAT + "\nSello digital del CFDI:\n" + selloCFD + "\n\nSello del SAT:\n" + selloSAT + "\n\n\nEste documento es una representación impresa de un CFDI");
                                            Box.AddText(ArialNormal, FontSize, "\n");
                                            Double PosY = Height;
                                            Contents.DrawText(0.0, ref PosY, 0.0, 0, 0.015, 0.05, TextBoxJustify.FitToWidth, Box);
                                            Contents.RestoreGraphicsState();
                                            Contents.SaveGraphicsState();
                                            String DataString = "?re=" + rfc + "&rr=" + rfcReceptor + "&tt=" + total + "&id=" + folio_fiscal;
                                            PdfQRCode QRCode = new PdfQRCode(Document, DataString, ErrorCorrection.M);
                                            Contents.DrawQRCode(QRCode, 6.0, 6.8, 1.2);
                                            Contents.RestoreGraphicsState();
                                            Document.CreateFile();
                                        }
                                        totalDeDescargados++;
                                    }
                                    else
                                    {
                                        this.cuantosYaExistian++;
                                        totalDeYaExistian++;
                                    }

                                }
                            }
                            catch (Exception ex1)
                            {
                                ex1.ToString();
                                System.Windows.Forms.Clipboard.SetText(query);

                                this.cuantosNoSeInsertaron++;
                                //   System.Windows.Forms.MessageBox.Show("Error Message", ex1.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            }
                        }//else if estoyEnCancelados
                    }//else de empty

                    ++this.posicion;
                    if (this.posicion < this.ligas.Count)
                    {
                        if (!this.Cancelar)
                        {
                            this.Descargados.Add(e.Item);
                            this.proceso.Text = string.Format("Descargando {0} de {1}, Ya existian: {2}, Con errores: {3} ", (object)(this.posicion + 1), (object)this.ligas.Count.ToString() , (object)this.cuantosYaExistian, (object)this.cuantosNoSeInsertaron);
                            this.Descarga();
                        }
                        else
                        {
                            this.Cursor = System.Windows.Forms.Cursors.Arrow;
                            this.webControl1.Cursor = System.Windows.Forms.Cursors.Arrow;
                 //           Mensaje.MostrarMensaje(Constantes.TipoMensaje.Detenido, "Descarga", "Proceso cancelado por el usuario");
                        }
                    }
                    else
                    {

                        //                  enQueHoraVoyGlobal
                        //                    cadaCuantasHorasGlobal

                        int horaQueSigue = enQueHoraVoyGlobal + cadaCuantasHorasGlobal;
                        if(horaQueSigue<24 && cadaCuantasHorasGlobal!=0)//sigue con las horas
                        {
                            enQueHoraVoyGlobal = enQueHoraVoyGlobal + cadaCuantasHorasGlobal;
                            if(estoyEnEmitidos)
                            {
                                tmrDecimoCuarto.Start();
                            }
                            else
                            {
                                tmrQuintoPrimo.Start();
                            }
                        }
                        else
                        {//cambia el dia
                            enQueHoraVoyGlobal = 0;
                            //cambia un dia
                            if (modoGlobal == 2 && estoyEnEmitidos)
                            {
                                DateTime now = DateTime.Now;
                                int year = now.Year - anoAnterior;
                                int month = now.Month;
                                if (modoGlobal == 2)//ultrapesado
                                {
                                    month = mesActual + 1;
                                }

                                int diaFinal = 28;
                                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
                                {
                                    diaFinal = 31;
                                }
                                else
                                {
                                    if (month == 4 || month == 6 || month == 9 || month == 11)
                                    {
                                        diaFinal = 30;
                                    }
                                    else
                                    {
                                        if (year % 4 == 0)//ano bisiesto
                                        {
                                            diaFinal = 29;
                                        }
                                    }
                                }

                                if (diaActual < diaFinal)
                                {
                                    diaActual++;
                                    tmrDecimoCuarto.Start();
                                    return;
                                }
                                else
                                {
                                    diaActual = 1;
                                    if (mesActual < 11)
                                    {
                                        mesActual++;
                                        tmrDecimoCuarto.Start();
                                        return;
                                    }
                                    else
                                    {
                                        tmrDecimoSexto.Start();
                                        return;
                                    }
                                }

                            }
                            if (modoGlobal == 1)
                            {
                                if (estoyEnEmitidos)
                                {
                                    mandaCorreo();
                                }
                                else
                                {
                                    empiezaConLosEmitidos();
                                }
                            }
                            else
                            {
                                this.proceso.Text = string.Format("Descargando {0} de {1}, Ya existian: {2}, Con errores: {3}", (object)this.posicion, (object)this.ligas.Count.ToString(), (object)this.cuantosYaExistian, (object)this.cuantosNoSeInsertaron);
                                this.Descargados.Add(e.Item);
                                this.Cursor = System.Windows.Forms.Cursors.Arrow;
                                this.webControl1.Cursor = System.Windows.Forms.Cursors.Arrow;
                                this.proceso.Text = string.Format("Descarga Finalizada {0} de {1}, Ya existian: {2}, Con errores: {3}", (object)this.posicion, (object)this.ligas.Count.ToString(), (object)this.cuantosYaExistian, (object)this.cuantosNoSeInsertaron);
                                if (estoyEnCancelados)
                                {
                                    //ya termine
                                    mensajeParaElCorreo.Append(totalDeCancelados);
                                    return;
                                }
                                if (!estoyEnCancelados && estoyEnEmitidos)
                                {
                                    //agregar para debuguear emitidos
                                    mensajeParaElCorreo.Append(Enters + Enters + "Facturas Emitidas totales: " + (object)this.ligas.Count.ToString() + " Ya existian: " + (object)this.cuantosYaExistian);
                                    tmrDecimoSexto.Start();
                                    return;
                                }
                                DateTime now = DateTime.Now;
                                int year = now.Year - anoAnterior;
                                int month = now.Month;
                                if (modoGlobal == 2)//ultrapesado
                                {
                                    month = mesActual + 1;
                                }

                                int diaFinal = 28;
                                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
                                {
                                    diaFinal = 31;
                                }
                                else
                                {
                                    if (month == 4 || month == 6 || month == 9 || month == 11)
                                    {
                                        diaFinal = 30;
                                    }
                                    else
                                    {
                                        if (year % 4 == 0)//ano bisiesto
                                        {
                                            diaFinal = 29;
                                        }
                                    }
                                }

                                if (diaActual < diaFinal)
                                {
                                    diaActual++;
                                    if (estoyEnElMesAnterior)
                                    {
                                        tmrDecimo.Start();
                                    }
                                    else
                                    {
                                        if(cadaCuantasHorasGlobal==0)//sin horas
                                        {
                                            tmrQuinto.Start();
                                        }
                                        else
                                        {
                                            tmrQuintoPrimo.Start();
                                        }

                                    }
                                }
                                else
                                {
                                    if (estoyEnElMesAnterior)
                                    {
                                        estoyEnElMesAnterior = false;
                                        diaActual = 1;
                                        empiezaConLosCancelados();
                                    }
                                    else
                                    {
                                        if (modoGlobal == 2)//ultrapesado
                                        {
                                            if (mesActual < 11)
                                            {
                                                mesActual++;
                                                diaActual = 1;
                                                tmrDecimo.Start();
                                            }
                                            else
                                            {
                                                estoyEnElMesAnterior = false;
                                                diaActual = 1;
                                                mesActual = 0;
                                                empiezaConLosCancelados();
                                            }
                                        }
                                        else//modo pesado
                                        {
                                            empiezaConElMesAnterior();
                                        }
                                    }
                                }
                            }
                        }//if cambia un dia
                    }
                }
            }
            catch (Exception ex)
            {
               System.Windows.Forms.MessageBox.Show( ex.ToString(), "Error Title2", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

               //  Logs.Escribir("Error en download complete : " + ex.ToString());
            }
        }