/// <summary>
        /// Converts current time term to the corresponding time term with minute time unit.
        /// </summary>
        /// <param name="term">Current term</param>
        /// <returns>Time term.</returns>
        public static TimeTerm ConvertToMinutes(this TimeTerm term)
        {
            var result = new TimeTerm();

            result.CalendarId = term.CalendarId;
            switch (term.Type)
            {
            case CalendarTimeUnit.Hour:
                result.Type  = CalendarTimeUnit.Minute;
                result.Value = term.Value * CalendarConsts.MinutesInHour;
                break;

            case CalendarTimeUnit.WorkingHour:
                result.Type  = CalendarTimeUnit.WorkingMinute;
                result.Value = term.Value * CalendarConsts.MinutesInHour;
                break;

            case CalendarTimeUnit.Day:
                result.Type  = CalendarTimeUnit.Minute;
                result.Value = term.Value * CalendarConsts.MinutesInHour * CalendarConsts.HoursInDay;
                break;

            default:
                result = term;
                break;
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// Adds a value of time units to specified dateTime.
        /// </summary>
        /// <param name="startDate">Calculation pivot.</param>
        /// <param name="term">Calculation term.</param>
        /// <param name="userTimeZone">Current time zone.</param>
        /// <returns>
        /// Calendar time.
        /// </returns>
        public DateTime Add(DateTime startDate, TimeTerm term, TimeZoneInfo userTimeZone)
        {
            var      calendar           = GetLoadedCalendar(term.CalendarId);
            var      convertedStartDate = TimeZoneInfo.ConvertTime(startDate, userTimeZone, calendar.TimeZone);
            var      provider           = GetProvider(calendar, term.Type);
            DateTime result             = provider.Add(convertedStartDate, term.Value);

            return(TimeZoneInfo.ConvertTime(result, calendar.TimeZone, userTimeZone));
        }
        /// <summary>
        /// Calculate solution date by service term and time zone.
        /// </summary>
        /// <param name="startDate">Start date.</param>
        /// <param name="timeZone">Time zone info.</param>
        /// <returns>Solution date.</returns>
        public DateTime CalculateSolutionDate(DateTime startDate, TimeZoneInfo timeZone)
        {
            var      responseCalculationParams = TermParameters.SolutionParams;
            TimeTerm timeTerm = new TimeTerm {
                Type       = responseCalculationParams.Key,
                Value      = responseCalculationParams.Value,
                CalendarId = TermParameters.CalendarId
            };

            return(Utility.Add(startDate, timeTerm, timeZone));
        }
Example #4
0
        /// <summary>
        /// Adds a value of time units to specified dateTime considering already worked time.
        /// </summary>
        /// <param name="startDate">The start date.</param>
        /// <param name="term">The term.</param>
        /// <param name="periods">The working intervals.</param>
        /// <param name="userTimeZone">Current time zone.</param>
        /// <returns>
        /// Calendar time considering already worked time.
        /// </returns>
        public DateTime Add(DateTime startDate, TimeTerm term, IEnumerable <DateTimeInterval> periods,
                            TimeZoneInfo userTimeZone)
        {
            var calendar         = GetLoadedCalendar(term.CalendarId);
            var convertedPeriods = periods.Select(period => new DateTimeInterval {
                Start = TimeZoneInfo.ConvertTime(period.Start, userTimeZone, calendar.TimeZone),
                End   = TimeZoneInfo.ConvertTime(period.End, userTimeZone, calendar.TimeZone)
            });
            var provider      = GetProvider(calendar, term.Type);
            int alreadyWorked = provider.GetTimeUnits(convertedPeriods);

            term.Value -= alreadyWorked;
            return(Add(startDate, term, userTimeZone));
        }
        /// <summary>
        /// Calculate solution date after pause.
        /// </summary>
        /// <param name="startDate">Start date.</param>
        /// <param name="timeUnit">Time unit.</param>
        /// <param name="value">Time unit value.</param>
        /// <param name="timeZone">Time zone.</param>
        /// <returns>Solution date.</returns>
        public DateTime CalculateSolutionDateAfterPause(DateTime startDate, Calendars.TimeUnit timeUnit, int value, TimeZoneInfo timeZone)
        {
            if (_userConnection == null)
            {
                throw new ArgumentException();
            }
            startDate = _userConnection.CurrentUser.GetCurrentDateTime();
            var      parameters = GetTimeUnitDifference(new KeyValuePair <Calendars.TimeUnit, int>(timeUnit, value));
            TimeTerm timeTerm   = new TimeTerm {
                Type       = parameters.Key,
                Value      = parameters.Value,
                CalendarId = TermParameters.CalendarId
            };

            return(Utility.Add(startDate, timeTerm, timeZone));
        }
        /// <summary>
        /// Adds a value of time units to specified dateTime.
        /// </summary>
        /// <param name="startDate">Calculation pivot.</param>
        /// <param name="term">Calculation term.</param>
        /// <param name="userTimeZone">Current time zone.</param>
        /// <returns>
        /// Calendar time.
        /// </returns>
        public DateTime Add(DateTime startDate, TimeTerm term, TimeZoneInfo userTimeZone)
        {
            var calendar           = GetLoadedCalendar(term.CalendarId);
            var convertedStartDate = TimeZoneInfo.ConvertTime(startDate, userTimeZone, calendar.TimeZone);
            var provider           = GetProvider(calendar, term.Type);

            if (_calculationLogStore != null)
            {
                _calculationLogStore.UserTimeZoneInfo         = userTimeZone;
                _calculationLogStore.CalendarTimeZoneInfo     = calendar.TimeZone;
                _calculationLogStore.IsUsedIntervalCalculated = true;
                new TermCalculationLogger(_calculationLogStore).FillUsedTimeIntervals(provider, term, new TermCalculationCalendarDataLoader(_userConnection));
            }
            DateTime result = provider.Add(convertedStartDate, term.Value);

            return(TimeZoneInfo.ConvertTime(result, calendar.TimeZone, userTimeZone));
        }
        public DateTime CalculateReactionTimeByDefaultSetting(int SysMinutes)
        {
            var calendarUtility = new CalendarUtility(UserConnection);

            var startDate = DateTime.Now;

            TimeTerm ReactionTimeTerm = new TimeTerm();

            DateTime ReactionTime = new DateTime();

            ReactionTimeTerm.Type       = CalendarTimeUnit.WorkingMinute;
            ReactionTimeTerm.Value      = SysMinutes;
            ReactionTimeTerm.CalendarId = new Guid(CalendarId);

            ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);

            return(ReactionTime);
        }
        public DateTime AddMinutesInPauseToSolutionDate(DateTime SolDate, int value)
        {
            TimeTerm timeTerm = new TimeTerm();

            timeTerm.Type = CalendarTimeUnit.WorkingMinute;

            timeTerm.Value = value;

            timeTerm.CalendarId = new Guid(CalendarId);

            var calendarUtility = new CalendarUtility(UserConnection);

            CalculatedDates calculatedDates = new CalculatedDates();

            DateTime SolutionTime = calendarUtility.Add(SolDate, timeTerm, System.TimeZoneInfo.Local);

            //string json = JsonConvert.SerializeObject(calculatedDates);
            return(SolutionTime);
        }
        public DateTime CalculateArchiveTime(int wHours, string ServiceId, int indx)
        {
            FindCalendar(ServiceId, indx);

            var calendarUtility = new CalendarUtility(UserConnection);

            var startDate = DateTime.Now;

            TimeTerm ReactionTimeTerm = new TimeTerm();

            DateTime ReactionTime = new DateTime();

            ReactionTimeTerm.Type       = CalendarTimeUnit.WorkingHour;
            ReactionTimeTerm.Value      = wHours;
            ReactionTimeTerm.CalendarId = new Guid(CalendarId);

            ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);

            return(ReactionTime);
        }
        public DateTime _CalculateTerms(string ITServiceId, string categoryname)
        {
            FindITService(ITServiceId, categoryname);

            TimeTerm timeTerm = new TimeTerm();

            if (_solutionUnitType == "bdcbb819-9b26-4627-946f-d00645a2d401")
            {
                //Для рабочего дня
                timeTerm.Type = CalendarTimeUnit.WorkingDay;
            }
            else if (_solutionUnitType == "2a608ed7-d118-402a-99c0-2f583291ed2e")
            {
                //Для рабочего часа
                timeTerm.Type = CalendarTimeUnit.WorkingHour;
            }
            else if (_solutionUnitType == "3ab432a6-ca84-4315-ba33-f343c758a8f0")
            {
                //Для рабочей минуты
                timeTerm.Type = CalendarTimeUnit.WorkingMinute;
            }
            else
            {
                return(DateTime.MinValue);
            }

            timeTerm.Value      = _solutionUnitValue;
            timeTerm.CalendarId = new Guid(CalendarId);

            var calendarUtility = new CalendarUtility(UserConnection);

            var startDate = DateTime.Now;


            CalculatedDates calculatedDates = new CalculatedDates();

            DateTime SolutionTime = calendarUtility.Add(startDate, timeTerm, System.TimeZoneInfo.Local);

            //string json = JsonConvert.SerializeObject(calculatedDates);
            return(SolutionTime);
        }
        public DateTime _CalculateTermsByGroup(string groupId, string ServiceId, int indx)
        {
            FindGroup(groupId);
            FindCalendar(ServiceId, indx);

            var calendarUtility = new CalendarUtility(UserConnection);

            var startDate = DateTime.Now;

            TimeTerm ReactionTimeTerm = new TimeTerm();

            DateTime ReactionTime = new DateTime();

            if (_reactionUnitValue == 0)
            {
                // TimeZoneInfo info = System.TimeZoneInfo.Local;
                // var dateToConvert = DateTime.Now;
                // DateTime ReactionTime = TimeZoneInfo.ConvertTimeToUtc(dateToConvert, info);

                ReactionTimeTerm.Type       = CalendarTimeUnit.Minute;
                ReactionTimeTerm.Value      = 20;
                ReactionTimeTerm.CalendarId = new Guid(CalendarId);

                ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);
            }
            else
            {
                // TimeZoneInfo info = System.TimeZoneInfo.Local;
                // var _dateToConvert = DateTime.Now;
                // DateTime nowTime = TimeZoneInfo.ConvertTimeToUtc(_dateToConvert, info);

                ReactionTimeTerm.Type       = CalendarTimeUnit.WorkingMinute;
                ReactionTimeTerm.Value      = _reactionUnitValue;
                ReactionTimeTerm.CalendarId = new Guid(CalendarId);

                ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);
            }

            //string json = JsonConvert.SerializeObject(calculatedDates);
            return(ReactionTime);
        }
        /// <summary>
        /// Adds a value of time units to specified dateTime considering already worked time.
        /// </summary>
        /// <param name="startDate">The start date.</param>
        /// <param name="term">The term.</param>
        /// <param name="periods">The working intervals.</param>
        /// <param name="userTimeZone">Current time zone.</param>
        /// <returns>
        /// Calendar time considering already worked time.
        /// </returns>
        public DateTime Add(DateTime startDate, TimeTerm term, IEnumerable <DateTimeInterval> periods,
                            TimeZoneInfo userTimeZone)
        {
            var calendar         = GetLoadedCalendar(term.CalendarId);
            var convertedPeriods = periods.Select(period => new DateTimeInterval {
                Start = TimeZoneInfo.ConvertTime(period.Start, userTimeZone, calendar.TimeZone),
                End   = TimeZoneInfo.ConvertTime(period.End, userTimeZone, calendar.TimeZone)
            });
            var provider = GetProvider(calendar, term.Type);

            if (_calculationLogStore != null)
            {
                _calculationLogStore.UserTimeZoneInfo     = userTimeZone;
                _calculationLogStore.CalendarTimeZoneInfo = calendar.TimeZone;
                new TermCalculationLogger(_calculationLogStore).FillUsedTimeIntervals(provider, term, new TermCalculationCalendarDataLoader(_userConnection));
            }
            int alreadyWorked = provider.GetTimeUnits(convertedPeriods);

            term.Value -= alreadyWorked;
            return(Add(startDate, term, userTimeZone));
        }
        public string PercentDiff(string ITServiceId, string GroupId, string dateInput, int timeinpause, string categoryname, int indx)
        {
            DateTime RegTime = DateTime.Parse(dateInput);

            FindCalendar(ITServiceId, indx);

            if (indx == 0)
            {
                FindITService(ITServiceId, categoryname);
            }
            else if (indx == 1)
            {
                FindTechService(ITServiceId, categoryname);
            }
            else
            {
                string errormes = "Не найдены сервисы по индексу: " + indx.ToString();
                return(errormes);
            }
            TimeTerm timeTerm = new TimeTerm();

            if (_solutionUnitType == "bdcbb819-9b26-4627-946f-d00645a2d401")
            {
                //Для рабочего дня
                timeTerm.Type      = CalendarTimeUnit.WorkingMinute;
                _solutionUnitValue = _solutionUnitValue * 60 * 24;
            }
            else if (_solutionUnitType == "2a608ed7-d118-402a-99c0-2f583291ed2e")
            {
                //Для рабочего часа
                timeTerm.Type      = CalendarTimeUnit.WorkingMinute;
                _solutionUnitValue = _solutionUnitValue * 60;
            }
            else if (_solutionUnitType == "3ab432a6-ca84-4315-ba33-f343c758a8f0")
            {
                //Для рабочей минуты
                timeTerm.Type = CalendarTimeUnit.WorkingMinute;
            }
            else
            {
                string errormes = "Единица времени по категории не найдена: " + categoryname;
                return(errormes);
            }

            var calendarUtility      = new CalendarUtility(UserConnection);
            var startDate            = DateTime.Now;
            int _solutionUnitValue50 = _solutionUnitValue / 2;

            timeTerm.Value      = _solutionUnitValue50;
            timeTerm.CalendarId = new Guid(CalendarId);

            timeinpause = timeinpause;

            CalculatedDates calculatedDates = new CalculatedDates();

            calculatedDates.SolutionTime = calendarUtility.Add(RegTime, timeTerm, System.TimeZoneInfo.Local);
            if (timeinpause != 0 && timeinpause != null)
            {
                calculatedDates.SolutionTime = AddMinutesInPauseToSolutionDate(calculatedDates.SolutionTime, timeinpause);
            }

            int      _solutionUnitValue70 = Convert.ToInt16(_solutionUnitValue * 0.70);
            TimeTerm ReactionTimeTerm     = new TimeTerm();

            ReactionTimeTerm.Value      = _solutionUnitValue70;
            ReactionTimeTerm.CalendarId = new Guid(CalendarId);
            ReactionTimeTerm.Type       = CalendarTimeUnit.WorkingMinute;

            calculatedDates.ReactionTime = calendarUtility.Add(RegTime, ReactionTimeTerm, System.TimeZoneInfo.Local);
            if (timeinpause != 0 && timeinpause != null)
            {
                calculatedDates.ReactionTime = AddMinutesInPauseToSolutionDate(calculatedDates.ReactionTime, timeinpause);
            }
            string json = JsonConvert.SerializeObject(calculatedDates);

            return(json);
        }
        public string CalculateTerms(string ITServiceId, string GroupId, string dateInput, int timeinpause, string categoryname, int indx)
        {
            DateTime RegTime = DateTime.Parse(dateInput);

            FindCalendar(ITServiceId, indx);

            if (indx == 0)
            {
                FindITService(ITServiceId, categoryname);
            }
            else if (indx == 1)
            {
                FindTechService(ITServiceId, categoryname);
            }
            else
            {
                string errormes = "Не найдены сервисы по индексу: " + indx.ToString();
                return(errormes);
            }


            //GroupId = "b157e016-99d0-4eb1-8096-3fda7af06210";
            //_solutionUnitType = "bdcbb819-9b26-4627-946f-d00645a2d401";
            //_solutionUnitValue = 2;

            TimeTerm timeTerm = new TimeTerm();

            if (_solutionUnitType == "bdcbb819-9b26-4627-946f-d00645a2d401")
            {
                //Для рабочего дня
                timeTerm.Type = CalendarTimeUnit.WorkingDay;
            }
            else if (_solutionUnitType == "2a608ed7-d118-402a-99c0-2f583291ed2e")
            {
                //Для рабочего часа
                timeTerm.Type = CalendarTimeUnit.WorkingHour;
            }
            else if (_solutionUnitType == "3ab432a6-ca84-4315-ba33-f343c758a8f0")
            {
                //Для рабочей минуты
                timeTerm.Type = CalendarTimeUnit.WorkingMinute;
            }
            else
            {
                string errormes = "Единица времени по категории не найдена: " + categoryname;
                return(errormes);
            }

            timeTerm.Value      = _solutionUnitValue;
            timeTerm.CalendarId = new Guid(CalendarId);

            var calendarUtility = new CalendarUtility(UserConnection);

            var startDate = DateTime.Now;

            timeinpause = timeinpause;

            CalculatedDates calculatedDates = new CalculatedDates();

            calculatedDates.SolutionTime = calendarUtility.Add(RegTime, timeTerm, System.TimeZoneInfo.Local);
            if (timeinpause != 0 && timeinpause != null)
            {
                calculatedDates.SolutionTime = AddMinutesInPauseToSolutionDate(calculatedDates.SolutionTime, timeinpause);
            }
            //FindGroup(GroupId);
            TimeTerm ReactionTimeTerm = new TimeTerm();

            if (_reactionUnitValue == 0)
            {
                //Id указан группы "Диспетчеры" т.к. она по умолчанию, а так же если группа не указана в справочнике _reactionUnitValue == 0
                // TimeZoneInfo info = System.TimeZoneInfo.Local;
                // var dateToConvert = DateTime.Now;
                // DateTime ReactionTime = TimeZoneInfo.ConvertTimeToUtc(dateToConvert, info);

                ReactionTimeTerm.Type       = CalendarTimeUnit.Minute;
                ReactionTimeTerm.Value      = 20;
                ReactionTimeTerm.CalendarId = new Guid(CalendarId);

                calculatedDates.ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);
            }
            else
            {
                // TimeZoneInfo info = System.TimeZoneInfo.Local;
                // var _dateToConvert = DateTime.Now;
                // DateTime nowTime = TimeZoneInfo.ConvertTimeToUtc(_dateToConvert, info);

                ReactionTimeTerm.Type       = CalendarTimeUnit.WorkingMinute;
                ReactionTimeTerm.Value      = _reactionUnitValue;
                ReactionTimeTerm.CalendarId = new Guid(CalendarId);

                calculatedDates.ReactionTime = calendarUtility.Add(startDate, ReactionTimeTerm, System.TimeZoneInfo.Local);
            }

            string json = JsonConvert.SerializeObject(calculatedDates);

            return(json);
        }