예제 #1
0
        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));
        }
예제 #2
0
        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);
        }