using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Extensiones; public partial class Nomina_Aguinaldo : ClsPaginas { #region Propiedades private DataTable DTAguinaldos { get { return (DataTable)ViewState["DTAguinaldos"]; } set { ViewState["DTAguinaldos"] = value; } } #endregion protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { using (ClsNominas objnom = new ClsNominas()) { objnom.GetEjercicios(UsuarioActual.CveEmpresa); DdlEjercicios.DataSource = objnom.DtResultados; } DdlEjercicios.DataBind(); DdlTipoPeriodo.DataSource = GlobalDTTipoPeriodo.FiltraParametros("Estatus = 'Activo' AND CveTipoPeriodo <>-1"); DdlTipoPeriodo.DataBind(); DdlTipoPeriodo.Items.Insert(0, new ListItem("Seleccione", "-1")); if (DdlTipoPeriodo.Items.Count > 0) { DdlTipoPeriodo.SelectedIndex = 0; } } LtlUma.Text = "86.88"; } protected void BtnCalcular_Click(object sender, EventArgs e) { int ejercicio = DdlEjercicios.SelectedValue.ToEntero(); int CveTipoPeriodo = DdlTipoPeriodo.SelectedValue.ToEntero(); int CvePeriodo = -1; using (ClsNominas objnom = new ClsNominas()) { objnom.GetCalculoAguinaldo(ejercicio, UsuarioActual.CveEmpresa, 0, CveTipoPeriodo, CvePeriodo); DTAguinaldos = objnom.DtResultados; GVCalcularAguinaldo.DataSource = DTAguinaldos; LtlTotal.Text = string.Format("{0:N2}", DTAguinaldos.SUM("Aguinaldo")); LtlAutorizado.Text = string.Format("{0:N2}", DTAguinaldos.SUM("Aguinaldo", "CveNomina>0")); LtldiasEjercicio.Text = string.Format("{0}/12/31", ejercicio).ToDate().DayOfYear.ToString(); } GVCalcularAguinaldo.DataBind(); LnkAutorizarModal.Visible = true; BtnRecalcular_Click(sender, null); upDatosPA_N.Update(); } private void CargaPeriodos() { DataTable dtPeriodos = null; using (ClsNominas ObjPeriodos = new ClsNominas()) { if (ObjPeriodos.GetPeriodos(-1, UsuarioActual.CveEmpresa, DdlEjercicios.SelectedValue.ToEntero(), -1, -1)) { dtPeriodos = ObjPeriodos.DtResultados.FiltraParametros("Estatus IN (0,1)"); } ObjPeriodos.Dispose(); } if (dtPeriodos != null && dtPeriodos.Rows.Count > 0) { DdlPeriodo.DataSource = dtPeriodos.FiltraParametros(string.Format(" CveTipoPeriodo={0}", DdlTipoPeriodoB.SelectedValue)); } DdlPeriodo.DataBind(); DdlPeriodo.Items.Insert(0, new ListItem("Seleccione", "-1")); UpModalAutorizar.Update(); } protected void LnkAutorizarModal_Click(object sender, EventArgs e) { DdlTipoPeriodoB.ClearSelection(); DdlTipoPeriodoB.Items.Clear(); DdlTipoPeriodoB.DataSource = GlobalDTTipoPeriodo.FiltraParametros(string.Format("CveTipoPeriodo=6 OR CveTipoPeriodo={0}", DdlTipoPeriodo.SelectedValue)); DdlTipoPeriodoB.DataBind(); CargaPeriodos(); RegistraScript("$('#ModalAutorizar').modal();"); } protected void LnkAutorizar_Click(object sender, EventArgs e) { bool continuar = true; string mensaje = ""; //int DiasLaborados; decimal Importe; int CveMoneda = 1; var CvePeriodoSeleccionado = DdlPeriodo.SelectedValue.ToEntero(); int ejercicio = DdlEjercicios.SelectedValue.ToEntero(); int CvePersonal; int CvePeriodo; decimal ImporteGravado = 0; decimal ImporteExento = 0; decimal ImporteValor = 0; //string NombrePersonal = ""; int CveMetodoPago = 0; int CveNomina = 0; int CveConcepto = 0; if (continuar) { using (ClsNominas objNomina = new ClsNominas()) { objNomina.IniciaTransacSQL(); if (continuar) { //continuar = objNomina.UpADDdUtilidadesEjercicio(UsuarioActual.CveEmpresa, ejercicio, utilimporte, utilimporteAnt, false); //if (continuar) //{ // if (objNomina.DtResultados.Rows.Count < 0 || objNomina.DtResultados.Rows[0]["CONTimbrado"].ToString() == "1") // continuar = false; //} } if (continuar) { continuar = objNomina.GetConceptos(UsuarioActual.CveEmpresa); } if (continuar) { DataRow rowc = objNomina.DtResultados.FiltroPrimero("CveSistema=5"); if ((rowc != null)) { CveConcepto = rowc["CveConcepto"].ToString().ToEntero(); } //else //{ // CveConcepto = objNomina.AddConcepto("PTU", "Utilidades", "P", "", true, true, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, false, -1, -1, -1, 0, -1, 0, 0, 0, 0, 0); //} if (CveConcepto < 1) { continuar = false; Alert("debe agregar un concepto para el calculo del aguinaldo", ModExtensiones.TipoMensaje.ToastAdventencia); } } if (continuar) { foreach (DataRow row in DTAguinaldos.Rows) { //DiasLaborados = row["DiasLaborados"].ToString().ToEntero(); CvePeriodo = CvePeriodoSeleccionado; /* if (continuar) {CveNomina continuar = objNomina.AddUtilidad(CvePersonal, Importe, CvePeriodo, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, ejercicio, DiasLaborados, SueldoTotal); }*/ CveNomina = 0; CvePersonal = row["CvePersonal"].ToString().ToEntero(); CveMetodoPago = row["CveMetodoPago"].ToString().ToEntero(); Importe = row["Aguinaldo"].ToString().ToDecimal(); ImporteGravado = row["AguinaldoGravado"].ToString().ToDecimal(); ImporteExento = Importe - ImporteGravado; ImporteValor = row["DiasLaborados"].ToString().ToDecimal(); if (CvePersonal > 0 && Importe > 0 && row["CveNomina"].ToString().ToEntero() == 0) { if (objNomina.GetNom_Nominas(-1, CvePersonal, CvePeriodoSeleccionado, -1, UsuarioActual.CveEmpresa)) { if (objNomina.DtResultados.Rows.Count > 0) { CveNomina = objNomina.CveNomina; } else { if (objNomina.AddNom_Nominas(-1, 1, CvePersonal, CvePeriodoSeleccionado, Importe.ToString().ToDouble(), 0, 0, Importe.ToString().ToDouble(), CveMoneda, 1, CveMetodoPago, DateTime.Now, "Deducciones nómina", "", "", "", "", 0, 0, 0, new DateTime(), new DateTime(), new DateTime(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) { CveNomina = objNomina.CveNomina; } else { continuar = false; } } } else { continuar = false; } if (CveNomina > 0) { if (!objNomina.AddUPNom_NominasDetalles(objNomina.CveNomina, CvePeriodoSeleccionado, CvePersonal, CveConcepto, Importe, ImporteGravado, ImporteExento, ImporteValor, UsuarioActual.CveUsuario)) { continuar = false; } } else { continuar = false; } } if (!continuar) { break; } } } //if (continuar & CvePeriodoSeleccionado > 0) //{ // continuar = objNomina.CambiaEstatusPeriodo(CvePeriodoSeleccionado, (int)enumNominasEstatus.Activa, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa); //} if (continuar) { objNomina.Commit(); } else { objNomina.RollBack(); } objNomina.Dispose(); } } if (mensaje.Length > 0) { Alert(mensaje, ModExtensiones.TipoMensaje.MsgAdvertencia); continuar = false; } if (continuar) { RegistraScript("$('#ModalAutorizar').modal('hide');"); Alert("Se ha generado el aguinaldo"); BtnCalcular_Click(null, null); } } protected void DdlTipoPeriodoB_SelectedIndexChanged(object sender, EventArgs e) { CargaPeriodos(); } protected void GVCalcularAguinaldo_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int CveNomina = e.Row.DBCampo("CveNomina").ToString().ToEntero(); if (CveNomina > 0) { e.Row.CssClass = "success"; } } } protected void BtnRecalcular_Click(object sender, EventArgs e) { decimal uma = 86.88m; decimal aguiexentogral = uma * 30; decimal salariodiario = 0; decimal diasanio = 366; decimal diaslaborados = 0; decimal diasaguinaldo = 0; decimal diasaguipago = 0; decimal salariomensual = 0; decimal aguinaldo = 0; decimal aguinaldoexcento = 0; decimal aguinaldogravado = 0; decimal diasmes = 30.5m; decimal FraccionI = 0; decimal FraccionII_1 = 0; decimal FraccionII_2 = 0; decimal FraccionIII_1 = 0; decimal FraccionIII_2 = 0; decimal FraccionV = 0; decimal FraccionIV = 0; decimal Aguinaldoapagar = 0; decimal AguinaldoapagarTotal = 0; StringBuilder str = new StringBuilder(); using (ClsClaseBaseD objbase = new ClsClaseBaseD()) { foreach (GridViewRow gvrow in GVCalcularAguinaldo.Rows) { salariodiario = gvrow.FCTextBox("TxtsueldoDiario").Text.ToDecimal(); diaslaborados = gvrow.FCTextBox("TxtdiasLaborados").Text.ToDecimal(); diasaguinaldo = gvrow.FCTextBox("TxtdiasAguinaldo").Text.ToDecimal(); if (salariodiario > 0) { diasaguipago = (diaslaborados / diasanio) * diasaguinaldo; salariomensual = salariodiario * 30; aguinaldo = diasaguipago * salariodiario; aguinaldoexcento = (aguiexentogral > aguinaldo ? aguinaldo : aguiexentogral); aguinaldogravado = aguinaldo - aguinaldoexcento; if (aguinaldogravado > 0) { FraccionI = (aguinaldogravado / diasanio) * diasmes; FraccionII_1 = salariomensual + FraccionI; str.Clear(); str.AppendFormat("SELECT dbo.Fnc_NomValues(40, 0, 00, -1, {0}, {1}, {1}) isrFraccionII_2,", FraccionII_1, diasmes); str.AppendFormat(" dbo.Fnc_NomValues(40, 0, 00, -1, {0}, {1}, {1}) isrFraccionIII_1", salariomensual, diasmes); if (objbase.runQuerystr(str.ToString())) { DataRow drow = objbase.DtResultados.Rows[0]; FraccionII_2 = drow["isrFraccionII_2"].ToString().ToDecimal(); FraccionIII_1 = drow["isrFraccionIII_1"].ToString().ToDecimal(); } else { break; } FraccionIII_2 = FraccionII_2 - FraccionIII_1; FraccionV = FraccionIII_2 / FraccionI; FraccionIV = aguinaldogravado * FraccionV; Aguinaldoapagar = aguinaldo - FraccionIV; } else { FraccionIV = 0; Aguinaldoapagar = aguinaldo - FraccionIV; } } else { aguinaldo = 0; Aguinaldoapagar = 0; aguinaldogravado = 0; FraccionIV = 0; } AguinaldoapagarTotal += Aguinaldoapagar; gvrow.FCLabel("lblsueldoAguinaldoCompleto").Text = string.Format("${0:N2}", aguinaldo); gvrow.FCLabel("lblAguinaldo").Text = string.Format("${0:N2}", Aguinaldoapagar); gvrow.FCLabel("lblAguinaldoGravado").Text = string.Format("${0:N2}", aguinaldogravado); gvrow.FCLabel("lblISRAguinaldo").Text = string.Format("${0:N2}", FraccionIV); } } LtlTotal.Text =string.Format("${0:N2}", AguinaldoapagarTotal); /* * * lblAguinaldo lblAguinaldoGravado lblISRAguinaldo salario diario dias año Dias laborados dias Aguinaldo dias aguinaldo(PAGO) UMA Salario mensual Aguinaldo Aguinaldo excento Aguinaldo gravado dias mes FraccionI FraccionII FraccionII FraccionIII FraccionIII FraccionV FraccionIV Aguinaldoapagar * */ } } class ClsClaseBaseD : IDisposable { protected SqlConnection SqlConexion; protected SqlDataAdapter SqlAdapter; protected DataTable datos; protected DataSet DTSet; public DataTable DtResultados { get { return datos; } } public DataSet DTSetResultados { get { return DTSet; } } protected bool disposedValue = false; protected bool EsTransaccion = false; public string MyCurrentError; // REGISTRAR CONEXIÓN private int CveConexion = 0; public ClsClaseBaseD(ClsClaseBaseD adsObj = null) { if (adsObj != null && adsObj.SqlAdapter != null && adsObj.SqlAdapter.SelectCommand != null && adsObj.SqlAdapter.SelectCommand.Transaction != null) { SqlConexion = adsObj.SqlConexion; SqlAdapter = adsObj.SqlAdapter; EsTransaccion = true; } else { SqlConexion = new SqlConnection(); SqlConexion.ConnectionString = ConfigurationManager.ConnectionStrings["Conexion"].ConnectionString; try { SqlConexion.Open(); SqlAdapter = new SqlDataAdapter("", SqlConexion); ConexionAdd(); } catch (Exception ex) { this.OnError("Ocurrió un error al intentar conectarse a la base de datos.", ex); } } } public void SqlDataAdapter(string StrSQL, CommandType TipoComando = CommandType.StoredProcedure) { if (SqlConexion.State == ConnectionState.Open) { SqlAdapter.SelectCommand.Parameters.Clear(); SqlAdapter.SelectCommand.CommandText = StrSQL; SqlAdapter.SelectCommand.CommandType = TipoComando; datos = new DataTable(); DTSet = new DataSet(); } } protected void DataAdapter(string StrSQL, CommandType TipoComando = CommandType.Text) { // if (SqlAdapter.SelectCommand == null) // { // if ((sqlCommand != null)) // { // SqlAdapter.SelectCommand = sqlCommand; // } // else // { // SqlAdapter.SelectCommand = new SqlCommand(); // } // SqlAdapter.SelectCommand.Connection = SqlConexion; // } if (SqlConexion.State == ConnectionState.Open) { SqlAdapter.SelectCommand.Parameters.Clear(); SqlAdapter.SelectCommand.CommandText = StrSQL; SqlAdapter.SelectCommand.CommandType = TipoComando; datos = new DataTable(); DTSet = new DataSet(); } } private void ConexionAdd() { if (ConfigurationManager.AppSettings["RegistraConexion"] != null && ConfigurationManager.AppSettings["RegistraConexion"].ToString() == "1") { try { SqlDataAdapter("PA_Sis_RegistrarConexion"); { var withBlock = SqlAdapter.SelectCommand.Parameters; withBlock.Add("@Clase", SqlDbType.VarChar).Value = this.GetType().Name; withBlock.Add("@Modulo", SqlDbType.VarChar).Value = string.Format("{0}?{1}", HttpContext.Current.Request.Url.AbsolutePath.ToString(), HttpContext.Current.Request.QueryString.ToString()); withBlock.Add("@IDConexion", SqlDbType.Int).Direction = ParameterDirection.Output; } SqlAdapter.Fill(datos); CveConexion = SqlAdapter.SelectCommand.Parameters["@IDConexion"].Value.ToString().ToEntero(); } catch (Exception ex) { this.OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()); } } } private void ConexionClose() { if (CveConexion > 0 && ConfigurationManager.AppSettings["RegistraConexion"] != null && ConfigurationManager.AppSettings["RegistraConexion"].ToString() == "1") { SqlDataAdapter(string.Format("UPDATE Sis_Conexiones SET FechaCierre = GETDATE() WHERE CveConexion = {0}", CveConexion), CommandType.Text); try { SqlAdapter.Fill(datos); } catch (Exception ex) { this.OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()); } CveConexion = 0; } } protected void addParameters(string name, SqlDbType tipo, object valor) { if (SqlConexion.State == ConnectionState.Open) SqlAdapter.SelectCommand.Parameters.Add(name, tipo).Value = valor; } public bool runQuerystr(string Query, List Listaparametros = null, string msgError = "", bool mostrarError = true) { bool retorno = false; try { if (SqlConexion.State == ConnectionState.Open) { SqlAdapter.SelectCommand.Parameters.Clear(); SqlAdapter.SelectCommand.CommandText = Query; SqlAdapter.SelectCommand.CommandType = CommandType.Text; datos = new DataTable(); if (Listaparametros!= null) { foreach (parametroQuery pr in Listaparametros) { if (pr.SqlDataType != null) { if (pr.ParameterDirection != null) SqlAdapter.SelectCommand.Parameters.Add(pr.ParameterName, pr.SqlDataType).Direction = pr.ParameterDirection; else SqlAdapter.SelectCommand.Parameters.Add(pr.ParameterName, pr.SqlDataType).Value = pr.SqlValue != null ? pr.SqlValue : DBNull.Value; } else SqlAdapter.SelectCommand.Parameters.AddWithValue(pr.ParameterName, pr.SqlValue); } } SqlAdapter.Fill(datos); retorno = true; } else { string InfoAdicional = "Se intenta realizar una conexion con una conexion cerrada"; InfoAdicional = $"{InfoAdicional}{Environment.NewLine}{msgError}{Environment.NewLine}"; ModExtensiones.GuardaLog(InfoAdicional); } } catch (SqlException sqEx) { retorno = false; setOnError(msgError, sqEx); } catch (Exception ex) { retorno = false; setOnError(msgError, ex); } return retorno; } public int ExecQuery(string Query, List Listaparametros = null, string msgError = "", bool mostrarError = true) { int retorno = -1; try { if (SqlConexion.State == ConnectionState.Open) { SqlAdapter.SelectCommand.Parameters.Clear(); SqlAdapter.SelectCommand.CommandText = Query; SqlAdapter.SelectCommand.CommandType = CommandType.Text; if (Listaparametros!= null) { foreach (parametroQuery pr in Listaparametros) { if ( pr.SqlDataType != null) { if ( pr.ParameterDirection != null) SqlAdapter.SelectCommand.Parameters.Add(pr.ParameterName, pr.SqlDataType).Direction = pr.ParameterDirection; else SqlAdapter.SelectCommand.Parameters.Add(pr.ParameterName, pr.SqlDataType).Value = pr.SqlValue != null ? pr.SqlValue : DBNull.Value; } else SqlAdapter.SelectCommand.Parameters.AddWithValue(pr.ParameterName, pr.SqlValue); } } retorno = SqlAdapter.SelectCommand.ExecuteNonQuery(); } else { string InfoAdicional = "Se intenta realizar una conexion con una conexion cerrada"; InfoAdicional = $"{InfoAdicional}{Environment.NewLine}{msgError}{Environment.NewLine}"; this.GuardaLog(InfoAdicional); } } catch (SqlException sqEx) { retorno = -1; setOnError(msgError, sqEx); } catch (Exception ex) { retorno = -1; setOnError(msgError, ex); } return retorno; } protected bool RunQuery(string msgOnError) { bool retorno = false; try { SqlAdapter.Fill(datos); retorno = true; } catch (Exception ex) { retorno = false; setOnError(msgOnError, ex); } return retorno; } protected bool RunQueryDS(string msgOnError) { bool retorno = false; try { SqlAdapter.Fill(DTSet); retorno = true; } catch (Exception ex) { retorno = false; setOnError(msgOnError, ex); } return retorno; } public void setOnError(string Mensaje, Exception Exeption) { string InfoAdicional = ""; if (SqlAdapter != null && SqlAdapter.SelectCommand != null && SqlAdapter.SelectCommand.Parameters != null) InfoAdicional = SqlAdapter.SelectCommand.Parameters.ParametrosInfo(); MyCurrentError = string.Format("{0} DESCRIPCIÓN DETALLADA: {1} {2} {3}", Mensaje, Exeption.ToString(), "\r\n", InfoAdicional); this.OnError(Mensaje, Exeption, InfoAdicional); } public void IniciaTransacSQL() { SqlAdapter.SelectCommand.Transaction = SqlConexion.BeginTransaction(); EsTransaccion = true; } public void Commit() { SqlAdapter.SelectCommand.Transaction.Commit(); SqlConexion.Close(); } public void RollBack() { SqlAdapter.SelectCommand.Transaction.Rollback(); SqlConexion.Close(); } public void Dispose() { ConexionClose(); if ((SqlConexion != null)) { if (SqlConexion.State == ConnectionState.Open) { try { if ((SqlAdapter != null)) SqlAdapter.Dispose(); SqlConexion.Close(); } catch (Exception ex) { this.OnError("Ocurrió un error al intentar cerrar la base de datos.", ex); } } SqlConexion.Dispose(); } if (datos != null) datos.Dispose(); if (SqlAdapter != null) SqlAdapter.Dispose(); if (DTSet != null) DTSet.Dispose(); GC.SuppressFinalize(this); } } public class parametroQuery { public parametroQuery(string parameterName, object sqlValue, SqlDbType sqlDataType = default(SqlDbType), ParameterDirection parameterDirection = default(ParameterDirection)) { this.ParameterName = parameterName; this.SqlDataType = sqlDataType; this.ParameterDirection = parameterDirection; this.SqlValue = sqlValue; } public string ParameterName { get; set; } public SqlDbType SqlDataType { get; set; } public ParameterDirection ParameterDirection { get; set; } public object SqlValue { get; set; } }