public ActionResult StartWork(StartWorkViewModel startWorkViewModel) { if (startWorkViewModel.WaiterID != 0) { WaiterWork waiterWork = new WaiterWork { WaiterID = startWorkViewModel.WaiterID, StartAt = DateTime.Now, IsClosed = false, }; db.WaiterWorks.Add(waiterWork); var waiter = db.Waiters.SingleOrDefault(p => p.WaiterID == startWorkViewModel.WaiterID); Activities activities = new Activities { ActivityText = waiter.FirstName + " " + waiter.LastName + " has started new shift", ActivityDate = DateTime.Now, WaiterID = waiter.WaiterID }; db.Activities.Add(activities); db.SaveChanges(); return(RedirectToAction("StartWork", new { id = waiterWork.WaiterID })); } return(View(startWorkViewModel)); }
public ActionResult StartWork(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var wa = db.Waiters.SingleOrDefault(p => p.WaiterID == id); if (wa == null) { return(HttpNotFound()); } var ifstillworking = db.WaiterWorks.Include(b => b.WaiterBreaks).SingleOrDefault(p => p.WaiterID == id && p.IsClosed == false); StartWorkViewModel startmodel; if (ifstillworking == null) { startmodel = new StartWorkViewModel { WaiterID = id.Value, }; var waworkmonthly = db.WaiterWorks.Where(p => p.WaiterID == wa.WaiterID && p.StartAt.Year == DateTime.Now.Year && p.StartAt.Month == DateTime.Now.Month).ToList(); var totalminmonthly = waworkmonthly.Sum(p => p.TotalMin); double totalbrake = 0; foreach (var wawo in waworkmonthly) { if (wawo.WaiterBreaks != null) { totalbrake += wawo.WaiterBreaks.Where(c => c.EndAt != null && c.StartAt.Month != DateTime.Now.Month && c.StartAt.Year != DateTime.Now.Year).Sum(p => (p.EndAt.Value - p.StartAt).TotalMinutes); } } if (wa.MaxWorkingHours != 0) { if ((totalminmonthly - totalbrake) > (wa.MaxWorkingHours * 60)) { startmodel.TotalMin = wa.MaxWorkingHours * 60; startmodel.TotalExtaMin = totalminmonthly - totalbrake - (wa.MaxWorkingHours * 60); startmodel.Total_Wage = Convert.ToDecimal(startmodel.TotalMin / 60) * wa.Wage; startmodel.ExtraTimeWage = Convert.ToDecimal(startmodel.TotalExtaMin / 60) * wa.WageafterMaxHours; startmodel.IsExceeded = true; return(View(startmodel)); } else { startmodel.TotalMin = totalminmonthly - totalbrake; startmodel.Total_Wage = Convert.ToDecimal(startmodel.TotalMin / 60) * wa.Wage; startmodel.IsExceeded = false; } } } else { startmodel = new StartWorkViewModel { WaiterID = id.Value, WorkStartID = ifstillworking.WaiterWorkID, Start = ifstillworking.StartAt }; double totalbreakda = 0; if (ifstillworking.WaiterBreaks != null) { startmodel.waiterBreaks = ifstillworking.WaiterBreaks.ToList(); foreach (var waw in startmodel.waiterBreaks) { if (waw.EndAt != null) { totalbreakda += (waw.EndAt.Value - waw.StartAt).TotalMinutes; } else { totalbreakda += (DateTime.Now - waw.StartAt).TotalMinutes; } } } var totalmin = (DateTime.Now - startmodel.Start.Value).TotalMinutes; var waworkmonthly = db.WaiterWorks.Where(p => p.WaiterID == wa.WaiterID && p.StartAt.Year == DateTime.Now.Year && p.StartAt.Month == DateTime.Now.Month).ToList(); var totalminmonthly = waworkmonthly.Sum(p => p.TotalMin); double totalbrake = 0; foreach (var wawo in waworkmonthly) { if (wawo.WaiterBreaks != null) { totalbrake += wawo.WaiterBreaks.Where(c => c.EndAt != null && c.StartAt.Month != DateTime.Now.Month && c.StartAt.Year != DateTime.Now.Year).Sum(p => (p.EndAt.Value - p.StartAt).TotalMinutes); } } if (wa.MaxWorkingHours != 0) { if ((totalmin + totalminmonthly - totalbrake - totalbreakda) > (wa.MaxWorkingHours * 60)) { startmodel.TotalMin = wa.MaxWorkingHours * 60; startmodel.TotalExtaMin = totalminmonthly + totalmin - totalbrake - totalbreakda - (wa.MaxWorkingHours * 60); startmodel.Total_Wage = Convert.ToDecimal(startmodel.TotalMin / 60) * wa.Wage; startmodel.ExtraTimeWage = Convert.ToDecimal(startmodel.TotalExtaMin / 60) * wa.WageafterMaxHours; startmodel.TotalMinDaily = totalmin - totalbreakda; startmodel.TotalBreakDaily = totalbreakda; startmodel.IsExceeded = true; return(View(startmodel)); } else { startmodel.TotalMin = totalminmonthly - totalbrake; startmodel.Total_Wage = Convert.ToDecimal(startmodel.TotalMin / 60) * wa.Wage; startmodel.TotalMinDaily = totalmin - totalbreakda; startmodel.TotalBreakDaily = totalbreakda; startmodel.IsExceeded = false; } } } return(View(startmodel)); }