private WorkerCalendarDayBuilder(Guid workerId, DateTime date)
 {
     workerCalendarDay = new WorkerCalendarDay <T>
     {
         WorkerId = workerId,
         Date     = date,
         Records  = new T[0],
     };
 }
        public async Task WriteAsync(Guid shopId, WorkerCalendarDay <T> workerCalendarDay)
        {
            var month = DateHelper.GetFirstDayOfMonth(workerCalendarDay.Date);

            using (await locker.LockAsync(GetLockId(shopId, month)))
            {
                await storage.WriteAsync(ToStorageElement(shopId, workerCalendarDay));
                await UpdateVersionAsync(shopId, month);
            }
        }
 private CalendarDayStorageElement ToStorageElement(Guid shopId, WorkerCalendarDay <T> workerScheduleDay)
 {
     return(new CalendarDayStorageElement
     {
         ShopId = shopId,
         Month = mapper.Map <LocalDate>(DateHelper.GetFirstDayOfMonth(workerScheduleDay.Date)),
         WorkerId = workerScheduleDay.WorkerId,
         Date = mapper.Map <LocalDate>(workerScheduleDay.Date),
         Records = serializer.Serialize(workerScheduleDay.Records),
     });
 }
 protected async Task BuildOneWorkingDay(Guid workerId, DateTime date, params TimePeriod[] periods)
 {
     var workingDay = new WorkerCalendarDay <WorkerScheduleRecord>
     {
         WorkerId = workerId,
         Date     = date,
         Records  = periods.Select(p => new WorkerScheduleRecord {
             Period = p
         }).ToArray()
     };
     await workerScheduleRepository.WriteAsync(shop.Id, new [] { workingDay });
 }
 protected async Task CreateOneWorkingDay(Guid workerId, DateTime date, TimePeriod period)
 {
     var workingDay = new WorkerCalendarDay <WorkerScheduleRecord>
     {
         WorkerId = workerId,
         Date     = date,
         Records  = new[] { new WorkerScheduleRecord {
                                Period = period
                            } }
     };
     await workerScheduleRepository.WriteAsync(shop.Id, new [] { workingDay });
 }
Exemple #6
0
        public async Task CreateSingleDayWhenTwoWorkers()
        {
            #region Create workers

            var workers = new[] { new Worker {
                                      FullName = "Василий"
                                  }, new Worker {
                                      FullName = "Петр"
                                  } };
            var createdWorkers = await workerRepository.CreateManyAsync(shop.Id, workers);

            var middleOfMonth = DateHelper.GetMiddleOfMonth(Now);
            var calendarDay   = new WorkerCalendarDay <WorkerScheduleRecord>
            {
                WorkerId = createdWorkers[0].Id,
                Date     = middleOfMonth,
                Records  = new[]
                {
                    new WorkerScheduleRecord
                    {
                        Period = GetTimePeriod(8, 22)
                    }
                }
            };
            await workerScheduleRepository.WriteAsync(shop.Id, calendarDay);

            #endregion

            var page = LoadMainPage().GoToWorkerListPage();
            page.OpenCalendar();
            page.CheckWorkerItems(workers);

            const int startHours  = 10;
            const int endHours    = 17;
            var       editingView = page.OpenEditor(1, Now.Day - 1).GetEditingView();
            editingView.SetTimeRange($"{startHours:00}:00", $"{endHours:00}:00");
            editingView.ClickSave();

            var createdDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, middleOfMonth, createdWorkers[0].Id);

            createdDay.Records.Single().Period.Should()
            .BeEquivalentTo(GetTimePeriod(8, 22));

            createdDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, Now, createdWorkers[1].Id);

            createdDay.Records.Single().Period.Should()
            .BeEquivalentTo(GetTimePeriod(startHours, endHours));
        }
Exemple #7
0
        public ValidationResult Validate(WorkerCalendarDay <T> calendarDay)
        {
            var validationResult = Validate(calendarDay.Records);

            if (!validationResult.IsSuccess)
            {
                return(validationResult);
            }

            var date = calendarDay.Date;

            if (date != date.Date)
            {
                return(ValidationResult.Fail("", "Expected date only"));
            }

            return(ValidationResult.Success());
        }
Exemple #8
0
 private static bool ValidateSlot(WorkerCalendarDay <ServiceCalendarRecord> calendarDay, Guid recordId, TimePeriod period)
 {
     return(calendarDay.Records.All(x => x.Id == recordId || x.RecordStatus != RecordStatus.Active || !x.Period.IntersectsWith(period)));
 }
Exemple #9
0
 private static ServiceCalendarRecord GetRecord(WorkerCalendarDay <ServiceCalendarRecord> calendarDay, Guid recordId)
 {
     return(calendarDay.Records.FirstOrDefault(x => x.Id == recordId));
 }