public async Task <IActionResult> ReviewAll()
        {
            IEnumerable <WorkDay> days = new List <WorkDay>();

            ApplicationUser user = await _userManager.FindByNameAsync(User.Identity.Name);

            Supervisor     supervisor = _supervisorRepo.GetAll().Where(x => x.EmployeeId == user.Id).FirstOrDefault();
            IList <string> role       = await _userManager.GetRolesAsync(user);

            if (role.Contains("Managers"))
            {
                Department department = _departmentRepo.GetAllWithUsers().Where(x => x.SupervisorId == supervisor.Id).FirstOrDefault();
                days = await _timeSheetService.GetAllWorkDaysAsyncForDepartment(department.Id);
            }
            else
            {
                days = _timeSheetService.GetAll();
            }
            WorkDayViewModel viewModel = new WorkDayViewModel
            {
                workDays = days
            };

            return(View(viewModel));
        }
 public bool GetShiftExist(WorkDayViewModel viewModel)
 {
     return(_context.Shifts
            .Include(s => s.Department)
            .Include(s => s.ShiftType)
            .Any(s => s.DateTime == viewModel.WorkDate && s.DepartmentId == viewModel.DepartmentId));
 }
        //Get
        public ActionResult AddAWorkWeek()
        {
            var viewModel = new WorkDayViewModel
            {
                Departments = _context.Departments
            };

            return(View(viewModel));
        }
Example #4
0
        public ActionResult AddAWorkWeek(WorkDayViewModel viewModel)
        {
            var shift = _context.Shifts
                        .Include(s => s.Department)
                        .Include(s => s.ShiftType)
                        .Any(s => s.DateTime == viewModel.WorkDate && s.DepartmentId == viewModel.DepartmentId);

            viewModel.Departments = _context.Departments.ToList();

            if (viewModel.DepartmentId == 0 || viewModel.NumberOfWorkDays == 0 || viewModel.NumbersOfShifts == 0 || viewModel.WorkDate == null)
            {
                var returnViewModel = new WorkDayViewModel
                {
                    Departments      = viewModel.Departments,
                    WorkDate         = viewModel.WorkDate,
                    NumberOfWorkDays = viewModel.NumberOfWorkDays,
                    NumbersOfShifts  = viewModel.NumbersOfShifts
                };
                return(RedirectToAction("AddAWorkWeek", returnViewModel));
            }

            if (!shift)
            {
                for (int j = 0; j < viewModel.NumberOfWorkDays; j++)
                {
                    for (byte i = 1; i <= viewModel.NumbersOfShifts; i++)
                    {
                        var newShift = new Shift(viewModel.WorkDate.AddDays(j), i, viewModel.DepartmentId);
                        _context.Shifts.Add(newShift);
                    }
                }
                _context.SaveChanges();

                viewModel.Department = _context.Departments.Where(d => d.Id == viewModel.DepartmentId).Single();
                var assigneViewModel = new AssignShiftEmployeesViewModel
                {
                    Department = viewModel.Department,
                    ShiftTypes = _context.ShiftTypes.ToList()
                };

                return(View("ChooseDateAssigment", assigneViewModel));
            }

            return(View(viewModel));
        }
        public ActionResult AddAWorkWeek(WorkDayViewModel viewModel)
        {
            var shift = _shiftRepository.GetShiftExist(viewModel);

            viewModel.Departments = _departmentRepository.GetDepartments();

            if (viewModel.DepartmentId == 0 || viewModel.NumberOfWorkDays == 0 || viewModel.NumbersOfShifts == 0 || viewModel.WorkDate == null)
            {
                var returnViewModel = new WorkDayViewModel
                {
                    Departments      = viewModel.Departments,
                    WorkDate         = viewModel.WorkDate,
                    NumberOfWorkDays = viewModel.NumberOfWorkDays,
                    NumbersOfShifts  = viewModel.NumbersOfShifts
                };
                return(RedirectToAction("AddAWorkWeek", returnViewModel));
            }

            if (!shift)
            {
                for (int j = 0; j < viewModel.NumberOfWorkDays; j++)
                {
                    for (byte i = 1; i <= viewModel.NumbersOfShifts; i++)
                    {
                        var newShift = new Shift(viewModel.WorkDate.AddDays(j), i, viewModel.DepartmentId);
                        _context.Shifts.Add(newShift);
                    }
                }
                _context.SaveChanges();

                viewModel.Department = _departmentRepository.GetDepartment(viewModel);
                var assigneViewModel = new AssignShiftEmployeesViewModel
                {
                    Department = viewModel.Department,
                    ShiftTypes = _shiftTypeRepository.GetShiftTypes()
                };

                return(View("ChooseDateAssigment", assigneViewModel));
            }

            return(View(viewModel));
        }
 public Department GetDepartment(WorkDayViewModel viewModel)
 {
     return(_context.Departments.Where(d => d.Id == viewModel.DepartmentId).Single());
 }
Example #7
0
        public async Task <IActionResult> Create(WorkDayViewModel workVM)
        {
            if (ModelState.IsValid)
            {
                ViewData["ErrorMsg"] = "";
                List <int> SeatTakenList = new List <int>(); //will contain list of nr of seats taken
                SeatTakenList.Clear();

                int seatNrGenerated = 0;//will be used to add to db the seat nr
                //check if user code entered exists in db
                bool CodeExists = _context.EmployeeInfo.Any(r => r.EmpCode == workVM.EmpCode);

                if (CodeExists == false)
                {
                    ViewData["ErrorMsg"] = "The entered Code was not found!";

                    return(View());
                }
                else
                {
                    //check if entered date is >= today
                    var today = DateTime.Now;
                    if (workVM.WorkDate.Date < today.Date)
                    {
                        ViewData["ErrorMsg"] = "The entered Date must be today or a later date!";
                        return(View());
                    }
                    else
                    {
                        //get id of employee by his code
                        var idEmployee = _context.EmployeeInfo.FirstOrDefault(e => e.EmpCode == workVM.EmpCode).Idemployee;

                        //check if user has choosen a seat for this date
                        var AlreadyRegistered = _context.WorkingToday.Where(r => r.Idemployee == idEmployee && r.WorkDate.Date == workVM.WorkDate.Date).ToList();
                        if (AlreadyRegistered.Count() > 0)
                        {
                            var GetSeatNr = _context.WorkingToday.FirstOrDefault(r => r.Idemployee == idEmployee && r.WorkDate.Date == workVM.WorkDate.Date).SeatNr;

                            ViewData["ErrorMsg"] = "This employee has already been registered for this date, the seating nr is " + GetSeatNr;
                            return(View());
                        }
                        else
                        {
                            //count how many seats have been taken for this given date
                            var NrOfSeatsTaken = _context.WorkingToday.Where(r => r.WorkDate.Date == workVM.WorkDate.Date).ToList();

                            //get total nr of employees in the company
                            var countEmp = _context.EmployeeInfo.ToList().Count();

                            //only 30% of employees must be at work
                            var NrOfEmployees = countEmp * 30 / 100;

                            //check if nr of seats taken is bigger than 30%
                            if (NrOfSeatsTaken.Count() > Convert.ToInt32(NrOfEmployees))
                            {
                                ViewData["ErrorMsg"] = "There are no more seats for this date available!";
                                return(View());
                            }
                            else
                            {
                                //get total seats in the company
                                var TotalSeats = _context.CompanyInfoSize.FirstOrDefault().TotalSeatingNumbers;

                                int count = 0;

                                if (NrOfSeatsTaken.Count() > 0)
                                {
                                    //add all seats taken to a list

                                    foreach (var item in NrOfSeatsTaken)
                                    {
                                        SeatTakenList.Add(item.SeatNr);
                                    }

                                    //we will random for 100 times(for example) if needed until it finds a nr distinct from the other seats taken
                                    while (count < 100)
                                    {
                                        //generate a random nr for the user
                                        seatNrGenerated = new Random().Next(1, TotalSeats);
                                        //check if this seat generated is already taken

                                        if (!SeatTakenList.Contains(seatNrGenerated))
                                        {
                                            //We found the distinct nr no need to continue further
                                            break;
                                        }
                                        else
                                        {
                                            count++;
                                        }
                                        //in case we iterate all 100 times and still we dont find nr, we show msg so user can retry(pretty unusual)
                                        if (count == 100)
                                        {
                                            ViewData["ErrorMsg"] = "An error happened in generating the seat number, please try again!";
                                            return(View());
                                        }
                                    }
                                }
                                else
                                {
                                    //generate a random nr for the user
                                    seatNrGenerated = new Random().Next(1, TotalSeats);
                                }

                                //assign values to add them to db
                                workVM.SeatNr     = seatNrGenerated;
                                workVM.Idemployee = idEmployee;
                            }
                        }
                    }

                    var workday = new WorkingToday
                    {
                        Idemployee = workVM.Idemployee,
                        SeatNr     = workVM.SeatNr,
                        WorkDate   = workVM.WorkDate
                    };
                    _context.Add(workday);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(workVM));
        }