/// <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); }