/// <summary> /// Approves the request. /// </summary> /// <param name="adminMember">The admin member</param> /// <returns>The message</returns> public async Task <string> Approve(FamilyMember adminMember) { var responseMessage = string.Empty; var currentApprovalRequest = _smsApprovalHistory.GetRecentApprovalRequest(adminMember.Id); if (currentApprovalRequest == null) { return(string.Empty); } switch (currentApprovalRequest.ApprovalType) { case ApprovalType.GiftPurchase: if (currentApprovalRequest.PurchasedGiftCardID.HasValue) { await _spendService.ApprovePurchaseGiftCard(adminMember, currentApprovalRequest.PurchasedGiftCardID.Value); responseMessage = "Ok, consider it done."; } break; case ApprovalType.StockPurchase: if (currentApprovalRequest.StockPurchaseRequestID.HasValue) { await _saveService.ApproveStockPurchase(adminMember, currentApprovalRequest.StockPurchaseRequestID.Value); responseMessage = "Ok, great. Check your inbox to redeem the stock!"; } break; case ApprovalType.CharityDonation: if (currentApprovalRequest.DonationID.HasValue) { var approvedDonation = _charityService.ApproveDonation(adminMember, currentApprovalRequest.DonationID.Value); responseMessage = $"Ok, great. We have transfered $ {approvedDonation.Amount:N2} back into your account in 1-2 days so you can donate: {approvedDonation.Charity.CharityUrl}"; } break; case ApprovalType.CashOut: if (currentApprovalRequest.CashOutID.HasValue) { _spendService.ApproveCashOut(adminMember, currentApprovalRequest.CashOutID.Value); responseMessage = "OK, consider it done."; } break; case ApprovalType.ChorePayment: responseMessage = ApproveChores(adminMember); break; } _smsApprovalHistory.MarkAsNotActive(currentApprovalRequest.Id); return(responseMessage); }