Example #1
0
        public String getXmlFolio(String nodo, int tipo, string rut)
        {
            string nodoValue = string.Empty;

            string caf     = string.Empty;
            string xmlCaf  = string.Empty;
            string rsa     = string.Empty;
            string line    = string.Empty;
            bool   cafline = false;
            bool   rsaline = false;

            try
            {
                fileAdmin file   = new fileAdmin();
                String    cafDir = String.Empty;

                // Elegir Caf según Rut y tipo

                switch (tipo)
                {
                case 33: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\factura\";
                    break;

                case 61: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\notacredito\";
                    break;

                case 56: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\notadebito\";
                    break;

                case 52: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\Guia\";
                    break;

                case 34: cafDir = @"C:\AdmToSii\cafs\" + rut + @"\facturaexenta\";
                    break;
                }


                xmlCaf = file.nextFile(cafDir, "*.xml");

                using (StreamReader sr = new StreamReader(xmlCaf))
                {
                    while ((line = sr.ReadLine()) != null)
                    {
                        if (line == "<CAF version=\"1.0\">")
                        {
                            cafline = true;
                        }
                        if (line == "</CAF>")
                        {
                            caf    += line;
                            cafline = false;
                        }

                        if (line == "<RSASK>-----BEGIN RSA PRIVATE KEY-----")
                        {
                            rsaline = true;
                            line    = sr.ReadLine();
                        }
                        if (line == "-----END RSA PRIVATE KEY-----")
                        {
                            rsaline = false;
                        }

                        if (cafline)
                        {
                            caf += line;
                        }
                        if (rsaline)
                        {
                            rsa += line;
                        }
                    }
                    sr.Close();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }

            if (nodo == "CAF")
            {
                nodoValue = caf;
            }
            else
            {
                nodoValue = rsa;
            }

            System.Console.WriteLine(nodoValue);

            return(nodoValue);
        }
Example #2
0
        public void DoProcessIat()
        {
            PrinterModel        print       = new PrinterModel();
            List <PrinterModel> printerList = print.printerList();

            if (printerList.Count == 0)
            {
                //MessageBox.Show(@"No hay impresoras configuradas, se usará DefaultPrinter");
            }

            int i = 0;
            int j = 0;


            while (!_shouldStop)
            {
                Console.WriteLine("ProcessIat thread: working...");

                Thread.Sleep(5000);

                i++;

                String paquete        = String.Empty;
                String dirCurrentFile = String.Empty;
                String Impresora      = String.Empty;

                // instancia fileadmin, para tener las herramientas para mover archivos
                fileAdmin fileAdm = new fileAdmin();

                // inatancia txt_reader
                TxtReaderModel lec = new TxtReaderModel();

                DocumentoModel   docLectura = new DocumentoModel();
                FuncionesComunes fc         = new FuncionesComunes();

                if (printerList.Count == 0)
                {
                    dirCurrentFile = @"C:\AdmToSii\file";
                    Impresora      = fc.GetDefaultPrinter();
                }
                else
                {
                    PrinterModel printDir = printerList.ElementAt(j);
                    dirCurrentFile = printDir.directory;
                    Impresora      = printDir.printerName;
                }
                Console.WriteLine("Buscando Json en " + dirCurrentFile);
                j++;


                // Ejecuta metodo de txt_reader que llena y obtienen Clase Documento
                docLectura = lec.lectura("", false, dirCurrentFile);

                xmlPaquete xml = new xmlPaquete();

                List <int> tipos = new List <int>();

                DateTime thisDay = DateTime.Now;
                String   fch     = String.Format("{0:yyyy-MM-ddTHH:mm:ss}", thisDay);
                String   fchName = String.Format("{0:yyyyMMddTHHmmss}", thisDay);

                LogModel log = new LogModel();

                String firsRut = String.Empty;
                empresa = empresa.getEmpresa();


                if (docLectura != null)
                {
                    docLectura.estado = "PREVIO";
                    new DocumentoModel().save(docLectura);
                    // Proceso de ReImpresión
                    // ir a directorio procesados y buscar el archivo docLectura.filename
                    if (System.IO.File.Exists(@"C:\AdmToSii\fileprocess\" + docLectura.fileName)) // si ya existe, reimprimir
                    {
                        if (empresa.PrnThermal == "True")
                        {
                            String    fileNameXML = @"DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_";
                            fileAdmin f           = new fileAdmin();

                            String fileXml = f.fileAprox(fileNameXML, @"C:/AdmToSii/file/xml/", "*.xml");

                            if (fileXml != null)
                            {
                                new ReimpThermal().reimp(docLectura, fileXml, Impresora);
                            }
                        }
                        else
                        {
                            String fileNamePDFRePrint = @"C:/AdmToSii/file/pdf/PRINT_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + ".pdf";

                            if (System.IO.File.Exists(fileNamePDFRePrint))
                            {
                                fc.printPdf(fileNamePDFRePrint, Impresora);
                            }
                        }
                        fileAdm.mvFile(docLectura.fileName, dirCurrentFile, @"C:\AdmToSii\fileprocess\");
                    }
                    else // si no procesar
                    {
                        fileAdm.mvFile(docLectura.fileName, dirCurrentFile, @"C:\AdmToSii\fileprocess\");

                        log.addLog("Inicio proceso TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");
                        tipos.Add(docLectura.TipoDTE);

                        String TimbreElec = xml.ted_to_xmlSii(docLectura, fch);
                        log.addLog("Crea Timbre TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                        String docXmlSign = xml.doc_to_xmlSii(docLectura, TimbreElec, fch);
                        log.addLog("Crea XML Envio TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                        // Guarda DTE xml
                        String DTE         = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + docXmlSign;
                        String fileNameXML = @"C:/AdmToSii/file/xml/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".xml";
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileNameXML, false, Encoding.GetEncoding("ISO-8859-1")))
                        {
                            file.WriteLine(docXmlSign);
                        }


                        //-----------------------------------------------------------------THERMAL--------------------------------------------------------------

                        if (empresa.PrnThermal == "True")
                        {
                            try
                            {
                                for (int copies = 0; copies < 3; copies++)
                                {
                                    Thermal thermal = new Thermal();
                                    thermal.doc    = docLectura;
                                    thermal.dd     = TimbreElec;
                                    thermal.copias = copies;
                                    if (docLectura.PrnTwoCopy == "True")
                                    {
                                        copies = 1;
                                    }
                                    docLectura.PrnTwoCopy = "False";
                                    if (copies == 2)
                                    {
                                        if (docLectura.TipoDTE == 33 || docLectura.TipoDTE == 34)
                                        {
                                            thermal.tipoCopia = "CEDIBLE";
                                        }
                                        if (docLectura.TipoDTE == 52)
                                        {
                                            thermal.tipoCopia = "CEDIBLE CON SU FACTURA";
                                        }

                                        if (docLectura.TipoDTE == 61)
                                        {
                                            break;
                                        }
                                    }
                                    //
                                    PrintDocument pd = new PrintDocument();
                                    pd.DefaultPageSettings.PaperSize = new PaperSize("", 284, 1800);
                                    pd.PrintPage += new PrintPageEventHandler(thermal.OpenThermal);
                                    pd.PrinterSettings.PrinterName = Impresora;
                                    Console.WriteLine(pd.ToString());
                                    pd.Print();
                                }

                                Pdf docpdf = new Pdf();

                                String fileNamePDF = @"C:/AdmToSii/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf";
                                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");
                                log.addLog("Crea PDF Trib TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                                String fileNamePDFCed = @"C:/AdmToSii/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "CEDIBLE.pdf";

                                if (docLectura.TipoDTE == 33 || docLectura.TipoDTE == 34)
                                {
                                    docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDFCed, "CEDIBLE");
                                }

                                if (docLectura.TipoDTE == 52)
                                {
                                    docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDFCed, "CEDIBLE CON SU FACTURA");
                                }
                                log.addLog("Crea PDF C TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");
                                log.addLog("IMPRIME TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                                // Agrega el DTE timbrado al paquete

                                paquete = paquete + docXmlSign;

                                //Estrae el rut del emisor de la primera factura del paquete
                                if (i == 0)
                                {
                                    firsRut = docLectura.RUTEmisor;
                                }
                                i++;



                                // Firma Paquete unitario
                                String envioCliente = xml.creaEnvio(paquete, docLectura.RUTEmisor, docLectura.RUTRecep, tipos, docLectura.RutEnvia, docLectura.FchResol, docLectura.RUTRecep, docLectura.NumResol);

                                String envioSII = xml.creaEnvio(paquete, docLectura.RUTEmisor, docLectura.RUTRecep, tipos, docLectura.RutEnvia, docLectura.FchResol, "", docLectura.NumResol);

                                X509Certificate2 cert = FuncionesComunes.obtenerCertificado(docLectura.NombreCertificado);

                                String enviox509SII     = xml.firmarDocumento(envioSII, cert);
                                String enviox509Cliente = xml.firmarDocumento(envioCliente, cert);

                                log.addLog("FIRMA ENVIO TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                                enviox509SII     = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + enviox509SII;
                                enviox509Cliente = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + enviox509Cliente;


                                String fileNameEnvioSII = @"C:/AdmToSii/file/xml/enviounitario/EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                                String fileNameEnvioCliente = @"C:/AdmToSii/file/xml/enviounitario/EnvioUnitCliente_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                                using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileNameEnvioSII, false, Encoding.GetEncoding("ISO-8859-1")))
                                {
                                    file.WriteLine(enviox509SII);
                                }

                                using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileNameEnvioCliente, false, Encoding.GetEncoding("ISO-8859-1")))
                                {
                                    file.WriteLine(enviox509Cliente);
                                }
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show("" + ex);
                            }
                            finally
                            {
                            }
                        }
                        else
                        {
                            Pdf docpdf = new Pdf();

                            String fileNamePDF = @"C:/AdmToSii/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf";
                            docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");
                            log.addLog("Crea PDF Trib TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                            String fileNamePDFCed = @"C:/AdmToSii/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "CEDIBLE.pdf";

                            if (docLectura.TipoDTE == 33 || docLectura.TipoDTE == 34)
                            {
                                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDFCed, "CEDIBLE");
                            }

                            if (docLectura.TipoDTE == 52)
                            {
                                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDFCed, "CEDIBLE CON SU FACTURA");
                            }
                            log.addLog("Crea PDF C TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                            // para otro tipo de impresion
                            // FuncionesComunes f = new FuncionesComunes();
                            // f.PrintDocument(@"CutePDF Writer", @"C:/AdmToSii/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf");

                            //Imprime pdf

                            String fileNamePDFPrint = @"C:/AdmToSii/file/pdf/PRINT_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + ".pdf";
                            docpdf.OpenPdfPrint(TimbreElec, docLectura, fileNamePDFPrint);
                            log.addLog("Crea PDF PRINT TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");



                            fc.printPdf(fileNamePDFPrint, Impresora);

                            log.addLog("IMPRIME TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                            // Agrega el DTE timbrado al paquete

                            paquete = paquete + docXmlSign;

                            //Estrae el rut del emisor de la primera factura del paquete
                            if (i == 0)
                            {
                                firsRut = docLectura.RUTEmisor;
                            }
                            i++;



                            // Firma Paquete unitario
                            String envioCliente = xml.creaEnvio(paquete, docLectura.RUTEmisor, docLectura.RUTRecep, tipos, docLectura.RutEnvia, docLectura.FchResol, docLectura.RUTRecep, docLectura.NumResol);

                            String envioSII = xml.creaEnvio(paquete, docLectura.RUTEmisor, docLectura.RUTRecep, tipos, docLectura.RutEnvia, docLectura.FchResol, "", docLectura.NumResol);

                            X509Certificate2 cert = FuncionesComunes.obtenerCertificado(docLectura.NombreCertificado);

                            String enviox509SII     = xml.firmarDocumento(envioSII, cert);
                            String enviox509Cliente = xml.firmarDocumento(envioCliente, cert);

                            log.addLog("FIRMA ENVIO TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");

                            enviox509SII     = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + enviox509SII;
                            enviox509Cliente = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + enviox509Cliente;


                            String fileNameEnvioSII = @"C:/AdmToSii/file/xml/enviounitario/EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                            String fileNameEnvioCliente = @"C:/AdmToSii/file/xml/enviounitario/EnvioUnitCliente_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileNameEnvioSII, false, Encoding.GetEncoding("ISO-8859-1")))
                            {
                                file.WriteLine(enviox509SII);
                            }

                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileNameEnvioCliente, false, Encoding.GetEncoding("ISO-8859-1")))
                            {
                                file.WriteLine(enviox509Cliente);
                            }
                        }



                        // *************  Envía json a server
                        //Connect conn = new Connect();
                        String trib = @"DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf";
                        String envU = @"EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";
                        String envC = @"EnvioUnitCliente_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";
                        String envF = @"DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".xml";
                        String ced  = String.Empty;
                        if (docLectura.TipoDTE != 61 && docLectura.TipoDTE != 56)
                        {
                            ced = @"DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "CEDIBLE.pdf";
                        }

                        // Envia al SII

                        string recepcionDteXml = conSii.send(docLectura.RutEnvia, docLectura.RUTEmisor, envU);
                        envioM.tipoDte         = docLectura.TipoDTE;
                        envioM.folio           = docLectura.Folio;
                        envioM.fchEmis         = DateTime.Parse(docLectura.FchEmis);
                        envioM.mntTotal        = docLectura.MntTotal;
                        envioM.CdgSIISucur     = docLectura.CdgSIISucur;
                        envioM.estado          = funcComunes.getStatus(recepcionDteXml);
                        envioM.envioXml        = envU;
                        envioM.recepcionDteXml = recepcionDteXml;
                        envioM.trackId         = funcComunes.getTrackId(recepcionDteXml);
                        envioM.save(envioM);


                        //envia documentos al core
                        //conn.sendInvoice(docLectura, trib, ced, envU, envC, envF, "S");
                        // *************  Envía json a server
                        //log.addLog("Envia CORE TipoDTE :" + docLectura.TipoDTE + " Folio :" + docLectura.Folio, "OK");
                        // ************  Crea regsitro del ultimo dte
                        // UltimoDteSqlModel uDTE = new UltimoDteSqlModel();
                        //uDTE.addUltmoDte(docLectura);
                    }
                }
                if (j == printerList.Count())
                {
                    j = 0;
                }
                fileAdm.buscaXmlProveedor();
            }
            Console.WriteLine("ProcessIat thread: terminating gracefully.");
        }