public HttpResponseMessage InitiateStockPurchase([FromBody] StockPurchaseRequest stockPurchaseRequest) { if (stockPurchaseRequest == null) { throw new InvalidParameterException("Invalid parameters!"); } return(Request.CreateResponse(HttpStatusCode.OK, _saveService.InitiateStockPurchase(stockPurchaseRequest))); }
/// <summary> /// initiates the stock purchase. /// </summary> /// <param name="stockPurchaseRequest">The stock purchase request.</param> /// <returns>The stock purchase request.</returns> public StockPurchaseRequest InitiateStockPurchase(StockPurchaseRequest stockPurchaseRequest) { stockPurchaseRequest.Fee = StockFee; var canAllowTransaction = _earningsService.CanTransact(EarningsBucketType.Save, (stockPurchaseRequest.Amount + stockPurchaseRequest.Fee)); if (stockPurchaseRequest.Amount == 0 || !canAllowTransaction) { throw new InvalidOperationException("Insufficient balance in save bucket!"); } stockPurchaseRequest.LineItemID = Guid.NewGuid(); stockPurchaseRequest.TransactionID = Guid.NewGuid(); stockPurchaseRequest.DateCreated = DateTime.UtcNow; stockPurchaseRequest.ChildID = _currentUserService.MemberID; Repository.Insert(stockPurchaseRequest); // deduct save amount of corresponding child from child earnings var childEarnings = _earningsService.GetByMemberId(_currentUserService.MemberID); childEarnings.Save -= (stockPurchaseRequest.Amount + stockPurchaseRequest.Fee); // Deducting stock amount including Fee Repository.Update(childEarnings); var admin = _familyService.GetAdmin(); var child = _familyService.GetMember(); var stock = GetById(stockPurchaseRequest.StockItemID); var stockName = string.IsNullOrEmpty(stock.BrandName) ? stock.CompanyPopularName : stock.BrandName; var message = $"{child.Firstname.FirstCharToUpper()} would like to buy ${stockPurchaseRequest.Amount:N2} of {stockName} stock. Are you OK with this? Reply YES or NO."; _smsApprovalHistory.Add(admin.Id, ApprovalType.StockPurchase, message, stockPurchaseRequest.Id); if (admin != null && !string.IsNullOrEmpty(admin.PhoneNumber)) { _textMessageService.Send(admin.PhoneNumber, message); } return(stockPurchaseRequest); }