public static List<CalculoNomina.Core.tmpPagoNomina> PERCEPCIONES(List<CalculoNomina.Core.Nomina> lstConceptosPercepciones, 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 LISTA PARA DATOS DEL TRABAJADOR List<CalculoNomina.Core.tmpPagoNomina> lstValoresNomina; List<CalculoNomina.Core.tmpPagoNomina> lstValoresDefinitivos; #endregion #region CALCULO lstValoresNomina = new List<CalculoNomina.Core.tmpPagoNomina>(); for (int i = 0; i < lstConceptosPercepciones.Count; i++) { CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = lstConceptosPercepciones[i].idtrabajador; vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstConceptosPercepciones[i].id; vn.noconcepto = lstConceptosPercepciones[i].noconcepto; vn.tipoconcepto = lstConceptosPercepciones[i].tipoconcepto; vn.fechainicio = inicio.Date; vn.fechafin = fin.Date; vn.guardada = false; vn.tiponomina = tipoNomina; vn.modificado = false; CalculoFormula formula = new CalculoFormula(lstConceptosPercepciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosPercepciones[i].formula); vn.cantidad = decimal.Parse(formula.calcularFormula().ToString()); CalculoFormula formulaExcento = new CalculoFormula(lstConceptosPercepciones[i].idtrabajador, inicio.Date, fin.Date, lstConceptosPercepciones[i].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper(); eh.Command = cmd; cnx.Open(); int idperiodo = (int)eh.obtenerIdPeriodo(lstConceptosPercepciones[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(); Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos c = new Conceptos.Core.Conceptos(); c.idempresa = GLOBALES.IDEMPRESA; c.noconcepto = lstConceptosPercepciones[i].noconcepto; c.tipoconcepto = lstConceptosPercepciones[i].tipoconcepto; c.periodo = dias; cnx.Open(); bool grava = (bool)ch.gravaConcepto(c); bool exenta = (bool)ch.exentaConcepto(c); cnx.Close(); if (grava && !exenta) vn.gravado = vn.cantidad; if (grava && exenta) { if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (!grava && exenta) { vn.gravado = 0; vn.exento = vn.cantidad; } #region SWITCH SUELDO CERO switch (lstConceptosPercepciones[i].noconcepto) { case 1: if (vn.cantidad == 0) { vn.gravado = 0; lstValoresNomina.Add(vn); Vacaciones.Core.VacacionesHelper vh = new Vacaciones.Core.VacacionesHelper(); vh.Command = cmd; Vacaciones.Core.VacacionesPrima vp = new Vacaciones.Core.VacacionesPrima(); vp.idtrabajador = lstConceptosPercepciones[i].idtrabajador; vp.idempresa = GLOBALES.IDEMPRESA; vp.periodofin = fin.Date; vp.periodoinicio = inicio.Date; vp.vacacionesprima = "V"; cnx.Open(); int diasVacaciones = (int)vh.pagoVacacionesPrima(vp); cnx.Close(); if (diasVacaciones == 0) { i++; int contadorDatosNomina = i; for (int j = i; j < lstConceptosPercepciones.Count; j++) { contadorDatosNomina = j; if (lstConceptosPercepciones[j].idtrabajador == vn.idtrabajador) { CalculoNomina.Core.tmpPagoNomina vnCero = new CalculoNomina.Core.tmpPagoNomina(); vnCero.idtrabajador = lstConceptosPercepciones[j].idtrabajador; vnCero.idempresa = GLOBALES.IDEMPRESA; vnCero.idconcepto = lstConceptosPercepciones[j].id; vnCero.noconcepto = lstConceptosPercepciones[j].noconcepto; vnCero.tipoconcepto = lstConceptosPercepciones[j].tipoconcepto; vnCero.fechainicio = inicio.Date; vnCero.fechafin = fin.Date; vnCero.guardada = false; vnCero.tiponomina = tipoNomina; vnCero.modificado = false; vnCero.cantidad = 0; vnCero.exento = 0; vnCero.gravado = 0; lstValoresNomina.Add(vnCero); } else { --contadorDatosNomina; break; } } i = contadorDatosNomina; } } else lstValoresNomina.Add(vn); break; default: lstValoresNomina.Add(vn); break; } #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; }