/// <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); }
/// <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)); }
/// <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); }