예제 #1
0
        private async Task SwapWorkday(GetWorkingPeriodResponse request, WorkingPeriod workingPeriod)
        {
            var swapWorkDay = await _context.WorkDays.Include(wd => wd.WorkingPeriods).FirstOrDefaultAsync(wd => wd.Date == request.WorkingPeriod.StartTime.Date && wd.ContractId == request.UserContext.CurrentContract.Id);

            if (swapWorkDay == null)
            {
                _requiredCreationOfNewWorkDay = true;

                var newWorkDay = new WorkDay()
                {
                    ContractId  = request.UserContext.CurrentContract.Id,
                    Date        = request.WorkingPeriod.StartTime.Date,
                    WorkDayType = workingPeriod.StartTime.Date.ToWorkDayType(),
                };

                newWorkDay.RequiredHours = newWorkDay.GetRequiredHoursForDay(request.UserContext.CurrentContract.HoursPerWeek);
                workingPeriod.WorkDay    = newWorkDay;
                await _context.WorkDays.AddAsync(newWorkDay);

                return;
            }

            _swappedWorkDayId = swapWorkDay.Id;
            swapWorkDay.WorkingPeriods.Add(workingPeriod);
        }
예제 #2
0
        public void GetWorkTime_Gets_TimeSpan()
        {
            var wp = new WorkingPeriod()
            {
                EndTime = new DateTime(2021, 2, 4, 10, 0, 0), StartTime = new DateTime(2021, 2, 4, 9, 1, 0)
            };

            wp.GetWorkTime().Should().Be(TimeSpan.FromMinutes(59));
        }
예제 #3
0
        public static TimeSpan GetWorkTime(this WorkingPeriod period)
        {
            if (period.EndTime.HasValue)
            {
                return(period.EndTime.Value - period.StartTime);
            }

            return(DateTime.Now - period.StartTime);
        }
예제 #4
0
    bool TryReadElementFromXml(EwsServiceXmlReader reader)
    {
        switch (reader.LocalName)
        {
        case XmlElementNames.TimeZone:
            LegacyAvailabilityTimeZone legacyTimeZone = new LegacyAvailabilityTimeZone();
            legacyTimeZone.LoadFromXml(reader, reader.LocalName);

            this.timeZone = legacyTimeZone.ToTimeZoneInfo();

            return(true);

        case XmlElementNames.WorkingPeriodArray:
            List <WorkingPeriod> workingPeriods = new List <WorkingPeriod>();

            do
            {
                reader.Read();

                if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.WorkingPeriod))
                {
                    WorkingPeriod workingPeriod = new WorkingPeriod();

                    workingPeriod.LoadFromXml(reader, reader.LocalName);

                    workingPeriods.Add(workingPeriod);
                }
            }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.WorkingPeriodArray));

            // Availability supports a structure that can technically represent different working
            // times for each day of the week. This is apparently how the information is stored in
            // Exchange. However, no client (Outlook, OWA) either will let you specify different
            // working times for each day of the week, and Outlook won't either honor that complex
            // structure if it happens to be in Exchange.
            // So here we'll do what Outlook and OWA do: we'll use the start and end times of the
            // first working period, but we'll use the week days of all the periods.
            this.startTime = workingPeriods[0].StartTime;
            this.endTime   = workingPeriods[0].EndTime;

            for (WorkingPeriod workingPeriod in workingPeriods)
            {
                for (DayOfTheWeek dayOfWeek in workingPeriods[0].DaysOfWeek)
                {
                    if (!this.daysOfTheWeek.Contains(dayOfWeek))
                    {
                        this.daysOfTheWeek.Add(dayOfWeek);
                    }
                }
            }

            return(true);

        default:
            return(false);
        }
    }
예제 #5
0
        public void GetWorkTime_Gets_TimeSpan_Without_EndTime()
        {
            var wp = new WorkingPeriod()
            {
                StartTime = DateTime.Now.AddMinutes(-59)
            };

            var minutes = Convert.ToInt32(wp.GetWorkTime().TotalMinutes);

            minutes.Should().Be(59);
        }
        // Token: 0x06000B9D RID: 2973 RVA: 0x0004D360 File Offset: 0x0004B560
        internal void GenerateOutOfPolicyOutOfWorkingHours(WorkingHours wh)
        {
            WorkingPeriod    workingPeriod    = wh.WorkingPeriodArray[0];
            StringCollection stringCollection = new StringCollection();

            string[] dayNames = this.CultureInfo.DateTimeFormat.DayNames;
            for (int i = 0; i < 7; i++)
            {
                DaysOfWeek daysOfWeek = WorkingHours.DayToDays((DayOfWeek)i);
                if ((workingPeriod.DayOfWeek & daysOfWeek) != (DaysOfWeek)0)
                {
                    stringCollection.Add(dayNames[i]);
                }
            }
            ExDateTime now          = ExDateTime.GetNow(this.CalendarItemTz);
            ExDateTime exDateTime   = new ExDateTime(this.CalendarItemTz, now.Year, now.Month, now.Day, this.CultureInfo.Calendar);
            ExDateTime exDateTime2  = exDateTime.AddMinutes((double)workingPeriod.StartTimeInMinutes);
            ExDateTime exDateTime3  = exDateTime.AddMinutes((double)workingPeriod.EndTimeInMinutes);
            string     startDisplay = exDateTime2.ToString(this.CultureInfo.DateTimeFormat.ShortTimePattern);
            string     endDisplay   = exDateTime3.ToString(this.CultureInfo.DateTimeFormat.ShortTimePattern);
            string     daysString;

            if (stringCollection.Count == 0)
            {
                daysString = string.Empty;
            }
            else
            {
                daysString = " " + Strings.descOn(stringCollection[0]).ToString(this.CultureInfo);
                if (stringCollection.Count > 1)
                {
                    for (int j = 1; j < stringCollection.Count - 1; j++)
                    {
                        daysString = Strings.descCommaList(daysString, stringCollection[j]).ToString(this.CultureInfo);
                    }
                    daysString = Strings.descAndList(daysString, stringCollection[stringCollection.Count - 1]).ToString(this.CultureInfo);
                }
            }
            this.GetResponseBody          = (() => this.GenerateResponseWithTimeZoneInfo(Strings.descWorkingHours(startDisplay, endDisplay, daysString).ToString(this.CultureInfo)));
            this.GetResponseSubjectPrefix = delegate()
            {
                if (!this.IsRecurrence)
                {
                    return(Strings.descDeclined.ToString(this.CultureInfo));
                }
                return(Strings.descDeclinedAll.ToString(this.CultureInfo));
            };
            this.GetDelegateBody = (() => this.GenerateOutOfPolicyDelegateResponse(Strings.descDelegateWorkHours(Strings.descWorkingHours(startDisplay, endDisplay, daysString).ToString(this.DelegateCultureInfo))));
        }
예제 #7
0
        public async Task <GetWorkingPeriodResponse> Handle(GetWorkingPeriodRequest request, CancellationToken cancellationToken)
        {
            WorkingPeriod workingPeriod = await _context.WorkingPeriods.Where(x => x.WorkDayId == request.WorkDayId && x.Id == request.WorkingPeriodId)
                                          .SingleOrDefaultAsync();

            if (workingPeriod != null)
            {
                return(new GetWorkingPeriodResponse
                {
                    WorkingPeriod = workingPeriod,
                    StartDate = workingPeriod.StartTime.Date,
                    StartTime = workingPeriod.StartTime.TimeOfDay,
                    EndDate = workingPeriod.EndTime?.Date,
                    EndTime = workingPeriod.EndTime?.TimeOfDay,
                    UserContext = new UserContext {
                        User = request.User, UserEmail = request.UserEmail, UserIsAdmin = request.UserIsAdmin, CurrentContract = request.CurrentContract
                    }
                });
            }

            return(default);
예제 #8
0
 public AttendeeWorkHours(WorkingHours workingHours)
 {
     if (workingHours != null)
     {
         WorkingPeriod workingPeriod = workingHours.WorkingPeriodArray[0];
         TimeSpan      timeSpan      = TimeSpan.FromMinutes((double)workingPeriod.StartTimeInMinutes);
         TimeSpan      timeSpan2     = TimeSpan.FromMinutes((double)workingPeriod.EndTimeInMinutes);
         AttendeeWorkHours.Validate(timeSpan, timeSpan2);
         this.startTime  = timeSpan;
         this.endTime    = timeSpan2;
         this.daysOfWeek = workingPeriod.DayOfWeek;
         this.timeZone   = workingHours.ExTimeZone;
     }
     else
     {
         this.startTime  = TimeSpan.Zero;
         this.endTime    = TimeSpan.Zero;
         this.daysOfWeek = (DaysOfWeek.Sunday | DaysOfWeek.Monday | DaysOfWeek.Tuesday | DaysOfWeek.Wednesday | DaysOfWeek.Thursday | DaysOfWeek.Friday | DaysOfWeek.Saturday);
         this.timeZone   = ExTimeZone.CurrentTimeZone;
     }
     this.CalculateWorkDayInconvenience();
 }
예제 #9
0
        public async Task SaveWorkingPeriodAsync(WorkingPeriodFilter filter, long spentTime)
        {
            var savedTime = await workingPeriodsRepository.GetAsync(filter);

            if (savedTime != null)
            {
                savedTime.Duration += TimeSpan.FromMilliseconds(spentTime);
                await workingPeriodsRepository.UpdateAsync(savedTime);

                return;
            }

            var timeModeltoSave = new WorkingPeriod
            {
                AgentId  = filter.AgentId,
                Date     = DateTime.UtcNow.Date,
                Type     = filter.Type,
                Action   = filter.Action,
                Duration = TimeSpan.FromMilliseconds(spentTime)
            };

            await workingPeriodsRepository.AddAsync(timeModeltoSave);
        }
        public Task UpdateAsync(WorkingPeriod time)
        {
            workingPeriodsDataSet.Update(time);

            return(dbContext.SaveChangesAsync());
        }
        public Task AddAsync(WorkingPeriod time)
        {
            workingPeriodsDataSet.Add(time);

            return(dbContext.SaveChangesAsync());
        }
예제 #12
0
 public void StartWorking()
 {
     WorkingTime         = new WorkingPeriod();
     WorkingTime.StartDt = DateTime.Now;
 }
예제 #13
0
 public DeleteWorkingPeriodRequest(WorkingPeriod workingPeriod)
 {
     WorkingPeriod = workingPeriod;
 }