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)); }
/// <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); }
/// <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); }