/// <summary> /// Get the create new ticket card. /// </summary> /// <param name="cardConfiguration">Card configuration.</param> /// <param name="localizer">The current cultures' string localizer.</param> /// <param name="showValidationMessage">Represents whether to show validation message or not.</param> /// <param name="ticketDetail"> Information of the ticket which is being created.</param> /// <returns>Returns an attachment of new ticket.</returns> public static Attachment GetNewTicketCard(CardConfigurationEntity cardConfiguration, IStringLocalizer <Strings> localizer, bool showValidationMessage = false, TicketDetail ticketDetail = null) { cardConfiguration = cardConfiguration ?? throw new ArgumentNullException(nameof(cardConfiguration)); string issueTitle = string.Empty; string issueDescription = string.Empty; var dynamicElements = new List <AdaptiveElement>(); var ticketAdditionalFields = new List <AdaptiveElement>(); bool showTitleValidation = false; bool showDescriptionValidation = false; bool showDateValidation = false; if (showValidationMessage) { ticketDetail = ticketDetail ?? throw new ArgumentNullException(nameof(ticketDetail)); if (string.IsNullOrWhiteSpace(ticketDetail.Title)) { showTitleValidation = true; } else { issueTitle = ticketDetail.Title; } if (string.IsNullOrWhiteSpace(ticketDetail.Description)) { showDescriptionValidation = true; } else { issueDescription = ticketDetail.Description; } } ticketAdditionalFields = CardHelper.ConvertToAdaptiveCard(localizer, cardConfiguration.CardTemplate, showDateValidation); dynamicElements.AddRange(new List <AdaptiveElement> { new AdaptiveTextBlock { Text = localizer.GetString("NewRequestTitle"), Weight = AdaptiveTextWeight.Bolder, Size = AdaptiveTextSize.Large, }, new AdaptiveTextBlock() { Text = localizer.GetString("TellUsAboutProblemText"), Spacing = AdaptiveSpacing.Small, }, new AdaptiveTextBlock() { Text = localizer.GetString("TitleDisplayText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveTextInput() { Id = "Title", MaxLength = 100, Placeholder = localizer.GetString("TitlePlaceHolderText"), Spacing = AdaptiveSpacing.Small, Value = issueTitle, }, new AdaptiveTextBlock() { Text = localizer.GetString("TitleValidationText"), Spacing = AdaptiveSpacing.None, IsVisible = showTitleValidation, Color = AdaptiveTextColor.Attention, }, new AdaptiveTextBlock() { Text = localizer.GetString("DescriptionText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveTextInput() { Id = "Description", MaxLength = 500, IsMultiline = true, Placeholder = localizer.GetString("DesciptionPlaceHolderText"), Spacing = AdaptiveSpacing.Small, Value = issueDescription, }, new AdaptiveTextBlock() { Text = localizer.GetString("DescriptionValidationText"), Spacing = AdaptiveSpacing.None, IsVisible = showDescriptionValidation, Color = AdaptiveTextColor.Attention, }, new AdaptiveTextBlock() { Text = localizer.GetString("RequestTypeText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveChoiceSetInput { Choices = new List <AdaptiveChoice> { new AdaptiveChoice { Title = localizer.GetString("NormalText"), Value = Constants.NormalString, }, new AdaptiveChoice { Title = localizer.GetString("UrgentText"), Value = Constants.UrgentString, }, }, Id = "RequestType", Value = !string.IsNullOrEmpty(ticketDetail?.RequestType) ? ticketDetail?.RequestType : Constants.NormalString, Style = AdaptiveChoiceInputStyle.Expanded, }, }); dynamicElements.AddRange(ticketAdditionalFields); AdaptiveCard ticketDetailsPersonalChatCard = new AdaptiveCard(Constants.AdaptiveCardVersion) { Body = dynamicElements, Actions = new List <AdaptiveAction> { new AdaptiveSubmitAction { Title = localizer.GetString("SendRequestButtonText"), Id = "SendRequest", Data = new AdaptiveCardAction { MsteamsCardAction = new CardAction { Type = Constants.MessageBackActionType, Text = Constants.SendRequestAction, }, CardId = cardConfiguration?.CardId, TeamId = cardConfiguration?.TeamId, }, }, }, }; return(new Attachment { ContentType = AdaptiveCard.ContentType, Content = ticketDetailsPersonalChatCard, }); }
/// <summary> /// Gets Edit card for task module. /// </summary> /// <param name="ticketDetail">Ticket details from user.</param> /// <param name="cardConfiguration">Card configuration.</param> /// <param name="localizer">The current cultures' string localizer.</param> /// <param name="existingTicketDetail">Existing ticket details.</param> /// <returns>Returns an attachment of edit card.</returns> public static Attachment GetEditRequestCard(TicketDetail ticketDetail, CardConfigurationEntity cardConfiguration, IStringLocalizer <Strings> localizer, TicketDetail existingTicketDetail = null) { cardConfiguration = cardConfiguration ?? throw new ArgumentNullException(nameof(cardConfiguration)); ticketDetail = ticketDetail ?? throw new ArgumentNullException(nameof(ticketDetail)); string issueTitle = string.Empty; string issueDescription = string.Empty; var dynamicElements = new List <AdaptiveElement>(); var ticketAdditionalFields = new List <AdaptiveElement>(); bool showTitleValidation = false; bool showDescriptionValidation = false; bool showDateValidation = false; if (string.IsNullOrWhiteSpace(ticketDetail.Title)) { showTitleValidation = true; } else { issueTitle = ticketDetail.Title; } if (string.IsNullOrWhiteSpace(ticketDetail.Description)) { showDescriptionValidation = true; } else { issueDescription = ticketDetail.Description; } if (ticketDetail.IssueOccuredOn == null || DateTimeOffset.Compare(ticketDetail.IssueOccuredOn, DateTime.Today) > 0 || string.IsNullOrEmpty(ticketDetail.IssueOccuredOn.ToString(CultureInfo.InvariantCulture))) { showDateValidation = true; } else if (existingTicketDetail != null && DateTimeOffset.Compare(ticketDetail.IssueOccuredOn, existingTicketDetail.IssueOccuredOn) > 0) { showDateValidation = true; } var ticketAdditionalDetails = JsonConvert.DeserializeObject <Dictionary <string, string> >(ticketDetail.AdditionalProperties); ticketAdditionalFields = CardHelper.ConvertToAdaptiveCard(localizer, cardConfiguration.CardTemplate, showDateValidation, ticketAdditionalDetails); dynamicElements.AddRange(new List <AdaptiveElement> { new AdaptiveTextBlock() { Text = localizer.GetString("TitleDisplayText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveTextInput() { Id = "Title", MaxLength = 100, Placeholder = localizer.GetString("TitlePlaceHolderText"), Spacing = AdaptiveSpacing.Small, Value = issueTitle, }, new AdaptiveTextBlock() { Text = localizer.GetString("TitleValidationText"), Spacing = AdaptiveSpacing.None, IsVisible = showTitleValidation, Color = AdaptiveTextColor.Attention, }, new AdaptiveTextBlock() { Text = localizer.GetString("DescriptionText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveTextInput() { Id = "Description", MaxLength = 500, IsMultiline = true, Placeholder = localizer.GetString("DesciptionPlaceHolderText"), Spacing = AdaptiveSpacing.Small, Value = issueDescription, }, new AdaptiveTextBlock() { Text = localizer.GetString("DescriptionValidationText"), Spacing = AdaptiveSpacing.None, IsVisible = showDescriptionValidation, Color = AdaptiveTextColor.Attention, }, new AdaptiveTextBlock() { Text = localizer.GetString("RequestTypeText"), Spacing = AdaptiveSpacing.Medium, }, new AdaptiveChoiceSetInput { Choices = new List <AdaptiveChoice> { new AdaptiveChoice { Title = localizer.GetString("NormalText"), Value = localizer.GetString("NormalText"), }, new AdaptiveChoice { Title = localizer.GetString("UrgentText"), Value = localizer.GetString("UrgentText"), }, }, Id = "RequestType", Value = !string.IsNullOrEmpty(ticketDetail?.RequestType) ? ticketDetail?.RequestType : localizer.GetString("NormalText"), Style = AdaptiveChoiceInputStyle.Expanded, }, }); dynamicElements.AddRange(ticketAdditionalFields); AdaptiveCard ticketDetailsPersonalChatCard = new AdaptiveCard(Constants.AdaptiveCardVersion) { Body = dynamicElements, Actions = new List <AdaptiveAction> { new AdaptiveSubmitAction { Title = localizer.GetString("UpdateActionText"), Id = "UpdateRequest", Data = new AdaptiveCardAction { Command = Constants.UpdateRequestAction, TeamId = cardConfiguration?.TeamId, TicketId = ticketDetail.TicketId, CardId = ticketDetail.CardId, }, }, new AdaptiveSubmitAction { Title = localizer.GetString("CancelButtonText"), Id = "Cancel", Data = new AdaptiveCardAction { Command = Constants.CancelCommand, }, }, }, }; return(new Attachment { ContentType = AdaptiveCard.ContentType, Content = ticketDetailsPersonalChatCard, }); }