Exemple #1
0
        /// <summary>
        /// Reload UserWallet via Credit Card
        /// </summary>
        /// <param name="context">DBContext of Model to be used</param>
        /// <param name="userId">Owner of wallet to be reloaded.  Wallet to be used is the one with currency the same as the user's current country.</param>
        /// <param name="transaction">CreditCardReloadTransaction filled up with the ff properties filled up: Amount, Currency, Date</param>
        /// <param name="cardInfo">Credit Card information</param>
        /// <returns></returns>
        public RespCreateWalletLoad ReloadWalletViaCreditCard(IPTV2Entities context, System.Guid userId, CreditCardReloadTransaction transaction, CreditCardInfo cardInfo)
        {
            RespCreateWalletLoad result = null;
            try
            {
                GomsException validationResult = UserValidation(context, userId);
                if (!(validationResult is GomsSuccess))
                {
                    throw validationResult;
                }
                var user = context.Users.Find(userId);

                var wallet = user.UserWallets.FirstOrDefault(w => w.IsActive);
                if (wallet == null)
                {
                    throw new GomsInvalidWalletException();
                }
                // Validate Wallet
                validationResult = WalletValidation(context, user, wallet.WalletId);
                if (!(validationResult is GomsSuccess))
                {
                    throw validationResult;
                }

                result = ReloadWalletViaCreditCard(context, wallet, transaction, cardInfo);
            }
            catch (GomsException e)
            {
                result = new RespCreateWalletLoad { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage };
            }
            return result;
        }
Exemple #2
0
        /// <summary>
        /// Reload UserWallet via Credit Card
        /// </summary>
        /// <param name="context">DBContext of Model to be used</param>
        /// <param name="wallet">UserWallet to be loaded</param>
        /// <param name="transaction">CreditCardReloadTransaction filled up with the ff properties filled up: Amount, Date</param>
        /// <param name="cardInfo">Credit Card information</param>
        /// <returns></returns>
        public RespCreateWalletLoad ReloadWalletViaCreditCard(IPTV2Entities context, UserWallet wallet, CreditCardReloadTransaction transaction, CreditCardInfo cardInfo)
        {
            RespCreateWalletLoad result = null;

            InitializeServiceClient();

            try
            {
                // validate credit card information
                cardInfo.Validate();
                if (!cardInfo.IsValid)
                {
                    throw new GomsInvalidCreditCardException();
                }

                // validate user
                GomsException validationResult = UserValidation(context, wallet.UserId);
                if (!(validationResult is GomsSuccess))
                {
                    throw validationResult;
                }
                var user = context.Users.Find(wallet.UserId);

                // validate the wallet
                validationResult = WalletValidation(context, user, wallet.WalletId);
                if (!(validationResult is GomsSuccess))
                {
                    throw validationResult;
                }

                // validate transaction
                if (transaction == null)
                {
                    throw new GomsInvalidTransactionException();
                }
                else
                {
                    if ((transaction.Amount <= 0) || (transaction.Date == null))
                        throw new GomsInvalidTransactionException();
                }

                // prepare request
                // set transaction wallet
                user.Transactions.Add(transaction);
                transaction.UserWallet = wallet;
                transaction.Currency = wallet.Currency;

                var req = new ReqCreateWalletLoad
                {
                    UID = ServiceUserId,
                    PWD = ServicePassword,
                    Email = user.EMail,
                    CustomerId = (int)user.GomsCustomerId,
                    ServiceId = (int)user.GomsServiceId,
                    SubsidiaryId = (int)user.GomsSubsidiaryId,
                    WalletId = (int)transaction.UserWallet.GomsWalletId,
                    OrderType = 1,
                    // PhoenixId = transaction.TransactionId,
                    PhoenixId = (int)(DateTime.Now.Ticks - int.MaxValue),
                    LoadAmountLocalCurrency = (double)transaction.Amount,
                    //CurrencyId = (int)context.Currencies.Find(user.Country.CurrencyCode).GomsId
                    CCName = cardInfo.Name,
                    CCNumber = cardInfo.Number,
                    CCSecurityCode = cardInfo.CardSecurityCode,
                    CCExpiry = cardInfo.ExpiryDate,
                    CCPostalCode = cardInfo.PostalCode,
                    CCStreet = cardInfo.StreetAddress
                };

                var paymentMethod = context.GomsPaymentMethods.FirstOrDefault(p => (p.GomsSubsidiaryId == user.GomsSubsidiaryId) && (p.Name == cardInfo.CardTypeString));

                if (paymentMethod == null)
                {
                    throw new GomsCreditCardTypeInvalidException();
                }

                req.PaymentMethod = paymentMethod.PaymentMethodId;

                var log = new GomsLogs() { email = user.EMail, phoenixid = req.PhoenixId };
                try
                {
                    var startTime = DateTime.Now;
                    result = _serviceClient.CreateWalletLoad(req);
                    var endTime = DateTime.Now;
                    var timeDifference = endTime - startTime;

                    if (result.IsSuccess)
                    {
                        transaction.Reference = result.TransactionId.ToString();
                        transaction.GomsTransactionId = result.TransactionId;
                        transaction.GomsTransactionDate = DateTime.Now;
                        transaction.UserWallet.Balance += transaction.Amount;
                        transaction.UserWallet.LastUpdated = DateTime.Now;
                        context.SaveChanges();
                        log.gomstransactionid = result.TransactionId;
                        log.message = String.Format("{0} - {1}", result.IsSuccess, result.StatusMessage);
                        log.transactionid = transaction.TransactionId;
                        log.transactiondate = transaction.GomsTransactionDate.Value.ToString("yyyy-MM-dd hh:mm:ss");
                    }
                }
                catch (Exception e)
                {
                    log.message = e.Message;
                    LogToGigya("glogs", log);
                    throw new GomsServiceCallException(e.Message);
                }
                finally
                {
                    LogToGigya("glogs", log);
                }
            }
            catch (GomsException e)
            {
                result = new RespCreateWalletLoad { IsSuccess = false, StatusCode = e.StatusCode, StatusMessage = e.StatusMessage };
            }
            return (result);
        }
        public static ErrorResponse ReloadViaCreditCard2(IPTV2Entities context, System.Guid userId, CreditCardInfo info, decimal amount)
        {
            ErrorResponse resp = new ErrorResponse();
            try
            {
                DateTime registDt = DateTime.Now;
                User user = context.Users.FirstOrDefault(u => u.UserId == userId);
                UserWallet wallet = user.UserWallets.FirstOrDefault(w => w.Currency == MyUtility.GetCurrencyOrDefault(user.CountryCode));
                string CurrencyCode = MyUtility.GetCurrencyOrDefault(user.CountryCode);
                Currency currency = context.Currencies.FirstOrDefault(c => c.Code == CurrencyCode);
                Offering offering = context.Offerings.FirstOrDefault(o => o.OfferingId == GlobalConfig.offeringId);

                if (info == null) { }
                if (String.IsNullOrEmpty(info.Number)) { }
                if (String.IsNullOrEmpty(info.CardSecurityCode)) { }
                if (String.IsNullOrEmpty(info.Name)) { }
                if (String.IsNullOrEmpty(info.StreetAddress)) { }
                if (String.IsNullOrEmpty(info.PostalCode)) { }

                CreditCardReloadTransaction transaction = new CreditCardReloadTransaction()
                {
                    Amount = amount,
                    Currency = CurrencyCode,
                    Reference = info.CardType.ToString().Replace("_", " ").ToUpper(),
                    UserWallet = wallet,
                    Date = registDt,
                    OfferingId = GlobalConfig.offeringId,
                    StatusId = GlobalConfig.Visible
                };

                //user.Transactions.Add(transaction);

                var gomsService = new GomsTfcTv();

                var response = gomsService.ReloadWalletViaCreditCard(context, userId, transaction, info);

                if (response.IsSuccess)
                {
                    resp.Code = (int)ErrorCodes.Success;
                    resp.Message = "Successful";
                    return resp;
                }
                resp.Code = Convert.ToInt32(response.StatusCode);
                resp.Message = response.StatusMessage;
                return resp;
            }

            catch (Exception e) { Debug.WriteLine(e.InnerException); throw; }
        }