コード例 #1
0
        //OT7349 FIN

        public string EnviarComprobante(string tipoComprobante, string serie, string numero, string codigoUsuario)
        {
            FacturacionDA da = new FacturacionDA();

            ParametrosDA parametroDA = new ParametrosDA();

            DataTable dt          = null;
            string    rutaApp     = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            string    rutaModelo  = rutaApp + ConfigurationSettings.AppSettings[ConstantesING.RUTA_MODELO];
            string    rutaArchivo = rutaApp + ConfigurationSettings.AppSettings[ConstantesING.RUTA_ARCHIVOS];

            switch (tipoComprobante)
            {
            case "01":
                dt = da.ObtenerFacturaParaEnvio(serie, numero);
                break;

            case "03":
                dt = da.ObtenerBoletaParaEnvio(serie, numero);
                break;

            case "07":
                dt = da.ObtenerNCParaEnvio(serie, numero);
                break;
            }

            string destinoCsv       = rutaArchivo + ConfigurationSettings.AppSettings[tipoComprobante + "csv"];
            string destinoRespuesta = rutaArchivo + ConfigurationSettings.AppSettings[tipoComprobante + "respuesta"];

            string flagAfectoIGV = dt.Rows[0]["FLAG_AFECTOIGV"].ToString();

            DataTable dtParametro         = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_MODELO, tipoComprobante + "-" + flagAfectoIGV);
            string    nombreArchivoModelo = dtParametro.Rows[0]["CAMPO1"].ToString();

            //FileStream modelo = File.Open(rutaModelo + nombreArchivoModelo, FileMode.Open);
            StreamReader modelo          = new StreamReader(rutaModelo + nombreArchivoModelo);
            string       contenidoModelo = modelo.ReadToEnd();

            //Reemplazando valores en el modelo
            string fechaEmision        = dt.Rows[0]["FECHA_EMISION"].ToString();
            string numeroDocumento     = dt.Rows[0]["NUMERO_DOCUMENTO"].ToString();
            string tipoDocumento       = dt.Rows[0]["TIPO_DOCUMENTO"].ToString();
            string moneda              = dt.Rows[0]["MONEDA"].ToString();
            string igv                 = Convert.ToDecimal(dt.Rows[0]["IGV"]).ToString("#0.00");
            string subTotal            = Convert.ToDecimal(dt.Rows[0]["VALOR_VENTA"]).ToString("#0.00");
            string total               = Convert.ToDecimal(dt.Rows[0]["TOTAL"]).ToString("#0.00");
            string docCliente          = dt.Rows[0]["DOC_CLIENTE"].ToString();
            string tipoDocCliente      = dt.Rows[0]["TIPO_DOC_CLIENTE"].ToString();
            string razonSocial         = dt.Rows[0]["RAZON_SOCIAL"].ToString();
            string ubigeo              = dt.Rows[0]["UBIGEO"].ToString();
            string codigoPostal        = dt.Rows[0]["CODIGO_POSTAL"].ToString();
            string direccionCliente    = dt.Rows[0]["DIRECCION_CLIENTE"].ToString();
            string departamentoCliente = dt.Rows[0]["DEP_CLIENTE"].ToString();
            string provinciaCliente    = dt.Rows[0]["PRO_CLIENTE"].ToString();
            string distritoCliente     = dt.Rows[0]["DIS_CLIENTE"].ToString();
            string pais                = dt.Rows[0]["PAIS_CLIENTE"].ToString();
            string correo              = dt.Rows[0]["CORREO_CLIENTE"].ToString();
            string cantidad            = dt.Rows[0]["CANTIDAD"].ToString();
            string descripcion         = dt.Rows[0]["DESCRIPCION"].ToString();
            string porcIgv             = dt.Rows[0]["PORC_IGV"].ToString();
            string tipoDocRelacionado  = dt.Rows[0]["TIPO_DOCREL"].ToString();
            //OT 8365 INI
            string numDocRelacionado = tipoDocRelacionado == "01" ? "F" : "B";

            //OT 8365 FIN
            numDocRelacionado = numDocRelacionado + dt.Rows[0]["NUMERO_DOCREL"].ToString();
            string   tipoNC     = dt.Rows[0]["TIPO_NC"].ToString();
            string   glosa      = dt.Rows[0]["GLOSA"].ToString();
            NumLetra nl         = new NumLetra();
            string   montoTexto = nl.Convertir(dt.Rows[0]["TOTAL"].ToString(), moneda == "PEN"? "Nuevos Soles": "Dólares americanos", true, tipoDocumento);
            string   unidad     = "UN";

            //OT7999 INI
            string montoDetraccion      = string.Empty;
            string porcentajeDetraccion = string.Empty;
            string numeroBancoNancion   = string.Empty;
            string detracMontoTotal     = string.Empty;

            string codTabScotiabankMN  = string.Empty;
            string codItemScotiabankMN = string.Empty;

            string codTabScotiabankCCI  = string.Empty;
            string codItemScotiabankCCI = string.Empty;

            string cuentaScotiabankMN  = string.Empty;
            string cuentaScotiabankCCI = string.Empty;

            string codTabScotiabankMNTexto  = string.Empty;
            string codItemScotiabankMNTexto = string.Empty;

            string codTabScotiabankCCITexto  = string.Empty;
            string codItemScotiabankCCITexto = string.Empty;

            string textoScotiabankMN  = string.Empty;
            string textoScotiabankCCI = string.Empty;

            string textoCuentasScotiabank = string.Empty;

            /*Cargando los valores adicionales para las facturas*/
            if (tipoComprobante.Equals(ConstantesING.TIPO_DOCUMENTO_FACTURA))
            {
                double dTotal      = Convert.ToDouble(dt.Rows[0]["TOTAL"]);
                double dDetraccion = Convert.ToDouble(dt.Rows[0]["MONTO_DETRACCION"]);

                if (dDetraccion != 0) //Se ha calculado la detraccion
                {
                    montoDetraccion      = Convert.ToDecimal(dt.Rows[0]["MONTO_DETRACCION"]).ToString("#0.00");
                    porcentajeDetraccion = Convert.ToDecimal(dt.Rows[0]["PORCENTAJE_DETRACCION"]).ToString("#0.00");

                    //Cargando el numero de banco de la nacion.
                    string    strCodigoBancoNacion = ConstantesING.CODIGO_NUMERO_BANCO_NACION;
                    string    strNumeroBancoNacion = ConstantesING.NUMERO_BANCO_NACION;
                    DataTable dtNumeroBancoNacion  = ObtenerDatosParametro(strCodigoBancoNacion, strNumeroBancoNacion);

                    if (dtNumeroBancoNacion.Rows.Count > 0)
                    {
                        if (dtNumeroBancoNacion.Rows[0]["Descripcion"] != DBNull.Value)
                        {
                            numeroBancoNancion = dtNumeroBancoNacion.Rows[0]["Descripcion"].ToString();
                        }
                        else
                        {
                            //se sigue procesando??
                        }
                    }
                    else
                    {
                        //se sigue procesando??
                    }

                    double dDetracMontoTotal = dTotal - dDetraccion;
                    detracMontoTotal = dDetracMontoTotal.ToString("#0.00");
                }
            }

            if (tipoComprobante.Equals(ConstantesING.TIPO_DOCUMENTO_FACTURA) || tipoComprobante.Equals(ConstantesING.TIPO_DOCUMENTO_BOLETA))
            {
                if (moneda == "PEN")
                {
                    //soles
                    codTabScotiabankMN  = ConstantesING.CODIGO_SCOTIABANK_SOLES_MN;
                    codItemScotiabankMN = ConstantesING.SCOTIABANK_SOLES_MN;

                    codTabScotiabankCCI  = ConstantesING.CODIGO_SCOTIABANK_SOLES_CCI;
                    codItemScotiabankCCI = ConstantesING.SCOTIABANK_SOLES_CCI;

                    codTabScotiabankMNTexto  = ConstantesING.CODIGO_SCOTIABANK_SOLES_MN_TEXTO;
                    codItemScotiabankMNTexto = ConstantesING.SCOTIABANK_SOLES_MN_TEXTO;

                    codTabScotiabankCCITexto  = ConstantesING.CODIGO_SCOTIABANK_SOLES_CCI_TEXTO;
                    codItemScotiabankCCITexto = ConstantesING.SCOTIABANK_SOLES_CCI_TEXTO;
                }
                else
                {
                    //dolares
                    codTabScotiabankMN  = ConstantesING.CODIGO_SCOTIABANK_DOLARES_MN;
                    codItemScotiabankMN = ConstantesING.SCOTIABANK_DOLARES_MN;

                    codTabScotiabankCCI  = ConstantesING.CODIGO_SCOTIABANK_DOLARES_CCI;
                    codItemScotiabankCCI = ConstantesING.SCOTIABANK_DOLARES_CCI;

                    codTabScotiabankMNTexto  = ConstantesING.CODIGO_SCOTIABANK_DOLARES_MN_TEXTO;
                    codItemScotiabankMNTexto = ConstantesING.SCOTIABANK_DOLARES_MN_TEXTO;

                    codTabScotiabankCCITexto  = ConstantesING.CODIGO_SCOTIABANK_DOLARES_CCI_TEXTO;
                    codItemScotiabankCCITexto = ConstantesING.SCOTIABANK_DOLARES_CCI_TEXTO;
                }

                DataTable dtCuentaScotiabankMN = ObtenerDatosParametro(codTabScotiabankMN, codItemScotiabankMN);

                if (dtCuentaScotiabankMN.Rows.Count > 0)
                {
                    if (dtCuentaScotiabankMN.Rows[0]["Descripcion"] != DBNull.Value)
                    {
                        cuentaScotiabankMN = dtCuentaScotiabankMN.Rows[0]["Descripcion"].ToString();
                    }
                    else
                    {
                        //se sigue procesando??
                    }
                }
                else
                {
                    //se sigue procesando??
                }

                DataTable dtCuentaScotiabankCCI = ObtenerDatosParametro(codTabScotiabankCCI, codItemScotiabankCCI);

                if (dtCuentaScotiabankCCI.Rows.Count > 0)
                {
                    if (dtCuentaScotiabankCCI.Rows[0]["Descripcion"] != DBNull.Value)
                    {
                        cuentaScotiabankCCI = dtCuentaScotiabankCCI.Rows[0]["Descripcion"].ToString();
                    }
                    else
                    {
                        //se sigue procesando??
                    }
                }
                else
                {
                    //se sigue procesando??
                }

                DataTable dtScotiabankTextoMN = ObtenerDatosParametro(codTabScotiabankMNTexto, codItemScotiabankMNTexto);

                if (dtScotiabankTextoMN.Rows.Count > 0)
                {
                    if (dtScotiabankTextoMN.Rows[0]["Descripcion"] != DBNull.Value)
                    {
                        textoScotiabankMN = dtScotiabankTextoMN.Rows[0]["Descripcion"].ToString();
                    }
                    else
                    {
                        //se sigue procesando??
                    }
                }
                else
                {
                    //se sigue procesando??
                }

                DataTable dtScotiabankTextoCCI = ObtenerDatosParametro(codTabScotiabankCCITexto, codItemScotiabankCCITexto);

                if (dtScotiabankTextoCCI.Rows.Count > 0)
                {
                    if (dtScotiabankTextoCCI.Rows[0]["Descripcion"] != DBNull.Value)
                    {
                        textoScotiabankCCI = dtScotiabankTextoCCI.Rows[0]["Descripcion"].ToString();
                    }
                    else
                    {
                        //se sigue procesando??
                    }
                }
                else
                {
                    //se sigue procesando??
                }

                //cuentaScotiabankMN = "Scotiabank Cuenta Corriente MN " + cuentaScotiabankMN;
                cuentaScotiabankMN = textoScotiabankMN + " " + cuentaScotiabankMN;
                //cuentaScotiabankCCI = "CCI: " + cuentaScotiabankCCI;
                cuentaScotiabankCCI = textoScotiabankCCI + " " + cuentaScotiabankCCI;

                textoCuentasScotiabank = cuentaScotiabankMN + " " + cuentaScotiabankCCI;
            }
            //OT7999 FIN

            string usuarioSOL  = ConfigurationSettings.AppSettings["UsuarioSol"];
            string passwordSOL = ConfigurationSettings.AppSettings["ClaveSol"];

            string contenidoArchivo = contenidoModelo.Replace("{FECHA_EMISION}", fechaEmision)
                                      .Replace("{NUMERO_DOCUMENTO}", numeroDocumento)
                                      .Replace("{TIPO_DOCUMENTO}", tipoDocumento)
                                      .Replace("{MONEDA}", moneda)
                                      .Replace("{IGV}", igv)
                                      .Replace("{TOTAL}", total)
                                      .Replace("{VALOR_VENTA}", subTotal)
                                      //OT 7999 INI
                                      .Replace("{DETRAC_MONTO}", montoDetraccion)
                                      .Replace("{DETRAC_PORCENTAJE}", porcentajeDetraccion)
                                      .Replace("{DETRAC_NUM_BANCO}", numeroBancoNancion)
                                      .Replace("{DETRAC_MONTO_TOTAL}", detracMontoTotal)
                                      //OT 7999 FIN
                                      .Replace("{DOC_CLIENTE}", docCliente)
                                      .Replace("{TIPO_DOC_CLIENTE}", tipoDocCliente)
                                      .Replace("{RAZON_SOCIAL}", razonSocial)
                                      .Replace("{UBIGEO_CLIENTE}", ubigeo)
                                      .Replace("{DIRECCION_CLIENTE}", direccionCliente)
                                      .Replace("{DEP_CLIENTE}", departamentoCliente)
                                      .Replace("{PRO_CLIENTE}", provinciaCliente)
                                      .Replace("{DIS_CLIENTE}", distritoCliente)
                                      .Replace("{PAIS_CLIENTE}", pais)
                                      .Replace("{CORREO_CLIENTE}", correo)
                                      .Replace("{MONTO_TEXTO}", montoTexto)
                                      //OT 7999 INI
                                      .Replace("{SCOTIABANK}", textoCuentasScotiabank)
                                      //OT 7999 FIN
                                      .Replace("{UNIDAD}", unidad)
                                      .Replace("{CANTIDAD}", cantidad)
                                      .Replace("{DESCRIPCION_DETALLE}", descripcion)
                                      .Replace("{PORC_IGV}", porcIgv)
                                      .Replace("{NUM_DOC_REL}", numDocRelacionado)
                                      .Replace("{TIP_DOC_REL}", tipoDocRelacionado)
                                      .Replace("{TIPO_AFECTACION}", tipoNC)
                                      .Replace("{GLOSA}", glosa)
                                      .Replace("{USUARIO}", usuarioSOL)
                                      .Replace("{CLAVE}", passwordSOL);

            string       rutaArchivoCompleta = destinoCsv + numeroDocumento + ".csv";
            StreamWriter sw = new StreamWriter(rutaArchivoCompleta);

            sw.Write(contenidoArchivo);
            sw.Close();

            string rutaRespuesta = destinoRespuesta;

            //File.Move(rutaArchivoCompleta, rutaArchivoCompleta.Replace(".txt", ".csv"));

            string usuarioServicio  = ConfigurationSettings.AppSettings["UsuarioServicio"];
            string passwordServicio = ConfigurationSettings.AppSettings["ClaveServicio"];

            string respuesta = string.Empty;

            switch (tipoComprobante)
            {
            case "01":
                respuesta = EfactService.EnviarFactura(usuarioServicio, passwordServicio, rutaArchivoCompleta, rutaRespuesta, numeroDocumento, dt.Rows[0]);
                break;

            case "03":
                respuesta = EfactService.EnviarBoleta(usuarioServicio, passwordServicio, rutaArchivoCompleta, rutaRespuesta, numeroDocumento, dt.Rows[0]);
                break;

            case "07":
                respuesta = EfactService.EnviarNotaCredito(usuarioServicio, passwordServicio, rutaArchivoCompleta, rutaRespuesta, numeroDocumento, dt.Rows[0]);
                break;
            }

            if (dt.Rows[0]["FLAG_ENVIADO"].ToString().Equals(ConstantesING.SI))
            {
                facturacionDA.Server   = Conexiones.ServidorPremBanco13;
                facturacionDA.Database = Conexiones.BaseDeDatosPremBanco13;
                decimal idComprobante = Convert.ToDecimal(dt.Rows[0]["ID_COMPROBANTE"]);
                facturacionDA.CrearConexion();
                facturacionDA.AbrirConexion();
                facturacionDA.AbrirTransaccion();
                try
                {
                    facturacionDA.ActualizarEstadoEnvio(idComprobante, codigoUsuario);
                    facturacionDA.CommitTransaccion();
                }
                catch (Exception ex)
                {
                    facturacionDA.RollbackTransaccion();
                }
            }

            return(respuesta);
        }