public async Task CreatingNewCustomersValidations()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));

            var modal = GoToTomorrowCalendarPage()
                        .OpenCalendarModalAtHour(0, 12);

            modal.AddNewCustomer("Перчатка бесконечности")
            .CheckCustomerNameInEditor("Перчатка бесконечности")
            .SetCustomerNameInEditor("")
            .ClickSave();

            modal.CheckCustomerNameErrorValidation()
            .CheckCustomerPhoneErrorValidation()
            .SetCustomerDiscount(10.1m)
            .ClickSave();

            modal.CheckCustomerNameErrorValidation()
            .CheckCustomerPhoneErrorValidation();

            var workerCalendarDay = await ReadWorkerCalendarDay(workerId, DateHelper.Tomorrow());

            workerCalendarDay.Records.Length.Should().Be(0);
        }
        public async Task DateSelectorValidations()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateTime.Now.AddDays(-1), TimePeriod.CreateByHours(10, 16));
            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));

            var page  = GoToTomorrowCalendarPage();
            var modal = page.OpenCalendarModalAtHour(0, 12);

            modal.CheckDate(DateHelper.Tomorrow());

            modal.SetDate(DateTime.Now.AddDays(366))
            .ClickSave()
            .CheckDateValidation("Дата слишком далеко в будущем", Level.Error);

            modal.SetDate("31.02.2019")
            .ClickSave()
            .CheckDateValidation("", Level.Error);

            modal.SetDate(DateTime.Now.AddDays(-1))
            .CheckDateValidation("Дата в прошлом", Level.Warning)
            .SaveAndClose();

            page = page.GoToPrevDay().GoToPrevDay();

            modal = page.CheckRecordsCount(0, 1)
                    .ChangeRecord(0, 0);

            modal.SetDate(DateTime.Now.AddDays(365))
            .CheckTimeValidation("Попадет на нерабочее время сотрудника", Level.Warning)
            .SaveAndClose();

            await CheckSingleRecord(workerId, DateTime.Now.AddDays(365), TimePeriod.CreateByHours(12, 13));
        }
Esempio n. 3
0
        public async Task AddServicesToExistingRecord()
        {
            var withPrice = await GetServicesCards(count : 2);

            var withoutPrice = await GetServiceCardWithoutPrice();

            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), new ServiceCalendarRecord
            {
                Period     = TimePeriod.CreateByHours(13, 14),
                ProductIds = new [] { withPrice[0].Id.Value }
            });

            var page = GoToTomorrowCalendarPage();

            page.ChangeRecord(0, 0)
            .CheckFooterTotal(withPrice[0].PricesInfo.SellPrice)
            .Close();

            var day = await ReadWorkerCalendarDay(workerId, DateHelper.Tomorrow());

            var record = day.Records.Single();

            record.ProductIds = record.ProductIds.Concat(new[] { withoutPrice.Id.Value, withPrice[1].Id.Value }).ToArray();
            await serviceCalendarRepository.WriteAsync(shop.Id, day);

            page = page.Refresh <CalendarPage>();
            page.ChangeRecord(0, 0).CheckFooterTotal(withPrice.Sum(x => x.PricesInfo.SellPrice));
        }
Esempio n. 4
0
        public async Task RecordCancellation()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(13, 14));

            var page = GoToTomorrowCalendarPage();

            page.ShowRecordTooltip(0, 0)
            .ClickCancel();

            var cancelModal = page.WaitModal <CalendarRecordCancelModal>();

            cancelModal.ClickCancelRecord(false)
            .CheckValidationMessage("Укажите причину отмены")
            .SelectNotComeReason()
            .ClickCancelRecord();

            page.CheckRecordsCount(0, 0);

            var record = await ReadSingleRecordTomorrow(workerId);

            record.RecordStatus.Should().Be(RecordStatus.Canceled);
            record.CustomerStatus.Should().Be(CustomerStatus.NotCome);
        }
Esempio n. 5
0
        public async Task UnionNightWorkingDays()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now),
                                     TimePeriod.CreateByHours(20, 24));
            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now).AddDays(1),
                                     TimePeriod.CreateByHours(0, 10),
                                     TimePeriod.CreateByHours(20, 24));
            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now).AddDays(2),
                                     TimePeriod.CreateByHours(0, 10));

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

            var editingView = page.OpenEditor(0, 1).GetEditingView();

            editingView.SetTimeRange("10:00", "20:00", 1);
            editingView.ClickSave();

            page.GetCell(0, 0).WaitFilled();
            page.GetCell(0, 1).WaitFilled();
            page.GetCell(0, 2).WaitFilled();

            page.CheckSingleWorkerCounters("38 ч", "3 дн");

            page.OpenEditor(0, 0).GetInfoView().CheckStartEndTime("20:00", "24:00");
            page.OpenEditor(0, 1).GetInfoView().CheckStartEndTime("00:00", "24:00");
            page.OpenEditor(0, 2).GetInfoView().CheckStartEndTime("00:00", "10:00");
        }
Esempio n. 6
0
        public async Task FillingRecordFields()
        {
            const string customerName   = "Иван";
            const string commentMessage = "Comment message";

            var service = await GetServiceCard();

            var workerId = await CreateWorker();

            var customerId = await CreateCustomer(customerName);

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(13, 14));

            var modal = GoToTomorrowCalendarPage()
                        .ChangeRecord(0, 0);


            modal.SelectCustomerByName(customerName)
            .SelectServicesByNames(service.Name)
            .SetTimeRange("14:00", "15:00")
            .SetComment(commentMessage)
            .SaveAndClose();

            var record = await ReadSingleRecordTomorrow(workerId);

            record.CustomerId.Should().Be(customerId);
            record.Comment.Should().BeEquivalentTo(commentMessage);
            record.ProductIds.Single().Should().Be(service.Id.Value);
            record.Period.Should().BeEquivalentTo(TimePeriod.CreateByHours(14, 15));
        }
        public async Task DeleteMiddlePeriod()
        {
            var periods = new[]
            {
                TimePeriod.CreateByHours(10, 11),
                TimePeriod.CreateByHours(12, 13),
                TimePeriod.CreateByHours(14, 15),
                TimePeriod.CreateByHours(16, 17),
                TimePeriod.CreateByHours(18, 19)
            };
            var expectedPeriods = periods.Take(2).Concat(periods.Skip(3)).ToArray();

            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id, DateHelper.GetFirstDayOfMonth(Now), periods);

            var page   = LoadMainPage().GoToWorkerListPage().OpenCalendar();
            var editor = page.OpenEditor(0, 0).GetEditingView();

            editor.TimeRangeLine.ElementAt(2).DeleteLink.Click();
            editor.TimeRangeLine
            .Select(x => x.ConvertToTimePeriod())
            .Wait()
            .ShouldBeEquivalentTo(expectedPeriods);
            editor.ClickSave();

            var day = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfMonth(Now), worker.Id);

            day.Records.Select(x => x.Period).Should().BeEquivalentTo(expectedPeriods);
        }
        public async Task PeriodicClearingRemoveAll()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id, DateHelper.GetLastDayOfMonth(Now).AddDays(-3), TimePeriod.CreateByHours(21, 23));
            await BuildOneWorkingDay(worker.Id, DateHelper.GetLastDayOfMonth(Now), TimePeriod.CreateByHours(20, 24));
            await BuildOneWorkingDay(worker.Id, DateHelper.GetFirstDayOfNextMonth(Now), TimePeriod.CreateByHours(0, 11), TimePeriod.CreateByHours(20, 23));

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

            var editingView = page.OpenEditor(0, 5).GetEditingView();

            editingView.SetTimeRange("", "", 0);
            editingView.SetTimeRange("", "", 1);
            editingView.SetTimeRange("", "", 2);
            editingView.SetTimeRange("", "", 3);
            editingView.SetTimeRange("", "", 4);
            editingView.SetCalendarMode(CalendarFillingMode.FiveByTwo);
            editingView.ClickSave();

            CheckWholeMonth(page, Now, CalendarFillingMode.Weekend);

            var month = await workerScheduleRepository.ReadShopCalendarMonthAsync(shop.Id, Now);

            month.ShopCalendarDays
            .SelectMany(x => x.WorkerCalendarDays)
            .Where(x => x.WorkerId == worker.Id)
            .All(x => x.Records.Length == 0)
            .Should()
            .BeTrue();

            var nextMonthFirstDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfNextMonth(Now), worker.Id);

            nextMonthFirstDay.Records.Select(x => x.Period).Should().BeEquivalentTo(TimePeriod.CreateByHours(20, 23));
        }
Esempio n. 9
0
        public async Task CreateRecordWithJoiningTwoPeriods()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id, Now.Date, TimePeriod.CreateByHours(10, 12), TimePeriod.CreateByHours(13, 21));

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

            var cellIdx = Now.Day - 1;

            page.GetCell(0, cellIdx).WaitFilled();

            var editingView = page.OpenEditor(0, cellIdx).GetEditingView();

            editingView.SetTimeRange("11:00", "13:35", 4);
            editingView.ClickSave();

            var workerDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, Now.Date, worker.Id);

            workerDay.Records.Should().BeEquivalentTo(
                new WorkerScheduleRecord {
                Period = TimePeriod.CreateByHours(10, 21)
            }
                );
        }
Esempio n. 10
0
        public async Task CreateSingleDayTwoRecordsShouldBeVisible()
        {
            const string startTime0 = "10:00";
            const string endTime0   = "12:00";

            const string startTime1 = "13:00";
            const string endTime1   = "21:00";

            var worker = await CreateWorker();

            var page = LoadMainPage().GoToWorkerListPage();

            page.OpenCalendar();

            var cellIdx = Now.Day - 1;

            page.GetCell(0, cellIdx).WaitNotFilled();

            var editingView = page.OpenEditor(0, cellIdx).GetEditingView();

            editingView.SetTimeRange(startTime0, endTime0);
            editingView.SetTimeRange(startTime1, endTime1, 1);
            editingView.ClickSave();

            var workerDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, Now.Date, worker.Id);

            workerDay.Records.Should().BeEquivalentTo(
                new WorkerScheduleRecord {
                Period = TimePeriod.CreateByHours(10, 12)
            },
                new WorkerScheduleRecord {
                Period = TimePeriod.CreateByHours(13, 21)
            }
                );
        }
Esempio n. 11
0
        public async Task ChangeCustomerToNewWithSameName()
        {
            const string customerName      = "Иван";
            const string newCustomerName   = "Петр из ZZ Top 1969";
            const string newCustomerPhone  = "+7 012 345-67-89";
            const string newCustomerPhone2 = "7999 999-99-99";

            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));

            var customerId = await CreateCustomer(customerName);

            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(12, 13), customerId);

            var page = GoToTomorrowCalendarPage();

            var modal = page.ChangeRecord(0, 0);

            modal.EraseCustomer()
            .AddNewCustomer(newCustomerName)
            .SaveAndClose();

            (await customerRepository.ReadByOrganizationAsync(shop.OrganizationId))
            .Select(x => x.Name)
            .Should()
            .BeEquivalentTo(customerName, newCustomerName);

            page.CheckNameOnRecord(newCustomerName, 0, 0);

            modal = page.ChangeRecord(0, 0);
            modal.CheckCustomerName(newCustomerName)
            .EraseCustomer()
            .AddNewCustomer(newCustomerPhone)
            .SaveAndClose();

            var customerWithPhone = (await ReadCustomersByOrganisation()).Single(x => !string.IsNullOrEmpty(x.Phone));

            customerWithPhone.Phone.Should().BeEquivalentTo(PhoneDbFormat(newCustomerPhone));

            page.CheckNameOnRecord(newCustomerPhone, 0, 0);
            modal = page.ChangeRecord(0, 0);
            modal.CheckCustomerPhone(newCustomerPhone)
            .EraseCustomer()
            .SearchCustomer(newCustomerName)
            .CheckSuggestedCustomers(newCustomerName)
            .AddNewCustomer(newCustomerName)
            .CheckCustomerNameInEditor(newCustomerName)
            .SetCustomerPhone(newCustomerPhone2.Substring(1))
            .SaveAndClose();


            var customersWithPhone = (await ReadCustomersByOrganisation()).Where(x => !string.IsNullOrEmpty(x.Phone));
            var lastCustomer       = customersWithPhone.Single(x => x.Phone.Equals(PhoneDbFormat(newCustomerPhone2)));

            var record = await ReadSingleRecordTomorrow(workerId);

            record.CustomerId.Should().Be(lastCustomer.Id);
        }
Esempio n. 12
0
        public async Task CreateRecordAtLastHour()
        {
            var workerId = await CreateWorker();

            var modal = GoToTomorrowCalendarPage()
                        .OpenCalendarModalAtHour(0, 23);

            modal.CheckTimeRange("23:00", "24:00")
            .SaveAndClose();

            await CheckSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(23, 24));
        }
Esempio n. 13
0
 public override void SetUp()
 {
     base.SetUp();
     products    = marketApiClient.Products.GetAll(shop.Id).Result;
     serviceCard = products.First(x => x.ProductCategory == ProductCategory.Service);
     workerId    = CreateWorker().Result;
     CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16)).Wait();
     CreateSingleRecord(workerId, DateHelper.Tomorrow(), new ServiceCalendarRecord
     {
         Period     = TimePeriod.CreateByHours(13, 14),
         ProductIds = new [] { serviceCard.Id.Value }
     }).Wait();
 }
        public async Task ChangeWorkerInputValidation()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(12, 13));

            var modal = GoToTomorrowCalendarPage()
                        .ChangeRecord(0, 0);

            modal.EraseWorker()
            .ClickSave()
            .CheckWorkerInputInvalid();
        }
        public async Task ExtendNightPeriodAndAddOtherShouldRepeatOtherOnly()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id, DateHelper.GetFirstDayOfMonth(Now), TimePeriod.CreateByHours(20, 24));
            await BuildOneWorkingDay(worker.Id, DateHelper.GetFirstDayOfMonth(Now).AddDays(1), TimePeriod.CreateByHours(0, 10));

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

            var editingView = page.OpenEditor(0, 1).GetEditingView();

            editingView.SetTimeRange("10:00", "11:00");
            editingView.SetTimeRange("12:00", "13:00", 1);
            editingView.SetCalendarMode(CalendarFillingMode.TwoByTwo);
            editingView.ClickSave();

            page.GetCell(0, 0).WaitFilled();
            CheckMonthFor2By2From(page, DateHelper.GetFirstDayOfMonth(Now).AddDays(1));

            var startDate = DateHelper.GetFirstDayOfMonth(Now).AddDays(1);

            var editedDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, startDate, worker.Id);

            editedDay.Records
            .Select(x => x.Period)
            .Count(p => p == TimePeriod.CreateByHours(0, 11))
            .Should().Be(1);

            editedDay.Records
            .Select(x => x.Period)
            .Count(p => p == TimePeriod.CreateByHours(12, 13))
            .Should().Be(1);

            for (var date = startDate.AddDays(1); date <= DateHelper.GetLastDayOfMonth(Now); date = date.AddDays(1))
            {
                var day = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, date, worker.Id);

                var shouldBeEmpty = IsWeekend(CalendarFillingMode.TwoByTwo, date, date.Day - startDate.Day);

                day.Records.Length.Should().Be(shouldBeEmpty ? 0 : 2);

                if (!shouldBeEmpty)
                {
                    day.Records.Select(x => x.Period).Should().BeEquivalentTo(
                        TimePeriod.CreateByHours(10, 11),
                        TimePeriod.CreateByHours(12, 13)
                        );
                }
            }
        }
        public async Task WriteThenRead()
        {
            var shopId   = Guid.NewGuid();
            var workerId = Guid.NewGuid();

            var record = new ServiceCalendarRecord {
                Period = TimePeriod.CreateByHours(12, 13), Comment = "test"
            };

            record.Id = await serviceCalendarApiClient.CreateRecord(shopId, DateTime.Now, workerId, record);

            var day = await serviceCalendarApiClient.GetShopDay(shopId, DateTime.Now);

            day.WorkerCalendarDays.Single().Records.Single().Should().BeEquivalentTo(record);
        }
Esempio n. 17
0
        public async Task EdgeTimesInPeriod(string startTime, string endTime, int expectedStart, int expectedEnd)
        {
            var worker = await CreateWorker();

            var page        = LoadMainPage().GoToWorkerListPage().OpenCalendar();
            var editingView = page.OpenEditor(0, 0).GetEditingView();

            editingView.SetTimeRange(startTime, endTime);
            editingView.ClickSave();

            var createdDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfMonth(Now), worker.Id);

            createdDay.Records.Length.Should().Be(1);
            createdDay.Records.First().Period.Should().BeEquivalentTo(TimePeriod.CreateByHours(expectedStart, expectedEnd));
        }
        public async Task WorkingCalendarFilter()
        {
            await CreateWorker();

            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));

            var page = GoToTomorrowCalendarPage();

            page.CheckWorkingFilter(WorkerFilter.AllWorkers)
            .CheckWorkerColumnCount(2)
            .SetWorkingFilter(WorkerFilter.OnlyWithWorkingDays)
            .CheckWorkerColumnCount(1);
        }
Esempio n. 19
0
        public async Task CreateRecordAndCancelCustomerCreation()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));

            var modal = GoToTomorrowCalendarPage()
                        .OpenCalendarModalAtHour(0, 12);

            modal.AddNewCustomer("Петр")
            .CancelAddingNewCustomer()
            .SaveAndClose();

            (await ReadSingleRecordTomorrow(workerId)).CustomerId.Should().BeNull();
        }
        public async Task PeriodicNightPeriodDoesNotAffectNextMonth()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id, DateHelper.GetFirstDayOfNextMonth(Now), TimePeriod.CreateByHours(20, 23));

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

            var editingView = page.OpenEditor(0, DateHelper.GetLastDayOfMonth(Now).Day - 2).GetEditingView();

            editingView.SetTimeRange("21:00", "10:00");
            editingView.SetCalendarMode(CalendarFillingMode.TwoByTwo);
            editingView.ClickSave();

            var day = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfNextMonth(Now), worker.Id);

            day.Records.Select(x => x.Period).Should().BeEquivalentTo(TimePeriod.CreateByHours(0, 10), TimePeriod.CreateByHours(20, 23));
        }
Esempio n. 21
0
        public async Task CreateRecordAtWorkerDayOff()
        {
            var workerId = await CreateWorker();

            var page = LoadMainPage().GoToCalendarPage()
                       .GoToNextDay()
                       .GoToNextDay()
                       .GoToNextDay();

            var modal = page.OpenCalendarModalAtHour(0, 12);

            modal.CheckTimeValidation("Попадет на нерабочее время сотрудника", Level.Warning)
            .SaveAndClose();

            var workingDay = await ReadWorkerCalendarDay(workerId, DateTime.Now.AddDays(3));

            workingDay.Records.Single().Period.Should().BeEquivalentTo(TimePeriod.CreateByHours(12, 13));
        }
Esempio n. 22
0
        public async Task CheckDoNotCancel()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(13, 14));

            var page = GoToTomorrowCalendarPage();

            page.ShowRecordTooltip(0, 0)
            .ClickCancel();

            page.WaitModal <CalendarRecordCancelModal>().ClickDoNotCancelRecord();

            var record = await ReadSingleRecordTomorrow(workerId);

            record.RecordStatus.Should().Be(RecordStatus.Active);
        }
Esempio n. 23
0
        public async Task NightAndNormalTimePeriods()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now),
                                     TimePeriod.CreateByHours(10, 11),
                                     TimePeriod.CreateByHours(15, 24)
                                     );
            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now).AddDays(1),
                                     TimePeriod.CreateByHours(0, 7));

            var page   = LoadMainPage().GoToWorkerListPage().OpenCalendar();
            var editor = page.OpenEditor(0, 10).GetEditingView();

            editor.CheckTimeRange(10, 11, atRow: 0);
            editor.CheckTimeRange(15, 7, atRow: 1);
        }
        public async Task CreateFiveByTwoWorkingCalendarWithManyPeriods()
        {
            var worker = await CreateWorker();

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

            const int startIdx    = 15;
            var       editingView = page.OpenEditor(0, startIdx).GetEditingView();

            editingView.SetTimeRange("10:00", "12:00");
            editingView.SetTimeRange("13:00", "09:00", 1);
            editingView.SetCalendarMode(CalendarFillingMode.FiveByTwo);
            editingView.ClickSave();

            var startDate = DateHelper.GetFirstDayOfMonth(Now).AddDays(startIdx);

            CheckMonthFor5By2From(page, startDate);

            for (var date = DateHelper.GetFirstDayOfMonth(Now); date <= DateHelper.GetLastDayOfMonth(Now); date = date.AddDays(1))
            {
                var day = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, date, worker.Id);

                var nextDay = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, date.AddDays(1), worker.Id);

                var shouldBeEmpty = date < startDate || IsWeekend(CalendarFillingMode.FiveByTwo, date, date.Day - startDate.Day);

                day.Records
                .Select(x => x.Period)
                .Count(p => p == TimePeriod.CreateByHours(10, 12))
                .Should().Be(shouldBeEmpty ? 0 : 1);

                day.Records
                .Select(x => x.Period)
                .Count(p => p == TimePeriod.CreateByHours(13, 24))
                .Should().Be(shouldBeEmpty ? 0 : 1);

                nextDay.Records
                .Select(x => x.Period)
                .Count(p => p == TimePeriod.CreateByHours(0, 9))
                .Should().Be(shouldBeEmpty ? 0 : 1);
            }
        }
Esempio n. 25
0
        public async Task CreateNightWorkingPeriod(int start, int end)
        {
            var worker = await CreateWorker();

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

            var editingView = page.OpenEditor(0, 0).GetEditingView();

            editingView.SetTimeRange($"{start}:00", $"{end}:00");
            editingView.ClickSave();

            page.GetCell(0, 0).WaitFilled();
            page.GetCell(0, 1).WaitNotFilled();

            var day0 = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfMonth(Now), worker.Id);

            var day1 = await workerScheduleRepository.ReadWorkerCalendarDayAsync(shop.Id, DateHelper.GetFirstDayOfMonth(Now).AddDays(1), worker.Id);

            day0.Records.Select(x => x.Period).Should().BeEquivalentTo(TimePeriod.CreateByHours(start, 24));
            day1.Records.Select(x => x.Period).Should().BeEquivalentTo(TimePeriod.CreateByHours(0, end));
        }
        public async Task CheckRequiredFields()
        {
            var workerId = await CreateWorker();

            var modal = GoToTomorrowCalendarPage()
                        .OpenCalendarModalAtHour(0, DateTime.Now.Hour);

            modal.SetTimeRange("", "")
            .SetDate("")
            .ClickSave()
            .CheckTimeValidation("Укажите время записи", Level.Error)
            .CheckDateValidation("Укажите дату", Level.Error);

            modal.SetTimeRange("10:00", "11:00")
            .SetDate(DateHelper.Tomorrow())
            .SaveAndClose();

            var record = await ReadSingleRecordTomorrow(workerId);

            record.Period.Should().BeEquivalentTo(TimePeriod.CreateByHours(10, 11));
        }
        public async Task TimeSelectorValidations()
        {
            var workerId = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 24));

            var modal = GoToTomorrowCalendarPage()
                        .OpenCalendarModalAtHour(0, 12);

            modal.CheckTimeRange("12:00", "13:00");

            modal.SetTimeRange("13:00", "24:01")
            .ClickSave()
            .CheckTimeValidation("В земных сутках нет такого времени", Level.Error, ErrorSide.Right);

            modal.SetTimeRange("14:00", "13:00")
            .ClickSave()
            .CheckTimeValidation("Начало периода не должно быть позже конца", Level.Error);

            modal.SetTimeRange("13:00", "13:14")
            .ClickSave()
            .CheckTimeValidation("Нельзя сделать запись короче 15 минут", Level.Error);

            modal.SetTimeRange("", "")
            .ClickSave()
            .CheckTimeValidation("Укажите время записи", Level.Error);

            modal.SetTimeRange("14:00", "")
            .ClickSave()
            .CheckTimeValidation("Укажите время записи", Level.Error, ErrorSide.Right);

            modal.SetTimeRange("", "13")
            .ClickSave()
            .CheckTimeValidation("Укажите время записи", Level.Error, ErrorSide.Left);

            modal.SetTimeRange("11:00", "24:00")
            .SetComment("")
            .CheckTimeValidation(null, Level.Ok, ErrorSide.LeftAndRight);
        }
Esempio n. 28
0
        public async Task MultiplePlaceholder()
        {
            var worker = await CreateWorker();

            await BuildOneWorkingDay(worker.Id,
                                     DateHelper.GetFirstDayOfMonth(Now),
                                     TimePeriod.CreateByHours(10, 11),
                                     TimePeriod.CreateByHours(12, 13),
                                     TimePeriod.CreateByHours(14, 15),
                                     TimePeriod.CreateByHours(16, 17),
                                     TimePeriod.CreateByHours(18, 19)
                                     );

            var page   = LoadMainPage().GoToWorkerListPage().OpenCalendar();
            var editor = page.OpenEditor(0, 10).GetEditingView();

            editor.CheckTimeRange(10, 11, atRow: 0);
            editor.CheckTimeRange(12, 13, atRow: 1);
            editor.CheckTimeRange(14, 15, atRow: 2);
            editor.CheckTimeRange(16, 17, atRow: 3);
            editor.CheckTimeRange(18, 19, atRow: 4);
        }
Esempio n. 29
0
        public async Task ChangeWorkerInRecord()
        {
            const string workerName1 = "Анатолий";
            const string workerName2 = "Василий";
            var          workerId1   = await CreateWorker(workerName1);

            var workerId2 = await CreateWorker(workerName2);

            await CreateOneWorkingDay(workerId1, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId1, DateHelper.Tomorrow(), TimePeriod.CreateByHours(12, 13));

            var page = GoToTomorrowCalendarPage();

            page.ChangeRecord(0, 0)
            .EraseWorker()
            .SelectWorkerByName(workerName2)
            .CheckSelectedWorkerName(workerName2)
            .SaveAndClose();

            (await ReadWorkerCalendarDay(workerId2, DateHelper.Tomorrow())).Records.Length.Should().Be(1);
            (await ReadWorkerCalendarDay(workerId1, DateHelper.Tomorrow())).Records.Length.Should().Be(0);
        }
Esempio n. 30
0
        public async Task CreateRecordButWorkerIsBusy()
        {
            var initialPeriod = TimePeriod.CreateByHours(13, 14);
            var workerId      = await CreateWorker();

            await CreateOneWorkingDay(workerId, DateHelper.Tomorrow(), TimePeriod.CreateByHours(10, 16));
            await CreateSingleRecord(workerId, DateHelper.Tomorrow(), initialPeriod);

            var page  = GoToTomorrowCalendarPage();
            var modal = page.OpenCalendarModalAtHour(0, 12);

            modal.SetTimeRange("12:30", "13:30");
            modal.SetComment("");
            modal.CheckTimeValidation("Попадает на другую запись, сотрудник будет занят", Level.Error, ErrorSide.LeftAndRight);
            modal.ClickSave();
            modal.WaitPresence(); // ничего не происходит, окно остаётся открытым
            modal.Close();

            var record = await ReadSingleRecordTomorrow(workerId);

            record.Period.Should().BeEquivalentTo(initialPeriod);
        }