예제 #1
0
        public void procesoPaquete()
        {
            string paquete = string.Empty;

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

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

            Documento docLectura = new Documento();

            // Ejecuta metodo de txt_reader que llena y obtienen Clase Documento
            docLectura = lec.lectura("", true, "");
            // instancia XML_admin
            xmlPaquete xml = new xmlPaquete();

            List <int> tipos = new List <int>();
            // eliminar despues de la simulacion

            Empresa empresa = new Empresa();

            empresa = empresa.getEmpresa();

            DateTime thisDay = DateTime.Now;

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

            int folio33 = 735;
            int folio34 = 1000;   //Factura Exenta
            int folio52 = 10;     //Guia Despacho
            int folio61 = 15;
            int folio56 = 15;
            int folio   = 0;
            int folio46 = 0;

            int i = 0;

            String firsRut        = String.Empty;
            String rutenvia       = String.Empty;
            String fchresol       = String.Empty;
            String nomcertificado = String.Empty;
            String numResol       = String.Empty;



            while (docLectura != null)
            {
                switch (docLectura.TipoDTE)
                {
                case 33: { folio33++; folio = folio33; }
                break;

                case 34: { folio34++; folio = folio34; }
                break;

                case 52: { folio52++; folio = folio52; }
                break;

                case 61: { folio61++; folio = folio61; }
                break;

                case 56: { folio56++; folio = folio56; }
                break;

                case 46: { folio46++; folio = folio46; }
                break;
                }



                tipos.Add(docLectura.TipoDTE);

                // docLectura.Folio = folio;

                String TimbreElec = xml.ted_to_xmlSii(docLectura, fch);
                String docXmlSign = xml.doc_to_xmlSii(docLectura, TimbreElec, fch);



                // Guarda DTE xml
                String DTE         = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n" + docXmlSign;
                String fileNameXML = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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);
                }


                //Generar PDF
                Pdf docpdf = new Pdf();

                String fileNamePDF = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "TRIBUTABLE.pdf";
                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");

                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");

                String fileNamePDFCed = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "CEDIBLE.pdf";


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

                if (docLectura.TipoDTE == 52)
                {
                    docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDFCed, "CEDIBLE CON SU FACTURA");
                }

                //Genere Print Thermal

                if (empresa.PrnThermal == "True")
                {
                    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 || docLectura.TipoDTE == 46)
                            {
                                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 = "prnPdf";
                        Console.WriteLine(pd.ToString());
                        if (copies == 2)
                        {
                            pd.DocumentName = docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "_CEDIBLE";
                        }
                        else
                        {
                            pd.DocumentName = docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + "_TRIBUTABLE";
                        }
                        pd.Print();
                    }
                }

                // 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;
                    rutenvia       = docLectura.RutEnvia;
                    fchresol       = docLectura.FchResol;
                    numResol       = docLectura.NumResol;
                    nomcertificado = docLectura.NombreCertificado;
                }
                i++;

                //Sgte Documento
                docLectura = lec.lectura("", true, "");

                // Verifica que el siguiente documento sea del mismo emisor

                /*  if (docLectura != null)
                 * {
                 *    while (docLectura.RUTEmisor != firsRut)
                 *    {
                 *        // si no tiene el mismo rut
                 *        // lo saca del directorio
                 *        fileAdm.mvFile(docLectura.fileName, @""+Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString()+":\IatFiles\file\", @""+Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString()+":\IatFiles\file\noincluidos\");
                 *
                 *        //Sgte Documento
                 *        docLectura = lec.lectura();
                 *    }
                 * }
                 */
            }



            // Firma POaquete
            String envio = xml.creaEnvio(paquete, firsRut, "", tipos, rutenvia, fchresol, "", numResol);


            X509Certificate2 cert      = FuncionesComunes.obtenerCertificado(nomcertificado);
            String           enviox509 = xml.firmarDocumento(envio, cert);


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

            String fileNameEnvio = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/xml/EnvioPAck_" + firsRut + "_" + fchName + ".xml";

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

            Console.WriteLine(enviox509);
        }
예제 #2
0
        public String libroCompra_to_xml(LibroCompra libro)
        {
            Documento doc     = new Documento();
            Empresa   empresa = new Empresa();

            empresa = empresa.getEmpresa();
            String folioNotificacion = "<FolioNotificacion>" + libro.FolioNotificacion + "</FolioNotificacion>\n";

            if (libro.NroResol != 0)
            {
                folioNotificacion = "";
            }
            String cabeceraLibro =

                "<LibroCompraVenta xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sii.cl/SiiDte LibroCV_v10.xsd\" version=\"1.0\" xmlns=\"http://www.sii.cl/SiiDte\">\n"
                + "<EnvioLibro ID=\"IECV201406\">\n"
                + "<Caratula>\n"
                + "<RutEmisorLibro>" + libro.RutEmisorLibro + "</RutEmisorLibro>\n"
                + "<RutEnvia>" + libro.RutEnvia + "</RutEnvia>\n"
                + "<PeriodoTributario>" + libro.PeriodoTributario + "</PeriodoTributario>\n"
                + "<FchResol>" + libro.FchResol + "</FchResol>\n"
                + "<NroResol>" + libro.NroResol + "</NroResol>\n"
                + "<TipoOperacion>" + libro.TipoOperacion + "</TipoOperacion>\n"
                + "<TipoLibro>" + libro.TipoLibro + "</TipoLibro>\n"
                + "<TipoEnvio>" + libro.TipoEnvio + "</TipoEnvio>\n"
                + folioNotificacion
                + "</Caratula>\n";


            String resumen = "<ResumenPeriodo>\n";


            String TotalesP = String.Empty;

            foreach (var total in libro.TotalesPeriodo)
            {
                String totopivausocomun = "<TotOpIVAUsoComun>" + total.TotOpIVAUsoComun + "</TotOpIVAUsoComun>\n";
                if (total.TotOpIVAUsoComun == 0)
                {
                    totopivausocomun = "";
                }

                String totivausocomun = "<TotIVAUsoComun>" + total.TotIVAUsoComun + "</TotIVAUsoComun>\n";
                if (total.TotIVAUsoComun == 0)
                {
                    totivausocomun = "";
                }

                String fctprop = "<FctProp>" + total.FctProp + "</FctProp>\n";
                if (total.FctProp == 0)
                {
                    fctprop = "";
                }
                String totcredivausocomun = "<TotCredIVAUsoComun>" + total.TotCredIVAUsoComun + "</TotCredIVAUsoComun>\n";
                if (total.TotCredIVAUsoComun == 0)
                {
                    totcredivausocomun = "";
                }

                String b           = String.Empty;
                String c           = String.Empty;
                string totOtrosImp = string.Empty;
                String d           = String.Empty;
                String a           = "<TotalesPeriodo>\n" +
                                     "<TpoDoc>" + total.TpoDoc + "</TpoDoc>\n" +
                                     "<TotDoc>" + total.TotDoc + "</TotDoc>\n" +
                                     "<TotMntExe>" + total.TotMntExe + "</TotMntExe>\n" +
                                     "<TotMntNeto>" + total.TotMntNeto + "</TotMntNeto>\n" +
                                     "<TotMntIVA>" + total.TotMntIVA + "</TotMntIVA>\n" +
                                     totopivausocomun +
                                     totivausocomun +
                                     fctprop +
                                     totcredivausocomun;

                if (total.TotIVANoRec == null)
                {
                    b = "";
                }
                else
                {
                    foreach (var ivano in total.TotIVANoRec)
                    {
                        b = "<TotIVANoRec>\n" +
                            "<CodIVANoRec>" + ivano.CodIVANoRec + "</CodIVANoRec>\n" +
                            "<TotOpIVANoRec>" + ivano.TotOpIVANoRec + "</TotOpIVANoRec>\n" +
                            "<TotMntIVANoRec>" + ivano.TotMntIVANoRec + "</TotMntIVANoRec>\n" +
                            "</TotIVANoRec>\n";
                    }
                }

                if (total.TotOtrosImp.Count == 0)
                {
                    c = "";
                }
                else
                {
                    foreach (var otrosimp in total.TotOtrosImp)
                    {
                        c = "<TotOtrosImp>\n" +
                            "<CodImp>" + otrosimp.CodImp + "</CodImp>\n" +
                            "<TotMntImp>" + otrosimp.TotMntImp + "</TotMntImp>\n" +
                            "</TotOtrosImp>\n";
                        totOtrosImp += c;
                    }
                }

                TotalesP += a + b + totOtrosImp + d +
                            //    "<TotIVAFueraPlazo>" + total.TotIVAFueraPlazo + "</TotIVAFueraPlazo>\n" +
                            "<TotMntTotal>" + total.TotMntTotal + "</TotMntTotal>\n" +
                            "</TotalesPeriodo>\n";
            }

            String finResumen = "</ResumenPeriodo>\n";


            String detalle     = String.Empty;
            String detIvaNo    = String.Empty;
            String detOtrosImp = String.Empty;
            String detalleaux  = String.Empty;

            foreach (var det in libro.Detalle)
            {
                if (detIvaNo == null)
                {
                    detIvaNo = "";
                }

                // String mntiva = "<MntIVA>" + det.MntIVA+ "</MntIVA>\n";
                // if(det.MntIVA == 0)
                //     mntiva = "";
                detalle = "<Detalle>\n" +
                          "<TpoDoc>" + det.TpoDoc + "</TpoDoc>\n" +
                          "<NroDoc>" + det.NroDoc + "</NroDoc>\n" +
                          "<TpoImp>" + det.TpoImp + "</TpoImp>\n" +
                          "<TasaImp>" + det.TasaImp + "</TasaImp>\n" +
                          "<FchDoc>" + det.FchDoc + "</FchDoc>\n" +
                          "<RUTDoc>" + det.RUTDoc + "</RUTDoc>\n" +
                          "<RznSoc>" + det.RznSoc + "</RznSoc>\n" +
                          "<MntExe>" + det.MntExe + "</MntExe>\n" +
                          "<MntNeto>" + det.MntNeto + "</MntNeto>\n" +
                          "<MntIVA>" + det.MntIVA + "</MntIVA>\n";
                if (det.IVANoRec == null)
                {
                    detIvaNo = "";
                }
                else
                {
                    foreach (var iva in det.IVANoRec)
                    {
                        detIvaNo = "<IVANoRec>\n" +
                                   "<CodIVANoRec>" + iva.CodIVANoRec + "</CodIVANoRec>\n" +
                                   "<MntIVANoRec>" + iva.MntIVANoRec + "</MntIVANoRec>\n" +
                                   "</IVANoRec>\n";
                    }
                }

                String ivausocomun = "<IVAUsoComun>" + det.IVAUsoComun + "</IVAUsoComun>\n";
                if (det.IVAUsoComun == 0)
                {
                    ivausocomun = "";
                }

                if (det.OtrosImp.Count == 0)
                {
                    detOtrosImp = "";
                }
                else
                {
                    foreach (var otros in det.OtrosImp)
                    {
                        detOtrosImp = "<OtrosImp>\n" +
                                      "<CodImp>" + otros.CodImp + "</CodImp>\n" +
                                      "<TasaImp>" + otros.TasaImp + "</TasaImp>\n" +
                                      "<MntImp>" + otros.MntImp + "</MntImp>\n" +
                                      "</OtrosImp>\n";
                    }
                }
                detalleaux += detalle + detIvaNo + ivausocomun + detOtrosImp +
                              "<MntTotal>" + det.MntTotal + "</MntTotal>\n" +
                              "</Detalle>\n";
            }

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

            String finLibro =

                "<TmstFirma>" + fch + "</TmstFirma>" +
                "</EnvioLibro>" +
                "</LibroCompraVenta>";

            String LibroCom = cabeceraLibro + resumen + TotalesP + finResumen + detalleaux + finLibro;

            X509Certificate2 cert = FuncionesComunes.obtenerCertificado(empresa.NomCertificado);

            String signLibro = firmarLibro(LibroCom, cert);

            return(signLibro);
        }
예제 #3
0
        public void DoProcessIat()
        {
            PrinterDir        print       = new PrinterDir();
            List <PrinterDir> 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
                TxtReader lec = new TxtReader();

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

                if (printerList.Count == 0)
                {
                    dirCurrentFile = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file";
                    Impresora      = fc.GetDefaultPrinter();
                }
                else
                {
                    PrinterDir 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);

                // Proceso de validación de Folio, si este proceso no tiene exito se dejará el json en directorio errorFolio
                // se dejará el objeto docLectura para que no sea procesado
                // ************************************************
                // Obtener folioSiguiente

                /*   Folio folio = new Folio();
                 * folio = folio.getFolio(docLectura.TipoDTE, docLectura.RUTEmisor);
                 *
                 *
                 * // comparar folio siguiente con docLectura.folio
                 * if (folio.folioSgte == docLectura.Folio)
                 * {
                 *     // Si son iguales
                 *     //      Continuar con el proceso normal
                 * }
                 * else
                 * {
                 *     // Si no son iguales
                 *     //      Verificar que quedan folios
                 *     if (folio.folioSgte > folio.folioFin)
                 *     {
                 *         //      si quedan folios
                 *         //          Avisar a Cajero
                 *         SocketClient sc = new SocketClient();
                 *         sc.StartClient("El Folio "+docLectura.Folio+" ha cambiado por el "+folio.folioSgte);
                 *         //          docLectura.Folio = FolioSiguiente
                 *         docLectura.Folio = folio.folioSgte;
                 *         // TO DO; UpdatearADM
                 *
                 *     }
                 *     else
                 *     {
                 *         //      si no quedan folios
                 *         //          Mover el Json a directorio errorFolio
                 *         fileAdm.mvFile(docLectura.fileName, dirCurrentFile, @""+Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString()+":\IatFiles\errorFolio\");
                 *         //          dejar docLectura en Null para que no se imprima
                 *         docLectura = null;
                 *     }
                 * }
                 */

                //*************************************************

                // instancia XML_admin
                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);

                Log log = new Log();

                String firsRut = String.Empty;
                empresa = empresa.getEmpresa();
                if (docLectura != null)
                {
                    // Proceso de ReImpresión
                    // ir a directorio procesados y buscar el archivo docLectura.filename
                    if (System.IO.File.Exists(@"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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, @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/xml/", "*.xml");

                            if (fileXml != null)
                            {
                                new ReimpThermal().reimp(docLectura, fileXml, Impresora);
                            }
                        }
                        else
                        {
                            String fileNamePDFRePrint = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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, @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/fileprocess/");
                    }
                    else // si no procesar
                    {
                        fileAdm.mvFile(docLectura.fileName, dirCurrentFile, @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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);
                        }

                        //si es digitalTerminal abrir Pdf
                        if (empresa.VistaPrevia == "True")
                        {
                            Pdf docpdf = new Pdf();

                            String fileNamePDF = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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");

                            String fileNamePDFPrint = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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");

                            // 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 POaquete 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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/xml/enviounitario/EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                            String fileNameEnvioCliente = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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);
                            }

                            System.Diagnostics.Process.Start(fileNamePDFPrint);
                        }
                        else
                        {
                            //-----------------------------------------------------------------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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 POaquete 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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/xml/enviounitario/EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                                    String fileNameEnvioCliente = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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", @""+Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString()+":/IatFiles/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf");

                                //Imprime pdf

                                String fileNamePDFPrint = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 POaquete 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 = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/xml/enviounitario/EnvioUnit_" + docLectura.RUTEmisor + "_" + docLectura.Folio + "_" + fchName + ".xml";

                                String fileNameEnvioCliente = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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 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
                        UltimoDteSql uDTE = new UltimoDteSql();
                        uDTE.addUltmoDte(docLectura);
                    }
                }
                if (j == printerList.Count())
                {
                    j = 0;
                }
            }
            Console.WriteLine("ProcessIat thread: terminating gracefully.");
        }
        public void procesoPaqueteXml(String fileJson, String fileXml)
        {
            empresa = empresa.getEmpresa();
            // inatancia txt_reader
            TxtReader lec = new TxtReader();

            Documento docLectura = new Documento();

            // Ejecuta metodo de txt_reader que llena y obtienen Clase Documento
            docLectura = lec.lectura(fileJson, true, " ");
            // instancia XML_admin
            xmlPaquete xml = new xmlPaquete();

            DateTime thisDay = DateTime.Now;
            String   fchName = String.Format("{0:yyyyMMddTHHmmss}", thisDay);


            String firsRut = String.Empty;

            if (docLectura != null)
            {
                GetTed ted = new GetTed();

                String TimbreElec = ted.getTed(fileXml);

                //si es Thermal
                if (empresa.PrnThermal == "True")
                {
                    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 = "prnPdf";
                        Console.WriteLine(pd.ToString());
                        pd.Print();
                    }
                }
                //si no es thermal else

                //Generar PDF
                Pdf docpdf = new Pdf();

                String fileNamePDF = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/file/pdf/DTE_" + docLectura.RUTEmisor + "_" + docLectura.TipoDTE + "_" + docLectura.Folio + "_" + fchName + ".pdf";
                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");

                docpdf.OpenPdf(TimbreElec, docLectura, fileNamePDF, " ");


                String fileNamePDFCed = @"" + Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Iat", "unidadIat", null).ToString() + ":/IatFiles/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");
                }

                //fin si no es thermal else
            }
        }
예제 #5
0
        public String do_libroGuias(LibroGuias libro)
        {
            Documento doc     = new Documento();
            Empresa   empresa = new Empresa();

            empresa = empresa.getEmpresa();
            if (libro != null)
            {
                String cabeceraLibro =
                    " <LibroGuia xmlns=\"http://www.sii.cl/SiiDte\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"1.0\" xsi:schemaLocation=\"http://www.sii.cl/SiiDte LibroGuia_v10.xsd\">"
                    + "<EnvioLibro ID=\"IECV201312\">"
                    + "<Caratula>"
                    + "<RutEmisorLibro>" + libro.RutEmisorLibro + "</RutEmisorLibro>"
                    + "<RutEnvia>" + libro.RutEnvia + "</RutEnvia>"
                    + "<PeriodoTributario>" + libro.PeriodoTributario + "</PeriodoTributario>"
                    + "<FchResol>" + libro.FchResol + "</FchResol>"
                    + "<NroResol>" + libro.NroResol + "</NroResol>"
                    + "<TipoLibro>ESPECIAL</TipoLibro>"
                    + "<TipoEnvio>TOTAL</TipoEnvio>"
                    + "<FolioNotificacion>1</FolioNotificacion>"
                    + "</Caratula>";


                String resumen = "<ResumenPeriodo>";


                foreach (var totPer in libro.ResumenPeriodo)
                {
                    resumen += "<TotFolAnulado>" + totPer.TotFolAnulado + "</TotFolAnulado>" +
                               "<TotGuiaAnulada>" + totPer.TotGuiaAnulada + "</TotGuiaAnulada>" +
                               "<TotGuiaVenta>" + totPer.TotGuiaVenta + "</TotGuiaVenta>" +
                               "<TotMntGuiaVta>" + totPer.TotMntGuiaVta + "</TotMntGuiaVta>" +
                               "<TotMntModificado>" + totPer.TotMntModificado + "</TotMntModificado>";

                    foreach (var tras in totPer.TotTraslado)
                    {
                        resumen += "<TotTraslado>" +
                                   "<TpoTraslado>" + tras.TpoTraslado + "</TpoTraslado>" +
                                   "<CantGuia>" + tras.CantGuia + "</CantGuia>" +
                                   "<MntGuia>" + tras.MntGuia + "</MntGuia>" +
                                   "</TotTraslado>";
                    }
                }

                String finResumen = "</ResumenPeriodo>";

                String detall = String.Empty;

                foreach (var det in libro.Detalle)
                {
                    String anulado = "<Anulado>" + det.Anulado + "</Anulado>";
                    if (det.Anulado == 0)
                    {
                        anulado = "";
                    }

                    detall += "<Detalle>" +
                              "<Folio>" + det.Folio + "</Folio>" +
                              anulado +
                              "<Operacion>" + det.Operacion + "</Operacion>" +
                              "<TpoOper>" + det.TpoOper + "</TpoOper>" +
                              "<FchDoc>" + det.FchDoc + "</FchDoc>" +
                              "<RUTDoc>" + det.RUTDoc + "</RUTDoc>" +
                              "<RznSoc>" + det.RznSoc + "</RznSoc>" +
                              "<MntNeto>" + det.MntNeto + "</MntNeto>" +
                              "<TasaImp>" + det.TasaImp + "</TasaImp>" +
                              "<IVA>" + det.IVA + "</IVA>" +
                              "<MntTotal>" + det.MntTotal + "</MntTotal>" +
                              "<MntModificado>" + det.MntModificado + "</MntModificado>" +
                              "</Detalle>";
                }

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

                String finLibro =
                    "<TmstFirma>" + fch + "</TmstFirma>" +
                    "</EnvioLibro>" +
                    "</LibroGuia>";

                String libroGuia = cabeceraLibro + resumen + finResumen + detall + finLibro;


                X509Certificate2 cert = FuncionesComunes.obtenerCertificado(empresa.NomCertificado);

                String signLibro = firmarLibroGuias(libroGuia, cert);

                return(signLibro);
            }
            else
            {
                return(null);
            }
        }
예제 #6
0
        public String do_libroVentas(LibroVenta libro)
        {
            Documento doc     = new Documento();
            Empresa   empresa = new Empresa();

            empresa = empresa.getEmpresa();
            String folioNotificacion = "<FolioNotificacion>" + libro.FolioNotificacion + "</FolioNotificacion>\n";

            if (libro.NroResol != 0)
            {
                folioNotificacion = "";
            }
            String cabeceraLibro =
                "<LibroCompraVenta xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.sii.cl/SiiDte LibroCV_v10.xsd\" version=\"1.0\" xmlns=\"http://www.sii.cl/SiiDte\">\n"
                + "<EnvioLibro ID=\"ID201204\">\n"
                + "<Caratula>\n"
                + "<RutEmisorLibro>" + libro.RutEmisorLibro + "</RutEmisorLibro>\n"
                + "<RutEnvia>" + libro.RutEnvia + "</RutEnvia>\n"
                + "<PeriodoTributario>" + libro.PeriodoTributario + "</PeriodoTributario>\n"
                + "<FchResol>" + libro.FchResol + "</FchResol>\n"
                + "<NroResol>" + libro.NroResol + "</NroResol>\n"
                + "<TipoOperacion>" + libro.TipoOperacion + "</TipoOperacion>\n"
                + "<TipoLibro>" + libro.TipoLibro + "</TipoLibro>\n"
                + "<TipoEnvio>" + libro.TipoEnvio + "</TipoEnvio>\n"
                + folioNotificacion
                + "</Caratula>\n";


            String resumen = "<ResumenPeriodo>\n";

            String TotalesP = String.Empty;

            foreach (var total in libro.TotalesPeriodo)
            {
                String b = String.Empty;
                String c = String.Empty;
                String d = String.Empty;
                String a = "<TotalesPeriodo>\n" +
                           "<TpoDoc>" + total.TpoDoc + "</TpoDoc>\n" +
                           "<TotDoc>" + total.TotDoc + "</TotDoc>\n" +
                           "<TotMntExe>" + total.TotMntExe + "</TotMntExe>\n" +
                           "<TotMntNeto>" + total.TotMntNeto + "</TotMntNeto>\n" +
                           "<TotMntIVA>" + total.TotMntIVA + "</TotMntIVA>\n";

                if (total.TotOtrosImp != null)
                {
                    foreach (var otrosimp in total.TotOtrosImp)
                    {
                        if (otrosimp.CodImp == 0)
                        {
                            c = "";
                        }
                        else
                        {
                            c = "<TotOtrosImp>\n" +
                                "<CodImp>" + otrosimp.CodImp + "</CodImp>\n" +
                                "<TotMntImp>" + otrosimp.TotMntImp + "</TotMntImp>\n" +
                                "</TotOtrosImp>\n";
                        }
                    }
                }
                // si montoivafueraplazo es nulo o cero no se agrega en el xml
                String totIVAFueraPlazo = String.Empty;
                if (total.TotIVAFueraPlazo == 0)
                {
                    totIVAFueraPlazo = "";
                }
                else
                {
                    totIVAFueraPlazo = "<TotIVAFueraPlazo>" + total.TotIVAFueraPlazo + "</TotIVAFueraPlazo>\n";
                }


                TotalesP += a + b + c + d +
                            totIVAFueraPlazo +
                            "<TotMntTotal>" + total.TotMntTotal + "</TotMntTotal>\n" +
                            "</TotalesPeriodo>\n";
            }

            String finResumen = "</ResumenPeriodo>\n";


            String detalle     = String.Empty;
            String detalles    = String.Empty;
            String detIvaNo    = String.Empty;
            String detOtrosImp = String.Empty;
            String mnttotal    = String.Empty;

            if (libro.Detalle == null)
            {
                detalle     = "";
                detOtrosImp = "";
            }
            else
            {
                foreach (var det in libro.Detalle)
                {
                    detalle = "<Detalle>\n" +
                              "<TpoDoc>" + det.TpoDoc + "</TpoDoc>\n" +
                              "<NroDoc>" + det.NroDoc + "</NroDoc>\n" +
                              "<TasaImp>" + det.TasaImp + "</TasaImp>\n" +
                              "<FchDoc>" + det.FchDoc + "</FchDoc>\n" +
                              "<RUTDoc>" + det.RUTDoc + "</RUTDoc>\n" +
                              "<RznSoc>" + det.RznSoc + "</RznSoc>\n" +
                              "<MntExe>" + det.MntExe + "</MntExe>\n" +
                              "<MntNeto>" + det.MntNeto + "</MntNeto>\n" +
                              "<MntIVA>" + det.MntIVA + "</MntIVA>\n";
                    if (det.OtrosImp != null)
                    {
                        foreach (var otros in det.OtrosImp)
                        {
                            detOtrosImp = "<OtrosImp>\n" +
                                          "<CodImp>" + otros.CodImp + "</CodImp>\n" +
                                          "<TasaImp>" + otros.TasaImp + "</TasaImp>\n" +
                                          "<MntImp>" + otros.MntImp + "</MntImp>\n" +
                                          "</OtrosImp>\n";
                        }
                    }

                    mnttotal = "<MntTotal>" + det.MntTotal + "</MntTotal>\n";
                    detalle += detIvaNo + detOtrosImp +
                               mnttotal +
                               "</Detalle>\n";
                    detalles += detalle;
                }
            }

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

            String finLibro =
                "<TmstFirma>" + fch + "</TmstFirma>\n" +
                "</EnvioLibro>\n" +
                "</LibroCompraVenta>\n";

            String LibroCom = cabeceraLibro + resumen + TotalesP + finResumen + detalles + finLibro;

            X509Certificate2 cert = FuncionesComunes.obtenerCertificado(empresa.NomCertificado);

            String signLibro = firmarLibroVta(LibroCom, cert);

            return(signLibro);
        }