Esempio n. 1
0
 public static UserWallet CreateWallet(decimal Balance, string CurrencyCode, DateTime registDt)
 {
     UserWallet wallet = new UserWallet()
     {
         Balance = Balance,
         Currency = CurrencyCode,
         LastUpdated = registDt,
         IsActive = true,
     };
     return wallet;
 }
Esempio n. 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);
        }
Esempio n. 3
0
        /// <summary>
        /// Register a TFC.tv user in GOMS
        /// </summary>
        /// <param name="context">DBContext of Model to be used</param>
        /// <param name="userId">UserId of user to be registered</param>
        /// <returns></returns>
        public RespRegisterSubscriber2 RegisterUser2(IPTV2Entities context, System.Guid userId)
        {
            InitializeServiceClient();
            var user = context.Users.Find(userId);
            RespRegisterSubscriber2 result = null;

            if (user != null)
            {
                try
                {
                    string state = GetStateCode(user.Country, user.State);

                    int gomsCustomerId = 0;
                    if (user.TfcNowUserName != null)
                    {
                        var nowContext = new TFCNowModel.ABSNowEntities();
                        var nowUser = nowContext.Customers.FirstOrDefault(u => u.EmailAddress == user.TfcNowUserName);
                        if (nowUser != null)
                        {
                            var subscriptionDetails = nowUser.SubscriptionDetails.FirstOrDefault(s => s.GOMSID != null);
                            if (subscriptionDetails != null)
                            {
                                gomsCustomerId = (int)subscriptionDetails.GOMSID;
                            }
                        }
                    }

                    var subscriberInfo = new ReqRegisterSubscriber2
                    {
                        UID = ServiceUserId,
                        PWD = ServicePassword,
                        Email = user.EMail,
                        FirstName = user.FirstName,
                        LastName = user.LastName,
                        CurrentCity = user.City != null ? user.City : "--",
                        CurrentState = state,
                        CurrentCountry = user.CountryCode,
                        CountryCurrencyId = (int)user.Country.GomsCountryId,
                        CustomerId = gomsCustomerId,
                        RegistrationDate = DateTime.Now.ToString("MM-dd-yyyy")
                    };

                    result = _serviceClient.RegisterSubscriber2(subscriberInfo);
                }
                catch (Exception e)
                {
                    result = new RespRegisterSubscriber2 { IsSuccess = false, StatusCode = "1404", StatusMessage = e.Message };
                }

                if (result.IsSuccess)
                {
                    user.GomsCustomerId = result.CustomerId;
                    user.GomsServiceId = result.ServiceId;
                    user.GomsSubsidiaryId = result.SubsidiaryId;
                    user.GomsWalletId = result.WalletId;

                    var wallet = user.UserWallets.FirstOrDefault(w => w.Currency == user.Country.CurrencyCode);
                    if (wallet == null)
                    {
                        wallet = new UserWallet { Currency = user.Country.CurrencyCode, IsActive = true, LastUpdated = DateTime.Now, Balance = 0 };
                        user.UserWallets.Add(wallet);
                    }
                    wallet.GomsWalletId = result.WalletId;

                    context.SaveChanges();
                }
            }
            else
            {
                result = new RespRegisterSubscriber2 { IsSuccess = false, StatusCode = "1100", StatusMessage = "Invalid userId." };
            }

            return (result);
        }
Esempio n. 4
0
        /// <summary>
        /// Update User's info in GOMS
        /// </summary>
        /// <param name="context">DBContext of Model to be used</param>
        /// <param name="userId">UserId of user record to be updated</param>
        /// <returns></returns>
        public RespUpdateSubscriber UpdateSubscriber(IPTV2Entities context, System.Guid userId)
        {
            RespUpdateSubscriber result = null;

            var user = context.Users.Find(userId);
            if (user != null)
            {
                if (!user.IsGomsRegistered)
                {
                    throw new GomsUserNotRegisteredException();
                }
                try
                {
                    var thisWallet = user.UserWallets.FirstOrDefault(w => w.IsActive);
                    bool isCountryChanged = (thisWallet != null && (thisWallet.GomsWalletId == null || thisWallet.GomsWalletId == 0));

                    string state = GetStateCode(user.Country, user.State);

                    var req = new ReqUpdateSubscriber()
                    {
                        UID = ServiceUserId,
                        PWD = ServicePassword,
                        Email = user.EMail,
                        FirstName = user.FirstName,
                        LastName = user.LastName,
                        CurrentCity = user.City != null ? user.City : "--",
                        CurrentState = state,
                        CurrentCountry = user.CountryCode,
                        CountryCurrencyId = (int)user.Country.GomsCountryId,
                        CustomerId = (int)user.GomsCustomerId,
                        ServiceId = (int)user.GomsServiceId,
                        WalletId = (int)user.GomsWalletId,
                        IsCountryChanged = isCountryChanged,
                        WalletBalance = (double)thisWallet.Balance
                    };
                    result = _serviceClient.UpdateSubscriber(req);
                }
                catch (Exception ex)
                {
                    result = new RespUpdateSubscriber { IsSuccess = false, StatusCode = "1404", StatusMessage = ex.Message };
                }

                if (result.IsSuccess && result.CustomerId > 0)
                {
                    user.GomsCustomerId = result.CustomerId;
                    user.GomsServiceId = result.ServiceId;
                    user.GomsSubsidiaryId = result.SubsidiaryId;
                    user.GomsWalletId = result.WalletId;

                    var wallet = user.UserWallets.FirstOrDefault(w => w.Currency == user.Country.CurrencyCode);
                    if (wallet == null)
                    {
                        wallet = new UserWallet { Currency = user.Country.CurrencyCode, IsActive = true, LastUpdated = DateTime.Now, Balance = 0 };
                        user.UserWallets.Add(wallet);
                    }
                    wallet.GomsWalletId = result.WalletId;
                    context.SaveChanges();
                }
            }
            else
            {
                result = new RespUpdateSubscriber { IsSuccess = false, StatusCode = "1100", StatusMessage = "Invaid userId." };
            }

            return (result);
        }
Esempio n. 5
0
 private static void TestGetUser()
 {
     var service = new GomsTfcTv();
     int userId = 577615;
     string email = "*****@*****.**";
     var resp = service.GetUser(userId, email);
     if (resp.IsSuccess)
     {
         var context = new IPTV2_Model.IPTV2Entities();
         var user = context.Users.FirstOrDefault(u => u.EMail == email);
         if (user != null)
         {
             user.GomsCustomerId = resp.CustomerId;
             user.GomsSubsidiaryId = resp.SubsidiaryId;
             var wallet = user.UserWallets.FirstOrDefault(w => w.Currency == user.Country.CurrencyCode);
             if (wallet == null)
             {
                 wallet = new IPTV2_Model.UserWallet
                 {
                     Currency = user.Country.CurrencyCode,
                     Balance = 0,
                     IsActive = true,
                     LastUpdated = DateTime.Now
                 };
                 user.UserWallets.Add(wallet);
                 context.SaveChanges();
             }
         }
     }
 }
Esempio n. 6
0
        public static ErrorCodes ReloadViaMopay(System.Guid userId, decimal Amount, string CurrencyCode, string refid, string Guid)
        {
            try
            {

                var context = new IPTV2Entities();
                DateTime registDt = DateTime.Now;
                User user = context.Users.FirstOrDefault(u => u.UserId == userId);
                Offering offering = context.Offerings.FirstOrDefault(o => o.OfferingId == GlobalConfig.offeringId);
                UserWallet wallet = user.UserWallets.FirstOrDefault(w => w.Currency == CurrencyCode);
                Currency currency = context.Currencies.FirstOrDefault(c => c.Code == CurrencyCode);

                if (wallet == null)
                {
                    wallet = new UserWallet()
                    {
                        Currency = CurrencyCode,
                        IsActive = false,
                        LastUpdated = registDt,
                        Balance = Amount
                    };
                    user.UserWallets.Add(wallet);
                }

                else
                {
                    wallet.Balance += Amount;
                    wallet.LastUpdated = registDt;
                }

                MopayReloadTransaction transaction = new MopayReloadTransaction()
                {
                    Currency = wallet.Currency,
                    Reference = refid,
                    Amount = Amount,
                    UserWallet = wallet,
                    Date = registDt,
                    OfferingId = GlobalConfig.offeringId,
                    StatusId = GlobalConfig.Visible
                };

                user.Transactions.Add(transaction);

                if (context.SaveChanges() > 0)
                {
                    try
                    {
                        //post confirm to mopay
                        string poststatus = string.Empty;
                        string guid = string.Empty;
                        string message = string.Empty;

                        string postparam = string.Format("cid={0}&password={1}?guid={2}&externaluid={3}", GlobalConfig.MopayCID, GlobalConfig.MopayPassword, Guid, userId.ToString());
                        WebRequest request = WebRequest.Create(GlobalConfig.MopayDeliveryConfirmationURL);
                        request.Method = "POST";
                        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(postparam);
                        request.ContentType = "application/x-www-form-urlencoded";
                        request.ContentLength = byteArray.Length;
                        Stream dataStream = request.GetRequestStream();
                        dataStream.Write(byteArray, 0, byteArray.Length);
                        dataStream.Close();
                        WebResponse response = request.GetResponse();
                        dataStream = response.GetResponseStream();
                        StreamReader reader = new StreamReader(dataStream);
                        string responseFromServer = reader.ReadToEnd();
                        reader.Close();
                        dataStream.Close();
                        response.Close();

                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.Load(responseFromServer);
                        XmlNode messageNode = xmlDoc.SelectSingleNode("message");
                        message = messageNode.Value;
                        XmlNode productDeliveryConfirmationNode = xmlDoc.SelectSingleNode("product-delivery-confirmation");
                        foreach (XmlNode chldNode in productDeliveryConfirmationNode.ChildNodes)
                        {
                            switch (chldNode.Name)
                            {
                                case "guid":
                                    if (!string.IsNullOrEmpty(chldNode.InnerText))
                                        guid = (chldNode.InnerText);
                                    break;
                                case "status":
                                    if (!string.IsNullOrEmpty(chldNode.InnerText))
                                        poststatus = (chldNode.InnerText);
                                    break;

                            }
                        }
                        MopayTransactionRequest mopaTranRequest = context.MopayTransactionRequests.FirstOrDefault(m => String.Compare(m.GUID, guid) == 0);
                        mopaTranRequest.ErrorMessage = message;
                        mopaTranRequest.UpdatedOn = System.DateTime.Now;
                        context.SaveChanges();
                    }
                    catch (Exception) { }
                    return ErrorCodes.Success;
                }
                return ErrorCodes.EntityUpdateError;
            }
            catch (Exception e) { Debug.WriteLine(e.InnerException); throw; }
        }
Esempio n. 7
0
        public static ErrorCodes ReloadViaPayPal(IPTV2Entities context, System.Guid userId, decimal Amount, string TransactionID, string CurrencyCode)
        {
            try
            {
                //var context = new IPTV2Entities();
                DateTime registDt = DateTime.Now;
                User user = context.Users.FirstOrDefault(u => u.UserId == userId);
                Offering offering = context.Offerings.FirstOrDefault(o => o.OfferingId == GlobalConfig.offeringId);
                UserWallet wallet = user.UserWallets.FirstOrDefault(w => w.Currency == CurrencyCode);
                Currency currency = context.Currencies.FirstOrDefault(c => c.Code == CurrencyCode);


                if (GlobalConfig.UsePayPalIPNLog)
                {
                    if (context.PaypalIPNLogs.Count(t => String.Compare(t.UniqueTransactionId, TransactionID, true) == 0) > 0)
                        return ErrorCodes.IsProcessedPayPalTransaction;
                }
                else
                {
                    Transaction ppt = context.Transactions.FirstOrDefault(t => String.Compare(t.Reference, TransactionID, true) == 0);
                    if (ppt != null)
                        return ErrorCodes.IsProcessedPayPalTransaction;
                }

                //Transaction ppt = context.Transactions.FirstOrDefault(t => String.Compare(t.Reference, TransactionID, true) == 0);
                //if (ppt != null)
                //    return ErrorCodes.IsProcessedPayPalTransaction;

                if (wallet == null)
                {
                    wallet = new UserWallet()
                    {
                        Currency = CurrencyCode,
                        IsActive = false,
                        LastUpdated = registDt,
                        Balance = Amount
                    };
                    user.UserWallets.Add(wallet);
                }

                else
                {
                    wallet.Balance += Amount;
                    wallet.LastUpdated = registDt;
                }

                PaypalReloadTransaction transaction = new PaypalReloadTransaction()
                {
                    Currency = wallet.Currency,
                    Reference = TransactionID,
                    Amount = Amount,
                    UserWallet = wallet,
                    Date = registDt,
                    OfferingId = GlobalConfig.offeringId,
                    StatusId = GlobalConfig.Visible
                };

                user.Transactions.Add(transaction);

                if (context.SaveChanges() > 0)
                {
                    return ErrorCodes.Success;
                }
                return ErrorCodes.EntityUpdateError;
            }

            catch (Exception e) { Debug.WriteLine(e.InnerException); throw; }
        }
        public ActionResult Migrate()
        {
            if (GlobalConfig.IsTVERegistrationEnabled)
                return RedirectToAction("Index", "Home");

            Dictionary<string, object> collection = new Dictionary<string, object>();
            ErrorCodes errorCode = ErrorCodes.UnknownError;
            string errorMessage = MyUtility.getErrorMessage(ErrorCodes.UnknownError);
            DateTime registDt = DateTime.Now;
            collection = MyUtility.setError(errorCode, errorMessage);

            if (TempData["TFCnowCustomer"] == null)
                return RedirectToAction("Index", "Home");

            if (!MyUtility.isUserLoggedIn())
                return RedirectToAction("Index", "Home");

            Customer customer = (Customer)TempData["TFCnowCustomer"];

            var absnow_context = new ABSNowEntities();

            string TFCnowPackageIds = GlobalConfig.TFCnowPackageIds;
            var packageids = MyUtility.StringToIntList(TFCnowPackageIds);
            var context = new IPTV2Entities();
            var userId = new Guid(User.Identity.Name);
            User user = context.Users.FirstOrDefault(u => u.UserId == userId);
            if (user == null)
                return RedirectToAction("Index", "Migration");



            //Tag account
            user.TfcNowUserName = customer.EmailAddress;
            user.LastUpdated = registDt;
            context.SaveChanges();

            bool isLicenseMigrated = false;
            bool isWalletMigrated = false;
            //Migrate Wallet
            var balance = absnow_context.NCashWalletBalanceTables.FirstOrDefault(u => u.userId.ToLower() == customer.EmailAddress.ToLower());

            if (balance != null)
            {
                if (balance.cashBalance > 0)
                {
                    var transfer_amount = Forex.Convert(context, GlobalConfig.DefaultCurrency, user.Country.CurrencyCode, balance.cashBalance);

                    var userWallet = user.UserWallets.FirstOrDefault(u => u.Currency == user.Country.CurrencyCode && u.IsActive == true);
                    if (userWallet == null)
                    {
                        userWallet = new UserWallet()
                        {
                            Balance = transfer_amount,
                            IsActive = true,
                            Currency = user.Country.CurrencyCode,
                        };
                        user.UserWallets.Add(userWallet);
                    }
                    else
                        userWallet.Balance += transfer_amount;

                    //Create Paypal transaction

                    var ppTransaction = new PaypalReloadTransaction()
                    {
                        Amount = transfer_amount,
                        Currency = user.Country.CurrencyCode,
                        Date = registDt,
                        Reference = String.Format("M-{0}", customer.CustomerID),
                        OfferingId = GlobalConfig.offeringId,
                        UserWallet = userWallet,
                        StatusId = GlobalConfig.Visible
                    };

                    user.Transactions.Add(ppTransaction);
                    if (context.SaveChanges() > 0)
                        isWalletMigrated = true;
                }
            }

            var licenses = absnow_context.LicensePurchaseds.Where(l => l.CustomerID == customer.CustomerID && packageids.Contains(l.PackageID) && l.LicenseEndDate > registDt).OrderByDescending(l => l.LicenseEndDate);

            //Migrate Licenses
            if (licenses.Count() == 0)
            {
                if (isWalletMigrated)
                {
                    user.TfcNowUserName = customer.EmailAddress;
                    context.SaveChanges();
                }

                //  return RedirectToAction("Complete", "Migration");
                //collection = MyUtility.setError(ErrorCodes.UnknownError, "No licenses to migrate.");
            }
            else
            {
                bool isPremiumProcessed = false;
                bool isLiteProcessed = false;
                bool isMovieChannelProcessed = false;
                bool isLiveStreamProcessed = false;

                var TFCnowPremium = MyUtility.StringToIntList(GlobalConfig.TFCnowPremium);
                var TFCnowLite = MyUtility.StringToIntList(GlobalConfig.TFCnowLite);
                var TFCnowMovieChannel = MyUtility.StringToIntList(GlobalConfig.TFCnowMovieChannel);
                var TFCnowLiveStream = MyUtility.StringToIntList(GlobalConfig.TFCnowLiveStream);

                List<LicenseDisplay> display = new List<LicenseDisplay>();

                var premiumLicense = GetLicense(absnow_context, TFCnowPremium, licenses, 1427);
                display.Add(premiumLicense);
                display.Add(GetLicense(absnow_context, TFCnowLite, licenses, 1425));
                display.Add(GetLicense(absnow_context, TFCnowMovieChannel, licenses, 45));
                if (premiumLicense == null)
                    display.Add(GetLicense(absnow_context, TFCnowLiveStream, licenses, 1427));

                display.RemoveAll(item => item == null);

                foreach (var item in display)
                {
                    int TFCtvPackageId = 0;
                    int TFCtvProductId = 0;

                    if (item.LicenseEndDate > registDt)
                    {
                        var difference = item.LicenseEndDate.Subtract(registDt);
                        PackageEntitlement entitlement = null;
                        if (TFCnowPremium.Contains(item.PackageId))
                        {
                            if (!isPremiumProcessed)
                            {
                                entitlement = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == GlobalConfig.premiumId);
                                isPremiumProcessed = true;
                                TFCtvPackageId = GlobalConfig.premiumId;
                            }
                        }
                        else if (TFCnowLite.Contains(item.PackageId))
                        {
                            if (!isLiteProcessed)
                            {
                                if (user.CountryCode == GlobalConfig.DefaultCountry)
                                {
                                    entitlement = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == GlobalConfig.premiumId);
                                    TFCtvPackageId = GlobalConfig.premiumId;
                                }

                                else
                                {
                                    entitlement = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == GlobalConfig.liteId);
                                    TFCtvPackageId = GlobalConfig.liteId;
                                }

                                isLiteProcessed = true;
                            }
                        }
                        else if (TFCnowMovieChannel.Contains(item.PackageId))
                        {
                            if (!isMovieChannelProcessed)
                            {
                                entitlement = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == GlobalConfig.movieId);
                                isMovieChannelProcessed = true;
                                TFCtvPackageId = GlobalConfig.movieId;
                            }
                        }

                        else if (TFCnowLiveStream.Contains(item.PackageId))
                        {
                            if (!isLiveStreamProcessed)
                            {
                                if (!isPremiumProcessed)
                                {
                                    entitlement = user.PackageEntitlements.FirstOrDefault(p => p.PackageId == GlobalConfig.premiumId);
                                    isLiveStreamProcessed = true;
                                    TFCtvPackageId = GlobalConfig.premiumId;
                                }
                            }
                        }

                        else
                        {
                            //Provide load
                        }
                        if (TFCtvPackageId > 0)
                        {
                            ProductPackage package = context.ProductPackages.FirstOrDefault(p => p.PackageId == TFCtvPackageId);
                            TFCtvProductId = package.Product.ProductId;

                            if (entitlement != null)
                            {
                                if (entitlement.EndDate > registDt)
                                    entitlement.EndDate = entitlement.EndDate.Add(difference);
                                else
                                    entitlement.EndDate = registDt.Add(difference);


                                EntitlementRequest request = new EntitlementRequest()
                                {
                                    DateRequested = registDt,
                                    StartDate = item.LicenseStartDate,
                                    EndDate = entitlement.EndDate,
                                    Product = package.Product,
                                    Source = "Entitlement Transfer",
                                    ReferenceId = item.LicensePurchaseId.ToString()
                                };
                                entitlement.LatestEntitlementRequest = request; // ADDED DECEMBER 06, 2012
                                user.EntitlementRequests.Add(request);
                            }

                            else
                            {
                                EntitlementRequest request = new EntitlementRequest()
                                {
                                    DateRequested = registDt,
                                    StartDate = item.LicenseStartDate,
                                    EndDate = item.LicenseEndDate,
                                    Product = package.Product,
                                    Source = "Entitlement Transfer",
                                    ReferenceId = item.LicensePurchaseId.ToString()
                                };

                                user.EntitlementRequests.Add(request);
                                PackageEntitlement pkg_entitlement = new PackageEntitlement()
                                {
                                    EndDate = item.LicenseEndDate,
                                    Package = (IPTV2_Model.Package)package.Package,
                                    OfferingId = GlobalConfig.offeringId,
                                    LatestEntitlementRequest = request
                                };
                                user.PackageEntitlements.Add(pkg_entitlement);
                            }
                        }
                    }

                    if (TFCtvProductId > 0)
                    {
                        MigrationTransaction transaction = new MigrationTransaction()
                        {
                            Amount = 0,
                            Currency = GlobalConfig.DefaultCurrency,
                            Date = registDt,
                            OfferingId = GlobalConfig.offeringId,
                            Reference = item.LicensePurchaseId.ToString(),
                            MigratedProductId = TFCtvProductId,
                            StatusId = GlobalConfig.Visible
                        };
                        user.Transactions.Add(transaction);
                    }
                }
                if (context.SaveChanges() > 0)
                    isLicenseMigrated = true;
            }

            bool isTingiMigrated = false;
            var tingi = absnow_context.TFCNowRetailMigrationIDs.Select(i => new { i.TFCnowPackageID, i.GOMSInternalID });
            var tingi_licenses = absnow_context.LicensePurchaseds.Where(l => l.CustomerID == customer.CustomerID && tingi.Select(i => i.TFCnowPackageID).Contains(l.PackageID) && l.LicenseEndDate > registDt).OrderByDescending(l => l.LicenseEndDate);
            if (tingi_licenses.Count() == 0)
            {
                if (isLicenseMigrated || isWalletMigrated)
                {
                    user.TfcNowUserName = customer.EmailAddress;
                    context.SaveChanges();
                }

                return RedirectToAction("Complete", "Migration");
            }
            else
            {
                foreach (var item in tingi_licenses)
                {
                    var diff = item.LicenseEndDate.Subtract(registDt);

                    var GomsProductId = tingi.FirstOrDefault(t => t.TFCnowPackageID == item.PackageID);
                    var TFCtvProduct = context.Products.FirstOrDefault(p => p.GomsProductId == GomsProductId.GOMSInternalID);

                    if (TFCtvProduct != null)
                    {
                        if (TFCtvProduct is ShowSubscriptionProduct)
                        {
                            var showSubscription = (ShowSubscriptionProduct)TFCtvProduct;
                            ShowEntitlement se = user.ShowEntitlements.FirstOrDefault(s => s.Show.CategoryId == showSubscription.Categories.First().CategoryId);
                            if (se != null)
                            {
                                if (se.EndDate > registDt)
                                    se.EndDate = showSubscription.ALaCarteSubscriptionTypeId == 2 ? se.EndDate.AddYears(1) : se.EndDate.Add(diff);
                                else
                                    se.EndDate = showSubscription.ALaCarteSubscriptionTypeId == 2 ? registDt.AddYears(1) : registDt.Add(diff);

                                EntitlementRequest request = new EntitlementRequest()
                                {
                                    DateRequested = registDt,
                                    EndDate = se.EndDate,
                                    Product = TFCtvProduct,
                                    Source = "Entitlement Transfer",
                                    ReferenceId = item.LicensePurchasedID.ToString()
                                };
                                user.EntitlementRequests.Add(request);
                            }
                            else
                            {
                                EntitlementRequest request = new EntitlementRequest()
                                {
                                    DateRequested = registDt,
                                    EndDate = showSubscription.ALaCarteSubscriptionTypeId == 2 ? registDt.AddYears(1) : registDt.Add(diff),
                                    Product = TFCtvProduct,
                                    Source = "Entitlement Transfer",
                                    ReferenceId = item.LicensePurchasedID.ToString()
                                };

                                user.EntitlementRequests.Add(request);
                                ShowEntitlement show_entitlement = new ShowEntitlement()
                                {
                                    EndDate = showSubscription.ALaCarteSubscriptionTypeId == 2 ? registDt.AddYears(1) : registDt.Add(diff),
                                    Show = showSubscription.Categories.First().Show,
                                    OfferingId = GlobalConfig.offeringId,
                                    LatestEntitlementRequest = request
                                };
                                user.ShowEntitlements.Add(show_entitlement);
                            }

                            MigrationTransaction transaction = new MigrationTransaction()
                            {
                                Amount = 0,
                                Currency = GlobalConfig.DefaultCurrency,
                                Date = registDt,
                                OfferingId = GlobalConfig.offeringId,
                                Reference = item.LicensePurchasedID.ToString(),
                                MigratedProductId = TFCtvProduct.ProductId,
                                StatusId = GlobalConfig.Visible
                            };
                            user.Transactions.Add(transaction);
                        }
                    }
                }
                if (context.SaveChanges() > 0)
                    isTingiMigrated = true;
            }

            if (isLicenseMigrated || isWalletMigrated || isTingiMigrated)
            {
                user.TfcNowUserName = customer.EmailAddress;
                user.LastUpdated = registDt;
            }
            else
            {
                user.TfcNowUserName = customer.EmailAddress;
                user.LastUpdated = registDt;
            }

            if (context.SaveChanges() > 0)
            {
                return RedirectToAction("Complete", "Migration");
            }
            return Content(MyUtility.buildJson(collection), "application/json");
        }