private void dgvInfonavit_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int fila = 0;
            cnx = new SqlConnection();
            cnx.ConnectionString = cdn;
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            Infonavit.Core.InfonavitHelper ih = new Infonavit.Core.InfonavitHelper();
            ih.Command = cmd;

            fila = dgvInfonavit.CurrentCell.RowIndex;
            Infonavit.Core.Infonavit i = new Infonavit.Core.Infonavit();
            i.idtrabajador = int.Parse(dgvInfonavit.Rows[fila].Cells[0].Value.ToString());

            try
            {
                cnx.Open();
                int existe = (int)ih.existeInfonavit(i);
                cnx.Close();
                cnx.Dispose();

                if (!existe.Equals(0))
                    toolNuevo.Enabled = false;
                else
                    toolNuevo.Enabled = true;
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error");
            }
        }
Beispiel #2
0
        private void toolGuardar_Click(object sender, EventArgs e)
        {
            //SE VALIDA SI TODOS LOS CAMPOS HAN SIDO LLENADOS.
            string control = GLOBALES.VALIDAR(this, typeof(TextBox));
            if (!control.Equals(""))
            {
                MessageBox.Show("Falta el campo: " + control, "Información");
                return;
            }

            if (_idEmpleado == 0)
            {
                MessageBox.Show("No se puede guardar no ha seleccionado al Empleado", "Error");
                return;
            }

            //bool alta_reingreso = ChecaFechaAltaReingreso();

            //if (dtpFechaAplicacion.Value.Date > dtpFinPeriodo.Value.Date)
            //{
            //    MessageBox.Show("La fecha de aplicacion es mayor al periodo.", "Error");
            //    return;
            //}

            //if (dtpFechaAplicacion.Value.Date < dtpInicioPeriodo.Value.Date)
            //{
            //    MessageBox.Show("La fecha de aplicacion es menor al periodo.", "Error");
            //    return;
            //}

            cnx = new SqlConnection();
            cnx.ConnectionString = cdn;
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            ih = new Infonavit.Core.InfonavitHelper();
            ih.Command = cmd;

            PeriodoFechaAplicacion();

            Infonavit.Core.Infonavit i = new Infonavit.Core.Infonavit();
            i.idtrabajador = _idEmpleado;
            i.idempresa = GLOBALES.IDEMPRESA;
            i.credito = txtNumeroCredito.Text;
            i.descuento = Descuento;
            i.activo = chkInactivo.Checked == true ? false : true;
            i.descripcion = txtDescripcion.Text;
            i.dias = (int)(periodoFin.Date - dtpFechaAplicacion.Value.Date).TotalDays + 1;
            i.fecha = dtpFechaAplicacion.Value.Date;
            i.inicio = periodoInicio.Date;
            i.fin = periodoFin.Date;
            i.registro = DateTime.Now;
            i.idusuario = GLOBALES.IDUSUARIO;
            i.estatus = int.Parse(cmbEstatusInfonavit.SelectedValue.ToString());

            if (rbtnPesos.Checked)
                if (Periodo == 7)
                    i.valordescuento = (decimal.Parse(txtValor.Text) / decimal.Parse((30.4).ToString())) * Periodo;
                else
                    i.valordescuento = decimal.Parse(txtValor.Text) / 2;
            if (rbtnVsmdf.Checked)
                i.valordescuento = decimal.Parse(txtValor.Text);
            if (rbtnPorcentaje.Checked)
                i.valordescuento = decimal.Parse(txtValor.Text);

            Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper();
            ch.Command = cmd;

            Conceptos.Core.ConceptoTrabajador ctInfonavit = new Conceptos.Core.ConceptoTrabajador();
            ctInfonavit.idempleado = _idEmpleado;

            Conceptos.Core.ConceptoTrabajador ctSeguroInfonavit = new Conceptos.Core.ConceptoTrabajador();
            ctSeguroInfonavit.idempleado = _idEmpleado;

            try
            {
                cnx.Open();
                ctInfonavit.idconcepto = (int)ch.obtenerIdConcepto(9, GLOBALES.IDEMPRESA, Periodo);
                ctSeguroInfonavit.idconcepto = (int)ch.obtenerIdConcepto(21, GLOBALES.IDEMPRESA, Periodo);
                cnx.Close();
            }
            catch
            {
                MessageBox.Show("Error: Al obtener el ID del Concepto Infonavit.", "Error");
                cnx.Dispose();
                return;
            }

            switch (_tipoOperacion)
            {
                case 0:
                    try
                    {
                        int existeCredito = 0;
                        cnx.Open();
                        existeCredito = int.Parse(ih.existeInfonavit(_idEmpleado, txtNumeroCredito.Text.Trim()).ToString());
                        if (existeCredito != 0)
                        {
                            MessageBox.Show("El número de credito que desea ingresar ya existe.\r\n" +
                                            "Si es una modificación del crédito use la opción \"Modificación\"");
                            this.Dispose();
                        }
                        else
                        {
                            ih.insertaInfonavit(i);
                            ch.insertaConceptoTrabajador(ctInfonavit);
                            ch.insertaConceptoTrabajador(ctSeguroInfonavit);
                        }
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al ingresar los datos. \r\n \r\n Error: " + error.Message);
                        this.Dispose();
                    }
                    break;
                case 2:
                    try
                    {
                        cnx.Open();
                        if (_modificar == 0)
                        {
                            i.idinfonavit = IdInfonavit;
                            ih.actualizaInfonavit(i);
                        }
                        else if (_modificar == 1)
                        {
                            ih.insertaInfonavit(i);
                            ih.actualizaEstatusInfonavit(IdInfonavit, DateTime.Now, GLOBALES.IDUSUARIO);
                        }
                        cnx.Close();
                        cnx.Dispose();
                    }
                    catch (Exception error)
                    {
                        MessageBox.Show("Error al actualizar los datos. \r\n \r\n Error: " + error.Message);
                        this.Dispose();
                    }
                    break;
            }

            if (OnNuevoInfonavit != null)
                OnNuevoInfonavit(_tipoOperacion);
            this.Dispose();
        }
Beispiel #3
0
        private void frmInfonavit_Load(object sender, EventArgs e)
        {
            cargaCombo();
            if (_tipoOperacion == GLOBALES.CONSULTAR || _tipoOperacion == GLOBALES.MODIFICAR)
            {
                cnx = new SqlConnection();
                cnx.ConnectionString = cdn;
                cmd = new SqlCommand();
                cmd.Connection = cnx;
                ih = new Infonavit.Core.InfonavitHelper();
                ih.Command = cmd;

                eh = new Empleados.Core.EmpleadosHelper();
                eh.Command = cmd;

                Departamento.Core.DeptoHelper dh = new Departamento.Core.DeptoHelper();
                dh.Command = cmd;

                List<Infonavit.Core.Infonavit> lstInfonavit;
                List<Departamento.Core.Depto> lstDepartamento = new List<Departamento.Core.Depto>();
                List<Empleados.Core.Empleados> lstEmpleado = new List<Empleados.Core.Empleados>();

                Empleados.Core.Empleados empleado = new Empleados.Core.Empleados();
                empleado.idtrabajador = _idEmpleado;

                Departamento.Core.Depto dpto = new Departamento.Core.Depto();
                dpto.idempresa = GLOBALES.IDEMPRESA;

                Infonavit.Core.Infonavit i = new Infonavit.Core.Infonavit();
                i.idtrabajador = _idEmpleado;
                i.activo = _estatusInfonavit;

                try
                {
                    cnx.Open();
                    Periodo = (int)eh.obtenerDiasPeriodo(_idEmpleado);
                    lstEmpleado = eh.obtenerEmpleado(empleado);
                    lstDepartamento = dh.obtenerDepartamentos(dpto);
                    cnx.Close();
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error al obtener los dias del periodo. \r\n \r\n La ventana se cerrará. \r\n \r\n" + error.Message, "Error");
                    cnx.Dispose();
                    this.Dispose();
                }

                var dato = from emp in lstEmpleado
                           join d in lstDepartamento on emp.iddepartamento equals d.id
                           select new
                           {
                               emp.noempleado,
                               emp.nombrecompleto,
                               d.descripcion
                           };
                foreach (var inf in dato)
                {
                    mtxtNoEmpleado.Text = inf.noempleado;
                    txtDepartamento.Text = inf.descripcion;
                }

                try
                {
                    cnx.Open();
                    lstInfonavit = ih.obtenerInfonavit(i);
                    Periodo = (int)eh.obtenerDiasPeriodo(_idEmpleado);
                    cnx.Close();
                    cnx.Dispose();

                    for (int j = 0; j < lstInfonavit.Count; j++)
                    {
                        IdInfonavit = int.Parse(lstInfonavit[j].idinfonavit.ToString());
                        txtNumeroCredito.Text = lstInfonavit[j].credito;
                        txtValor.Text = lstInfonavit[j].valordescuento.ToString();
                        if (lstInfonavit[j].activo)
                            chkInactivo.Checked = false;
                        else
                            chkInactivo.Checked = true;
                        txtDescripcion.Text = lstInfonavit[j].descripcion;
                        dtpFechaAplicacion.Value = lstInfonavit[j].fecha;
                        cmbEstatusInfonavit.SelectedValue = lstInfonavit[j].estatus;
                        //dtpInicioPeriodo.Value = lstInfonavit[j].inicio.AddDays(1);
                        //dtpFinPeriodo.Value = lstInfonavit[j].fin;

                        switch (lstInfonavit[j].descuento)
                        {
                                //Porcentaje
                            case 1:
                                rbtnPorcentaje.Checked = true;
                                break;
                            case 2:
                                rbtnPesos.Checked = true;
                                if (Periodo == 7)
                                    txtValor.Text = ((lstInfonavit[j].valordescuento * decimal.Parse((30.4).ToString())) / Periodo).ToString();
                                else
                                    txtValor.Text = (lstInfonavit[j].valordescuento * 2).ToString();
                                break;
                            case 3:
                                rbtnVsmdf.Checked = true;
                                txtValor.Text = lstInfonavit[j].valordescuento.ToString();
                                break;
                        }
                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show("Error: \r\n \r\n " + error.Message, "Error");
                }

                if (_tipoOperacion == GLOBALES.CONSULTAR)
                {
                    toolVentana.Text = "Consulta del Crédito";
                    GLOBALES.INHABILITAR(this, typeof(TextBox));
                    GLOBALES.INHABILITAR(this, typeof(RadioButton));
                    GLOBALES.INHABILITAR(this, typeof(CheckBox));
                    GLOBALES.INHABILITAR(this, typeof(DateTimePicker));
                    GLOBALES.INHABILITAR(this, typeof(MaskedTextBox));
                    GLOBALES.INHABILITAR(this, typeof(ComboBox));
                    toolGuardar.Enabled = false;
                    toolBuscar.Enabled = false;
                }
                else
                {
                    toolVentana.Text = "Edición del Crédito";
                    lblEmpleado.Text = _nombreEmpleado;
                    toolBuscar.Enabled = false;
                    //obtenerPeriodoActual();
                }

                if (_modificar == 1)
                {
                    //dtpInicioPeriodo.Enabled = true;
                }
            }
        }
        private void ListaEmpleados()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;
            Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
            Infonavit.Core.InfonavitHelper ih = new Infonavit.Core.InfonavitHelper();
            eh.Command = cmd;
            ih.Command = cmd;

            Empleados.Core.Empleados empleado = new Empleados.Core.Empleados();
            empleado.idempresa = GLOBALES.IDEMPRESA;
            empleado.estatus = GLOBALES.ACTIVO;

            Infonavit.Core.Infonavit inf = new Infonavit.Core.Infonavit();
            inf.idempresa = GLOBALES.IDEMPRESA;

            Catalogos.Core.CatalogosHelper ch = new Catalogos.Core.CatalogosHelper();
            ch.Command = cmd;
            Catalogos.Core.Catalogo cat = new Catalogos.Core.Catalogo();
            cat.grupodescripcion = "ESTATUS INFONAVIT";

            try
            {
                cnx.Open();
                lstEmpleados = eh.obtenerEmpleados(empleado);
                lstInfonavit = ih.obtenerInfonavits(inf);
                lstCatalogo = ch.obtenerGrupo(cat);
                cnx.Close();
                cnx.Dispose();

                var em = from e in lstEmpleados
                         join i in lstInfonavit on e.idtrabajador equals i.idtrabajador
                         join c in lstCatalogo on i.estatus equals c.id
                         select new
                         {
                             IdTrabajador = e.idtrabajador,
                             NoEmpleado = e.noempleado,
                             Nombre = e.nombrecompleto,
                             Credito = i.credito,
                             Descuento = i.descuento == GLOBALES.dPORCENTAJE ? "PORCENTAJE" :
                             i.descuento == GLOBALES.dVSMDF ? "VSMDF" : "PESOS",
                             Valor = i.valordescuento,
                             Activo = i.activo ? "ACTIVO" : "NO ACTIVO",
                             Estatus = c.descripcion
                         };

                dgvInfonavit.DataSource = em.ToList();

                for (int i = 0; i < dgvInfonavit.Columns.Count; i++)
                {
                    dgvInfonavit.AutoResizeColumn(i);
                }
                dgvInfonavit.Columns["IdTrabajador"].Visible = false;
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: \r\n \r\n " + error.Message, "Error");
            }
        }
        private void muestraInfonavit()
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            Infonavit.Core.InfonavitHelper ih = new Infonavit.Core.InfonavitHelper();
            ih.Command = cmd;

            Infonavit.Core.Infonavit inf = new Infonavit.Core.Infonavit();
            inf.idtrabajador = idTrabajador;

            List<Infonavit.Core.Infonavit> lstInfonavit = new List<Infonavit.Core.Infonavit>();

            try
            {
                cnx.Open();
                lstInfonavit = ih.obtenerInfonavitTrabajador(inf);
                cnx.Close();
                cnx.Dispose();
            }
            catch (Exception error)
            {
                MessageBox.Show("Error: Al obtener Infonavit. (Función Muestra Infonavit.)\r\n \r\n" + error.Message, "Error");
            }

            lstvInfonavit.Clear();
            lstvInfonavit.View = View.Details;
            lstvInfonavit.GridLines = true;
            lstvInfonavit.Columns.Add("Crédito Infonavit", 100, HorizontalAlignment.Right);

            for (int i = 0; i < lstInfonavit.Count; i++)
            {
                lstvInfonavit.Items.Add(lstInfonavit[i].credito);
            }
        }
        private void lstvInfonavit_Click(object sender, EventArgs e)
        {
            cnx = new SqlConnection(cdn);
            cmd = new SqlCommand();
            cmd.Connection = cnx;

            Infonavit.Core.InfonavitHelper ih = new Infonavit.Core.InfonavitHelper();
            ih.Command = cmd;

            List<Infonavit.Core.Infonavit> lstInfonavit = new List<Infonavit.Core.Infonavit>();

            Infonavit.Core.Infonavit infonavit = new Infonavit.Core.Infonavit();
            infonavit.idtrabajador = idTrabajador;

            if (lstvInfonavit.SelectedItems.Count > 0)
            {
                ListViewItem listItem = lstvInfonavit.SelectedItems[0];
                infonavit.credito = listItem.Text;

                try
                {
                    cnx.Open();
                    lstInfonavit = ih.obtenerInfonavitCredito(infonavit);
                    cnx.Close();
                    cnx.Dispose();
                }
                catch
                {
                    MessageBox.Show("Error al obtener la informacion de Infonavit.", "Error");
                    cnx.Dispose();
                }
            }

            for (int i = 0; i < lstInfonavit.Count; i++)
            {
                chkActivo.Checked = lstInfonavit[i].activo;
                txtNumeroCredito.Text = lstInfonavit[i].credito;
                txtValor.Text = lstInfonavit[i].valordescuento.ToString();
                dtpFechaAplicacion.Value = lstInfonavit[i].fecha;
                if (lstInfonavit[i].descuento == GLOBALES.dPORCENTAJE)
                    rbtnPorcentaje.Checked = true;
                if (lstInfonavit[i].descuento == GLOBALES.dPESOS)
                    rbtnPesos.Checked = true;
                if (lstInfonavit[i].descuento == GLOBALES.dVSMDF)
                    rbtnVsmdf.Checked = true;
            }
        }
Beispiel #7
0
        public static List<CalculoNomina.Core.tmpPagoNomina> DEDUCCIONES(List<CalculoNomina.Core.Nomina> lstConceptosDeducciones,
            List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones, DateTime inicio, DateTime fin, int tipoNomina)
        {
            #region VARIABLES GLOBALES
            string cdn = ConfigurationManager.ConnectionStrings["cdnNomina"].ConnectionString;
            SqlConnection cnx = new SqlConnection(cdn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            #endregion

            #region VARIABLES
            bool activoInfonavit = false;
            #endregion

            #region LISTA PARA DATOS DEL TRABAJADOR
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresNomina;
            List<CalculoNomina.Core.tmpPagoNomina> lstValoresDefinitivos;
            #endregion

            #region CALCULO
            lstValoresNomina = new List<CalculoNomina.Core.tmpPagoNomina>();
            decimal isrAntes = 0, subsidioAntes = 0;

            for (int i = 0; i < lstConceptosDeducciones.Count; i++)
            {
                decimal percepciones = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.tipoconcepto == "P").Sum(e => e.cantidad);

                switch (lstConceptosDeducciones[i].noconcepto)
                {

                    #region CONCEPTO IMSS
                    case 99:
                        int vsmdf, idsalario;
                        decimal porcentajeImss, excedenteVsmdf, sm, sdiTrabajador;

                        Configuracion.Core.ConfiguracionHelper ch = new Configuracion.Core.ConfiguracionHelper();
                        ch.Command = cmd;

                        Imss.Core.ImssHelper ih = new Imss.Core.ImssHelper();
                        ih.Command = cmd;

                        Imss.Core.Imss imss = new Imss.Core.Imss();
                        imss.secalcula = true;

                        Empleados.Core.EmpleadosHelper empleadosHelper = new Empleados.Core.EmpleadosHelper();
                        empleadosHelper.Command = cmd;
                        Empleados.Core.Empleados empleadoImss = new Empleados.Core.Empleados();
                        empleadoImss.idtrabajador = lstConceptosDeducciones[i].idtrabajador;

                        Salario.Core.SalariosHelper sh = new Salario.Core.SalariosHelper();
                        sh.Command = cmd;
                        Salario.Core.Salarios salario = new Salario.Core.Salarios();

                        cnx.Open();
                        vsmdf = int.Parse(ch.obtenerValorConfiguracion("VSMDF").ToString());
                        porcentajeImss = ih.CuotaObreroPatronal(imss);
                        excedenteVsmdf = ih.ExcedenteVSM(5);
                        idsalario = int.Parse(empleadosHelper.obtenerIdSalarioMinimo(lstConceptosDeducciones[i].idtrabajador).ToString());
                        salario.idsalario = idsalario;
                        sm = decimal.Parse(sh.obtenerSalarioValor(salario).ToString());
                        sdiTrabajador = decimal.Parse(empleadosHelper.obtenerSalarioDiarioIntegrado(empleadoImss).ToString());
                        cnx.Close();

                        string formulaDiasAPagar = "[DiasLaborados]-[Faltas]-[DiasIncapacidad]";
                        CalculoFormula cfImss = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio, fin, formulaDiasAPagar);
                        int diasAPagar = int.Parse(cfImss.calcularFormula().ToString());

                        decimal tresVSMG = vsmdf * sm;
                        decimal excedenteImss = 0;
                        decimal valorImss = (sdiTrabajador * (porcentajeImss / 100)) * diasAPagar;
                        decimal totalImss = 0;
                        if (sdiTrabajador > tresVSMG)
                        {
                            excedenteImss = (sdiTrabajador - tresVSMG) * (excedenteVsmdf / 100) * diasAPagar;
                            totalImss = valorImss + excedenteImss;
                        }
                        else
                            totalImss = valorImss;

                        CalculoNomina.Core.tmpPagoNomina imssNomina = new CalculoNomina.Core.tmpPagoNomina();
                        imssNomina.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        imssNomina.idempresa = GLOBALES.IDEMPRESA;
                        imssNomina.idconcepto = lstConceptosDeducciones[i].id;
                        imssNomina.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        imssNomina.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        imssNomina.fechainicio = inicio.Date;
                        imssNomina.fechafin = fin.Date;
                        imssNomina.exento = 0;
                        imssNomina.gravado = 0;
                        imssNomina.cantidad = totalImss;
                        imssNomina.diaslaborados = 0;
                        imssNomina.guardada = false;
                        imssNomina.tiponomina = tipoNomina;
                        imssNomina.modificado = false;

                        lstValoresNomina.Add(imssNomina);
                        break;
                    #endregion

                    #region CONCEPTO ISR ANTES DE SUBSIDIO
                    case 8:

                        decimal excedente = 0, ImpMarginal = 0, isr = 0;
                        List<TablaIsr.Core.TablaIsr> lstIsr = new List<TablaIsr.Core.TablaIsr>();
                        TablaIsr.Core.IsrHelper isrh = new TablaIsr.Core.IsrHelper();
                        isrh.Command = cmd;

                        CalculoNomina.Core.tmpPagoNomina isrAntesSubsidio = new CalculoNomina.Core.tmpPagoNomina();
                        isrAntesSubsidio.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        isrAntesSubsidio.idempresa = GLOBALES.IDEMPRESA;
                        isrAntesSubsidio.idconcepto = lstConceptosDeducciones[i].id;
                        isrAntesSubsidio.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        isrAntesSubsidio.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        isrAntesSubsidio.fechainicio = inicio.Date;
                        isrAntesSubsidio.fechafin = fin.Date;
                        isrAntesSubsidio.exento = 0;
                        isrAntesSubsidio.gravado = 0;

                        if (percepciones != 0)
                        {
                            decimal baseGravableIsr = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

                            Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
                            eh.Command = cmd;

                            cnx.Open();
                            int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

                            Periodos.Core.PeriodosHelper ph = new Periodos.Core.PeriodosHelper();
                            ph.Command = cmd;

                            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            p.idperiodo = idperiodo;

                            cnx.Open();
                            int dias = (int)ph.DiasDePago(p);
                            cnx.Close();

                            TablaIsr.Core.TablaIsr _isr = new TablaIsr.Core.TablaIsr();
                            _isr.inferior = (baseGravableIsr / dias) * decimal.Parse((30.4).ToString());

                            cnx.Open();
                            lstIsr = isrh.isrCorrespondiente(_isr);
                            cnx.Close();

                            excedente = ((baseGravableIsr / dias) * decimal.Parse((30.4).ToString())) - lstIsr[0].inferior;
                            ImpMarginal = excedente * (lstIsr[0].porcentaje / 100);
                            isr = ImpMarginal + lstIsr[0].cuota;

                            isrAntesSubsidio.cantidad = (isr / decimal.Parse((30.4).ToString())) * dias;
                            isrAntes = (isr / decimal.Parse((30.4).ToString())) * dias;
                        }
                        else
                        {
                            isrAntes = 0;
                            isrAntesSubsidio.cantidad = 0;
                            //double vacaciones = lstPercepciones.Where(e => e.idtrabajador == lstPercepciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacaciones != 0)
                            //{
                            //    double baseGravableIsr = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

                            //    Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
                            //    eh.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper ph = new Periodos.Core.PeriodosHelper();
                            //    ph.Command = cmd;

                            //    Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            //    p.idperiodo = idperiodo;

                            //    cnx.Open();
                            //    int dias = (int)ph.DiasDePago(p);
                            //    cnx.Close();

                            //    TablaIsr.Core.TablaIsr _isr = new TablaIsr.Core.TablaIsr();
                            //    _isr.inferior = (baseGravableIsr / dias) * 30.4;

                            //    cnx.Open();
                            //    lstIsr = isrh.isrCorrespondiente(_isr);
                            //    cnx.Close();

                            //    excedente = ((baseGravableIsr / dias) * 30.4) - lstIsr[0].inferior;
                            //    ImpMarginal = excedente * (lstIsr[0].porcentaje / 100);
                            //    isr = ImpMarginal + lstIsr[0].cuota;

                            //    isrAntesSubsidio.cantidad = isr;
                            //    isrAntes = isr;
                            //}
                            //else
                            //{
                            //    isrAntes = 0;
                            //    isrAntesSubsidio.cantidad = 0;
                            //}
                        }

                        isrAntesSubsidio.guardada = false;
                        isrAntesSubsidio.tiponomina = tipoNomina;
                        isrAntesSubsidio.modificado = false;
                        lstValoresNomina.Add(isrAntesSubsidio);
                        break;
                    #endregion

                    #region SUBSIDIO
                    case 15:
                        //double sueldoSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        CalculoNomina.Core.tmpPagoNomina subsidioNomina = new CalculoNomina.Core.tmpPagoNomina();
                        subsidioNomina.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        subsidioNomina.idempresa = GLOBALES.IDEMPRESA;
                        subsidioNomina.idconcepto = lstConceptosDeducciones[i].id;
                        subsidioNomina.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        subsidioNomina.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        subsidioNomina.fechainicio = inicio.Date;
                        subsidioNomina.fechafin = fin.Date;
                        subsidioNomina.exento = 0;
                        subsidioNomina.gravado = 0;

                        if (percepciones != 0)
                        {
                            decimal baseGravableSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

                            Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
                            eh.Command = cmd;

                            cnx.Open();
                            int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

                            Periodos.Core.PeriodosHelper ph = new Periodos.Core.PeriodosHelper();
                            ph.Command = cmd;

                            Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            p.idperiodo = idperiodo;

                            cnx.Open();
                            int dias = (int)ph.DiasDePago(p);
                            cnx.Close();

                            TablaSubsidio.Core.SubsidioHelper ts = new TablaSubsidio.Core.SubsidioHelper();
                            ts.Command = cmd;
                            TablaSubsidio.Core.TablaSubsidio subsidio = new TablaSubsidio.Core.TablaSubsidio();
                            subsidio.desde = (baseGravableSubsidio / dias) * decimal.Parse((30.4).ToString());

                            decimal cantidad = 0;
                            cnx.Open();
                            cantidad = decimal.Parse(ts.obtenerCantidadSubsidio(subsidio).ToString());
                            cnx.Close();

                            subsidioNomina.cantidad = (cantidad / decimal.Parse((30.4).ToString())) * dias;
                            subsidioAntes = (cantidad / decimal.Parse((30.4).ToString())) * dias;
                        }
                        else
                        {
                            subsidioNomina.cantidad = 0;
                            subsidioAntes = 0;
                            //double vacacionesSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionesSubsidio != 0)
                            //{
                            //    double baseGravableSubsidio = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador).Sum(e => e.gravado);

                            //    Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper();
                            //    eh.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper ph = new Periodos.Core.PeriodosHelper();
                            //    ph.Command = cmd;

                            //    Periodos.Core.Periodos p = new Periodos.Core.Periodos();
                            //    p.idperiodo = idperiodo;

                            //    cnx.Open();
                            //    int dias = (int)ph.DiasDePago(p);
                            //    cnx.Close();

                            //    TablaSubsidio.Core.SubsidioHelper ts = new TablaSubsidio.Core.SubsidioHelper();
                            //    ts.Command = cmd;
                            //    TablaSubsidio.Core.TablaSubsidio subsidio = new TablaSubsidio.Core.TablaSubsidio();
                            //    subsidio.desde = (baseGravableSubsidio / dias) * 30.4;

                            //    double cantidad = 0;
                            //    cnx.Open();
                            //    cantidad = double.Parse(ts.obtenerCantidadSubsidio(subsidio).ToString());
                            //    cnx.Close();

                            //    subsidioNomina.cantidad = cantidad;
                            //    subsidioAntes = cantidad;
                            //}
                            //else
                            //{
                            //    subsidioNomina.cantidad = 0;
                            //    subsidioAntes = 0;
                            //}
                        }

                        subsidioNomina.guardada = false;
                        subsidioNomina.tiponomina = tipoNomina;
                        subsidioNomina.modificado = false;
                        lstValoresNomina.Add(subsidioNomina);
                        break;
                    #endregion

                    #region SUBSIDIO DEFINITIVO
                    case 16:
                        CalculoNomina.Core.tmpPagoNomina subsidioDefinitivo = new CalculoNomina.Core.tmpPagoNomina();
                        subsidioDefinitivo.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        subsidioDefinitivo.idempresa = GLOBALES.IDEMPRESA;
                        subsidioDefinitivo.idconcepto = lstConceptosDeducciones[i].id;
                        subsidioDefinitivo.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        subsidioDefinitivo.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        subsidioDefinitivo.fechainicio = inicio.Date;
                        subsidioDefinitivo.fechafin = fin.Date;
                        subsidioDefinitivo.exento = 0;
                        subsidioDefinitivo.gravado = 0;

                        //double sueldoSubsidioDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        if (percepciones != 0)
                        {
                            Empleados.Core.EmpleadosHelper esh = new Empleados.Core.EmpleadosHelper();
                            esh.Command = cmd;

                            cnx.Open();
                            int idperiodoSubsidio = (int)esh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

                            Periodos.Core.PeriodosHelper psh = new Periodos.Core.PeriodosHelper();
                            psh.Command = cmd;

                            Periodos.Core.Periodos ps = new Periodos.Core.Periodos();
                            ps.idperiodo = idperiodoSubsidio;

                            cnx.Open();
                            int diasSubsidio = (int)psh.DiasDePago(ps);
                            cnx.Close();

                            if (subsidioAntes > isrAntes)
                                subsidioDefinitivo.cantidad = subsidioAntes - isrAntes;
                            else
                                subsidioDefinitivo.cantidad = 0;
                        }
                        else
                        {
                            subsidioDefinitivo.cantidad = 0;
                            //double vacacionSubsidioDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionSubsidioDefinitivo != 0)
                            //{
                            //    Empleados.Core.EmpleadosHelper esh = new Empleados.Core.EmpleadosHelper();
                            //    esh.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodoSubsidio = (int)esh.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper psh = new Periodos.Core.PeriodosHelper();
                            //    psh.Command = cmd;

                            //    Periodos.Core.Periodos ps = new Periodos.Core.Periodos();
                            //    ps.idperiodo = idperiodoSubsidio;

                            //    cnx.Open();
                            //    int diasSubsidio = (int)psh.DiasDePago(ps);
                            //    cnx.Close();

                            //    if (subsidioAntes > isrAntes)
                            //        subsidioDefinitivo.cantidad = subsidioAntes - isrAntes;
                            //    else
                            //        subsidioDefinitivo.cantidad = 0;
                            //}
                            //else
                            //    subsidioDefinitivo.cantidad = 0;
                        }

                        subsidioDefinitivo.guardada = false;
                        subsidioDefinitivo.tiponomina = tipoNomina;
                        subsidioDefinitivo.modificado = false;
                        lstValoresNomina.Add(subsidioDefinitivo);
                        break;
                    #endregion

                    #region ISR DEFINITIVO
                    case 17:
                        CalculoNomina.Core.tmpPagoNomina isrDefinitivo = new CalculoNomina.Core.tmpPagoNomina();
                        isrDefinitivo.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        isrDefinitivo.idempresa = GLOBALES.IDEMPRESA;
                        isrDefinitivo.idconcepto = lstConceptosDeducciones[i].id;
                        isrDefinitivo.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        isrDefinitivo.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        isrDefinitivo.fechainicio = inicio.Date;
                        isrDefinitivo.fechafin = fin.Date;
                        isrDefinitivo.exento = 0;
                        isrDefinitivo.gravado = 0;

                        //double sueldoIsrDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        if (percepciones != 0)
                        {
                            Empleados.Core.EmpleadosHelper eih = new Empleados.Core.EmpleadosHelper();
                            eih.Command = cmd;

                            cnx.Open();
                            int idperiodoIsr = (int)eih.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            cnx.Close();

                            Periodos.Core.PeriodosHelper pih = new Periodos.Core.PeriodosHelper();
                            pih.Command = cmd;

                            Periodos.Core.Periodos pi = new Periodos.Core.Periodos();
                            pi.idperiodo = idperiodoIsr;

                            cnx.Open();
                            int diasIsr = (int)pih.DiasDePago(pi);
                            cnx.Close();

                            if (subsidioAntes > isrAntes)
                            {
                                isrDefinitivo.cantidad = 0;
                            }
                            else
                            {
                                isrDefinitivo.cantidad = isrAntes - subsidioAntes;
                            }
                        }
                        else
                        {
                            isrDefinitivo.cantidad = 0;
                            //double vacacionIsrDefinitivo = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 7).Sum(e => e.cantidad);
                            //if (vacacionIsrDefinitivo != 0)
                            //{
                            //    Empleados.Core.EmpleadosHelper eih = new Empleados.Core.EmpleadosHelper();
                            //    eih.Command = cmd;

                            //    cnx.Open();
                            //    int idperiodoIsr = (int)eih.obtenerIdPeriodo(lstConceptosDeducciones[i].idtrabajador);
                            //    cnx.Close();

                            //    Periodos.Core.PeriodosHelper pih = new Periodos.Core.PeriodosHelper();
                            //    pih.Command = cmd;

                            //    Periodos.Core.Periodos pi = new Periodos.Core.Periodos();
                            //    pi.idperiodo = idperiodoIsr;

                            //    cnx.Open();
                            //    int diasIsr = (int)pih.DiasDePago(pi);
                            //    cnx.Close();

                            //    double isptIsr = 0;
                            //    if (subsidioAntes > isrAntes)
                            //    {
                            //        isrDefinitivo.cantidad = 0;
                            //    }
                            //    else
                            //    {
                            //        isptIsr = ((isrAntes - subsidioAntes) / 30.4) * diasIsr;

                            //        if (isptIsr <= 0)
                            //        {
                            //            isrDefinitivo.cantidad = 0;
                            //        }
                            //        else
                            //        {
                            //            isrDefinitivo.cantidad = isptIsr;
                            //        }
                            //    }
                            //}
                            //else
                            //    isrDefinitivo.cantidad = 0;
                        }

                        isrDefinitivo.guardada = false;
                        isrDefinitivo.tiponomina = tipoNomina;
                        isrDefinitivo.modificado = false;
                        lstValoresNomina.Add(isrDefinitivo);
                        break;
                    #endregion

                    #region OTRAS DEDUCCIONES
                    default:
                        //double sueldoDeducciones = lstPercepciones.Where(e => e.idtrabajador == lstConceptosDeducciones[i].idtrabajador && e.noconcepto == 1).Sum(e => e.cantidad);

                        CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                        vn.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                        vn.idempresa = GLOBALES.IDEMPRESA;
                        vn.idconcepto = lstConceptosDeducciones[i].id;
                        vn.noconcepto = lstConceptosDeducciones[i].noconcepto;
                        vn.tipoconcepto = lstConceptosDeducciones[i].tipoconcepto;
                        vn.fechainicio = inicio.Date;
                        vn.fechafin = fin.Date;
                        vn.guardada = false;
                        vn.tiponomina = tipoNomina;
                        vn.modificado = false;

                        #region SUELDO DIFERENTE DE CERO
                        if (percepciones != 0)
                        {
                            Infonavit.Core.InfonavitHelper infh = new Infonavit.Core.InfonavitHelper();
                            infh.Command = cmd;

                            Infonavit.Core.Infonavit inf = new Infonavit.Core.Infonavit();
                            inf.idtrabajador = lstConceptosDeducciones[i].idtrabajador;
                            inf.idempresa = GLOBALES.IDEMPRESA;

                            if (lstConceptosDeducciones[i].noconcepto == 9 || lstConceptosDeducciones[i].noconcepto == 21)
                            {
                                cnx.Open();
                                activoInfonavit = (bool)infh.activoInfonavit(inf);
                                cnx.Close();

                                if (activoInfonavit)
                                {
                                    CalculoFormula cf = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosDeducciones[i].formula);
                                    vn.cantidad = decimal.Parse(cf.calcularFormula().ToString());
                                    vn.exento = 0;
                                    vn.gravado = 0;
                                }
                                else
                                {

                                    vn.cantidad = 0;
                                    vn.exento = 0;
                                    vn.gravado = 0;
                                }
                            }
                            else
                            {
                                CalculoFormula cf = new CalculoFormula(lstConceptosDeducciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosDeducciones[i].formula);
                                vn.cantidad = decimal.Parse(cf.calcularFormula().ToString());
                                vn.exento = 0;
                                vn.gravado = 0;
                            }
                                lstValoresNomina.Add(vn);
                        }
                        else
                        {
                            vn.cantidad = 0;
                            vn.exento = 0;
                            vn.gravado = 0;
                            lstValoresNomina.Add(vn);
                        }
                        break;
                        #endregion
                    #endregion
                }
            }
            #endregion

            #region EXISTENCIA DEL CONCEPTO EN TABLA
            int existe = 0;
            CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper();
            nh.Command = cmd;
            lstValoresDefinitivos = new List<CalculoNomina.Core.tmpPagoNomina>();
            for (int i = 0; i < lstValoresNomina.Count; i++)
            {
                CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina();
                vn.idtrabajador = lstValoresNomina[i].idtrabajador;
                vn.idempresa = GLOBALES.IDEMPRESA;
                vn.idconcepto = lstValoresNomina[i].idconcepto;
                vn.noconcepto = lstValoresNomina[i].noconcepto;
                vn.tipoconcepto = lstValoresNomina[i].tipoconcepto;
                vn.fechainicio = lstValoresNomina[i].fechainicio;
                vn.fechafin = lstValoresNomina[i].fechafin;
                vn.guardada = lstValoresNomina[i].guardada;
                vn.tiponomina = lstValoresNomina[i].tiponomina;
                vn.modificado = lstValoresNomina[i].modificado;
                vn.exento = lstValoresNomina[i].exento;
                vn.gravado = lstValoresNomina[i].gravado;
                vn.cantidad = lstValoresNomina[i].cantidad;

                cnx.Open();
                existe = (int)nh.existeConcepto(vn);
                cnx.Close();

                if (existe == 0)
                {
                    lstValoresDefinitivos.Add(vn);
                }
                else
                {
                    cnx.Open();
                    nh.actualizaConcepto(vn);
                    cnx.Close();
                }
            }
            #endregion

            return lstValoresDefinitivos;
        }