/// <summary> /// Create supervisor approval notification card. /// </summary> /// <param name="context">Dialog context.</param> /// <param name="reqId">Created request Id.</param> /// <param name="personNumber">Person number of request creator.</param> /// <param name="paycode">Paycode for request.</param> /// <param name="timePeriod">Time period for request.</param> /// <param name="details">Request details from API.</param> /// <param name="note">Comment by requestor while creating request.</param> /// <param name="requestor">Request creator name.</param> /// <param name="comments">List of comments to which note will be attached.</param> /// <param name="advancedTimeOff">Advanced time off request object.</param> /// <returns>Supervisor notification card.</returns> public AdaptiveCard GetSupervisorNotificationCard(IDialogContext context, string reqId, string personNumber, string paycode, string timePeriod, GlobalTimeOffRequestItem details, string note, string requestor, Models.ResponseEntities.CommentList.Response comments, AdvancedTimeOff advancedTimeOff = null) { var repoMessage = context.MakeMessage(); var adaptiveCard = File.ReadAllText(HttpContext.Current.Server.MapPath("/Cards/AdaptiveCards/TimeOff/SupervisorNotificationCard.json")); var activity = context.Activity as Activity; JToken token = JObject.Parse(activity.Value.ToString()); DateTime sdt, edt; if (advancedTimeOff == null) { DateTime.TryParse((string)token.SelectToken("sdt"), CultureInfo.InvariantCulture, DateTimeStyles.None, out sdt); DateTime.TryParse((string)token.SelectToken("edt"), CultureInfo.InvariantCulture, DateTimeStyles.None, out edt); } else { DateTime.TryParse(advancedTimeOff.sdt, CultureInfo.InvariantCulture, DateTimeStyles.None, out sdt); DateTime.TryParse(advancedTimeOff.edt, CultureInfo.InvariantCulture, DateTimeStyles.None, out edt); } edt = edt.AddHours(23); edt = edt.AddMinutes(59); var days = (int)Math.Round(edt.Subtract(sdt).TotalDays, MidpointRounding.AwayFromZero); adaptiveCard = adaptiveCard.Replace("{Title}", KronosResourceText.TimeOffRequstText).Replace("{Status_txt}", KronosResourceText.Status).Replace("{Employee_txt}", KronosResourceText.Employee); adaptiveCard = adaptiveCard.Replace("{Paycode_txt}", KronosResourceText.PayCode).Replace("{Date_txt}", KronosResourceText.Date).Replace("{TimePeriod_txt}", KronosResourceText.TimePeriod); adaptiveCard = adaptiveCard.Replace("{Note_txt}", KronosResourceText.Note).Replace("{SelectComment}", KronosResourceText.SelectComment).Replace("{EnterNote}", KronosResourceText.EnterNote); adaptiveCard = adaptiveCard.Replace("{Submit}", KronosResourceText.Submit).Replace("{Refuse}", KronosResourceText.Refuse); adaptiveCard = adaptiveCard.Replace("{Days}", days.ToString() + (days > 1 ? " Days" : " Day")); adaptiveCard = adaptiveCard.Replace("{StartDate}", sdt.ToString("MMM d, yyyy", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{Approve}", KronosResourceText.Approve).Replace("{Submit}", KronosResourceText.Submit).Replace("{Refuse}", KronosResourceText.Refuse).Replace("{ShowHistory}", KronosResourceText.ShowHistory); if (timePeriod.ToLowerInvariant() == Constants.FullDay.ToLowerInvariant() && days == 0) { adaptiveCard = adaptiveCard.Replace("- {EndDate}", string.Empty); } else { adaptiveCard = adaptiveCard.Replace("{EndDate}", edt.ToString("MMM d, yyyy", CultureInfo.InvariantCulture)); } adaptiveCard = adaptiveCard.Replace("{RequestId}", reqId).Replace("{PersonNumber}", personNumber).Replace("{Status}", KronosResourceText.Submitted); adaptiveCard = adaptiveCard.Replace("{Color}", Constants.Default).Replace("{Employee}", requestor).Replace("{PayCode}", paycode); adaptiveCard = adaptiveCard.Replace("{TimePeriod}", timePeriod).Replace("{QueryDateSpan}", sdt.ToString("M/d/yyyy", CultureInfo.InvariantCulture) + "-" + edt.ToString("M/d/yyyy", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{Note}", note ?? KronosResourceText.NoComment); var historyItem = File.ReadAllText(HttpContext.Current.Server.MapPath("/Cards/AdaptiveCards/TimeOff/HistoryItem.json")); var first = true; StringBuilder sb = new StringBuilder(); foreach (var item in details?.RequestStatusChanges?.RequestStatusChange) { sb.Append("," + historyItem.Replace("{Seperator}", first == true ? "False" : "True").Replace("{Status}", item.ToStatusName).Replace("{Person}", item.User.PersonIdentity.PersonNumber).Replace("{Datetime}", item.ChangeDateTime)); first = false; } adaptiveCard = adaptiveCard.Replace("{rows}", details?.RequestStatusChanges.RequestStatusChange.Count == 0 ? null : sb.ToString()); var row = "{\"title\": \"{Text}\",\"value\": \"{Value}\"}"; sb = new StringBuilder(); for (int i = 0; i < comments.Comments.Count; i++) { if (i == 0) { sb.Append(row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); adaptiveCard.Replace("{CommentValue}", comments.Comments[i].CommentText); } else { sb.Append(", " + row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); } } adaptiveCard = adaptiveCard.Replace("{CommentRows}", sb.ToString()); var card = AdaptiveCard.FromJson(adaptiveCard).Card; return(card); }
/// <summary> /// Filter shifts option based on employees and job roles. /// </summary> /// <param name="context">dialog context.</param> /// <param name="obj">selected values from previous cards.</param> /// <param name="comment">passed note while approving.</param> /// <param name="comments">selected comment while approving.</param> /// <param name="approvalType">approvaltype = Manager/Employee.</param> /// <returns>basic filter card card.</returns> public AdaptiveCard GetNotificationCard(IDialogContext context, SwapShiftObj obj, string comment, Models.ResponseEntities.CommentList.Response comments, int approvalType) { string fullPath = HttpContext.Current.Server.MapPath("/Cards/AdaptiveCards/SwapShift/ApprovalNotification.json"); var adaptiveCard = File.ReadAllText(fullPath); if (approvalType == 1) { adaptiveCard = adaptiveCard.Replace("{Title}", KronosResourceText.SwapShiftConfirmTitle); adaptiveCard = adaptiveCard.Replace("{Info}", obj.RequestorName + " " + KronosResourceText.RequestedShiftSwapWith); adaptiveCard = adaptiveCard.Replace("{LeftBar}", Constants.WhiteBar); adaptiveCard = adaptiveCard.Replace("{LeftDate}", obj.Emp2FromDateTime.ToString("ddd, MMM d", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{LeftTimeSpan}", obj.Emp2FromDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture) + Separator + obj.Emp2ToDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{LeftHours}", obj.Emp2ToDateTime.Subtract(obj.Emp2FromDateTime).Hours.ToString()); adaptiveCard = adaptiveCard.Replace("{LeftMin}", obj.Emp2ToDateTime.Subtract(obj.Emp2FromDateTime).Minutes.ToString()); adaptiveCard = adaptiveCard.Replace("{LeftText}", KronosResourceText.AssignedToYou); adaptiveCard = adaptiveCard.Replace("{SwapIcon}", Constants.SwapIcon); adaptiveCard = adaptiveCard.Replace("{RightBar}", Constants.WhiteBar); adaptiveCard = adaptiveCard.Replace("{RightDate}", obj.Emp1FromDateTime.ToString("ddd, MMM d", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{RightTimeSpan}", obj.Emp1FromDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture) + Separator + obj.Emp1ToDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{RightHours}", obj.Emp1ToDateTime.Subtract(obj.Emp1FromDateTime).Hours.ToString()); adaptiveCard = adaptiveCard.Replace("{RightMin}", obj.Emp1ToDateTime.Subtract(obj.Emp1FromDateTime).Minutes.ToString()); adaptiveCard = adaptiveCard.Replace("{RightText}", KronosResourceText.AssignedTo + obj.RequestorName); adaptiveCard = adaptiveCard.Replace("{txt_Updated}", KronosResourceText.Updated); adaptiveCard = adaptiveCard.Replace("{StatusImage}", Constants.PendingImg); adaptiveCard = adaptiveCard.Replace("{UpdatedOn}", context.Activity.LocalTimestamp.Value.DateTime.ToString("MMM dd, h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{txt_Note}", KronosResourceText.Note); adaptiveCard = adaptiveCard.Replace("{Comment}", string.IsNullOrEmpty(comment) ? $"({KronosResourceText.None})" : comment); adaptiveCard = adaptiveCard.Replace("{SwapShiftObj}", JsonConvert.SerializeObject(obj, Formatting.None)); adaptiveCard = adaptiveCard.Replace("{ApproveCmd}", KronosResourceText.ApproveByEmp); adaptiveCard = adaptiveCard.Replace("{RefuseCmd}", KronosResourceText.RefuseByEmp); } else { adaptiveCard = adaptiveCard.Replace("{Title}", KronosResourceText.SwapShiftConfirmTitle); adaptiveCard = adaptiveCard.Replace("{Info}", obj.RequestorName + " " + KronosResourceText.RequestSwapShiftWith + " " + obj.RequestedToName + "."); adaptiveCard = adaptiveCard.Replace("{LeftBar}", Constants.WhiteBar); adaptiveCard = adaptiveCard.Replace("{LeftDate}", obj.Emp1FromDateTime.ToString("ddd, MMM d", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{LeftTimeSpan}", obj.Emp1FromDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture) + Separator + obj.Emp1ToDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{LeftHours}", obj.Emp1ToDateTime.Subtract(obj.Emp1FromDateTime).Hours.ToString()); adaptiveCard = adaptiveCard.Replace("{LeftMin}", obj.Emp1ToDateTime.Subtract(obj.Emp1FromDateTime).Minutes.ToString()); adaptiveCard = adaptiveCard.Replace("{LeftText}", KronosResourceText.AssignedTo + " " + obj.RequestorName); adaptiveCard = adaptiveCard.Replace("{SwapIcon}", Constants.SwapIcon); adaptiveCard = adaptiveCard.Replace("{RightBar}", Constants.WhiteBar); adaptiveCard = adaptiveCard.Replace("{RightDate}", obj.Emp2FromDateTime.ToString("ddd, MMM d", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{RightTimeSpan}", obj.Emp2FromDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture) + Separator + obj.Emp2ToDateTime.ToString("h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{RightHours}", obj.Emp2ToDateTime.Subtract(obj.Emp2FromDateTime).Hours.ToString()); adaptiveCard = adaptiveCard.Replace("{RightMin}", obj.Emp2ToDateTime.Subtract(obj.Emp2FromDateTime).Minutes.ToString()); adaptiveCard = adaptiveCard.Replace("{RightText}", KronosResourceText.AssignedTo + " " + obj.RequestedToName); adaptiveCard = adaptiveCard.Replace("{txt_Updated}", KronosResourceText.Updated); adaptiveCard = adaptiveCard.Replace("{StatusImage}", Constants.PendingImg); adaptiveCard = adaptiveCard.Replace("{txt_Note}", KronosResourceText.Note); adaptiveCard = adaptiveCard.Replace("{UpdatedOn}", context.Activity.LocalTimestamp.Value.DateTime.ToString("MMM dd, h:mm tt", CultureInfo.InvariantCulture)); adaptiveCard = adaptiveCard.Replace("{Comment}", string.IsNullOrEmpty(comment) ? $"({KronosResourceText.None})" : comment); adaptiveCard = adaptiveCard.Replace("{ApproveCmd}", KronosResourceText.ApproveBySupervisor); adaptiveCard = adaptiveCard.Replace("{RefuseCmd}", KronosResourceText.RefuseBySupervisor); adaptiveCard = adaptiveCard.Replace("{SwapShiftObj}", JsonConvert.SerializeObject(obj, Formatting.None)); } var row = "{\"title\": \"{Text}\",\"value\": \"{Value}\"}"; var sb = new StringBuilder(); for (int i = 0; i < comments.Comments.Count; i++) { if (i == 0) { sb.Append(row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); adaptiveCard.Replace("{CommentValue}", comments.Comments[i].CommentText); } else { sb.Append(", " + row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); } } adaptiveCard = adaptiveCard.Replace("{CommentRows}", sb.ToString()); var card = AdaptiveCard.FromJson(adaptiveCard).Card; return(card); }
/// <summary> /// For displaying advanced time off confirmation card which shows details selected by employee through previous steps. /// </summary> /// <param name="context">Dialog context.</param> /// <param name="obj">Advanced timeoff object.</param> /// <param name="comments">List of comments from API.</param> /// <returns>Confirmation card.</returns> public AdaptiveCard OnNextGetConfirmationCard(IDialogContext context, AdvancedTimeOff obj, Models.ResponseEntities.CommentList.Response comments) { string fullPath = HttpContext.Current.Server.MapPath("/Cards/AdaptiveCards/TimeOff/ConfirmAdvanceTimeOff.json"); var json = File.ReadAllText(fullPath); DateTime.TryParse(obj.sdt, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime sdt); DateTime.TryParse(obj.edt, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime edt); edt = edt.AddHours(23).AddMinutes(59); var days = (int)Math.Round(edt.Subtract(sdt).TotalDays, MidpointRounding.AwayFromZero); if (obj.duration.ToLowerInvariant() == Constants.Hours.ToLowerInvariant()) { var shr = Convert.ToInt32(obj.StartTime.Split(' ')[0].Split(':')[0]); var smin = Convert.ToInt32(obj.StartTime.Split(' ')[0].Split(':')[1]); var ehr = Convert.ToInt32(obj.EndTime.Split(' ')[0].Split(':')[0]); var emin = Convert.ToInt32(obj.EndTime.Split(' ')[0].Split(':')[1]); var stime = new DateTime(2000, 1, 1, shr, smin, 0); var etime = new DateTime(2000, 1, 1, ehr, emin, 0); json = json.Replace("{DurationHours}", "**" + KronosResourceText.TimePeriod + ":** " + stime.ToString("h:mm tt", CultureInfo.InvariantCulture) + " to " + etime.ToString("h:mm tt", CultureInfo.InvariantCulture)); json = json.Replace("{Duration}", KronosResourceText.Hours); } else { json = json.Replace("{DurationHours}", string.Empty); if (obj.duration.ToLowerInvariant() == Constants.first_half_day.ToLowerInvariant()) { json = json.Replace("{Duration}", KronosResourceText.FirstHalfDay); } else if (obj.duration.ToLowerInvariant() == Constants.half_day.ToLowerInvariant()) { json = json.Replace("{Duration}", KronosResourceText.HalfDay); } else { json = json.Replace("{Duration}", KronosResourceText.FullDay); } } json = json.Replace("{Title}", KronosResourceText.TimeOffRequstText).Replace("{ConfirmTimeOffRequest}", KronosResourceText.ConfirmTimeoffRequest).Replace("{PayCode_txt}", KronosResourceText.PayCode); json = json.Replace("{Date_txt}", KronosResourceText.Date).Replace("{Duration_txt}", KronosResourceText.Duration).Replace("{Back}", KronosResourceText.Back).Replace("{Cancel}", KronosResourceText.Cancel).Replace("{Confirm}", KronosResourceText.Confirm); json = json.Replace("{SelectComment}", KronosResourceText.SelectComment).Replace("{EnterNote}", KronosResourceText.EnterNote).Replace("{Submit}", KronosResourceText.Submit); json = json.Replace("{Days}", days.ToString() + (days > 1 ? " " + KronosResourceText.Days : " " + KronosResourceText.Day)); json = days > 1 ? json.Replace("{DurationDate}", sdt.ToString("MMM d, yyyy", CultureInfo.InvariantCulture) + " - " + edt.ToString("MMM d, yyyy", CultureInfo.InvariantCulture)) : json.Replace("{DurationDate}", sdt.ToString("MMM d, yyyy", CultureInfo.InvariantCulture)); json = json.Replace("{DeductFrom}", obj.DeductFrom); var row = "{\"title\": \"{Text}\",\"value\": \"{Value}\"}"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < comments.Comments.Count; i++) { if (i == 0) { sb.Append(row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); json.Replace("{CommentValue}", comments.Comments[i].CommentText); } else { sb.Append(", " + row.Replace("{Text}", comments.Comments[i].CommentText).Replace("{Value}", comments.Comments[i].CommentText)); } } json = json.Replace("{CommentRows}", sb.ToString()); var card = AdaptiveCard.FromJson(json).Card; return(card); }