private void btnAceptar_Click(object sender, EventArgs e) { int existeVacaciones = 0, existeIncapacidad = 0; int diasProporcionales = 0; int existeBaja = 0; DialogResult respuesta = MessageBox.Show("¿Desea dar de baja al empleado?","Confirmación",MessageBoxButtons.YesNo); if (respuesta == DialogResult.Yes) { //if (ausentismo) //{ // frmDiasAusentismo da = new frmDiasAusentismo(); // da.OnDiasAusentismo += da_OnDiasAusentismo; // da.ShowDialog(); //} //if (diasAusentismo == 0 && ausentismo) //{ // MessageBox.Show("El número de dias es 0 o se presionó el boton cancelar. Por favor revisar.", "Error"); // return; //} cnx = new SqlConnection(cdn); cmd = new SqlCommand(); cmd.Connection = cnx; PeriodoFechaAplicacion(); #region EXISTENCIA DE INCAPACIDAD Incidencias.Core.IncidenciasHelper ih = new Incidencias.Core.IncidenciasHelper(); ih.Command = cmd; Incidencias.Core.Incidencias incidencia = new Incidencias.Core.Incidencias(); incidencia.idtrabajador = _idempleado; incidencia.fechainicio = periodoInicio.Date; incidencia.fechafin = periodoFin.Date; try { cnx.Open(); existeIncapacidad = (int)ih.existeIncidenciaBaja(incidencia); cnx.Close(); } catch { MessageBox.Show("Error: Al obtener existencia de Incapacidad.","Error"); cnx.Dispose(); return; } #endregion #region EXISTENCIA DE VACACIONES Vacaciones.Core.VacacionesHelper vh = new Vacaciones.Core.VacacionesHelper(); vh.Command = cmd; Vacaciones.Core.VacacionesPrima vp = new Vacaciones.Core.VacacionesPrima(); vp.idtrabajador = _idempleado; vp.periodoinicio = periodoInicio; vp.periodofin = periodoFin; vp.vacacionesprima = "V"; try { cnx.Open(); existeVacaciones = (int)vh.existeVacacionesPrima(vp); cnx.Close(); } catch { MessageBox.Show("Error: Al obtener existencia de Vacaciones.", "Error"); cnx.Dispose(); return; } #endregion #region VALIDACION DE INCAPACIDAD if (existeIncapacidad != 0) { DateTime fechaInicioIncidencia; DateTime fechaFinIncidencia; try { cnx.Open(); fechaInicioIncidencia = DateTime.Parse(ih.fechaInicio(incidencia).ToString()); fechaFinIncidencia = DateTime.Parse(ih.fechaFin(incidencia).ToString()); cnx.Close(); } catch (Exception) { MessageBox.Show("Error: Al obtener las fechas de incapacidad.", "Error"); cnx.Dispose(); return; } if (dtpFechaBaja.Value.Date >= fechaInicioIncidencia.Date && dtpFechaBaja.Value.Date <= fechaFinIncidencia.Date) { MessageBox.Show("No se puede dar de baja. La fecha de baja esta entre una incapacidad.", "Error"); return; } if (dtpFechaBaja.Value.Date <= fechaInicioIncidencia.Date) { MessageBox.Show("No se puede dar de baja. Existe una incapacidad.", "Error"); return; } } #endregion #region VALIDACION DE VACACIONES if (existeVacaciones != 0) { DateTime fechaInicioVac; DateTime fechaFinVac; try { cnx.Open(); fechaInicioVac = DateTime.Parse(vh.fechaInicio(vp).ToString()); fechaFinVac = DateTime.Parse(vh.fechaFin(vp).ToString()); cnx.Close(); } catch (Exception) { MessageBox.Show("Error: Al obtener las fechas de las vacaciones.", "Error"); cnx.Dispose(); return; } if (dtpFechaBaja.Value.Date >= fechaInicioVac.Date && dtpFechaBaja.Value.Date <= fechaFinVac.Date) { MessageBox.Show("No se puede dar de baja. La fecha de baja coninciden con vacaciones.", "Error"); return; } if (dtpFechaBaja.Value.Date <= fechaInicioVac.Date) { MessageBox.Show("No se puede dar de baja. El trabajador tiene vacaciones.", "Error"); return; } } #endregion Empresas.Core.EmpresasHelper ep = new Empresas.Core.EmpresasHelper(); ep.Command = cmd; Empresas.Core.Empresas empresa = new Empresas.Core.Empresas(); empresa.idempresa = GLOBALES.IDEMPRESA; Empleados.Core.EmpleadosHelper eh = new Empleados.Core.EmpleadosHelper(); eh.Command = cmd; Empleados.Core.Empleados emp = new Empleados.Core.Empleados(); emp.idtrabajador = _idempleado; Empleados.Core.EmpleadosEstatus ee = new Empleados.Core.EmpleadosEstatus(); ee.idtrabajador = _idempleado; ee.idempresa = GLOBALES.IDEMPRESA; ee.estatus = GLOBALES.INACTIVO; Historial.Core.HistorialHelper hp = new Historial.Core.HistorialHelper(); hp.Command = cmd; Historial.Core.Historial h = new Historial.Core.Historial(); h.idtrabajador = _idempleado; h.tipomovimiento = GLOBALES.mBAJA; h.fecha_imss = dtpFechaBaja.Value; h.fecha_sistema = DateTime.Now; h.idempresa = GLOBALES.IDEMPRESA; h.motivobaja = int.Parse(cmbMotivoBaja.SelectedValue.ToString()); h.iddepartamento = 0; h.idpuesto = 0; //Ausentismo.Core.AusentismoHelper ah = new Ausentismo.Core.AusentismoHelper(); //ah.Command = cmd; //Ausentismo.Core.Ausentismo a = new Ausentismo.Core.Ausentismo(); //a.idtrabajador = _idempleado; //a.idempresa = GLOBALES.IDEMPRESA; //a.fecha_imss = dtpFechaBaja.Value; //a.dias = diasAusentismo; Bajas.Core.BajasHelper bh = new Bajas.Core.BajasHelper(); bh.Command = cmd; Bajas.Core.Bajas baja = new Bajas.Core.Bajas(); baja.idtrabajador = _idempleado; baja.idempresa = GLOBALES.IDEMPRESA; baja.motivo = int.Parse(cmbMotivoBaja.SelectedValue.ToString()); baja.fecha = dtpFechaBaja.Value.Date; //baja.diasproporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1; baja.periodoinicio = periodoInicio.Date; baja.periodofin = periodoFin.Date; baja.observaciones = txtObservaciones.Text; baja.registro = DateTime.Now; diasProporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1; if (diasProporcionales == 16) baja.diasproporcionales = diasProporcionales - 1; else baja.diasproporcionales = (int)(dtpFechaBaja.Value.Date - periodoInicio.Date).TotalDays + 1; try { cnx.Open(); existeBaja = (int)bh.existeBaja(baja); cnx.Close(); } catch (Exception) { MessageBox.Show("Error: Al verificar la existencia de la baja.", "Error"); cnx.Dispose(); return; } if (existeBaja != 0) { MessageBox.Show( string.Format("El trabajador ya cuenta con una baja en el periodo del: \r\n \r\n {0} al {1}", periodoInicio.Date.ToShortDateString(), periodoFin.Date.ToShortDateString()), "Información"); return; } bool obraCivil = false; try { cnx.Open(); obraCivil = bool.Parse(eh.esObraCivil(GLOBALES.IDEMPRESA, _idempleado).ToString()); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al obtener dato de obra civil. \r\n \r\n" + error.Message, "Error"); return; } if (obraCivil) { nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; List<CalculoNomina.Core.tmpPagoNomina> lstPreNominaGuardada = new List<CalculoNomina.Core.tmpPagoNomina>(); List<CalculoNomina.Core.tmpPagoNomina> lstUltimaNomina = new List<CalculoNomina.Core.tmpPagoNomina>(); try { cnx.Open(); lstUltimaNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, _idempleado, periodo); lstPreNominaGuardada = nh.fechaPreNominaObraCivil(GLOBALES.IDEMPRESA, _idempleado, periodoInicio, periodoFin); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al obtener las fechas de pago. \r\n \r\n" + error.Message, "Error"); return; } if (lstUltimaNomina.Count != 0) { if (dtpFechaBaja.Value.Date >= lstUltimaNomina[0].fechainicio || dtpFechaBaja.Value.Date <= lstUltimaNomina[0].fechafin) { MessageBox.Show("La baja corresponde a un periodo cerrado.", "Información"); return; } } if (lstPreNominaGuardada.Count != 0) { if (dtpFechaBaja.Value.Date <= lstPreNominaGuardada[0].fechafin) { try { Bajas.Core.Bajas bajaTrabajador = new Bajas.Core.Bajas(); bajaTrabajador.idtrabajador = _idempleado; cnx.Open(); bh.bajaEmpleado(bajaTrabajador); nh.eliminaPreNomina(_idempleado, periodo); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al dar baja del empleado. \r\n \r\n" + error.Message, "Error"); return; } } } } else { nh = new CalculoNomina.Core.NominaHelper(); nh.Command = cmd; List<CalculoNomina.Core.tmpPagoNomina> lstNomina = new List<CalculoNomina.Core.tmpPagoNomina>(); try { cnx.Open(); lstNomina = nh.obtenerUltimaNominaTrabajador(GLOBALES.IDEMPRESA, _idempleado, periodo); cnx.Close(); } catch (Exception error) { MessageBox.Show("Error: Al obtener las fechas de pago. \r\n \r\n" + error.Message, "Error"); return; } if (lstNomina.Count != 0) { if (dtpFechaBaja.Value.Date <= lstNomina[0].fechainicio || dtpFechaBaja.Value.Date <= lstNomina[0].fechafin) { try { Bajas.Core.Bajas bajaTrabajador = new Bajas.Core.Bajas(); bajaTrabajador.idtrabajador = _idempleado; cnx.Open(); bh.bajaEmpleado(bajaTrabajador); nh.eliminaPreNomina(_idempleado, periodo); cnx.Close(); baja.fecha = lstNomina[0].fechafin; baja.diasproporcionales = 1; MessageBox.Show("La baja corresponde a un periodo cerrado. \r\n\r\n Se dará con la fecha de termino del periodo cerrado: " + lstNomina[0].fechafin.ToShortDateString(), "Información"); } catch (Exception error) { MessageBox.Show("Error: Al dar baja del empleado. \r\n \r\n" + error.Message, "Error"); return; } } } } try { cnx.Open(); h.valor = (decimal)eh.obtenerSalarioDiarioIntegrado(emp); hp.insertarHistorial(h); //ACTUALIZA TABLA trabajadoresestatus eh.bajaEmpleado(ee); baja.registropatronal = (string)ep.obtenerRegistroPatronal(empresa); baja.nss = (string)eh.obtenerNss(emp); bh.insertaBaja(baja); //if (ausentismo) //{ // a.registropatronal = (string)ep.obtenerRegistroPatronal(empresa); // a.nss = (string)eh.obtenerNss(emp); // ah.insertaAusentismo(a); //} cnx.Close(); cnx.Dispose(); if(OnBajaEmpleado != null) OnBajaEmpleado(GLOBALES.ACTIVO); } catch (Exception error) { MessageBox.Show("Error: \r\n \r\n " + error.Message, "Error"); } MessageBox.Show("Baja exitosa.", "Información"); btnAceptar.Enabled = false; this.Dispose(); } }
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; }