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 }); }
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)); }
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()); }
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))); }
private static ServiceCalendarRecord GetRecord(WorkerCalendarDay <ServiceCalendarRecord> calendarDay, Guid recordId) { return(calendarDay.Records.FirstOrDefault(x => x.Id == recordId)); }