Beispiel #1
0
        /// <summary>
        /// Método que se encarga de generar los asientos contables a partir de la selección del usuario.
        /// </summary>
        /// <param name="lvAsientos">Objeto ListViewItem que contienen los asientos que posiblemente desea el usuario que se generem</param>
        /// <param name="usuario">Usuario responsable de la creación de los asientos.</param>
        public void GenerarAsientos(System.Windows.Forms.ListView lvAsientos, string usuario, bool sapActivo)
        {
            ParametrosDA parametroDA     = new ParametrosDA();
            string       estadoEjecutado = parametroDA.ObtenerValoresParametros("ESTEJE", "ESTEJE").Rows[0]["CAMPO1"].ToString();

            FacturacionDA facturacionDA = new FacturacionDA();

            facturacionDA.Server   = Conexiones.ServidorPremBanco13;
            facturacionDA.Database = Conexiones.BaseDeDatosPremBanco13;
            facturacionDA.CrearConexion();
            facturacionDA.AbrirConexion();
            facturacionDA.AbrirTransaccion();

            da.Server   = INGFondos.Constants.Conexiones.ServidorSAP;
            da.Database = INGFondos.Constants.Conexiones.BaseDeDatosSAP;
            SqlConnection cn = da.GetConnection2();

            cn.Open();
            SqlTransaction trans       = cn.BeginTransaction();
            Asiento        asiento     = new Asiento();
            string         host        = Dns.GetHostName();
            IPHostEntry    ip          = Dns.GetHostEntry(host);
            string         direccionIP = ip.AddressList[0].ToString();

            string glosaVT_ING       = string.Empty;
            string glosaVT_CRA       = string.Empty;
            string descripcionVT_ING = string.Empty;
            string descripcionVT_CRA = string.Empty;

            Hashtable   ht = new Hashtable();
            Comprobante comprobanteAsiento = null;

            try
            {
                DataTable dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.GLOSA_ASIENTO_INGRESOS);
                glosaVT_ING = dtParametroGlosas.Rows[0]["CAMPO3"].ToString();

                dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.GLOSA_ASIENTO_COMISIONES);
                glosaVT_CRA       = dtParametroGlosas.Rows[0]["CAMPO3"].ToString();

                dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.DESCRIPCION_ASIENTO_INGRESOS);
                descripcionVT_ING = dtParametroGlosas.Rows[0]["CAMPO3"].ToString();

                dtParametroGlosas = parametroDA.ObtenerValoresParametros(ConstantesING.TABLA_COMPROBANTES, ConstantesING.DESCRIPCION_ASIENTO_COMISIONES);
                descripcionVT_CRA = dtParametroGlosas.Rows[0]["CAMPO3"].ToString();

                DataTable dtCabecerasTipo = null;
                DataTable dtDetallesTipo  = null;

                dtCabecerasTipo = da.ObtenerAsientoTipoCabecera(cn, trans);
                dtDetallesTipo  = da.ObtenerAsientoTipoDetalle(cn, trans);

                DataRow   drCabeceraTipo = null;
                DataRow[] drDetallesTipo = null;
                DataRow   drDetalleTipo  = null;

                int codigoAsiento = 0;

                StringBuilder filtro = null;
                //OT7999 INI
                //setear dblPorcentajeDetraccion, si es posible usar un metodo propio
                bool   valorDetraccionHallado = ObtenerDetraccion();
                double montoSoles             = 0;
                //OT7999 FIN

                foreach (ListViewItem item in lvAsientos.CheckedItems)
                {
                    Asiento.LISTA_ASIENTORow datosAsiento = (Asiento.LISTA_ASIENTORow)item.Tag;
                    decimal cantidadSubDetalle            = 0;
                    for (int j = 1; j <= 5; j++)
                    {
                        if (Convert.ToDecimal(datosAsiento["MONTO" + j.ToString()]) != 0)
                        {
                            cantidadSubDetalle++;
                        }
                    }

                    filtro = new StringBuilder();
                    filtro.Append("DESCRIPCION = '" + datosAsiento.TIPO_ASIENTO + "'");
                    filtro.Append(" AND MONEDA_DOCUMENTO = '" + datosAsiento.MONEDA + "'");
                    if (datosAsiento.FONDO != "")
                    {
                        filtro.Append(" AND FONDO = '" + datosAsiento.FONDO + "'");
                    }

                    drCabeceraTipo = dtCabecerasTipo.Select(filtro.ToString(), "CODIGO_ASIENTO")[0];
                    codigoAsiento  = Convert.ToInt32(drCabeceraTipo["CODIGO_ASIENTO"]);
                    drDetallesTipo = dtDetallesTipo.Select("CODIGO_ASIENTO = " + codigoAsiento.ToString());

                    string generaAsiento = null;
                    string referencia    = null;
                    generaAsiento = datosAsiento.IsID_OPERACIONNull() || datosAsiento.ID_OPERACION == "" ? (datosAsiento.IsFONDONull() || datosAsiento.FONDO == "" ? drCabeceraTipo["DESCRIPCION"].ToString().Trim() + datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + datosAsiento.MONEDA : datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + datosAsiento.FONDO) : drCabeceraTipo["DESCRIPCION"].ToString().Trim() + datosAsiento.ID_OPERACION;
                    referencia    = generaAsiento; //datosAsiento.IsID_OPERACIONNull() || datosAsiento.ID_OPERACION == "" ? datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd") + "|" + generaAsiento : generaAsiento;
                    if (!datosAsiento.IsUUIDNull() && datosAsiento.UUID.Trim() != "" && datosAsiento.ESTADO != estadoEjecutado)
                    {
                        da.EliminarAsientoAntiguo(datosAsiento.UUID, cn, trans);
                    }

                    int    idComprobante         = 0;
                    string referenciaComprobante = string.Empty;

                    //LOGICA DE GENERACION DE FACTURA
                    if (datosAsiento.TIPO_ASIENTO == ConstantesING.TIPO_ASIENTO_INGRESO || datosAsiento.TIPO_ASIENTO == ConstantesING.TIPO_ASIENTO_COMISION)
                    {
                        comprobanteAsiento         = new Comprobante();
                        comprobanteAsiento.Cliente = new Cliente();
                        asiento.CLIENTE.ImportRow(datosAsiento);
                        comprobanteAsiento.Cliente.TipoDocumento = asiento.CLIENTE[0].TIPO_DOCUMENTO;
                        comprobanteAsiento.Cliente.CodigoCliente = asiento.CLIENTE[0].CODIGO_CLIENTE;
                        comprobanteAsiento.Cliente.RazonSocial   = asiento.CLIENTE[0].RAZON_SOCIAL.Replace(",", "");
                        comprobanteAsiento.Cliente.Direccion     = asiento.CLIENTE[0].DIRECCION;
                        comprobanteAsiento.Cliente.Distrito      = asiento.CLIENTE[0].DISTRITO;
                        comprobanteAsiento.Cliente.Ciudad        = asiento.CLIENTE[0].PROVINCIA;
                        comprobanteAsiento.Cliente.Departamento  = asiento.CLIENTE[0].DEPARTAMENTO;
                        comprobanteAsiento.Cliente.IdPais        = Convert.ToInt32(asiento.CLIENTE[0].ID_PAIS);
                        comprobanteAsiento.Cliente.Pais          = asiento.CLIENTE[0].CODIGO_PAIS;
                        if (comprobanteAsiento.Cliente.IdPais.ToString().Equals(ConstantesING.CODIGO_PAIS_PERU))
                        {
                            comprobanteAsiento.Cliente.IdDepartamento = Convert.ToInt32(asiento.CLIENTE[0].ID_DEPARTAMENTO);
                            comprobanteAsiento.Cliente.IdCiudad       = Convert.ToInt32(asiento.CLIENTE[0].ID_CIUDAD);
                            comprobanteAsiento.Cliente.IdDistrito     = Convert.ToInt32(asiento.CLIENTE[0].ID_DISTRITO);
                            comprobanteAsiento.Cliente.Departamento   = asiento.CLIENTE[0].DEPARTAMENTO;
                            comprobanteAsiento.Cliente.Ciudad         = asiento.CLIENTE[0].PROVINCIA;
                            comprobanteAsiento.Cliente.Distrito       = asiento.CLIENTE[0].DISTRITO;
                            comprobanteAsiento.Cliente.Ubigeo         = asiento.CLIENTE[0].UBIGEO;
                            comprobanteAsiento.Cliente.CodigoPostal   = "";
                        }
                        else
                        {
                            comprobanteAsiento.Cliente.IdDepartamento = 0;
                            comprobanteAsiento.Cliente.IdCiudad       = 0;
                            comprobanteAsiento.Cliente.IdDistrito     = 0;
                            comprobanteAsiento.Cliente.Departamento   = "";
                            comprobanteAsiento.Cliente.Ciudad         = "";
                            comprobanteAsiento.Cliente.Distrito       = "";
                            comprobanteAsiento.Cliente.Ubigeo         = "";
                            comprobanteAsiento.Cliente.CodigoPostal   = asiento.CLIENTE[0].CODIGO_POSTAL;
                        }
                        comprobanteAsiento.Cliente.Correo  = asiento.CLIENTE[0].CORREO;
                        comprobanteAsiento.Cliente.Usuario = usuario;

                        facturacionDA.RegistrarCliente(comprobanteAsiento.Cliente);
                        asiento.CLIENTE.Clear();
                        #region CODIGO COMENTADO
                        //DataTable dtInfoCliente = facturacionDA.ObtenerCliente(datosAsiento.CODIGO_CLIENTE);
                        //if (dtInfoCliente.Rows.Count == 0)
                        //{
                        //    asiento.CLIENTE.ImportRow(datosAsiento);
                        //    facturacionDA.InsertarCliente(asiento.CLIENTE[0].CODIGO_CLIENTE,
                        //        asiento.CLIENTE[0].RAZON_SOCIAL, asiento.CLIENTE[0].DIRECCION,
                        //        asiento.CLIENTE[0].DISTRITO, asiento.CLIENTE[0].PROVINCIA,
                        //        asiento.CLIENTE[0].DEPARTAMENTO, usuario);
                        //    asiento.CLIENTE.Clear();
                        //}
                        //else
                        //{
                        //    //asiento.CLIENTE.ImportRow(dtInfoCliente.Rows[0]);
                        //    //deberia actualizarse
                        //}
                        #endregion
                        //UNA VEZ OBTENIDO EL CLIENTE, PREPARAR LA DATA DEL COMPROBANTE Y DE SU DETALLE
                        Asiento.COMPROBANTERow comprobante = asiento.COMPROBANTE.NewCOMPROBANTERow();
                        comprobante.CODIGO_CLIENTE = datosAsiento.CODIGO_CLIENTE;
                        string descripcionComprobante = string.Empty;

                        switch (datosAsiento.TIPO_ASIENTO)
                        {
                        case ConstantesING.TIPO_ASIENTO_INGRESO:
                            comprobante.TIPO_DOCUMENTO = ConstantesING.TIPO_DOCUMENTO_FACTURA;
                            comprobante.COD_CONCEPTO   = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_INGRESO_SOLES : ConstantesING.CONCEPTO_INGRESO_DOLARES;
                            comprobante.GLOSA          = glosaVT_ING;
                            descripcionComprobante     = descripcionVT_ING;

                            comprobanteAsiento.TipoDocumento  = ConstantesING.TIPO_DOCUMENTO_FACTURA;
                            comprobanteAsiento.CodigoConcepto = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_INGRESO_SOLES : ConstantesING.CONCEPTO_INGRESO_DOLARES;
                            comprobanteAsiento.Glosa          = glosaVT_ING;
                            descripcionComprobante            = descripcionVT_ING;

                            break;

                        case ConstantesING.TIPO_ASIENTO_COMISION:
                            comprobante.TIPO_DOCUMENTO = ConstantesING.TIPO_DOCUMENTO_BOLETA;
                            comprobante.COD_CONCEPTO   = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_COMISION_SOLES : ConstantesING.CONCEPTO_COMISION_DOLARES;
                            comprobante.GLOSA          = glosaVT_CRA;
                            descripcionComprobante     = descripcionVT_CRA;

                            comprobanteAsiento.TipoDocumento  = ConstantesING.TIPO_DOCUMENTO_BOLETA;
                            comprobanteAsiento.CodigoConcepto = datosAsiento.MONEDA == "PEN" ? ConstantesING.CONCEPTO_COMISION_SOLES : ConstantesING.CONCEPTO_COMISION_DOLARES;
                            comprobanteAsiento.Glosa          = glosaVT_CRA;
                            descripcionComprobante            = descripcionVT_CRA;

                            break;
                        }
                        if (!datosAsiento.IsUUIDNull() && datosAsiento.UUID.Equals(""))
                        {
                            //OT 7349 INI
                        }
                        else
                        {
                            DataTable dtComprobante2 = facturacionDA.ObtenerComprobantePorUUID(datosAsiento.UUID);

                            asiento.COMPROBANTE.ImportRow(dtComprobante2.Rows[0]);

                            Comprobante comprobanteAntiguo = new Comprobante();
                            comprobanteAntiguo.IdComprobante = Convert.ToInt32(asiento.COMPROBANTE.Rows[0]["ID_COMPROBANTE"].ToString().Trim());
                            comprobanteAntiguo.Usuario       = usuario;

                            facturacionDA.AnularComprobante(comprobanteAntiguo);
                            asiento.COMPROBANTE.Rows.Remove(asiento.COMPROBANTE[0]);
                            #region CODIGO_COMENTADO
                            //facturacionDA.EliminarComprobante(asiento.COMPROBANTE.Rows[0]["ID_COMPROBANTE"].ToString().Trim(), ConstantesING.ESTADO_INACTIVO, usuario);

                            //facturacionDA.ActualizarComprobante(ConstantesING.ACCION_ACTUALIZAR, asiento.COMPROBANTE[0].ID_COMPROBANTE,
                            //    asiento.COMPROBANTE[0].TIPO_DOCUMENTO, asiento.COMPROBANTE[0].MONEDA, asiento.COMPROBANTE[0].FECHA_EMISION,
                            //    asiento.COMPROBANTE[0].CODIGO_CLIENTE, "", "", asiento.COMPROBANTE[0].COD_CONCEPTO,
                            //    "", "", Convert.ToDateTime("01/01/1900"), ConstantesING.ESTADO_ACTIVO, ConstantesING.NO, ConstantesING.NO, ConstantesING.SI,
                            //    asiento.COMPROBANTE[0].GLOSA, 1, asiento.COMPROBANTE[0].PRECIO_UNITARIO,
                            //    asiento.COMPROBANTE[0].VALOR_VENTA, asiento.COMPROBANTE[0].IGV, asiento.COMPROBANTE[0].TOTAL, usuario, "");
                            //facturacionDA.ActualizarDetalle(asiento.COMPROBANTE[0].ID_COMPROBANTE, 1, string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2),
                            //    null, ConstantesING.SI, datosAsiento.SUBF, usuario);
                            //referenciaComprobante = dtComprobante.Rows[0]["SERIE"].ToString() + "-" + dtComprobante.Rows[0]["NUMERO"].ToString();
                            //if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA")
                            //{
                            //    ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante);
                            //}
                            #endregion
                        }
                        //OT 7349 FIN

                        //OT7999 INI
                        //comprobanteAsiento.Total = datosAsiento.TOTALF;
                        //datosAsiento.TOTALF -- de tipo double

                        if (comprobanteAsiento.TipoDocumento.Equals(ConstantesING.TIPO_DOCUMENTO_FACTURA))
                        {
                            //se calcula la detraccion sólo si el documento es Factura
                            bool tipoCambioHallado = setearTipoCambio(datosAsiento.FECHA_PROCESO);
                            montoSoles = 0;

                            if (datosAsiento.MONEDA != "PEN")
                            {
                                //dolares, convertir a soles
                                //bool tipoCambioHallado = setearTipoCambio();
                                if (!tipoCambioHallado)
                                {
                                    MessageBox.Show("No existe el valor del tipo de cambio para la fecha.", "Comprobantes");
                                    //salir del proceso...
                                }
                                else
                                {
                                    montoSoles = datosAsiento.TOTALF * tipoCambio;
                                }
                            }
                            else
                            {
                                montoSoles = datosAsiento.TOTALF;
                            }

                            if (montoSoles >= 700)
                            {
                                //calcular detraccion
                                //txtMontoDetrac.Text = (double.Parse(txtTotal.Text) * (dblPorcentajeDetraccion / 100)).ToString("0.00");
                                if (!valorDetraccionHallado)
                                {
                                    MessageBox.Show("No existe el valor del porcentaje de detracción.", "Comprobantes");
                                    //salir del proceso...
                                }
                                else
                                {
                                    comprobanteAsiento.PorcentajeDetraccion = dblPorcentajeDetraccion;
                                    //comprobanteAsiento.MontoDetraccion = montoSoles * (dblPorcentajeDetraccion / 100);
                                    comprobanteAsiento.MontoDetraccion = datosAsiento.TOTALF * (dblPorcentajeDetraccion / 100);
                                }
                            }
                        }
                        else
                        {
                            //No es factura
                            comprobanteAsiento.PorcentajeDetraccion = 0;
                            comprobanteAsiento.MontoDetraccion      = 0;
                        }
                        //OT7999 FIN

                        comprobanteAsiento.Moneda                     = datosAsiento.MONEDA == "PEN" ? "S" : "D";
                        comprobanteAsiento.FechaEmision               = datosAsiento.FECHA_PROCESO;
                        comprobanteAsiento.Cliente.CodigoCliente      = datosAsiento.CODIGO_CLIENTE;
                        comprobanteAsiento.Proceso                    = "";
                        comprobanteAsiento.Expediente                 = "";
                        comprobanteAsiento.TipoDocumentoRelacionado   = "";
                        comprobanteAsiento.NumeroDocumentoRelacionado = "";
                        comprobanteAsiento.FechaDocumentoRelacionado  = Convert.ToDateTime("01/01/1900");
                        comprobanteAsiento.Estado                     = ConstantesING.ESTADO_ACTIVO;
                        comprobanteAsiento.FlagImpresion              = ConstantesING.NO;
                        comprobanteAsiento.FlagEnviado                = ConstantesING.NO;
                        comprobanteAsiento.FlagAfectoIgv              = ConstantesING.SI;
                        comprobanteAsiento.Glosa           = comprobante.GLOSA;
                        comprobanteAsiento.Cantidad        = 1;
                        comprobanteAsiento.ValorVenta      = datosAsiento.SUBF;
                        comprobanteAsiento.PrecioUnitario  = datosAsiento.SUBF;
                        comprobanteAsiento.Igv             = datosAsiento.IGVF;
                        comprobanteAsiento.Total           = datosAsiento.TOTALF;
                        comprobanteAsiento.Usuario         = usuario;
                        comprobanteAsiento.TipoNotaCredito = "";

                        facturacionDA.RegistrarComprobante(comprobanteAsiento);

                        comprobanteAsiento.ListaDetalle = new List <DetalleFactura>();
                        DetalleFactura detalle = new DetalleFactura();
                        detalle.id_comprobante = comprobanteAsiento.IdComprobante;
                        detalle.descripcion    = string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2);
                        detalle.cuenta         = "";
                        detalle.afectoImpuesto = ConstantesING.SI;
                        detalle.importe        = datosAsiento.SUBF;

                        facturacionDA.RegistrarDetalleComprobante(detalle, usuario);
                        referenciaComprobante = comprobanteAsiento.Serie + "-" + comprobanteAsiento.Numero;
                        if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA")
                        {
                            ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante);
                        }
                        #region CODIGO_COMENTADO
                        //string respuesta = facturacionDA.InsertarComprobante(comprobante.TIPO_DOCUMENTO,
                        //    datosAsiento.MONEDA == "PEN" ? "S" : "D", datosAsiento.FECHA_PROCESO,
                        //    datosAsiento.CODIGO_CLIENTE, "", "", comprobante.COD_CONCEPTO, "", "", Convert.ToDateTime("01/01/1900"),
                        //    //OT 7349 INI
                        //    ConstantesING.ESTADO_ACTIVO, ConstantesING.SI, ConstantesING.SI, ConstantesING.NO,
                        //    //OT 7349 FIN
                        //    comprobante.GLOSA, 1, datosAsiento.SUBF, datosAsiento.SUBF, datosAsiento.IGVF,
                        //    datosAsiento.TOTALF, usuario, "");
                        //idComprobante = 0;
                        //bool esNumero = Int32.TryParse(respuesta, out idComprobante);
                        //DataTable dtComprobante = facturacionDA.ObtenerComprobante(comprobanteAsiento.IdComprobante.ToString());
                        //referenciaComprobante = comprobanteAsiento.Serie + "-" + comprobanteAsiento.Numero;
                        //if (!datosAsiento.IsID_OPERACIONNull() && datosAsiento.TIPO_ASIENTO == "VT_CRA")
                        //{
                        //    ht.Add(datosAsiento.ID_OPERACION, referenciaComprobante);
                        //}
                        ////OT 7349 INI
                        //if (esNumero)
                        //{
                        //    facturacionDA.IngresarDetalle(idComprobante, string.Format(descripcionComprobante, datosAsiento.FONDO, datosAsiento.TEXTO1, datosAsiento.TEXTO2), "",
                        //        ConstantesING.SI, datosAsiento.SUBF, usuario);
                        //}
                        //OT 7349 FIN
                        //VERIFICAR SI datosAsiento TIENE VALOR EN UUID. SI TIENE, SE ACTUALIZA EL COMPROBANTE, SINO SE INSERTA
                        #endregion
                    }

                    string uuid = null;
                    if (sapActivo) //solo se generan los asientos si es que el flag de sap se encuentra activo.
                    {
                        //string uuid = da.RegistrarControl(usuario, direccionIP, referencia, cn, trans);
                        uuid = da.RegistrarControl(usuario, direccionIP, referencia, cantidadSubDetalle, datosAsiento.TIPO_ASIENTO, cn, trans);
                        //cantidadSubDetalle

                        if (datosAsiento.TIPO_ASIENTO == "PD_CRA")
                        {
                            referenciaComprobante = ht[datosAsiento.ID_OPERACION].ToString();
                        }


                        //continuar validando, probablemente este bloque tambien puede ir dentro
                        Asiento.SAPAR1Row sapar1Row = asiento.SAPAR1.NewSAPAR1Row();
                        sapar1Row.SAPUUI = uuid;
                        sapar1Row.SAPSOC = drCabeceraTipo["SOCIEDAD_FI"].ToString().Trim();
                        #region CODIGO_COMENTADO
                        //if (datosAsiento.TIPO_ASIENTO == "PD_CRA")
                        //{
                        //    sapar1Row.SAPNU5 = datosAsiento.REFERENCIA;
                        //    datosAsiento.REFERENCIA = "";
                        //}
                        //else
                        //{

                        //}
                        #endregion
                        sapar1Row.SAPNU5 = generaAsiento;

                        sapar1Row.SAPCLA = drCabeceraTipo["CLASE_DOCUMENTO"].ToString().Trim();
                        sapar1Row.SAPMON = drCabeceraTipo["MONEDA_DOCUMENTO"].ToString().Trim();
                        sapar1Row.SAPFEC = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd");
                        sapar1Row.SAPFE1 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd");
                        //sapar1Row.SAPFE2 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd");
                        //colocando tipo de cambio para asientos con TC
                        if (datosAsiento.TIPO_CAMBIO > 0)
                        {
                            sapar1Row.SAPTAS = datosAsiento.TIPO_CAMBIO;
                        }
                        else
                        {
                            sapar1Row.SAPFE2 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd");
                        }
                        sapar1Row.SAPREF = datosAsiento.IsREFERENCIANull() || datosAsiento.REFERENCIA == "" ? (drCabeceraTipo.IsNull("REFERENCIA") || drCabeceraTipo["REFERENCIA"].ToString().Trim() == "" ? referencia : drCabeceraTipo["REFERENCIA"].ToString().Trim()) : datosAsiento.REFERENCIA;
                        if (datosAsiento.TIPO_ASIENTO == "VT_ING" || datosAsiento.TIPO_ASIENTO == "VT_CRA" || datosAsiento.TIPO_ASIENTO == "PD_CRA")
                        {
                            sapar1Row.SAPREF = referenciaComprobante;
                        }
                        string textoCabecera1 = string.Format(drCabeceraTipo["TEXTO_CABECERA"].ToString(), datosAsiento.TEXTO1, datosAsiento.TEXTO2);
                        if (textoCabecera1.Length > 25)
                        {
                            textoCabecera1 = textoCabecera1.Substring(0, 25);
                        }
                        sapar1Row.SAPTEX = textoCabecera1;
                        sapar1Row.SAPLIB = string.Empty;

                        asiento.SAPAR1.AddSAPAR1Row(sapar1Row);

                        da.RegistrarCabeceraAsiento(sapar1Row, cn, trans);

                        int i = 1;
                        int k = 1;
                        foreach (DataRow filaMovimiento in drDetallesTipo)
                        {
                            if (Convert.ToDecimal(datosAsiento["MONTO" + i.ToString()]) == 0)
                            {
                                i++;
                                continue;
                            }
                            Asiento.SAPAR2Row sapar2Row = asiento.SAPAR2.NewSAPAR2Row();
                            sapar2Row.SetParentRow(sapar1Row);
                            sapar2Row.SAPNU7 = k;
                            sapar2Row.SAPTI4 = filaMovimiento["CLAVE_CONTABILIZACION"].ToString().Trim(); //TIPO_MOVIMIENTO
                            sapar2Row.SAPCL2 = string.Empty;                                              //CLASE MOVIMIENTO
                            sapar2Row.SAPIMP = Convert.ToDecimal(datosAsiento["MONTO" + i.ToString()]);
                            i++;
                            k++;
                            string glosa = string.Format(filaMovimiento["TEXTO_POSICION"].ToString(), datosAsiento.TEXTO1, datosAsiento.TEXTO2);
                            if (glosa.Length > 50)
                            {
                                glosa = glosa.Substring(0, 50);
                            }
                            sapar2Row.SAPTE1 = glosa;
                            sapar2Row.SAPASI = filaMovimiento["ASIGNACION"].ToString().Trim();
                            string referencia1 = string.Format(filaMovimiento["REFERENCIA1"].ToString(), datosAsiento.REFERENCIA1);
                            if (referencia1.Length > 12)
                            {
                                referencia1 = referencia1.Substring(0, 12);
                            }
                            sapar2Row.SAPRE3 = referencia1;
                            string referencia3 = string.Format(filaMovimiento["REFERENCIA3"].ToString(), datosAsiento.REFERENCIA3);
                            if (referencia3.Length > 20)
                            {
                                referencia3 = referencia3.Substring(0, 20);
                            }
                            sapar2Row.SAPR04 = referencia3;
                            sapar2Row.SAPCUE = filaMovimiento["CUENTA"].ToString().Trim().PadRight(10, '0');
                            if (filaMovimiento["TIPO_OBJETO_IMPUTACION"] != null)
                            {
                                sapar2Row.SAPTI5 = filaMovimiento["TIPO_OBJETO_IMPUTACION"].ToString().Trim();
                                sapar2Row.SAPOBJ = filaMovimiento["OBJETO_IMPUTACION"].ToString().Trim();
                            }
                            sapar2Row.SAPIND = filaMovimiento["INDICADOR_IGV"].ToString().Trim();
                            sapar2Row.SAPFE3 = datosAsiento.FECHA_PROCESO.ToString("yyyyMMdd");
                            sapar2Row.SAPCON = "";
                            sapar2Row.SAPVIA = "";

                            asiento.SAPAR2.AddSAPAR2Row(sapar2Row);
                            da.RegistrarDetalleAsiento(sapar2Row, cn, trans);
                        }
                        da.ActualizarControl(uuid, cn, trans);
                        da.RegistrarControlAsiento(uuid, datosAsiento, usuario, cn, trans);
                        if (datosAsiento.TIPO_ASIENTO == "VT_ING" || datosAsiento.TIPO_ASIENTO == "VT_CRA")
                        {
                            facturacionDA.ActualizarComprobanteIdentificador(comprobanteAsiento.IdComprobante, uuid);
                        }
                    }
                }

                trans.Commit();
                facturacionDA.CommitTransaccion();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                facturacionDA.RollbackTransaccion();
                throw ex;
            }
            finally
            {
                trans.Dispose();
                cn.Close();
                cn.Dispose();
                facturacionDA.LiberarConexion();
            }
        }
        //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);
        }