public static async Task SendApprovalRequest(string accessToken, string userId, string fileId, string[] approvers)
        {
            // Get file info
            var fileInfo = await GraphHelper.GetFileInfo(accessToken, fileId);

            // Info on requestor
            var requestor = await GraphHelper.GetUser(accessToken);

            // Requestor pic URI
            var requestorPicUri = await GraphHelper.GetUserPhotoDataUri(accessToken, "48x48");

            // File thumbnail URI
            var thumbnailUri = await GraphHelper.GetFileThumbnailDataUri(accessToken, fileInfo.Id);

            // Create an approval to store in the database
            var approval = new Approval()
            {
                Requestor   = userId,
                File        = fileInfo,
                Approvers   = new List <ApproverInfo>(),
                RequestDate = DateTimeOffset.UtcNow
            };

            // Add approvers
            foreach (string approver in approvers)
            {
                approval.Approvers.Add(new ApproverInfo()
                {
                    EmailAddress = approver,
                    Response     = Models.ResponseStatus.NotResponded,
                    ResponseNote = string.Empty
                });
            }

            // Add to database
            var dbApproval = await DatabaseHelper.CreateApprovalAsync(approval);

            // Build and send card for each recipient
            foreach (string approver in approvers)
            {
                var approvalRequestCard = BuildRequestCard(requestor, requestorPicUri,
                                                           fileInfo, thumbnailUri, approver, dbApproval.Id);

                await GraphHelper.SendRequestCard(accessToken, approvalRequestCard, approver, messageSender);
            }
        }
Beispiel #2
0
        public static async Task <List <AdaptiveCard> > GetApprovalsForUserCard(string accessToken, string userId)
        {
            // Get all approvals requested by current user
            var approvals = await DatabaseHelper.GetApprovalsAsync(a => a.Requestor == userId);

            if (approvals.Count() == 0)
            {
                // Return a simple message
                return(null);
            }
            else if (approvals.Count() == 1)
            {
                // Return status card of the only approval
                return(new List <AdaptiveCard>()
                {
                    GetApprovalStatusCard(approvals.First())
                });
            }
            else
            {
                var approvalCardList = new List <AdaptiveCard>();

                foreach (var approval in approvals)
                {
                    var approvalDetailCard = new AdaptiveCard();

                    var approvalColumnSet = new AdaptiveColumnSet();

                    // Get thumbnail
                    var thumbnailUri = await GraphHelper.GetFileThumbnailDataUri(accessToken, approval.File.Id);

                    var fileThumbCol = new AdaptiveColumn()
                    {
                        Width = AdaptiveColumnWidth.Auto.ToLower()
                    };

                    fileThumbCol.Items.Add(new AdaptiveImage()
                    {
                        Url     = new Uri(thumbnailUri),
                        AltText = "File thumbnail",
                        Size    = AdaptiveImageSize.Small
                    });

                    approvalColumnSet.Columns.Add(fileThumbCol);

                    var fileNameCol = new AdaptiveColumn()
                    {
                        Width = AdaptiveColumnWidth.Stretch.ToLower()
                    };

                    fileNameCol.Items.Add(new AdaptiveTextBlock()
                    {
                        Size = AdaptiveTextSize.Medium,
                        Text = approval.File.Name
                    });

                    fileNameCol.Items.Add(new AdaptiveTextBlock()
                    {
                        IsSubtle = true,
                        Spacing  = AdaptiveSpacing.None,
                        Text     = $"Requested: {TimeZoneHelper.GetAdaptiveDateTimeString(approval.RequestDate)}"
                    });

                    approvalColumnSet.Columns.Add(fileNameCol);

                    approvalDetailCard.Body.Add(approvalColumnSet);

                    approvalDetailCard.Actions.Add(new AdaptiveSubmitAction()
                    {
                        Title    = "This one",
                        DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.SelectApproval}"", ""selectedApproval"": ""{approval.Id}"" }}"
                    });

                    approvalCardList.Add(approvalDetailCard);
                }

                return(approvalCardList);
            }
        }