public ActionResult <GenericApiResponse <object> > GetById(int id) { var nomina = contexto.Nomina.Find(id); if (nomina == null) { return(this.HandleNotFound("No se encontro la nomina", "")); } var detallesNomina = contexto.DetalleNomina.ToList().FindAll(dn => dn.Id_Nomina == nomina.Id); var final = new NominaFinal(); final.Descripcion = nomina.Descripcion; final.Fecha = nomina.Fecha; final.Empleados = new List <NominaEmpleado>(); foreach (var detalle in detallesNomina) { var nominaEmpleado = new NominaEmpleado(); var empleado = contexto.Empleado.Find(detalle.Id_Empleado); nominaEmpleado.IdEmpleado = empleado.Id; nominaEmpleado.Nombre = empleado.Nombre; nominaEmpleado.Apellido = empleado.Apellido; nominaEmpleado.Departamento = contexto.Departamento.Find(empleado.Id_Departamento).Nombre; nominaEmpleado.DPI = empleado.Dpi; nominaEmpleado.Puesto = contexto.Puesto.Find(empleado.Id_Puesto).PuestoNominal; nominaEmpleado.SueldoBruto = detalle.SueldoBruto; nominaEmpleado.HorasExtras = detalle.SueldoExtraordinario; nominaEmpleado.SueldoNeto = detalle.SueldoLiquido; nominaEmpleado.Descuentos = new List <NominaDescuento>(); var detalleDescuento = contexto.Detalle_Descuento.ToList().FindAll(dd => dd.Id_Nomina == nomina.Id && dd.Id_DetalleNomina == detalle.Id); foreach (var descuento in detalleDescuento) { var desc = contexto.Descuento.Find(descuento.Id_Descuento); nominaEmpleado.Descuentos.Add(new NominaDescuento { Descripcion = desc.Descripcion, Valor = descuento.Monto }); nominaEmpleado.TotalDescuentos += descuento.Monto; } final.Empleados.Add(nominaEmpleado); } return(this.HandleOK(final)); }
private List <NominaEmpleado> Nomina(DateTime date, int tipo) { var fechaActual = date; List <NominaEmpleado> nominas = new List <NominaEmpleado>(); foreach (var empleado in contexto.Empleado.ToList()) { var nomina = new NominaEmpleado(); nomina.IdEmpleado = empleado.Id; nomina.Nombre = empleado.Nombre; nomina.Apellido = empleado.Apellido; nomina.Departamento = contexto.Departamento.Find(empleado.Id_Departamento).Nombre; nomina.DPI = empleado.Dpi; nomina.Puesto = contexto.Puesto.Find(empleado.Id_Puesto).PuestoNominal; if (tipo == 0) { var horasExtra = contexto.HoraExtra.ToList().FindAll(he => he.Fecha.Month == fechaActual.Month && he.Fecha.Year == fechaActual.Year).FindAll(he => he.Id_Empleado == empleado.Id); foreach (var he in horasExtra) { nomina.HorasExtras += he.Monto; } } var sueldoBruto = contexto.SueldoBruto.Find(empleado.Id); nomina.SueldoBase = sueldoBruto is null ? 0 : sueldoBruto.Total; if (tipo == 1) // Bono 14 { var dias = contexto.Asistencia.ToList().FindAll(a => a.Id_Empleado == empleado.Id && a.Fecha.Year == fechaActual.Year && a.Id_Tipo_Asistencia == 2).Count; nomina.SueldoBase = Math.Round(nomina.SueldoBase * dias / 365, 2); } else if (tipo == 2) { var dias = contexto.Asistencia.ToList().FindAll(a => a.Id_Empleado == empleado.Id && a.Fecha.Year == fechaActual.Year && a.Id_Tipo_Asistencia == 2).Count; var diario = nomina.SueldoBase / 30; var sueldo = diario * 15; sueldo /= 365; nomina.SueldoBase = Math.Round(sueldo * dias, 2); } decimal incentivo = 0; if (tipo == 0) { var bonificaciones = contexto.Empleado_Bonificacion.ToList().FindAll(eb => eb.Id_Empleado == empleado.Id); foreach (var b in bonificaciones) { incentivo += contexto.Bonificacion.Find(b.Id_Bonificacion).Monto; } nomina.BonoIncentivo = incentivo; } var sueldoSinBono = nomina.SueldoBase + nomina.HorasExtras; nomina.SueldoBruto = Math.Round(sueldoSinBono + nomina.BonoIncentivo, 2); nomina.Descuentos = new List <NominaDescuento>(); decimal descuento = 0; if (tipo == 0) { var descuentos = contexto.SueldoBruto_Descuento.ToList().FindAll(sbd => sbd.Id_Empleado == empleado.Id); foreach (var d in descuentos) { var dd = contexto.Descuento.Find(d.Id_Descuento); var des = (dd.Porcentaje / 100) * sueldoSinBono; descuento += des; nomina.Descuentos.Add(new NominaDescuento { Id = dd.Id, Descripcion = dd.Descripcion, Valor = des }); } nomina.TotalDescuentos = descuento; } nomina.SueldoNeto = sueldoSinBono - descuento + incentivo; nominas.Add(nomina); } return(nominas); }