Ejemplo n.º 1
0
        internal static IDictionary <DayOfWeek, Dictionary <DateTime, bool> > GetFinalOpening(IList <WorkerUser> workerUsers, SubTask subTask)
        {
            IDictionary <DayOfWeek, Dictionary <DateTime, bool> > finalOpening = new Dictionary <DayOfWeek, Dictionary <DateTime, bool> >();
            Dictionary <DayOfWeek, OpeningDay> Openings = new Dictionary <DayOfWeek, OpeningDay>();

            for (int i = 1; i < 8; i++)
            {
                Openings.Add(DateTime.Today.AddDays(i).DayOfWeek, GetOpeningByDayOfWeek(DateTime.Today.AddDays(i).DayOfWeek, subTask.CompanyUser.Opening));
            }

            int dayCounter = 0;

            foreach (var o in Openings)
            {
                dayCounter++;
                Dictionary <DateTime, bool> isFreeAtTime = new Dictionary <DateTime, bool>();

                for (DateTime i = o.Value.Start; i < o.Value.End; i = i.AddMinutes(subTask.EstimtedTime))
                {
                    DateTime realDateTime = DateTime.Today;

                    realDateTime = realDateTime.AddDays(dayCounter);
                    realDateTime = realDateTime.AddHours(i.Hour);
                    realDateTime = realDateTime.AddMinutes(i.Minute);

                    bool isWorkerForTheJob = true;

                    if (WorkerHandler.GetWorkerForTheJob(workerUsers, realDateTime, realDateTime.AddMinutes(subTask.EstimtedTime)) == null)
                    {
                        isWorkerForTheJob = false;
                    }

                    isFreeAtTime.Add(realDateTime, isWorkerForTheJob);
                }

                finalOpening.Add(o.Key, isFreeAtTime);
            }

            return(finalOpening);
        }
Ejemplo n.º 2
0
        public static async Task <Work> MakeAppointmentAsync(DateTime appointment, int carId, SubTask subTask, string description)
        {
            subTask = await ApplicationEntityManager.GetSubTaskByIdAsync(subTask.Id);

            IList <WorkerUser> workerUsers = await ApplicationEntityManager.GetWorkerUsersByCompanyIdAsync(subTask.CompanyUserId);

            workerUsers.Shuffle();

            WorkerUser workerForTheJob = WorkerHandler.GetWorkerForTheJob(workerUsers, appointment, appointment.AddMinutes(subTask.EstimtedTime));

            int?openServiceId = await ServiceExistsAsync(carId);

            Car car = await ApplicationEntityManager.GetCarByIdAsync(carId);

            Service service;

            if (!openServiceId.HasValue)
            {
                service = new Service
                {
                    StartingTime = appointment,
                    EndTime      = appointment.AddMinutes(subTask.EstimtedTime),
                    TotalPrice   = subTask.EstimatedPrice,
                    CarId        = carId
                };

                await ApplicationEntityManager.SaveServiceAsync(service);
            }
            else
            {
                service = await ApplicationEntityManager.GetServcieByIdAsync(openServiceId.Value);

                if (service.Works.ElementAt(0).SubTask.CompanyUserId == subTask.CompanyUserId)
                {
                    service.TotalPrice = 0;
                    foreach (var w in service.Works)
                    {
                        service.TotalPrice += w.Price;
                    }
                    service.TotalPrice += subTask.EstimatedPrice;

                    if (appointment < service.StartingTime)
                    {
                        service.StartingTime = appointment;
                    }

                    if (appointment.AddMinutes(subTask.EstimtedTime) > service.EndTime)
                    {
                        service.EndTime = appointment.AddMinutes(subTask.EstimtedTime);
                    }

                    ApplicationEntityManager.ModifyService(service);
                }
                else
                {
                    service = new Service
                    {
                        StartingTime = appointment,
                        EndTime      = appointment.AddMinutes(subTask.EstimtedTime),
                        TotalPrice   = subTask.EstimatedPrice,
                        CarId        = carId
                    };

                    await ApplicationEntityManager.SaveServiceAsync(service);
                }
            }

            Work work = new Work
            {
                StartingTime = appointment,
                EndTime      = appointment.AddMinutes(subTask.EstimtedTime),
                Price        = subTask.EstimatedPrice,
                SubTaskId    = subTask.Id,
                ServiceId    = service.Id,
                StateId      = 2,
                WorkerUserId = workerForTheJob.Id
            };

            await ApplicationEntityManager.SaveWorkAsync(work);

            Message message = new Message
            {
                SenderId = car.ClientUserId,
                Text     = description,
                WorkId   = work.Id,
                Time     = DateTime.Now
            };

            await ApplicationEntityManager.SaveMessageAsync(message);

            return(work);
        }