private void toolCalcular_Click(object sender, EventArgs e) { int existeConcepto = 0; int estatus = 0; int existeAltaReingreso = 0; //string noConceptosPercepciones = "", noConceptosDeducciones = ""; cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; List<CalculoNomina.Core.Nomina> lstConceptosPercepciones = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosDeducciones = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosPercepcionesModificados = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosDeduccionesModificados = new List<CalculoNomina.Core.Nomina>(); CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper(); eh.Command = cmd; Altas.Core.AltasHelper ah = new Altas.Core.AltasHelper(); ah.Command = cmd; Reingreso.Core.ReingresoHelper rh = new Reingreso.Core.ReingresoHelper(); rh.Command = cmd; if (_periodo == 7) { periodoInicioPosterior = _finPeriodo.AddDays(1); periodoFinPosterior = _finPeriodo.AddDays(7); } else { periodoInicioPosterior = _finPeriodo.AddDays(1); if (periodoInicioPosterior.Day <= 15) periodoFinPosterior = _finPeriodo.AddDays(15); else periodoFinPosterior = new DateTime(periodoInicioPosterior.Year, periodoInicioPosterior.Month, DateTime.DaysInMonth(periodoInicioPosterior.Year, periodoInicioPosterior.Month)); } try { cnx.Open(); estatus = int.Parse(eh.obtenerEstatus(idTrabajador).ToString()); cnx.Close(); if (estatus == 0) { cnx.Open(); nh.eliminaPreNomina(idTrabajador); cnx.Close(); } else { cnx.Open(); existeAltaReingreso = ah.existeAlta(GLOBALES.IDEMPRESA, idTrabajador, periodoInicioPosterior, periodoFinPosterior); cnx.Close(); if (existeAltaReingreso != 0) { cnx.Open(); nh.eliminaPreNomina(idTrabajador); cnx.Close(); MessageBox.Show("INFORMACION:\r\n\r\nEl trabajador a calcular fue dado de alta con fecha posterior al calculo actual.\r\nNo se calcula el trabajador.", "Información"); return; } cnx.Open(); existeAltaReingreso = rh.existeReingreso(GLOBALES.IDEMPRESA, idTrabajador, periodoInicioPosterior, periodoFinPosterior); cnx.Close(); if (existeAltaReingreso != 0) { cnx.Open(); nh.eliminaPreNomina(idTrabajador); cnx.Close(); MessageBox.Show("INFORMACION:\r\n\r\nEl trabajador a calcular fue dado de alta con fecha posterior al calculo actual.\r\nNo se calcula el trabajador.", "Información"); return; } } } catch (Exception error) { MessageBox.Show("Error al verificar el estatus del trabajador(ID): " + idTrabajador + "\r\n\r\n" + error.Message, "Error"); cnx.Close(); } #region CONCEPTOS Y FORMULAS DEL TRABAJADOR try { /************************************************************* * Se obtienen los conceptos con el campo modificado en 1 * de la tabla tmpPagoNomina con el SP stp_DatosNominaRecalculoTrabajador *************************************************************/ //cnx.Open(); //lstConceptosPercepcionesModificados = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", idTrabajador, // _tipoNormalEspecial, _inicioPeriodo.Date, _finPeriodo.Date); //lstConceptosDeduccionesModificados = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", idTrabajador, // _tipoNormalEspecial, _inicioPeriodo.Date, _finPeriodo.Date); //cnx.Close(); /***************** TERMINA *****************************/ /********************************************************* * Se verifica si las listas de los conceptos modificados * son diferentes de 0, si son diferentes, se acumulan en la varible * noConceptosPercepciones y noConceptosDeducciones *********************************************************/ //if (lstConceptosPercepcionesModificados.Count != 0) //{ // for (int i = 0; i < lstConceptosPercepcionesModificados.Count; i++) // if (lstConceptosPercepcionesModificados[i].modificado) // noConceptosPercepciones += lstConceptosPercepcionesModificados[i].noconcepto + ","; // if (noConceptosPercepciones != "") // noConceptosPercepciones = noConceptosPercepciones.Substring(0, noConceptosPercepciones.Length - 1); //} //else // noConceptosPercepciones = ""; //if (lstConceptosDeduccionesModificados.Count != 0) //{ // for (int i = 0; i < lstConceptosDeduccionesModificados.Count; i++) // if (lstConceptosDeduccionesModificados[i].modificado) // noConceptosDeducciones += lstConceptosDeduccionesModificados[i].noconcepto + ","; // if (noConceptosDeducciones != "") // noConceptosDeducciones = noConceptosDeducciones.Substring(0, noConceptosDeducciones.Length - 1); //} //else // noConceptosDeducciones = ""; /************************TERMINA***************************/ /***************************************************************** * Se llenan las listas con los conceptos que no estan modificados * con el SP stp_DatosNominaTrabajador para el calculo. *****************************************************************/ cnx.Open(); nh.eliminaNominaTrabajador(idTrabajador, _inicioPeriodo, _finPeriodo, _tipoNormalEspecial); lstConceptosPercepciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", idTrabajador, _inicioPeriodo, _finPeriodo, _periodo); lstConceptosDeducciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", idTrabajador, _inicioPeriodo, _finPeriodo, _periodo); cnx.Close(); /**************************TERMINA*********************************/ } catch { MessageBox.Show("Error: Al Obtener los conceptos del trabajador.\r\n \r\n La ventan se cerrara.", "Error"); this.Dispose(); } #endregion #region CALCULO DE PERCEPCIONES List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>(); lstPercepciones = CALCULO.PERCEPCIONES(lstConceptosPercepciones, _inicioPeriodo.Date, _finPeriodo.Date, _tipoNormalEspecial); #endregion #region BULK DATOS PERCEPCIONES BulkData(lstPercepciones); #endregion #region OBTENCION DE PERCEPCIONES lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>(); CalculoNomina.Core.tmpPagoNomina per = new CalculoNomina.Core.tmpPagoNomina(); per.idempresa = GLOBALES.IDEMPRESA; per.idtrabajador = idTrabajador; per.fechainicio = _inicioPeriodo.Date; per.fechafin = _finPeriodo.Date; per.tipoconcepto = "P"; per.tiponomina = _tipoNormalEspecial; cnx = new SqlConnection(cdn); cnx.Open(); lstPercepciones = nh.obtenerPercepcionesTrabajador(per); cnx.Close(); #endregion #region CALCULO DE DEDUCCIONES List<CalculoNomina.Core.tmpPagoNomina> lstDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>(); lstDeducciones = CALCULO.DEDUCCIONES(lstConceptosDeducciones, lstPercepciones, _inicioPeriodo.Date, _finPeriodo.Date, _tipoNormalEspecial); #endregion #region BULK DATOS DEDUCCIONES BulkData(lstDeducciones); #endregion #region PROGRAMACION DE MOVIMIENTOS List<CalculoNomina.Core.tmpPagoNomina> lstOtrasDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>(); decimal percepciones = lstPercepciones.Where(f => f.tipoconcepto == "P").Sum(f => f.cantidad); if (percepciones != 0) { cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; int existe = 0; ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper(); pch.Command = cmd; ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto(); programacion.idtrabajador = idTrabajador; List<ProgramacionConcepto.Core.ProgramacionConcepto> lstProgramacion = new List<ProgramacionConcepto.Core.ProgramacionConcepto>(); try { cnx.Open(); existe = (int)pch.existeProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } if (existe != 0) { try { cnx.Open(); lstProgramacion = pch.obtenerProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } for (int i = 0; i < lstProgramacion.Count; i++) { if (_finPeriodo.Date <= lstProgramacion[i].fechafin) { Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos(); concepto.id = lstProgramacion[i].idconcepto; List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>(); try { cnx.Open(); lstNoConcepto = ch.obtenerConcepto(concepto); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); } CalculoNomina.Core.tmpPagoNomina pne = new CalculoNomina.Core.tmpPagoNomina(); pne.idempresa = GLOBALES.IDEMPRESA; pne.idtrabajador = idTrabajador; pne.fechainicio = _inicioPeriodo.Date; pne.fechafin = _finPeriodo.Date; pne.noconcepto = lstNoConcepto[0].noconcepto; nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; try { cnx.Open(); existeConcepto = (int)nh.existeConcepto(pne); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error al obtener la existencia del concepto." + error.Message + "\r\n" + error.Source, "Error"); cnx.Dispose(); } CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = idTrabajador; vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstProgramacion[i].idconcepto; vn.noconcepto = lstNoConcepto[0].noconcepto; vn.tipoconcepto = lstNoConcepto[0].tipoconcepto; vn.fechainicio = _inicioPeriodo.Date; vn.fechafin = _finPeriodo.Date; vn.exento = 0; vn.gravado = 0; vn.cantidad = lstProgramacion[i].cantidad; vn.guardada = true; vn.tiponomina = _tipoNormalEspecial; vn.modificado = false; if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento) { vn.gravado = lstProgramacion[i].cantidad; vn.exento = 0; } if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { CalculoFormula formulaExcento = new CalculoFormula(idTrabajador, _inicioPeriodo.Date, _finPeriodo.Date, lstNoConcepto[0].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (existeConcepto == 0) { lstOtrasDeducciones.Add(vn); } else { try { cnx.Open(); nh.actualizaConceptoModificado(vn); cnx.Close(); } catch { MessageBox.Show("Error al actualizar el concepto.", "Error"); cnx.Dispose(); } } } } } } else { decimal vacacion = lstPercepciones.Where(f => f.noconcepto == 7).Sum(f => f.cantidad); if (vacacion != 0) { cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; int existe = 0; ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper(); pch.Command = cmd; ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto(); programacion.idtrabajador = idTrabajador; List<ProgramacionConcepto.Core.ProgramacionConcepto> lstProgramacion = new List<ProgramacionConcepto.Core.ProgramacionConcepto>(); try { cnx.Open(); existe = (int)pch.existeProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } if (existe != 0) { try { cnx.Open(); lstProgramacion = pch.obtenerProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } for (int i = 0; i < lstProgramacion.Count; i++) { if (_finPeriodo.Date <= lstProgramacion[i].fechafin) { Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos(); concepto.id = lstProgramacion[i].idconcepto; List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>(); try { cnx.Open(); lstNoConcepto = ch.obtenerConcepto(concepto); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); } CalculoNomina.Core.tmpPagoNomina pne = new CalculoNomina.Core.tmpPagoNomina(); pne.idempresa = GLOBALES.IDEMPRESA; pne.idtrabajador = idTrabajador; pne.fechainicio = _inicioPeriodo.Date; pne.fechafin = _finPeriodo.Date; pne.noconcepto = lstNoConcepto[0].noconcepto; try { cnx.Open(); existeConcepto = (int)nh.existeConcepto(pne); cnx.Close(); } catch { MessageBox.Show("Error al obtener la existencia del concepto.", "Error"); cnx.Dispose(); } CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = idTrabajador; vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstProgramacion[i].idconcepto; vn.noconcepto = lstNoConcepto[0].noconcepto; vn.tipoconcepto = lstNoConcepto[0].tipoconcepto; vn.fechainicio = _inicioPeriodo.Date; vn.fechafin = _finPeriodo.Date; vn.exento = 0; vn.gravado = 0; vn.cantidad = lstProgramacion[i].cantidad; vn.guardada = true; vn.tiponomina = _tipoNormalEspecial; vn.modificado = false; if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento) { vn.gravado = lstProgramacion[i].cantidad; vn.exento = 0; } if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { CalculoFormula formulaExcento = new CalculoFormula(idTrabajador, _inicioPeriodo.Date, _finPeriodo.Date, lstNoConcepto[0].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (existeConcepto == 0) { lstOtrasDeducciones.Add(vn); } else { try { cnx.Open(); nh.actualizaConceptoModificado(vn); cnx.Close(); } catch { MessageBox.Show("Error al actualizar el concepto.", "Error"); cnx.Dispose(); } } } } } } } #endregion #region MOVIMIENTOS cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; Movimientos.Core.MovimientosHelper mh = new Movimientos.Core.MovimientosHelper(); mh.Command = cmd; nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; percepciones = lstPercepciones.Where(f => f.tipoconcepto == "P").Sum(f => f.cantidad); if (percepciones != 0) { int existe = 0; Movimientos.Core.Movimientos mov = new Movimientos.Core.Movimientos(); mov.idtrabajador = idTrabajador; mov.fechainicio = _inicioPeriodo.Date; mov.fechafin = _finPeriodo.Date; List<Movimientos.Core.Movimientos> lstMovimiento = new List<Movimientos.Core.Movimientos>(); try { cnx.Open(); existe = (int)mh.existeMovimiento(mov); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } if (existe != 0) { try { cnx.Open(); lstMovimiento = mh.obtenerMovimiento(mov); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } for (int i = 0; i < lstMovimiento.Count; i++) { Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos(); concepto.id = lstMovimiento[i].idconcepto; List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>(); try { cnx.Open(); lstNoConcepto = ch.obtenerConcepto(concepto); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); } CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = idTrabajador; vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstMovimiento[i].idconcepto; vn.noconcepto = lstNoConcepto[0].noconcepto; vn.tipoconcepto = lstNoConcepto[0].tipoconcepto; vn.fechainicio = _inicioPeriodo.Date; vn.fechafin = _finPeriodo.Date; vn.exento = 0; vn.gravado = 0; vn.cantidad = lstMovimiento[i].cantidad; vn.guardada = true; vn.tiponomina = _tipoNormalEspecial; vn.modificado = false; if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento) { vn.gravado = lstMovimiento[i].cantidad; vn.exento = 0; } if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { CalculoFormula formulaExcento = new CalculoFormula(idTrabajador, _inicioPeriodo.Date, _finPeriodo.Date, lstNoConcepto[0].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (!lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { vn.gravado = 0; vn.exento = lstMovimiento[i].cantidad; } try { cnx.Open(); existe = (int)nh.existeConcepto(vn); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al verificar existencia de los movimientos. \r\n" + error.Message, "Error"); } if (existe == 0) { lstOtrasDeducciones.Add(vn); } else { try { cnx.Open(); nh.actualizaConcepto(vn); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al actualizar los movimientos. " + error.Message, "Error"); } } } } } #endregion #region BULK DATOS PROGRAMACION DE MOVIMIENTOS BulkData(lstOtrasDeducciones); #endregion #region MOSTRAR DATOS muestraDatos(); #endregion #region PERIODO cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; int noPeriodo = 0; try { if (_tipoNormalEspecial == GLOBALES.NORMAL) { cnx.Open(); noPeriodo = int.Parse(nh.obtenerNoPeriodo(_periodo, _inicioPeriodo).ToString()); nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, _inicioPeriodo.Date, _finPeriodo.Date, noPeriodo); cnx.Close(); } else if (_tipoNormalEspecial == GLOBALES.EXTRAORDINARIO_NORMAL) { cnx.Open(); noPeriodo = (int)(nh.obtenerNoPeriodoExtraordinario(GLOBALES.IDEMPRESA, _tipoNormalEspecial)); noPeriodo = noPeriodo + 1; nh.actualizarNoPeriodo(GLOBALES.IDEMPRESA, _inicioPeriodo.Date, _finPeriodo.Date, noPeriodo); cnx.Close(); } } catch (Exception) { MessageBox.Show("Error: Al actualizar el No. de Periodo", "Error"); cnx.Dispose(); return; } #endregion }
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; }
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; }
private void workerCalculo_DoWork(object sender, DoWorkEventArgs e) { cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; CalculoNomina.Core.NominaHelper nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper(); eh.Command = cmd; Altas.Core.AltasHelper ah = new Altas.Core.AltasHelper(); ah.Command = cmd; Reingreso.Core.ReingresoHelper rh = new Reingreso.Core.ReingresoHelper(); rh.Command = cmd; int estatus = 0; int existeAltaReingreso = 0; #region LISTAS List<CalculoNomina.Core.Nomina> lstConceptosPercepciones = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosDeducciones = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosPercepcionesModificados = new List<CalculoNomina.Core.Nomina>(); List<CalculoNomina.Core.Nomina> lstConceptosDeduccionesModificados = new List<CalculoNomina.Core.Nomina>(); #endregion int progreso = 0, total = 0, indice = 0; int existeConcepto = 0; total = dgvEmpleados.Rows.Count; StreamWriter swLog = new StreamWriter(@"C:\Temp\LogHealthTrabajador" + DateTime.Now.Year.ToString() + "_" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Minute.ToString() + ".txt", true); swLog.WriteLine(String.Format("Calculo de Nómina: Del {0} al {1}", periodoInicio.ToShortDateString(), periodoFin.ToShortDateString())); foreach (DataGridViewRow fila in dgvEmpleados.Rows) { try { cnx.Open(); estatus = int.Parse(eh.obtenerEstatus(int.Parse(fila.Cells["idtrabajador"].Value.ToString())).ToString()); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Estatus: {1}", fila.Cells["idtrabajador"].Value.ToString(), estatus.ToString())); if (estatus == 0) { cnx.Open(); nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString())); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString())); continue; } else { cnx.Open(); existeAltaReingreso = ah.existeAlta(GLOBALES.IDEMPRESA, int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicioPosterior, periodoFinPosterior); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Existencia de Alta: {1}, Fecha Inicio: {2}, Fecha Fin: {3} ", fila.Cells["idtrabajador"].Value.ToString(), existeAltaReingreso, periodoInicioPosterior.ToShortDateString(), periodoFinPosterior.ToShortDateString())); if (existeAltaReingreso != 0) { cnx.Open(); nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString())); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString())); continue; } cnx.Open(); existeAltaReingreso = rh.existeReingreso(GLOBALES.IDEMPRESA, int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicioPosterior, periodoFinPosterior); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Existencia de Reingreso: {1}, Fecha Inicio: {2}, Fecha Fin: {3} ", fila.Cells["idtrabajador"].Value.ToString(), existeAltaReingreso, periodoInicioPosterior.ToShortDateString(), periodoFinPosterior.ToShortDateString())); if (existeAltaReingreso != 0) { cnx.Open(); nh.eliminaPreNomina(int.Parse(fila.Cells["idtrabajador"].Value.ToString())); cnx.Close(); swLog.WriteLine(String.Format("Empleado: {0}, Se elimina Prenomina", fila.Cells["idtrabajador"].Value.ToString())); continue; } } } catch (Exception error) { MessageBox.Show("Error al verificar el estatus del trabajador: " + fila.Cells["noempleado"].Value.ToString() + "\r\n\r\n" + error.Message, "Error"); cnx.Close(); continue; } progreso = (indice * 100) / total; indice++; if (FLAGPRIMERCALCULO) { workerCalculo.ReportProgress(progreso, "CARGANDO DATOS DE LOS TRABAJADORES. ESPERE A QUE TERMINE EL PROCESO."); } else workerCalculo.ReportProgress(progreso, "CALCULANDO."); #region CONCEPTOS Y FORMULAS DEL TRABAJADOR try { cnx.Open(); nh.eliminaNominaTrabajador(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _tipoNomina); lstConceptosPercepciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "P", int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _periodo); lstConceptosDeducciones = nh.conceptosNominaTrabajador(GLOBALES.IDEMPRESA, "D", int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, _periodo); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: CONCEPTOS Y FORMULAS DEL TRABAJADOR. Primer Calculo." + " ID Trabajador: " + int.Parse(fila.Cells["idtrabajador"].Value.ToString()) + "\r\n \r\n" + error.Message, "Error"); cnx.Dispose(); return; } #endregion #region CALCULO DE PERCEPCIONES List<CalculoNomina.Core.tmpPagoNomina> lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>(); lstPercepciones = CALCULO.PERCEPCIONES(lstConceptosPercepciones, periodoInicio.Date, periodoFin.Date, _tipoNomina); #endregion #region BULK DATOS PERCEPCIONES BulkData(lstPercepciones); #endregion #region OBTENCION DE PERCEPCIONES lstPercepciones = new List<CalculoNomina.Core.tmpPagoNomina>(); CalculoNomina.Core.tmpPagoNomina per = new CalculoNomina.Core.tmpPagoNomina(); per.idempresa = GLOBALES.IDEMPRESA; per.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); per.fechainicio = periodoInicio.Date; per.fechafin = periodoFin; per.tipoconcepto = "P"; per.tiponomina = _tipoNomina; cnx.Open(); lstPercepciones = nh.obtenerPercepcionesTrabajador(per); cnx.Close(); #endregion #region CALCULO DE DEDUCCIONES List<CalculoNomina.Core.tmpPagoNomina> lstDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>(); lstDeducciones = CALCULO.DEDUCCIONES(lstConceptosDeducciones, lstPercepciones, periodoInicio.Date, periodoFin.Date, _tipoNomina); #endregion #region BULK DATOS DEDUCCIONES BulkData(lstDeducciones); #endregion #region PROGRAMACION DE MOVIMIENTOS List<CalculoNomina.Core.tmpPagoNomina> lstOtrasDeducciones = new List<CalculoNomina.Core.tmpPagoNomina>(); ProgramacionConcepto.Core.ProgramacionHelper pch = new ProgramacionConcepto.Core.ProgramacionHelper(); pch.Command = cmd; decimal percepciones = lstPercepciones.Where(f => f.tipoconcepto == "P").Sum(f => f.cantidad); if (percepciones != 0) { int existe = 0; ProgramacionConcepto.Core.ProgramacionConcepto programacion = new ProgramacionConcepto.Core.ProgramacionConcepto(); programacion.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); List<ProgramacionConcepto.Core.ProgramacionConcepto> lstProgramacion = new List<ProgramacionConcepto.Core.ProgramacionConcepto>(); try { cnx.Open(); existe = (int)pch.existeProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } if (existe != 0) { try { cnx.Open(); lstProgramacion = pch.obtenerProgramacion(programacion); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } for (int i = 0; i < lstProgramacion.Count; i++) { if (periodoFin.Date <= lstProgramacion[i].fechafin) { Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos(); concepto.id = lstProgramacion[i].idconcepto; List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>(); try { cnx.Open(); lstNoConcepto = ch.obtenerConcepto(concepto); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); } CalculoNomina.Core.tmpPagoNomina pne = new CalculoNomina.Core.tmpPagoNomina(); pne.idempresa = GLOBALES.IDEMPRESA; pne.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); pne.fechainicio = periodoInicio.Date; pne.fechafin = periodoFin.Date; pne.noconcepto = lstNoConcepto[0].noconcepto; try { cnx.Open(); existeConcepto = (int)nh.existeConcepto(pne); cnx.Close(); } catch { MessageBox.Show("Error al obtener la existencia del concepto.", "Error"); cnx.Dispose(); } CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstProgramacion[i].idconcepto; vn.noconcepto = lstNoConcepto[0].noconcepto; vn.tipoconcepto = lstNoConcepto[0].tipoconcepto; vn.fechainicio = periodoInicio.Date; vn.fechafin = periodoFin.Date; vn.exento = 0; vn.gravado = 0; vn.cantidad = lstProgramacion[i].cantidad; vn.guardada = false; vn.tiponomina = _tipoNomina; vn.modificado = false; vn.obracivil = _obracivil; if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento) { vn.gravado = lstProgramacion[i].cantidad; vn.exento = 0; } if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { CalculoFormula formulaExcento = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, lstNoConcepto[0].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (!lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { vn.gravado = 0; vn.exento = lstProgramacion[i].cantidad; } if (existeConcepto == 0) { lstOtrasDeducciones.Add(vn); } else { try { cnx.Open(); nh.actualizaConceptoModificado(vn); cnx.Close(); } catch { MessageBox.Show("Error al actualizar el concepto.", "Error"); cnx.Dispose(); } } } } } } #endregion #region MOVIMIENTOS Movimientos.Core.MovimientosHelper mh = new Movimientos.Core.MovimientosHelper(); mh.Command = cmd; if (percepciones != 0) { int existe = 0; Movimientos.Core.Movimientos mov = new Movimientos.Core.Movimientos(); mov.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); mov.fechainicio = periodoInicio.Date; mov.fechafin = periodoFin.Date; List<Movimientos.Core.Movimientos> lstMovimiento = new List<Movimientos.Core.Movimientos>(); try { cnx.Open(); existe = (int)mh.existeMovimiento(mov); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } if (existe != 0) { try { cnx.Open(); lstMovimiento = mh.obtenerMovimiento(mov); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } for (int i = 0; i < lstMovimiento.Count; i++) { Conceptos.Core.ConceptosHelper ch = new Conceptos.Core.ConceptosHelper(); ch.Command = cmd; Conceptos.Core.Conceptos concepto = new Conceptos.Core.Conceptos(); concepto.id = lstMovimiento[i].idconcepto; List<Conceptos.Core.Conceptos> lstNoConcepto = new List<Conceptos.Core.Conceptos>(); try { cnx.Open(); lstNoConcepto = ch.obtenerConcepto(concepto); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n" + error.Message, "Error"); } CalculoNomina.Core.tmpPagoNomina vn = new CalculoNomina.Core.tmpPagoNomina(); vn.idtrabajador = int.Parse(fila.Cells["idtrabajador"].Value.ToString()); ; vn.idempresa = GLOBALES.IDEMPRESA; vn.idconcepto = lstMovimiento[i].idconcepto; vn.noconcepto = lstNoConcepto[0].noconcepto; vn.tipoconcepto = lstNoConcepto[0].tipoconcepto; vn.fechainicio = periodoInicio.Date; vn.fechafin = periodoFin.Date; vn.exento = 0; vn.gravado = 0; vn.cantidad = lstMovimiento[i].cantidad; vn.guardada = false; vn.tiponomina = _tipoNomina; vn.modificado = false; if (lstNoConcepto[0].gravado && !lstNoConcepto[0].exento) { vn.gravado = lstMovimiento[i].cantidad; vn.exento = 0; } if (lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { CalculoFormula formulaExcento = new CalculoFormula(int.Parse(fila.Cells["idtrabajador"].Value.ToString()), periodoInicio.Date, periodoFin.Date, lstNoConcepto[0].formulaexento); vn.exento = decimal.Parse(formulaExcento.calcularFormula().ToString()); if (vn.cantidad <= vn.exento) { vn.exento = vn.cantidad; vn.gravado = 0; } else { vn.gravado = vn.cantidad - vn.exento; } } if (!lstNoConcepto[0].gravado && lstNoConcepto[0].exento) { vn.gravado = 0; vn.exento = lstMovimiento[i].cantidad; } cnx.Open(); existe = (int)nh.existeConcepto(vn); cnx.Close(); if (existe == 0) { lstOtrasDeducciones.Add(vn); } else { cnx.Open(); nh.actualizaConcepto(vn); cnx.Close(); } } } } #endregion #region BULK DATOS PROGRAMACION DE MOVIMIENTOS BulkData(lstOtrasDeducciones); #endregion #region APLICACION DE DEPTOS/PUESTOS Aplicaciones.Core.AplicacionesHelper aplicah = new Aplicaciones.Core.AplicacionesHelper(); aplicah.Command = cmd; Aplicaciones.Core.Aplicaciones aplicacion = new Aplicaciones.Core.Aplicaciones(); aplicacion.periodoinicio = periodoInicio; aplicacion.periodofin = periodoFin; aplicacion.idempresa = GLOBALES.IDEMPRESA; List<Aplicaciones.Core.Aplicaciones> lstAplicaciones = new List<Aplicaciones.Core.Aplicaciones>(); try { cnx.Open(); lstAplicaciones = aplicah.obtenerFechasDeAplicacion(aplicacion); cnx.Close(); } catch (Exception) { throw; } if (lstAplicaciones.Count != 0) { for (int i = 0; i < lstAplicaciones.Count; i++) { Empleados.Core.EmpleadosHelper emph = new Empleados.Core.EmpleadosHelper(); emph.Command = cmd; try { cnx.Open(); emph.actualizaDeptoPuesto(lstAplicaciones[i].iddeptopuesto, lstAplicaciones[i].idtrabajador, lstAplicaciones[i].deptopuesto); aplicah.eliminaAplicacion(lstAplicaciones[i].id); cnx.Close(); } catch (Exception) { MessageBox.Show("Error: Al modificar y/o eliminar el depto/puesto o aplicación.", "Error"); cnx.Dispose(); } } } #endregion } swLog.Close(); #region PERIODO calculoNoPeriodo(); #endregion #region NETOS NEGATIVOS nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; List<CalculoNomina.Core.NetosNegativos> lstNetos; int contadorNetosNegativos = 0; StreamWriter sw = new StreamWriter(@"C:\Temp\NetosNegativos" + periodoInicio.Year.ToString() + "_" + periodoInicio.Month.ToString() + "_" + periodoInicio.Day.ToString() + ".txt", true); foreach (DataGridViewRow fila in dgvEmpleados.Rows) { lstNetos = new List<CalculoNomina.Core.NetosNegativos>(); try { cnx.Open(); lstNetos = nh.obtenerNetosNegativos(GLOBALES.IDEMPRESA, periodoInicio.Date, periodoFin.Date, int.Parse(fila.Cells["idtrabajador"].Value.ToString())); cnx.Close(); decimal sumaPercepciones = lstNetos.Where(n => n.tipoconcepto == "P").Sum(n => n.cantidad); decimal sumaDeducciones = lstNetos.Where(n => n.tipoconcepto == "D").Sum(n => n.cantidad); decimal subsidio = lstNetos.Where(d => d.noconcepto == 16).Sum(d => d.cantidad); decimal netoPagar = 0; sumaPercepciones = sumaPercepciones + subsidio; sumaDeducciones = sumaDeducciones - subsidio; netoPagar = sumaPercepciones - sumaDeducciones; string linea1 = ""; string noEmpleado = "", nombreCompleto = ""; noEmpleado = fila.Cells["noempleado"].Value.ToString(); nombreCompleto = fila.Cells["nombres"].Value.ToString() + " " + fila.Cells["paterno"].Value.ToString() + " " + fila.Cells["materno"].Value.ToString(); if (netoPagar < 0) { contadorNetosNegativos++; linea1 = noEmpleado + ", " + nombreCompleto + ", Cantidad Neta Negativa: " + netoPagar.ToString(); sw.WriteLine(linea1); } } catch (Exception error) { MessageBox.Show("Error: Lista de Netos. \r\n \r\n" + error.Message, "Error"); cnx.Dispose(); } } sw.WriteLine("TOTAL CANTIDADES NEGATIVAS: " + contadorNetosNegativos.ToString()); sw.Close(); if (contadorNetosNegativos != 0) { MessageBox.Show("CANTIDADES NEGATIVAS. VERIFIQUE ARCHIVO EN C:\\Temp\\NetosNegativos" + periodoInicio.Year.ToString() + "_" + periodoInicio.Month.ToString() + "_" + periodoInicio.Day.ToString() + ".txt", "Información"); } #endregion }