/// <summary> /// TaskModuleFetch. /// </summary> /// <param name="turnContext">turnContext.</param> /// <param name="taskModuleRequest">taskmoduleRequest.</param> /// <param name="cancellationToken">cancellationToken.</param> /// <returns>returns task.</returns> protected override async Task <TaskModuleResponse> OnTeamsTaskModuleFetchAsync(ITurnContext <IInvokeActivity> turnContext, TaskModuleRequest taskModuleRequest, CancellationToken cancellationToken) { try { var activityFetch = (Activity)turnContext.Activity; if (activityFetch.Value == null) { throw new ArgumentException("activity's value should not be null"); } ScrumDetails scrumMemberDetails = JsonConvert.DeserializeObject <ScrumDetails>(JObject.Parse(activityFetch.Value.ToString())["data"].ToString()); string membersId = scrumMemberDetails.MembersActivityIdMap; string activityIdval = this.GetActivityIdToMatch(membersId, turnContext.Activity.From.Id); // A user is added during a running scrum and tries to update his/her details. if (activityIdval == null) { return(new TaskModuleResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo() { Card = ScrumCards.NoActionScrumCard(), Height = "small", Width = "medium", Title = Resources.NoActiveScrumTitle, }, }, }); } else { return(new TaskModuleResponse { Task = new TaskModuleContinueResponse { Value = new TaskModuleTaskInfo() { Card = ScrumCards.ScrumCard(membersId), Height = "large", Width = "medium", Title = Resources.ScrumTaskModuleTitle, }, }, }); } } catch (Exception ex) { this.telemetryClient.TrackTrace($"Invoke Activity failed: {ex.Message}"); this.telemetryClient.TrackException(ex); return(null); } }
private async Task HandleReportGeneration(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { string conversationId = GetConversationId(turnContext); var activityFetch = (Activity)turnContext.Activity; if (activityFetch.Value == null) { throw new ArgumentException("activity's value should not be null"); } var startDate = JObject.Parse(activityFetch.Value.ToString())["start_date"].ToString(); var endDate = JObject.Parse(activityFetch.Value.ToString())["end_date"].ToString(); var startDateTime = new DateTimeOffset(DateTime.ParseExact( startDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)); var endDateTime = new DateTimeOffset(DateTime.ParseExact( endDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)); endDateTime = endDateTime.AddDays(1); Directory.GetCurrentDirectory(); List <ScrumDetailsEntity> entities = await this.scrumProvider.GetOrderedScrumUpdatesAsync(conversationId, startDateTime, endDateTime); if (entities.Count == 0) { await turnContext.SendActivityAsync($"Hi {turnContext.Activity.From.Name}, No updates found for specified time range", cancellationToken : cancellationToken); return; } var signedReportUri = await this.reportProvider.SaveReportAndGetUri(entities, conversationId, startDateTime, endDateTime); var reportActivity = MessageFactory.Attachment(ScrumCards.GetReportLinkCard(turnContext, startDateTime, endDateTime, signedReportUri)); reportActivity.Conversation = turnContext.Activity.Conversation; await turnContext.SendActivityAsync(reportActivity, cancellationToken : cancellationToken); }
protected override async Task OnMessageActivityAsync(ITurnContext <IMessageActivity> turnContext, CancellationToken cancellationToken) { try { await this.SendTypingIndicatorAsync(turnContext); var conversationType = turnContext.Activity.Conversation.ConversationType; string conversationId = GetConversationId(turnContext); if (string.Compare(conversationType, "channel", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(conversationType, "groupChat", StringComparison.OrdinalIgnoreCase) == 0) { if (turnContext.Activity.Type.Equals(ActivityTypes.Message)) { turnContext.Activity.RemoveRecipientMention(); if (turnContext.Activity.Text == null) { await this.HandleReportGeneration(turnContext, cancellationToken); return; } switch (turnContext.Activity.Text.Trim().ToLower()) { case Constants.GetReport: await this.HandleReportGeneration(turnContext, cancellationToken); break; case Constants.Report: this.telemetryClient.TrackTrace($"scrum {conversationId} requesting report by {turnContext.Activity.From.Id}"); var reportActivity = MessageFactory.Attachment(ScrumCards.ScrumReportCard(turnContext)); reportActivity.Conversation = turnContext.Activity.Conversation; await turnContext.SendActivityAsync(reportActivity, cancellationToken); break; case Constants.Start: this.telemetryClient.TrackTrace($"scrum {conversationId} started by {turnContext.Activity.From.Id}"); var scrum = await this.scrumProvider.GetScrumAsync(conversationId); if (scrum != null && scrum.IsScrumRunning) { // check if member in scrum exists. // A user is added during a running scrum and tries to start a new scrum. var activityId = this.GetActivityIdToMatch(scrum.MembersActivityIdMap, turnContext.Activity.From.Id); if (activityId == null) { await turnContext.SendActivityAsync(string.Format(Resources.NoPartOfScrumStartText, turnContext.Activity.From.Name)); this.telemetryClient.TrackTrace($"Member who is updating the scrum is not the part of scrum for : {conversationId}"); } else { this.telemetryClient.TrackTrace($"Scrum is already running for conversation id {conversationId}"); await turnContext.SendActivityAsync(Resources.RunningScrumMessage); } } else { // start a new scrum this.telemetryClient.TrackTrace($"Scrum start for : {conversationId}"); await this.StartScrumAsync(turnContext, cancellationToken); } break; case Constants.TakeATour: var tourCards = TourCard.GetTourCards(this.configuration["AppBaseURL"]); await turnContext.SendActivityAsync(MessageFactory.Carousel(tourCards)); break; case Constants.CompleteScrum: var scrumInfo = await this.scrumProvider.GetScrumAsync(conversationId); if (scrumInfo.IsScrumRunning) { var activityId = this.GetActivityIdToMatch(scrumInfo.MembersActivityIdMap, turnContext.Activity.From.Id); // check if member in scrum exists. // A user is added during a running scrum and tries to complete the running scrum. if (activityId == null) { await turnContext.SendActivityAsync(string.Format(Resources.NoPartOfCompleteScrumText, turnContext.Activity.From.Name)); this.telemetryClient.TrackTrace($"Member who is updating the scrum is not the part of scrum for : {conversationId}"); } else { var cardId = scrumInfo.ScrumStartActivityId; var activity = MessageFactory.Attachment(ScrumCompleteCard.GetScrumCompleteCard()); activity.Id = cardId; activity.Conversation = turnContext.Activity.Conversation; await turnContext.UpdateActivityAsync(activity, cancellationToken); // Update the trail card var dateString = string.Format("{{{{TIME({0})}}}}", DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'")); string cardTrailMessage = string.Format(Resources.ScrumCompletedByText, turnContext.Activity.From.Name, dateString); await this.UpdateTrailCard(cardTrailMessage, turnContext, cancellationToken); scrumInfo.IsScrumRunning = false; scrumInfo.ThreadConversationId = conversationId; var savedData = await this.scrumProvider.SaveOrUpdateScrumAsync(scrumInfo); if (!savedData) { await turnContext.SendActivityAsync(Resources.ErrorMessage); return; } this.telemetryClient.TrackTrace($"Scrum completed by: {turnContext.Activity.From.Name} for {conversationId}"); } } else { await turnContext.SendActivityAsync(Resources.CompleteScrumErrorText); } break; default: await turnContext.SendActivityAsync(MessageFactory.Attachment(HelpCard.GetHelpCard()), cancellationToken); break; } } } else { await turnContext.SendActivityAsync(Resources.ScopeErrorMessage); } } catch (Exception ex) { this.telemetryClient.TrackTrace($"For {turnContext.Activity.Conversation.Id} : Message Activity failed: {ex.Message}"); this.telemetryClient.TrackException(ex); } }