// returns card template if empty public Attachment CreatePtoCard(PtoRequest ptoData) { var cardName = "approval-card"; var ptoDataString = JsonConvert.SerializeObject(ptoData); // combine path for cross platform var populatedCard = PopulateCard(ptoDataString, cardName); var adaptiveCardAttachment = new Attachment() { ContentType = "application/vnd.microsoft.card.adaptive", Content = JsonConvert.DeserializeObject(populatedCard), }; return(adaptiveCardAttachment); }
public async Task <IActionResult> PostAsync([FromBody] PtoRequest pto) { _logger.LogInformation("Pto request received.", pto); _currentRequest = pto; // make api calls to get email address try { var restClient = new RestClient(_baseApiUrl); var managerRequest = new RestRequest($"user/{pto.ManagerUserId}", DataFormat.Json); managerRequest.AddHeader("Authorization", $"Bearer {_bearerToken}"); var managerResponse = await restClient.ExecuteAsync(managerRequest, Method.GET); var managerEmail = JObject.Parse(managerResponse.Content)["email"].ToString(); pto.ManagerEmail = managerEmail; } catch (Exception ex) { _logger.LogError("Unable to find manager"); return(new BadRequestObjectResult(pto)); } // find approprivate personal conversation var personalManagerConversation = _conversationReferences.Values.FirstOrDefault( x => x.User.Properties["upn"].ToString().ToLower() == pto.ManagerEmail.ToLower() && x.Conversation.ConversationType == "personal"); _logger.LogInformation("Manager found.", personalManagerConversation.User.Name); // don't do anything if no manager found if (personalManagerConversation == null) { return(new NotFoundResult()); } await((BotAdapter)_adapter).ContinueConversationAsync(_appId, personalManagerConversation, CreatePtoCard, default); _logger.LogInformation("Adaptive card sent."); // posts the complete results back to the page return(new OkObjectResult(pto)); }