public async Task <IActionResult> Edit(int id, [Bind("IdcompanyInfo,TotalEmployees,TotalSeatingNumbers")] CompanyInfoSize companyInfoSize)
        {
            if (id != companyInfoSize.IdcompanyInfo)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(companyInfoSize);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!CompanyInfoSizeExists(companyInfoSize.IdcompanyInfo))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(companyInfoSize));
        }
        public async Task <IActionResult> Edit(int id, [Bind("Idemployee,EmpNameSurname,EmpCode")] EmployeeInfo employeeInfo)
        {
            if (id != employeeInfo.Idemployee)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(employeeInfo);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!EmployeeInfoExists(employeeInfo.Idemployee))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(employeeInfo));
        }
Esempio n. 3
0
        public async Task <IActionResult> Edit(WorkingToday 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.IdemployeeNavigation.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.IdemployeeNavigation.EmpCode);

                        //check if user has choosen a seat for this date
                        var AlreadyRegistered = _context.WorkingToday.Where(r => r.Idemployee == idEmployee.Idemployee && r.WorkDate.Date == workVM.WorkDate.Date).ToList();
                        if (AlreadyRegistered.Count() > 0)
                        {
                            var GetSeatNr = _context.WorkingToday.FirstOrDefault(r => r.Idemployee == 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.Idemployee;
                                workVM.IdemployeeNavigation.EmpNameSurname = idEmployee.EmpNameSurname;
                            }
                        }
                    }

                    _context.Update(workVM);
                    await _context.SaveChangesAsync();

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