コード例 #1
0
        public JsonResult ScheduleCustomer(ScheduleCustomerModel scheduleCustomerModel)
        {
            if (scheduleCustomerModel is null)
            {
                return(Json("Object cannot be null."));
            }

            if (!c_listOfBarbers.Contains(scheduleCustomerModel.BarberName))
            {
                return(Json("Barber must be one of the following: " + string.Join(", ", c_listOfBarbers)));
            }

            // get list of already scheduled customers from session.
            List <ScheduledCustomerModel> currentScheduledCustomers = scheduledCustomers;

            // Check to see we aren't scheduling the same customer twice.
            if (currentScheduledCustomers.Any(a => a.Name == scheduleCustomerModel.Name && a.PhoneNumber == scheduleCustomerModel.PhoneNumber))
            {
                return(Json("Customer is already scheduled."));
            }

            ScheduledCustomerModel newScheduledCustomerModel = new ScheduledCustomerModel
            {
                AppointmentID       = GetAppointmentId(),
                Name                = scheduleCustomerModel.Name,
                PhoneNumber         = scheduleCustomerModel.PhoneNumber,
                BarberNameRequested = scheduleCustomerModel.BarberName
            };

            bool barberWasAvailable = false;

            // If the barber requested is not busy, assign them to that barber.
            if (!currentScheduledCustomers.Any(a => a.CurrentBarberAssigned == scheduleCustomerModel.BarberName))
            {
                barberWasAvailable = true;
                newScheduledCustomerModel.CurrentBarberAssigned = scheduleCustomerModel.BarberName;
            }

            currentScheduledCustomers.Add(newScheduledCustomerModel);

            // update the session data.
            scheduledCustomers = currentScheduledCustomers;

            if (barberWasAvailable)
            {
                return(Json("Success. Customer is seeing barber."));
            }
            else
            {
                // exclude the customers who are already currently assigned a barber.
                return(Json(String.Format("Success. Customer is {0} in line.", currentScheduledCustomers.Where(w => w.CurrentBarberAssigned is null).Count())));
            }
        }
コード例 #2
0
        public JsonResult SetCustomerInBarberChair(int appointmentId, string barberNameRequested, BarberScheduleType barberScheduleType)
        {
            List <ScheduledCustomerModel> currentScheduledCustomers = scheduledCustomers;

            // Identify the customer sitting in the chair with this AppointmentID.
            ScheduledCustomerModel customerInRow = currentScheduledCustomers.SingleOrDefault(a => a.AppointmentID == appointmentId);

            // identify the barber that has the lowest wait time.
            List <Tuple <string, decimal> > barbersAndWaitTimes = GetBarberNamesAndWaitTimes();

            if (barberScheduleType == BarberScheduleType.InChair)
            {
                // Find the customer we need to remove assigned to this barber.
                ScheduledCustomerModel customerToRemove = currentScheduledCustomers.Where(w => w.CurrentBarberAssigned == barberNameRequested).FirstOrDefault();
                if (customerToRemove != null)
                {
                    currentScheduledCustomers.Remove(customerToRemove);
                }

                // Update the AppointmentID passed in to be assigned the barber desired.
                foreach (ScheduledCustomerModel cust in currentScheduledCustomers)
                {
                    if (cust.AppointmentID == customerInRow.AppointmentID)
                    {
                        cust.CurrentBarberAssigned = customerInRow.BarberNameRequested;
                    }
                }
            }
            else if (barberScheduleType == BarberScheduleType.NextAvailableBarber)
            {
                // It's possible their preferred barber is the one with lowest wait time.
                // In this situation, lets favor their desired barber.
                decimal minWaitTime = barbersAndWaitTimes.Select(s => s.Item2).Min();

                // find barbers with the min wait time.
                List <string> barbersWithMinWaitTime = barbersAndWaitTimes
                                                       .Where(w => w.Item2 == minWaitTime)
                                                       .Select(s => s.Item1)
                                                       .ToList();

                // if none of the barbers with lowest wait times are the preferred barber, use another barber.
                if (!barbersWithMinWaitTime.Any(a => a == barberNameRequested))
                {
                    barberNameRequested = barbersWithMinWaitTime.First();
                }

                // Find the customer we need to remove assigned to this barber.
                ScheduledCustomerModel customerToRemove = currentScheduledCustomers.Where(w => w.CurrentBarberAssigned == barberNameRequested).FirstOrDefault();
                if (customerToRemove != null)
                {
                    currentScheduledCustomers.Remove(customerToRemove);
                }

                // Update the Customer passed in to now be assigned to the barber they requested.
                foreach (ScheduledCustomerModel cust in currentScheduledCustomers)
                {
                    if (cust.AppointmentID == appointmentId)
                    {
                        cust.CurrentBarberAssigned = barberNameRequested;
                    }
                }
            }
            else if (barberScheduleType == BarberScheduleType.MarkDone)
            {
                string barberNameNowUnassigned = customerInRow.CurrentBarberAssigned;

                // Remove the customer in row, because we've marked them as done.
                if (customerInRow != null)
                {
                    currentScheduledCustomers.Remove(customerInRow);
                }

                // find the Customer that is next in line to sit in this barber's chair.
                ScheduledCustomerModel nextCustomerToBeAssigned = currentScheduledCustomers
                                                                  .Where(w => w.BarberNameRequested == barberNameNowUnassigned)
                                                                  .OrderBy(o => o.AppointmentID) // Find the customer that has been waiting the longest.
                                                                  .FirstOrDefault();

                if (nextCustomerToBeAssigned != null)
                {
                    foreach (ScheduledCustomerModel cust in currentScheduledCustomers)
                    {
                        if (cust.AppointmentID == nextCustomerToBeAssigned.AppointmentID)
                        {
                            cust.CurrentBarberAssigned = nextCustomerToBeAssigned.BarberNameRequested;                             // careful here, the barberNameRequested here is not what we want to assign.
                        }
                    }
                }
            }

            // update the Session data.
            scheduledCustomers = currentScheduledCustomers;

            return(Json("Success"));
        }
コード例 #3
0
        public JsonResult ScheduleCustomer(ScheduleCustomerModel scheduleCustomerModel)
        {
            if (scheduleCustomerModel is null)
            {
                return(Json("Error: Object cannot be null."));
            }

            if (!c_listOfBarbers.Contains(scheduleCustomerModel.BarberName))
            {
                return(Json("Error: Barber must be one of the following: " + string.Join(", ", c_listOfBarbers)));
            }

            if (string.IsNullOrWhiteSpace(scheduleCustomerModel.Name))
            {
                return(Json("Error: Must provide a customer name."));
            }

            if (string.IsNullOrWhiteSpace(scheduleCustomerModel.PhoneNumber))
            {
                return(Json("Error: Must provide a phone number."));
            }

            // get list of already scheduled customers from session.
            List <ScheduledCustomerModel> currentScheduledCustomers = scheduledCustomers;

            // Check to see we aren't scheduling the same customer twice.
            if (currentScheduledCustomers.Any(a => a.Name.ToLower() == scheduleCustomerModel.Name.ToLower() && a.PhoneNumber == scheduleCustomerModel.PhoneNumber))
            {
                return(Json("Warning: Customer is already scheduled."));
            }

            ScheduledCustomerModel newScheduledCustomerModel = new ScheduledCustomerModel
            {
                AppointmentID       = GetAppointmentId(),
                Name                = scheduleCustomerModel.Name,
                PhoneNumber         = scheduleCustomerModel.PhoneNumber,
                BarberNameRequested = scheduleCustomerModel.BarberName
            };

            bool barberWasAvailable = false;

            // If the barber requested is not busy, assign them to that barber.
            if (!currentScheduledCustomers.Any(a => a.CurrentBarberAssigned == scheduleCustomerModel.BarberName))
            {
                barberWasAvailable = true;
                newScheduledCustomerModel.CurrentBarberAssigned = scheduleCustomerModel.BarberName;
            }

            currentScheduledCustomers.Add(newScheduledCustomerModel);

            // update the session data.
            scheduledCustomers = currentScheduledCustomers;

            if (barberWasAvailable)
            {
                return(Json("Success: Customer is seeing barber."));
            }
            else
            {
                int    positionInLine    = currentScheduledCustomers.Where(w => w.CurrentBarberAssigned is null).Count();
                string ordinalFormatting = OrdinalUtility.ToOrdinal(positionInLine);

                // exclude the customers who are already currently assigned a barber.
                return(Json(String.Format("Success: Customer is {0}{1} in line.", positionInLine, ordinalFormatting)));
            }
        }