public HttpResponseMessage InitiateStockPurchase([FromBody] StockPurchaseRequest stockPurchaseRequest)
 {
     if (stockPurchaseRequest == null)
     {
         throw new InvalidParameterException("Invalid parameters!");
     }
     return(Request.CreateResponse(HttpStatusCode.OK, _saveService.InitiateStockPurchase(stockPurchaseRequest)));
 }
예제 #2
0
        /// <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);
        }