Exemplo n.º 1
0
        public ActionResult Create(Earnings obj)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var result = iEarnings.Update(obj, "i");
                    return(Json(new
                    {
                        ErrorCode = result.ErrorCode,
                        Message = result.Msg,
                        Id = result.Id,
                        JsonRequestBehavior.AllowGet
                    }));
                }
                catch (Exception ex)
                {
                    return(Json(new { ErrorCode = 1, Message = ex.Message }, JsonRequestBehavior.AllowGet));
                }
            }
            Response.TrySkipIisCustomErrors = true;
            string messages = string.Join("; ", ModelState.Values
                                          .SelectMany(x => x.Errors)
                                          .Select(x => x.ErrorMessage));

            return(Json(new { ErrorCode = 1, Message = messages }, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Purchase gift card
        /// </summary>
        /// <param name="giftCard">Gift card</param>
        /// <returns>Purchased gift card</returns>
        public PurchasedGiftCard PurchaseGiftCardRequest(int giftCardId)
        {
            var giftCard = Repository.Table <GiftCard>().FirstOrDefault(m => m.CardId == giftCardId);

            if (giftCard == null)
            {
                throw new InvalidParameterException("Gift card not found!");
            }

            var canTransact = _earningsService.CanTransact(EarningsBucketType.Spend, giftCard.Amount);

            if (giftCard.Amount == 0 || !canTransact)
            {
                throw new InvalidParameterException("Insufficient balance in spend bucket!");
            }

            var familyMember = _familyService.GetMember();
            var adminMember  = _familyService.GetAdmin();

            var purchasedGiftCard = new PurchasedGiftCard
            {
                FamilyMemberID = familyMember.Id,
                CardId         = giftCard.CardId,
                Name           = giftCard.GiftCardName ?? giftCard.MerchantName,
                Amount         = giftCard.Amount,
                CoverImageUrl  = giftCard.MerchantIconImageUrl,
                PurchasedOn    = DateTime.UtcNow,
                Status         = ApprovalStatus.PendingApproval
            };

            AddPurchasedGiftCard(purchasedGiftCard);

            // deduct spend amount of corresponding child from child earnings
            var childEarnings = _earningsService.GetByMemberId(familyMember.Id);

            childEarnings.Spend -= giftCard.Amount;
            _earningsService.Update(childEarnings);

            // Send spent info to parent through SMS
            var message = $"{familyMember.Firstname.FirstCharToUpper()} wants to purchase a ${purchasedGiftCard.Amount:N2} {purchasedGiftCard.Name} gift card. Do you approve? Reply YES or NO.";

            _smsApprovalHistory.Add(adminMember.Id, ApprovalType.GiftPurchase, message, purchasedGiftCard.Id);

            if (adminMember != null && !string.IsNullOrEmpty(adminMember.PhoneNumber))
            {
                _textMessageService.Send(adminMember.PhoneNumber, message);
            }
            return(purchasedGiftCard);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Delete family member by identifier
        /// </summary>
        /// <param name="memberId">Member identifier</param>
        public void DeleteMember(int memberId)
        {
            var familyMember = GetMemberById(memberId);

            if (familyMember.MemberType == MemberType.Child)
            {
                var childEarnings = _earningsService.GetByMemberId(memberId);
                var totalAmount   = childEarnings.Save + childEarnings.Share + childEarnings.Spend;
                if (totalAmount > 0)
                {
                    if (!_bankService.IsBankLinked(_currentUserService.MemberID))
                    {
                        throw new InvalidOperationException($"Not connected to bank. Please link your bank account to transafer the {familyMember.Firstname}'s money back.");
                    }

                    // Tranfer amount to customer account
                    var transactionResult = _transactionService.Transfer(_currentUserService.MemberID, totalAmount, PaymentType.ChildRemoved, TransferType.InternalToExternalAccount);

                    // If transaction failure
                    if (!transactionResult.HasValue)
                    {
                        throw new InvalidOperationException("Unable to process the transaction. Please contact bank or mail to us!");
                    }

                    childEarnings.Save  = 0;
                    childEarnings.Share = 0;
                    childEarnings.Spend = 0;
                    _earningsService.Update(childEarnings);
                }
            }

            familyMember.IsDeleted = true;
            Repository.Update(familyMember);
        }