private ServiceTermResponse ExecuteCalculateTerms(DateTime startDate, CaseTermInterval termInterval, TimeZoneInfo userTimeZone, CaseTermStates mask) { var calendarutility = new CalendarUtility(UserConnection); var response = new ServiceTermResponse(); response.ReactionTime = mask.HasFlag(CaseTermStates.ContainsResponse) ? calendarutility.Add(startDate, termInterval.ResponseTerm, userTimeZone) as DateTime? : null; response.SolutionTime = mask.HasFlag(CaseTermStates.ContainsResolve) ? calendarutility.Add(startDate, termInterval.ResolveTerm, userTimeZone) as DateTime? : null; return(response); }
private ServiceTermResponse ExecuteRecalculateTerms(DateTime startDate, CaseTermInterval termInterval, IEnumerable <DateTimeInterval> intervals, TimeZoneInfo userTimeZone, CaseTermStates mask) { var calendarutility = new CalendarUtility(UserConnection); var response = new ServiceTermResponse(); var dateTime = ConvertFromUtc(DateTime.UtcNow, userTimeZone); response.ReactionTime = mask.HasFlag(CaseTermStates.ContainsResponse) ? calendarutility.Add(dateTime, termInterval.ResponseTerm, intervals, userTimeZone) as DateTime? : null; response.SolutionTime = mask.HasFlag(CaseTermStates.ContainsResolve) ? calendarutility.Add(dateTime, termInterval.ResolveTerm, intervals, userTimeZone) as DateTime? : null; return(response); }
public ServiceTermResponse CalculateTerms(Dictionary <string, object> arguments, DateTime startDate) { var response = new ServiceTermResponse(); var userConnectionArg = new ConstructorArgument("userConnection", UserConnection); var argumentsArg = new ConstructorArgument("arguments", arguments); var selector = ClassFactory.Get <CaseTermIntervalSelector>(userConnectionArg); //var termInterval = selector.Get(arguments) as CaseTermInterval; var termInterval = new CaseTermInterval(); var d = ""; termInterval.ResolveTerm = new TimeTerm(); termInterval.ResolveTerm.CalendarId = new Guid("F0FF1F0E-F46B-1410-1787-0026185BFCD3"); termInterval.ResolveTerm.Type = TimeUnit.WorkingHour; termInterval.ResolveTerm.Value = 1; var mask = termInterval.GetMask(); var intervalResolveTerm = 0; var procent = 0; var userTimeZone = UserConnection.CurrentUser.TimeZone; if (mask != CaseTermStates.None) { var intervalReader = ClassFactory.Get <CaseActiveIntervalReader>(userConnectionArg, argumentsArg); IEnumerable <DateTimeInterval> intervals = intervalReader.GetActiveIntervals(); if (intervals.IsEmpty()) { //termInterval.ResolveTerm.Value = 10; response = ExecuteCalculateTerms(startDate, termInterval, userTimeZone, mask); } else { var dateTime = ConvertFromUtc(DateTime.UtcNow, userTimeZone); response = ExecuteRecalculateTerms(dateTime, termInterval, intervals, userTimeZone, mask); } } //поиск порядка уведомлений ICLTimeToNotifyDic var caseId = Guid.Parse(arguments["CaseId"].ToString()); var accountId = Guid.Parse(arguments["AccountId"].ToString()); var del = new Delete(UserConnection).From("ICLCaseReminder") .Where("ICLCaseId").IsEqual(new QueryParameter(caseId)) as Delete; del.Execute(); if (termInterval.ResolveTerm.Type == TimeUnit.WorkingHour || termInterval.ResolveTerm.Type == TimeUnit.Hour) { intervalResolveTerm = termInterval.ResolveTerm.Value * 60;//минуты } if (termInterval.ResolveTerm.Type == TimeUnit.WorkingDay || termInterval.ResolveTerm.Type == TimeUnit.Day) { intervalResolveTerm = termInterval.ResolveTerm.Value * 60 * 24;//минуты } if (termInterval.ResolveTerm.Type == TimeUnit.WorkingMinute || termInterval.ResolveTerm.Type == TimeUnit.Minute) { intervalResolveTerm = termInterval.ResolveTerm.Value;//минуты } termInterval.ResolveTerm.Type = TimeUnit.WorkingMinute; var collnotify = FindCollectionTimeNotify(accountId); foreach (ICLTimeToNotifyDic notify in collnotify) { //проценты if (notify.ICLUnitId.Equals(new Guid("7a5e5d2d-7400-4469-9674-3a74d6b32de4"))) { termInterval.ResolveTerm.Value = intervalResolveTerm * notify.ICLValue / 100; } else { termInterval.ResolveTerm.Value = notify.ICLValue; } var notifyTime = ExecuteCalculateTerms(startDate, termInterval, userTimeZone, mask); ICLCaseReminder iclCaseReminder = new ICLCaseReminder(UserConnection); iclCaseReminder.SetDefColumnValues(); iclCaseReminder.ICLCaseId = caseId; iclCaseReminder.ICLTimeSend = notifyTime.SolutionTime.GetValueOrDefault(); iclCaseReminder.ICLTimeRuleId = notify.Id; if (iclCaseReminder.ICLTimeSend < ConvertFromUtc(DateTime.UtcNow, userTimeZone)) { iclCaseReminder.ICLStatusId = new Guid("095CB711-8480-4EA5-9D25-E567648A3255"); //просрочена } else { iclCaseReminder.ICLStatusId = new Guid("be9c92ca-b092-4950-8548-bb2160a61f8b");//не начата } iclCaseReminder.ICLOverTimeSolution = intervalResolveTerm - termInterval.ResolveTerm.Value; iclCaseReminder.Save(); } return(response); }