Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
        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));
        }