/// <summary>
        /// Forma el envío de la factura usando como receptor el rut del cliente. El nuevo archivo es guardado con la extensión .cliente.xml
        /// Debe existir un archivo xml enviado al SII y aceptado por el SII
        /// </summary>
        /// <param name="cfd"></param>
        /// <param name="cfdsFabricados"></param>
        private void ConstruyeEnvioAlCliente(CFDComprobanteFiscalDigital cfd, CFDComprobanteFiscalDigitalFabrica cfdsFabricados)
        {
            try
            {
                XmlDocument xDteParaCliente = new XmlDocument();
                xDteParaCliente.PreserveWhitespace = true;

                String rutaYNomArchivo = cfd.mensaje;
                String dteEnviadoAlSii = "";
                using (StreamReader sr = new StreamReader(rutaYNomArchivo, cfdsFabricados.encodig))
                {
                    dteEnviadoAlSii = sr.ReadToEnd();
                }
                xDteParaCliente.LoadXml(dteEnviadoAlSii);

                XPathNavigator navigator = xDteParaCliente.CreateNavigator();

                XmlNamespaceManager nsManager = new XmlNamespaceManager(navigator.NameTable);
                nsManager.AddNamespace("env", "http://www.sii.cl/SiiDte");
                nsManager.AddNamespace("sig", "http://www.w3.org/2000/09/xmldsig#");

                //Reemplaza el rut del SII por el rut del cliente
                foreach (XPathNavigator nav in navigator.Select("//env:Caratula/env:RutReceptor", nsManager))
                {
                    if (nav.Value.Equals(_rutSII))
                    {
                        nav.SetValue(cfd.idCliente);
                    }
                }

                XmlNodeList nodes = xDteParaCliente.SelectNodes("//env:EnvioDTE/sig:Signature", nsManager);
                //Quita el nodo Signature del envío
                foreach (XmlNode node in nodes)
                {
                    node.RemoveAll();
                    break;
                }
                String sDteParaCliente = xDteParaCliente.InnerXml.Replace("<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"></Signature>", String.Empty);
                xDteParaCliente.LoadXml(sDteParaCliente);

                //Firma el nuevo envío
                XmlAttribute idAFirmar = (XmlAttribute)xDteParaCliente.SelectSingleNode("//env:EnvioDTE/env:SetDTE/@ID", nsManager);
                cfdsFabricados.ModeloEnvio             = new EnvioDteModel();
                cfdsFabricados.ModeloEnvio.setId       = idAFirmar.Value;
                cfdsFabricados.ModeloEnvio.xDocXml     = xDteParaCliente;
                cfdsFabricados.ModeloEnvio.criptografo = cfdsFabricados.encriptador;
                cfdsFabricados.firmaEnvio();

                String rutaYNomArchivoCliente = rutaYNomArchivo.Replace(".xml", ".cliente.xml");
                CustomXmlTextWriter tw        = new CustomXmlTextWriter(rutaYNomArchivoCliente, cfdsFabricados.encodig.WebName.ToUpper());
                cfdsFabricados.ModeloEnvio.xDocXml.Save(tw);
                tw.Close();
            }
            catch (Exception ce)
            {
                _sMsj = "Excepción al formar el envío al cliente. " + ce.Message + " [CFDServicioDespachoSolicitudes.ConstruyeEnvioAlCliente]";
                _iErr++;
            }
        }
Пример #2
0
        /// <summary>
        /// Guarda el archivo xml, lo comprime en zip y anota en la bitácora la factura emitida y el nuevo estado binario.
        /// </summary>
        /// <param name="trxVenta">Lista de facturas cuyo índice apunta a la factura que se va procesar.</param>
        /// <param name="comprobante">Documento xml</param>
        /// <param name="mEstados">Nuevo set de estados</param>
        /// <returns>False cuando hay al menos un error</returns>
        public string GuardaArchivo()
        {
            sMsj = "";
            iErr = 0;
            //string nomArchivo = string.Empty;
            string rutaYNomArchivo = string.Empty;

            try
            {   //arma el nombre del archivo xml
                rutaYNomArchivo = _rutaXml.Trim() + _nomArchivo;

                CustomXmlTextWriter tw = new CustomXmlTextWriter(rutaYNomArchivo + ".xml", _encoding.WebName.ToUpper());
                _xDocXml.Save(tw);
                tw.Close();
                //Comprime el archivo xml
                //if (_Param.zip)
                //    Utiles.Zip(rutaYNomArchivo, ".xml");

                //iErr = codigobb.iErr + reporte.numErr + Utiles.numErr;
                //sMsj = codigobb.strMensajeErr + " " + reporte.mensajeErr + " " + Utiles.msgErr;

                //    //Si hay error en cbb o pdf o zip anota en la bitácora
                //    if (iErr != 0)
                //        ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conexion.Usuario,
                //                                "emitido", "emitido", mEstados.eBinActualConError,
                //                                mEstados.EnLetras(mEstados.eBinActualConError) + sMsj.Trim());
                //}
                return(rutaYNomArchivo);
            }
            catch (DirectoryNotFoundException)
            {
                sMsj = "Verifique la existencia de la ruta indicada en la configuración de Ruta de archivos Xml. No existe la ruta actual: " + _rutaXml.Trim() + " [EnvioDteModel.Guarda]";
                iErr++;
                return(rutaYNomArchivo);
            }
            catch (IOException)
            {
                sMsj = "Verifique permisos de escritura en: " + _rutaXml.Trim() + ". No se pudo guardar el archivo xml ni registrar el documento en la bitácora. [EnvioDteModel.Guarda]";
                iErr++;
                return(rutaYNomArchivo);
            }
            catch (Exception eAFE)
            {
                if (eAFE.Message.Contains("denied"))
                {
                    sMsj = "Elimine el archivo xml, luego vuelva a intentar. " + eAFE.Message + " [EnvioDteModel.Guarda]";
                }
                else
                {
                    sMsj = "No se puede guardar el archivo XML ni registrar la Bitácora. " + eAFE.Message + " [EnvioDteModel.Guarda] " + eAFE.StackTrace;
                }
                iErr++;
                return(rutaYNomArchivo);
            }
        }
Пример #3
0
        /// <summary>
        /// Guarda el archivo xml, anota en la bitácora el libro emitido y el nuevo estado binario.
        /// </summary>
        public string Guarda()
        {
            _sMsj = "";
            _iErr = 0;
            string rutaYNomArchivo = string.Empty;

            try
            {   //arma el nombre del archivo xml
                rutaYNomArchivo = _rutaXml.Trim() + _nomArchivo;

                //Guarda el archivo xml
                CustomXmlTextWriter tw = new CustomXmlTextWriter(rutaYNomArchivo + ".xml", _encoding.WebName.ToUpper());
                //tw.Formatting = Formatting.Indented;
                _xDocXml.Save(tw);
                tw.Close();

                _bitacora.Save(_periodo, _tipo, _cicloDeVida.targetSingleStatus, rutaYNomArchivo + ".xml",
                               Convert.ToInt16(_cicloDeVida.idxTargetSingleStatus), _cicloDeVida.targetBinStatus,
                               _cicloDeVida.EstadoEnPalabras(_cicloDeVida.targetBinStatus), _xDocXml.InnerXml.Replace(_sDeclaracionXml, String.Empty), _Conex.Usuario);

                return(rutaYNomArchivo);

                //if (iErr == 0)
                //{
                //    //Comprime el archivo xml
                //    if (_Param.zip)
                //        Utiles.Zip(rutaYNomArchivo, ".xml");

                //    iErr = codigobb.iErr + reporte.numErr + Utiles.numErr;
                //    sMsj = codigobb.strMensajeErr + " " + reporte.mensajeErr + " " + Utiles.msgErr;

                //    //Si hay error en cbb o pdf o zip anota en la bitácora
                //    if (iErr != 0)
                //        ActualizaFacturaEmitida(trxVenta.Soptype, trxVenta.Sopnumbe, _Conexion.Usuario,
                //                                "emitido", "emitido", mEstados.eBinActualConError,
                //                                mEstados.EnLetras(mEstados.eBinActualConError) + sMsj.Trim());
                //}
            }
            catch (DirectoryNotFoundException)
            {
                _sMsj = "Verifique la existencia de la ruta indicada en la configuración de Ruta de archivos Xml. No existe la ruta actual: " + _rutaXml.Trim() + " [CFDLibroCV.Guarda]";
                _iErr++;
                throw;
            }
            catch (IOException)
            {
                _sMsj = "Verifique permisos de escritura en: " + _rutaXml.Trim() + ". No se pudo guardar el archivo xml ni registrar el documento en la bitácora. [CFDLibroCV.Guarda]";
                _iErr++;
                throw;
            }
            catch (Exception eAFE)
            {
                if (eAFE.Message.Contains("denied"))
                {
                    _sMsj = "Elimine el archivo xml, luego vuelva a intentar. " + eAFE.Message + " [CFDLibroCV.Guarda]";
                }
                else
                {
                    _sMsj = "No se puede guardar el archivo XML ni registrar la Bitácora. " + eAFE.Message + " [CFDLibroCV.Guarda] " + eAFE.StackTrace;
                }
                _iErr++;
                throw;
            }
        }