Esempio n. 1
0
        public string[] Proceso(string CertPath, string CertPass, string RequiereProxy, string ProxyServer,
                                string ProxyUser, string ProxyPass, string DtePath, string DtePathProc, string maximoIntentos,
                                string DtePathProcNOK, string VidaSemillaMil, string DteEstOK)

        {
            /*
             * string CertPath = Properties.Settings.Default["CertPath"].ToString();
             * string CertPass = Properties.Settings.Default["CertPass"].ToString();
             * string RequiereProxy = Properties.Settings.Default["RequiereProxy"].ToString();
             * string ProxyServer = Properties.Settings.Default["ProxyServer"].ToString();
             * string ProxyUser = Properties.Settings.Default["ProxyUser"].ToString();
             * string ProxyPass = Properties.Settings.Default["ProxyPass"].ToString();
             * string DtePath = Properties.Settings.Default["DtePath"].ToString();
             * */
            X509Certificate2 cert = new X509Certificate2(CertPath, CertPass);

            IWebProxy Proxya = System.Net.WebRequest.GetSystemWebProxy();

            if (RequiereProxy == "S")
            {
                NetworkCredential nc = new NetworkCredential(ProxyUser, ProxyPass, "");
                Proxya.Credentials = nc;
            }
            DirectoryInfo dir = new DirectoryInfo(DtePath);

            int numProcesados = 0;
            int numTotal      = 0;

            Console.Clear();
            //semilla
            XmlDocument xmlSemilla = new XmlDocument();

            //
            Console.WriteLine("*****************************************************");
            Console.WriteLine("CONSULTA DE ESTADO DE DTE");
            Console.WriteLine("PROCESO INICIADO (" + DateTime.Now.ToString() + ")...");
            Console.WriteLine("*****************************************************");
            //
            //HORA SEMILLA
            DateTime horaSemilla = DateTime.Now;

            //Genera nuevos documentos
            foreach (FileInfo f in dir.GetFiles("*.xml"))
            {
                string      name     = f.Name;
                string      fullName = f.FullName;
                XmlDocument xmlDTE   = new XmlDocument();
                xmlDTE.PreserveWhitespace = true;
                xmlDTE.Load(fullName);
                XmlNodeList elemDTE_Traspaso = xmlDTE.GetElementsByTagName("Documento");

                //separa xml de paquetes de envio.
                for (int ctDte = 0; ctDte <= elemDTE_Traspaso.Count - 1; ctDte++)
                {
                    XmlTextWriter aOuXML          = new XmlTextWriter(Path.GetDirectoryName(fullName) + "\\" + Path.GetFileNameWithoutExtension(fullName) + "_" + ctDte + ".xml", System.Text.Encoding.GetEncoding("iso-8859-1"));
                    XmlDocument   xmlEnc_traspaso = new XmlDocument();
                    xmlEnc_traspaso.PreserveWhitespace = true;
                    aOuXML.Formatting = Formatting.Indented;
                    aOuXML.WriteStartDocument();
                    aOuXML.WriteRaw(elemDTE_Traspaso[ctDte].OuterXml);
                    aOuXML.Flush();
                    aOuXML.Close();
                }
                //mueve los dtes originales a esta carpeta
                string        dias       = System.DateTime.Now.ToString("yyyyMMdd");
                string        carpetaORI = Path.GetDirectoryName(fullName) + "\\Historico_Originales\\" + dias + "\\";
                DirectoryInfo dir1       = new DirectoryInfo(carpetaORI);
                if (dir1.Exists == false)
                {
                    dir1.Create();
                }
                File.Move(fullName, carpetaORI + Path.GetFileNameWithoutExtension(fullName) + DateTime.Now.Ticks.ToString() + ".xml");
            }
            foreach (FileInfo f in dir.GetFiles("*.xml"))
            {
                int problemas = 0;

                #region LEO DTE
                string      name     = f.Name;
                string      fullName = f.FullName;
                XmlDocument xmlDTE   = new XmlDocument();
                xmlDTE.Load(fullName);

                XmlNodeList elemDTE = xmlDTE.GetElementsByTagName("Encabezado");


                XmlDocument xmlEnc = new XmlDocument();
                xmlEnc.InnerXml = elemDTE[0].OuterXml;
                xmlEnc.Save("Paso.xml");



                LectorXML lector = new LectorXML();
                Hashtable tbDTE  = lector.lectorArchivo("Paso.xml");

                //obtengo datos de consulta
                string[] arrayRutCons    = tbDTE["RUTEmisor"].ToString().Split('-');
                string   RutConsultante  = arrayRutCons[0];
                string   DvConsultante   = arrayRutCons[1];
                string[] arrayRutComp    = tbDTE["RUTEmisor"].ToString().Split('-');
                string   RutCompania     = arrayRutComp[0];
                string   DvCompania      = arrayRutComp[1];
                string[] arrayRutRece    = tbDTE["RUTRecep"].ToString().Split('-');
                string   RutReceptor     = arrayRutRece[0];
                string   DvReceptor      = arrayRutRece[1];
                string   TipoDte         = tbDTE["TipoDTE"].ToString();
                string   FolioDte        = tbDTE["Folio"].ToString();
                DateTime fecEmi          = Convert.ToDateTime(tbDTE["FchEmis"]);
                string   FechaEmisionDte = fecEmi.ToString("ddMMyyyy");
                string   MontoDte        = tbDTE["MntTotal"].ToString();

                #region SEMILLA

                //semilla
                string state       = string.Empty;
                int    intentos    = 0;
                int    resultMin   = 0;
                int    maxIntentos = int.Parse(maximoIntentos);
                while (intentos <= maxIntentos)
                {
                    string estadoSemilla = string.Empty;
                    try
                    {
                        TimeSpan ts = DateTime.Now.Subtract(horaSemilla);
                        resultMin = ts.Milliseconds;

                        if ((resultMin == int.Parse(VidaSemillaMil)) || (resultMin == 0) || (xmlSemilla.InnerText.Length == 0))
                        {
                            cl.sii.semilla.CrSeedService mySemilla = new cl.sii.semilla.CrSeedService();
                            Console.WriteLine("Consultando SII-SEMILLA..." + DateTime.Now.ToString());
                            mySemilla.Timeout = 1000;
                            if (RequiereProxy == "S")
                            {
                                mySemilla.Proxy = Proxya;
                            }
                            // state = mySemilla.getState();
                            //obtengo hora
                            horaSemilla = DateTime.Now;
                            resultMin   = 0;
                            //
                            xmlSemilla.InnerXml = mySemilla.getSeed();
                            intentos++;
                            Console.WriteLine("OK-SEMILLA..." + DateTime.Now.ToString());
                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                    catch (Exception e2)
                    {
                        intentos++;
                    }
                }
                if (xmlSemilla.InnerXml.Trim().Length > 0)
                {
                    XmlNodeList elemList         = xmlSemilla.GetElementsByTagName("SEMILLA");
                    string      semilla          = elemList[0].InnerText;
                    XmlDocument reqTokenSinFirma = new XmlDocument();
                    reqTokenSinFirma.InnerXml = "<?xml version='1.0'?><getToken><item><Semilla>" + semilla + "</Semilla></item></getToken>";

                    XmlDocument      reqTokenConFirma = new XmlDocument();
                    FirmaXML.Firmado firmador         = new Firmado();
                    reqTokenConFirma.InnerXml = firmador.Genera(reqTokenSinFirma, "", cert);
                    #endregion
                    #region TOKEN
                    //token
                    XmlDocument xmlToken = new XmlDocument();
                    cl.sii.token.GetTokenFromSeedService myToken = new cl.sii.token.GetTokenFromSeedService();
                    Console.WriteLine("Consultando SII-TOKEN...");
                    if (RequiereProxy == "S")
                    {
                        myToken.Proxy = Proxya;
                    }
                    intentos = 0;
                    while (intentos <= maxIntentos)
                    {
                        try
                        {
                            myToken.Timeout   = 1000;
                            xmlToken.InnerXml = myToken.getToken(reqTokenConFirma.InnerXml);
                            XmlNodeList elemList2   = xmlToken.GetElementsByTagName("ESTADO");
                            string      estadoToken = elemList2[0].InnerText;
                            if (estadoToken != "00")
                            {
                                xmlToken.InnerText = "";
                                if (intentos <= maxIntentos)
                                {
                                    state = string.Empty;
                                }
                            }
                            else
                            {
                                Console.WriteLine("OK-TOKEN..." + DateTime.Now.ToString());
                                break;
                            }
                            intentos++;
                        }
                        catch (Exception e1)
                        {
                            intentos++;
                        }
                    }
                    if (xmlToken.InnerXml.Trim().Length > 0)
                    {
                        XmlNodeList elemList3 = xmlToken.GetElementsByTagName("TOKEN");
                        string      token     = elemList3[0].InnerText;

                        #endregion
                        #region RESPUESTA
                        //respuesta.
                        XmlDocument respuestaSII = new XmlDocument();

                        intentos = 0;
                        while (intentos <= maxIntentos)
                        {
                            try
                            {
                                Console.WriteLine("Consultando SII-ESTADO...");
                                cl.sii.queryEstDte.QueryEstDteService myqueryEstDte = new cl.sii.queryEstDte.QueryEstDteService();
                                myqueryEstDte.Timeout = 2000;
                                if (RequiereProxy == "S")
                                {
                                    myqueryEstDte.Proxy = Proxya;
                                }

                                respuestaSII.InnerXml = myqueryEstDte.getEstDte(RutConsultante, DvConsultante, RutCompania, DvCompania, RutReceptor, DvReceptor, TipoDte, FolioDte, FechaEmisionDte, MontoDte, token);
                                Console.WriteLine("OK-ESTADO..." + DateTime.Now.ToString());
                                break;
                            }
                            catch
                            {
                                intentos++;
                            }
                        }
                        if (respuestaSII.InnerXml.Trim().Length > 0)
                        {
                            XmlNodeList elemList2;
                            string      estadorespuestaSII = "";
                            try
                            {
                                elemList2          = respuestaSII.GetElementsByTagName("GLOSA_ESTADO");
                                estadorespuestaSII = elemList2[0].InnerText;
                            }
                            catch
                            {
                                elemList2          = respuestaSII.GetElementsByTagName("ESTADO");
                                estadorespuestaSII = elemList2[0].InnerText;
                            }


                            //valido si es una respuesta numerica. algo paso. Asi que lo dejo pendiente.
                            bool retornoNumero = false;
                            try
                            {
                                double.Parse(estadorespuestaSII);
                                retornoNumero = true;
                            }
                            catch
                            {
                                retornoNumero = false;
                            }

                            if (!retornoNumero)
                            {
                                if (DteEstOK.Contains(estadorespuestaSII))      //estadorespuestaSII == "DOK" || estadorespuestaSII == "DNK")
                                {
                                    //muevo archivos a procesados
                                    //string carpetaDias = DateTime.Now.ToString("yyyyMMdd");
                                    string        dirProcesado = DtePathProc;
                                    DirectoryInfo dir2         = new DirectoryInfo(dirProcesado);
                                    if (!dir2.Exists)
                                    {
                                        dir2.Create();
                                    }
                                    if (!File.Exists(dirProcesado + @"\" + f.Name))
                                    {
                                        f.MoveTo(dirProcesado + @"\" + f.Name);
                                    }
                                    else
                                    {
                                        f.MoveTo(dirProcesado + @"\" + "COPIA_" + DateTime.Now.Ticks.ToString() + "_" + f.Name);
                                        //f.MoveTo(dirProcesado + "COPIA_" + Path.GetFileNameWithoutExtension(fullName) + "_" + ctDte + DateTime.Now.Ticks.ToString() + ".xml");
                                    }
                                }
                                else
                                {
                                    //muevo archivos a procesados
                                    string        carpetaDias  = DateTime.Now.ToString("yyyyMMdd");
                                    string        dirProcesado = DtePathProcNOK + @"\" + carpetaDias;
                                    DirectoryInfo dir2         = new DirectoryInfo(dirProcesado);
                                    if (!dir2.Exists)
                                    {
                                        dir2.Create();
                                    }
                                    f.MoveTo(dirProcesado + @"\" + f.Name);
                                    //guardo respuesta cuando es rechazado
                                    string newResp = f.Name.Substring(0, f.Name.Length - 4) + "_RES_" + DateTime.Now.Ticks + f.Extension;
                                    respuestaSII.Save(dirProcesado + @"\" + newResp);
                                }
                                numProcesados++;
                            }
                            else
                            {
                                problemas++;
                                Console.WriteLine("RETORNO NO VALIDO, ESTADO NUMERO (RESPUESTA), ARCHIVO: " + name);
                            }
                        }
                        else
                        {
                            problemas++;
                            Console.WriteLine("CONEXION A SII NO FUE POSIBLE (RESPUESTA), ARCHIVO: " + name);
                        }
                    }
                    else
                    {
                        problemas++;
                        Console.WriteLine("CONEXION A SII NO FUE POSIBLE (TOKEN), ARCHIVO: " + name);
                    }
                }
                else
                {
                    problemas++;
                    Console.WriteLine("CONEXION A SII NO FUE POSIBLE (SEMILLA), ARCHIVO: " + name);
                }
                #endregion

                numTotal++;


                #endregion
            }
            string[] myRetorno = new string[2];
            myRetorno[0] = numTotal.ToString();
            myRetorno[1] = numProcesados.ToString();
            Console.WriteLine("*****************************************************");
            Console.WriteLine("PROCESO FINALIZADO (" + DateTime.Now.ToString() + ").");
            Console.WriteLine("*****************************************************");


            return(myRetorno);
        }
Esempio n. 2
0
        public string[] Proceso(string CertPath, string CertPass, string RequiereProxy, string ProxyServer,
                                string ProxyUser, string ProxyPass, string DtePath, string DtePathProc, string maximoIntentos,
                                string DtePathProcNOK, string VidaSemillaMil, string[] DteEstOK, string OMITE_VAL_SII, string Valida_en_Sii, string Omitir_Guia, string Reintentos_Valida_Sii)

        {
            X509Certificate2 cert = new X509Certificate2(CertPath, CertPass);

            IWebProxy Proxya = System.Net.WebRequest.GetSystemWebProxy();

            if (RequiereProxy == "S")
            {
                NetworkCredential nc = new NetworkCredential(ProxyUser, ProxyPass, "");
                Proxya.Credentials = nc;
            }
            DirectoryInfo dir = new DirectoryInfo(DtePath);

            int numProcesados = 0;
            int numTotal      = 0;

            Console.Clear();
            //semilla
            XmlDocument xmlSemilla = new XmlDocument();

            //
            Console.WriteLine("*****************************************************");
            Console.WriteLine("*****************************************************");
            Console.WriteLine("*******                                       *******");
            Console.WriteLine("*****       Actualizado 01-08-2019 (SII)        *****");
            Console.WriteLine("*******                                       *******");
            Console.WriteLine("*****************************************************");
            Console.WriteLine("*****************************************************");
            Console.WriteLine("CONSULTA DE ESTADO DE DTE");
            Console.WriteLine("PROCESO INICIADO (" + DateTime.Now.ToString() + ")...");
            int cant_a_procesar = dir.GetFiles("*.xml").Length;

            Console.WriteLine("XML DISPONIBLES A PROCESAR: " + cant_a_procesar.ToString());
            Console.WriteLine("*****************************************************");

            /******************************** HISTORIAL DE ACTUALIZACIONES **************************************
            *  01-08-2019 Se realiza actualizacion para omitir la verificacion de la guia de despacho en el SII
            *
            *
            ****************************** FIN HISTORIAL DE ACTUALIZACIONES ************************************/


            //
            //HORA SEMILLA
            DateTime horaSemilla = DateTime.Now;


            //Crea nuevo directorio si no existe 27-11-2018 (mgarrido)
            if (!Directory.Exists(Valida_en_Sii))
            {
                try{ Directory.CreateDirectory(Valida_en_Sii); }
                catch { }
            }

            //Genera nuevos documentos
            foreach (FileInfo f in dir.GetFiles("*.xml"))
            {
                string      name     = f.Name;
                string      fullName = f.FullName;
                XmlDocument xmlDTE   = new XmlDocument();
                xmlDTE.PreserveWhitespace = true;
                xmlDTE.Load(fullName);
                XmlNodeList elemDTE_Traspaso = xmlDTE.GetElementsByTagName("Documento");

                //separa xml de paquetes de envio.
                for (int ctDte = 0; ctDte <= elemDTE_Traspaso.Count - 1; ctDte++)
                {
                    try
                    {
                        string newNombre = Path.GetFileNameWithoutExtension(fullName);
                        try
                        {
                            if (newNombre.Length > 75)
                            {
                                newNombre = newNombre.Substring(0, 74);
                            }
                        }
                        catch { }
                        if (!newNombre.Contains("_JDN2018_"))
                        {
                            string azar = "_JDN2018_" + ramdonString(8) + "_" + DateTime.Now.ToString("yyyyMMddThhmmss");
                            newNombre += azar;
                        }

                        newNombre += ".xml";

                        // Se gurdan en un nuevo directorio desde el 27-11-2018 (mgarrido)
                        XmlTextWriter aOuXML          = new XmlTextWriter(Valida_en_Sii + "\\" + newNombre, System.Text.Encoding.GetEncoding("iso-8859-1"));
                        XmlDocument   xmlEnc_traspaso = new XmlDocument();
                        xmlEnc_traspaso.PreserveWhitespace = true;
                        aOuXML.Formatting = Formatting.Indented;
                        aOuXML.WriteStartDocument();
                        aOuXML.WriteRaw(elemDTE_Traspaso[ctDte].OuterXml);
                        aOuXML.Flush();
                        aOuXML.Close();
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch { }
                }
                try
                {
                    //mueve los dtes originales a esta carpeta
                    string        dias       = System.DateTime.Now.ToString("yyyyMMdd");
                    string        carpetaORI = Path.GetDirectoryName(fullName) + "\\Historico_Originales\\" + dias + "\\";
                    DirectoryInfo dir1       = new DirectoryInfo(carpetaORI);
                    if (dir1.Exists == false)
                    {
                        dir1.Create();
                    }
                    File.Move(fullName, carpetaORI + Path.GetFileNameWithoutExtension(fullName) + DateTime.Now.Ticks.ToString() + ".xml");
                }
                catch
                {
                }
            }
            // Se lee desde el nuevo directorio desde el 27-11-2018 (mgarrido)
            DirectoryInfo NewDirectory = new DirectoryInfo(Valida_en_Sii);

            foreach (FileInfo f in NewDirectory.GetFiles("*.xml"))
            {
                int problemas = 0;

                #region LEO DTE
                string      name     = f.Name;
                string      fullName = f.FullName;
                XmlDocument xmlDTE   = new XmlDocument();
                xmlDTE.Load(fullName);

                XmlNodeList elemDTE = xmlDTE.GetElementsByTagName("Encabezado");


                //XmlDocument xmlEnc = new XmlDocument();
                //xmlEnc.InnerXml = elemDTE[0].OuterXml;
                //System.Threading.Thread.Sleep(2000);
                //xmlEnc.Save("Paso.xml");



                //    LectorXML lector = new LectorXML();
                //    Hashtable tbDTE = lector.lectorArchivo("Paso.xml");
                XmlDocument xmlEnc = new XmlDocument();
                xmlEnc.InnerXml = elemDTE[0].OuterXml;
                //System.Threading.Thread.Sleep(1500);
                //xmlEnc.Save("Paso.xml");

                MemoryStream xmlStream = new MemoryStream();
                xmlEnc.Save(xmlStream);

                xmlStream.Flush();//Adjust this if you want read your data
                xmlStream.Position = 0;


                LectorXML lector = new LectorXML();
                //Hashtable tbDTE = lector.lectorArchivo("Paso.xml");
                Hashtable tbDTE = new Hashtable();
                try
                {
                    tbDTE = lector.lectorArchivo2(xmlStream);
                }
                catch
                {
                    System.Threading.Thread.Sleep(1500);
                    xmlEnc.Save("Paso.xml");
                    tbDTE = lector.lectorArchivo("Paso.xml");
                }


                //obtengo datos de consulta
                string[] arrayRutCons    = tbDTE["RUTEmisor"].ToString().Split('-');
                string   RutConsultante  = arrayRutCons[0];
                string   DvConsultante   = arrayRutCons[1];
                string[] arrayRutComp    = tbDTE["RUTEmisor"].ToString().Split('-');
                string   RutCompania     = arrayRutComp[0];
                string   DvCompania      = arrayRutComp[1];
                string[] arrayRutRece    = tbDTE["RUTRecep"].ToString().Split('-');
                string   RutReceptor     = arrayRutRece[0];
                string   DvReceptor      = arrayRutRece[1];
                string   TipoDte         = tbDTE["TipoDTE"].ToString();
                string   FolioDte        = tbDTE["Folio"].ToString();
                DateTime fecEmi          = Convert.ToDateTime(tbDTE["FchEmis"]);
                string   FechaEmisionDte = fecEmi.ToString("ddMMyyyy");
                string   MontoDte        = tbDTE["MntTotal"].ToString();

                #region SEMILLA

                string Si_Omite_Guia = "N";

                if (Omitir_Guia == "S" && TipoDte == "52")
                {
                    Si_Omite_Guia = Omitir_Guia;
                }
                //semilla
                string state       = string.Empty;
                int    intentos    = 0;
                int    resultMin   = 0;
                int    maxIntentos = int.Parse(maximoIntentos);
                while (intentos <= maxIntentos)
                {
                    Console.WriteLine("Procesando XML : " + (numTotal + 1).ToString());
                    string estadoSemilla = string.Empty;
                    try
                    {
                        TimeSpan ts = DateTime.Now.Subtract(horaSemilla);
                        resultMin = ts.Milliseconds;

                        if ((resultMin == int.Parse(VidaSemillaMil)) || (resultMin == 0) || (xmlSemilla.InnerText.Length == 0))
                        {
                            cl.sii.semilla.CrSeedService mySemilla = new cl.sii.semilla.CrSeedService();
                            Console.WriteLine("Consultando SII-SEMILLA..." + DateTime.Now.ToString());
                            mySemilla.Timeout = 800;
                            if (RequiereProxy == "S")
                            {
                                mySemilla.Proxy = Proxya;
                            }
                            // state = mySemilla.getState();
                            //obtengo hora
                            horaSemilla = DateTime.Now;
                            resultMin   = 0;
                            //
                            xmlSemilla.InnerXml = mySemilla.getSeed();
                            intentos++;
                            Console.WriteLine("OK-SEMILLA..." + DateTime.Now.ToString());
                            break;
                        }
                        else
                        {
                            break;
                        }
                    }
                    catch (Exception e2)
                    {
                        intentos++;
                    }
                }
                if (xmlSemilla.InnerXml.Trim().Length > 0)
                {
                    XmlNodeList elemList         = xmlSemilla.GetElementsByTagName("SEMILLA");
                    string      semilla          = elemList[0].InnerText;
                    XmlDocument reqTokenSinFirma = new XmlDocument();
                    reqTokenSinFirma.InnerXml = "<?xml version='1.0'?><getToken><item><Semilla>" + semilla + "</Semilla></item></getToken>";

                    XmlDocument      reqTokenConFirma = new XmlDocument();
                    FirmaXML.Firmado firmador         = new Firmado();
                    reqTokenConFirma.InnerXml = firmador.Genera(reqTokenSinFirma, "", cert);
                    #endregion
                    #region TOKEN
                    //token
                    XmlDocument xmlToken = new XmlDocument();
                    cl.sii.token.GetTokenFromSeedService myToken = new cl.sii.token.GetTokenFromSeedService();
                    Console.WriteLine("Consultando SII-TOKEN...");
                    if (RequiereProxy == "S")
                    {
                        myToken.Proxy = Proxya;
                    }
                    intentos = 0;
                    if (Si_Omite_Guia == "N")
                    {
                        while (intentos <= maxIntentos)
                        {
                            try
                            {
                                myToken.Timeout   = 1000;
                                xmlToken.InnerXml = myToken.getToken(reqTokenConFirma.InnerXml);
                                XmlNodeList elemList2   = xmlToken.GetElementsByTagName("ESTADO");
                                string      estadoToken = elemList2[0].InnerText;
                                if (estadoToken != "00")
                                {
                                    xmlToken.InnerText = "";
                                    if (intentos <= maxIntentos)
                                    {
                                        state = string.Empty;
                                    }
                                }
                                else
                                {
                                    Console.WriteLine("OK-TOKEN..." + DateTime.Now.ToString());
                                    break;
                                }
                                intentos++;
                            }
                            catch (Exception e1)
                            {
                                intentos++;
                            }
                        }
                    }
                    else
                    {
                        xmlToken.InnerXml = "<TOKEN>TOKEN OMITIDO</TOKEN>";
                        Console.WriteLine("VALIDACIÓN SII DTE OMITIDO (GUIA)");
                    }
                    if (xmlToken.InnerXml.Trim().Length > 0)
                    {
                        string token = string.Empty;
                        try
                        {
                            Console.WriteLine(xmlToken.InnerXml);
                            XmlNodeList elemList3 = xmlToken.GetElementsByTagName("TOKEN");
                            token = elemList3[0].InnerText;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }

                        #endregion
                        #region RESPUESTA
                        //respuesta.
                        XmlDocument respuestaSII = new XmlDocument();

                        intentos = 0;
                        if (Si_Omite_Guia == "N")
                        {
                            while (intentos <= maxIntentos)
                            {
                                try
                                {
                                    Console.WriteLine("Consultando SII-ESTADO...");
                                    cl.sii.queryEstDte.QueryEstDteService myqueryEstDte = new cl.sii.queryEstDte.QueryEstDteService();
                                    myqueryEstDte.Timeout = 2000;
                                    if (RequiereProxy == "S")
                                    {
                                        myqueryEstDte.Proxy = Proxya;
                                    }

                                    respuestaSII.InnerXml = myqueryEstDte.getEstDte(RutConsultante, DvConsultante, RutCompania, DvCompania, RutReceptor, DvReceptor, TipoDte, FolioDte, FechaEmisionDte, MontoDte, token);
                                    Console.WriteLine("OK-ESTADO..." + DateTime.Now.ToString());
                                    System.Threading.Thread.Sleep(1000);
                                    break;
                                }
                                catch
                                {
                                    intentos++;
                                }
                            }
                        }
                        else
                        {
                            respuestaSII.InnerXml = "<TOKEN>RESPUESTA OMITIDO</TOKEN>";
                            Console.WriteLine("VALIDACIÓN SII DTE OMITIDO (GUIA)");
                        }
                        if (respuestaSII.InnerXml.Trim().Length > 0)
                        {
                            XmlNodeList elemList2;
                            string      estadorespuestaSII = "";

                            if (Si_Omite_Guia == "N")
                            {
                                try
                                {
                                    //elemList2 = respuestaSII.GetElementsByTagName("GLOSA_ESTADO");
                                    elemList2          = respuestaSII.GetElementsByTagName("ESTADO");
                                    estadorespuestaSII = elemList2[0].InnerText;
                                }
                                catch
                                {
                                    //elemList2 = respuestaSII.GetElementsByTagName("ESTADO");
                                    estadorespuestaSII = "0";
                                }
                            }
                            if (OMITE_VAL_SII == "S")
                            {
                                estadorespuestaSII = "DOK";
                            }
                            if (Si_Omite_Guia == "S")
                            {
                                estadorespuestaSII = "DOK";
                            }

                            //valido si es una respuesta numerica. algo paso. Asi que lo dejo pendiente.
                            bool retornoNumero = false;
                            try
                            {
                                double.Parse(estadorespuestaSII);
                                retornoNumero = true;
                            }
                            catch
                            {
                                retornoNumero = false;
                            }

                            if (!retornoNumero)
                            {
                                int index = Array.IndexOf(DteEstOK, estadorespuestaSII);
                                if (index > -1)      //estadorespuestaSII == "DOK" || estadorespuestaSII == "DNK")
                                {
                                    //muevo archivos a pendientes
                                    //string carpetaDias = DateTime.Now.ToString("yyyyMMdd");
                                    string        dirProcesado = DtePathProc;
                                    DirectoryInfo dir2         = new DirectoryInfo(dirProcesado);
                                    if (!dir2.Exists)
                                    {
                                        dir2.Create();
                                    }
                                    if (!File.Exists(dirProcesado + @"\" + f.Name))
                                    {
                                        f.MoveTo(dirProcesado + @"\" + f.Name);
                                    }
                                    else
                                    {
                                        f.MoveTo(dirProcesado + @"\" + "COPIA_" + DateTime.Now.Ticks.ToString("yyyMMddThhmmss") + "_" + f.Name);
                                        //f.MoveTo(dirProcesado + "COPIA_" + Path.GetFileNameWithoutExtension(fullName) + "_" + ctDte + DateTime.Now.Ticks.ToString() + ".xml");
                                    }
                                }
                                else
                                {
                                    /*//muevo archivos a rechazados
                                     * string carpetaDias = DateTime.Now.ToString("yyyyMMdd");
                                     * string dirProcesado = DtePathProcNOK + @"\" + carpetaDias;
                                     * DirectoryInfo dir2 = new DirectoryInfo(dirProcesado);
                                     * if (!dir2.Exists) { dir2.Create(); }
                                     * f.MoveTo(dirProcesado + @"\" + f.Name);
                                     * //guardo respuesta cuando es rechazado
                                     * string newResp = f.Name.Substring(0, f.Name.Length - 4) + "_RES_" + DateTime.Now.Ticks + f.Extension;
                                     * respuestaSII.Save(dirProcesado + @"\" + newResp);*/

                                    string        carpetaDias  = DateTime.Now.ToString("yyyyMMdd");
                                    string        dirProcesado = DtePathProcNOK + @"\" + carpetaDias;
                                    DirectoryInfo dir2         = new DirectoryInfo(dirProcesado);
                                    if (!dir2.Exists)
                                    {
                                        dir2.Create();
                                    }
                                    string newResp = f.Name.Substring(0, f.Name.Length - 4) + "_RES_" + DateTime.Now.Ticks + f.Extension;

                                    var      fechaRecepcion   = f.LastWriteTime;
                                    DateTime Hoy              = DateTime.Now;
                                    TimeSpan ts               = Hoy - fechaRecepcion;
                                    int      differenceInDays = ts.Days;

                                    if (estadorespuestaSII.Contains("FAU") && differenceInDays <= int.Parse(Reintentos_Valida_Sii))
                                    {
                                        Console.WriteLine("DOCUMENTO NO EXISTENTE EN SII, HAN PASADO " + differenceInDays + " DIAS");
                                    }
                                    else
                                    {
                                        Console.WriteLine("DOCUMENTO SE MUEVE A CARPETA DE RECHAZADOS");
                                        //muevo archivos a rechazados
                                        f.MoveTo(dirProcesado + @"\" + f.Name);
                                    }
                                    //guardo respuesta cuando es rechazado
                                    respuestaSII.Save(dirProcesado + @"\" + newResp);
                                }
                                numProcesados++;
                            }
                            else
                            {
                                problemas++;
                                Console.WriteLine("RETORNO NO VALIDO, ESTADO NUMERO (RESPUESTA), ARCHIVO: " + name);
                            }
                        }
                        else
                        {
                            problemas++;
                            Console.WriteLine("CONEXION A SII NO FUE POSIBLE (RESPUESTA), ARCHIVO: " + name);
                        }
                    }
                    else
                    {
                        problemas++;
                        Console.WriteLine("CONEXION A SII NO FUE POSIBLE (TOKEN), ARCHIVO: " + name);
                    }
                }
                else
                {
                    problemas++;
                    Console.WriteLine("CONEXION A SII NO FUE POSIBLE (SEMILLA), ARCHIVO: " + name);
                }
                #endregion

                numTotal++;


                #endregion
            }
            string[] myRetorno = new string[2];
            myRetorno[0] = numTotal.ToString();
            myRetorno[1] = numProcesados.ToString();
            Console.WriteLine("*****************************************************");
            Console.WriteLine("PROCESO FINALIZADO (" + DateTime.Now.ToString() + ").");
            Console.WriteLine("TOTAL: " + numTotal.ToString());
            Console.WriteLine("PROCESADOS: " + numProcesados.ToString());
            Console.WriteLine("*****************************************************");


            return(myRetorno);
        }