Beispiel #1
0
        private static void ExtendTFCnowLicenses()
        {
            DateTime registDt = DateTime.Now;
            var absnow_context = new ABSNowEntities();
            var context = new IPTV2Entities();

            var migrated_users = context.Users.Where(i => !String.IsNullOrEmpty(i.TfcNowUserName)).OrderBy(i => i.EMail);

            Console.WriteLine(String.Format("Total migrated users: {0}", migrated_users.Count()));
            int ctr = 1;
            foreach (var user in migrated_users)
            {
                //Get Entitlements
                Console.WriteLine(String.Format("{1} TFC.tv Email Address: {0}", user.EMail, ctr));
                Console.WriteLine(String.Format("TFCnow Email Address: {0}", user.TfcNowUserName));
                ctr++;
                var entitlements = user.PackageEntitlements.Where(i => i.EndDate > registDt);
                if (entitlements != null)
                {
                    foreach (var item in entitlements)
                    {
                        Console.WriteLine(String.Format("Package Id: {0}", item.PackageId));
                        Console.WriteLine(String.Format("Expiration Date: {0}", item.EndDate));
                        int TFCnowPackageId = GetTFCnowPackageId(item.PackageId);
                        absnow_context.TFCnowExtendLicense(user.TfcNowUserName, TFCnowPackageId, item.EndDate);
                    }
                }
                //absnow_context.SaveChanges();
            }
        }
        public ActionResult PPS()
        {
            var absnow_context = new ABSNowEntities();
            var context = new IPTV2Entities();
            DateTime registDt = DateTime.Now;

            var customers = absnow_context.TFCNowRetailMigrationTFCTVs.Where(t => t.LicenseEndDate > registDt && t.IsMigrated == 0);
            var customerIds = customers.Select(t => t.Email.ToLower()).ToArray();
            var users = context.Users.Where(u => customerIds.Contains(u.TfcNowUserName.ToLower()));

            var TFCnowUsernames = users.Select(t => t.TfcNowUserName.ToLower()).ToArray();

            var migratedUsers = customers.Where(c => TFCnowUsernames.Contains(c.Email.ToLower())).OrderBy(c => c.Email);
            var ctp = migratedUsers.Count();

            var MigratedUsersWithGoms = migratedUsers.Join(absnow_context.TFCNowRetailMigrationIDs, license => license.TFCnowPackageID, package => package.TFCnowPackageID, (license, package) => new { license, package })
                .Select(m => new { Id = m.license.ID, Email = m.license.Email, LicenseEndDate = m.license.LicenseEndDate, TFCnowPackageId = m.license.TFCnowPackageID, GOMSInternalId = m.package.GOMSInternalID })
                .OrderBy(m => m.Email);

            List<MigratedUser> list = new List<MigratedUser>();
            foreach (var item in MigratedUsersWithGoms)
            {
                var user = context.Users.FirstOrDefault(u => u.TfcNowUserName.ToLower() == item.Email.ToLower());
                if (user == null)
                    throw new TFCtvObjectIsNull("User");
                Product product = context.Products.FirstOrDefault(p => p.GomsProductId == item.GOMSInternalId);
                if (product == null)
                    throw new TFCtvObjectIsNull("Product");

                DateTime endDate = (DateTime)item.LicenseEndDate;
                if (product is ShowSubscriptionProduct)
                {
                    var subscription = (ShowSubscriptionProduct)product;
                    if (subscription.ALaCarteSubscriptionTypeId == 2) // Pay per serye. Extend to 1 year.
                    {
                        endDate = registDt.AddYears(1);
                    }

                    TimeSpan difference = endDate.Subtract(registDt);

                    var category = subscription.Categories.FirstOrDefault();
                    if (category == null)
                        throw new TFCtvObjectIsNull("Category");
                    ShowEntitlement entitlement = null;
                    //Check entitlement for Category/Show
                    var show_entitlement = user.ShowEntitlements.FirstOrDefault(s => s.CategoryId == category.CategoryId);

                    if (show_entitlement != null)
                    {
                        show_entitlement.EndDate = show_entitlement.EndDate.Add(difference);
                        endDate = show_entitlement.EndDate;
                    }
                    else
                    {
                        entitlement = new ShowEntitlement()
                        {
                            EndDate = endDate,
                            Show = category.Show,
                            OfferingId = Global.OfferingId,
                        };
                        user.ShowEntitlements.Add(entitlement);
                    }
                    string reference = String.Format("TNRMTFCTV-{0}", item.Id);

                    EntitlementRequest request = CreateEntitlementRequest(registDt, endDate, category.Product, "cPanel Migration", reference);

                    if (request != null)
                    {
                        if (entitlement != null)
                            entitlement.LatestEntitlementRequest = request;
                        else
                            user.EntitlementRequests.Add(request);
                    }
                    MigrationTransaction transaction = new MigrationTransaction()
                    {
                        Amount = 0,
                        Currency = Global.DefaultCurrency,
                        Date = registDt,
                        OfferingId = Global.OfferingId,
                        Reference = reference,
                        MigratedProductId = (int)product.ProductId
                    };
                    user.Transactions.Add(transaction);

                    list.Add(new MigratedUser()
                    {
                        Id = item.Id,
                        Email = item.Email,
                        LicenseEndDate = item.LicenseEndDate,
                        GOMSInternalId = item.GOMSInternalId,
                        TFCnowPackageId = item.TFCnowPackageId,
                        EntitlementId = show_entitlement != null ? show_entitlement.EntitlementId : entitlement.EntitlementId,
                        EntitlementRequestId = request.EntitlementRequestId,
                        TransactionId = transaction.TransactionId
                    });

                    using (var ctx = new ABSNowEntities())
                    {
                        var taggedLicense = ctx.TFCNowRetailMigrationTFCTVs.FirstOrDefault(t => t.ID == item.Id);
                        if (taggedLicense != null)
                        {
                            taggedLicense.IsMigrated = 1;
                            ctx.SaveChanges();
                        }
                    }
                }
            }

            if (context.SaveChanges() > 0)
            {
                return this.Json(list, JsonRequestBehavior.AllowGet);
            }

            //return this.Json(list, JsonRequestBehavior.AllowGet);
            return this.Json(null, JsonRequestBehavior.AllowGet);
        }
Beispiel #3
0
        private static void RunThis()
        {
            DateTime registDt = DateTime.Now;
            var absnow_context = new ABSNowEntities();
            var context = new IPTV2Entities();

            var processed_licenses = absnow_context.LicensePurchasedProcesseds.ToList();
            Console.WriteLine(String.Format("Processed Licenses: {0}", processed_licenses.Count()));
            //var platinum_users = absnow_context.CustomerLicensePurchased1.Where(i => i.PackageID == TFCnowPlatinumProductId && i.LicenseEndDate > registDt) // && i.EmailAddress == "*****@*****.**")
            //    .OrderByDescending(i => i.LicenseEndDate)
            //    .AsEnumerable()
            //    .GroupBy(i => i.EmailAddress)
            //     .Select(i => new
            //     {
            //         EmailAddress = i.Key,
            //         PackageID = i.Max(ii => ii.PackageID),
            //         CustomerID = i.Max(ii => ii.CustomerID),
            //         LicenseEndDate = i.Max(ii => ii.LicenseEndDate)
            //     }).ToList();

            var processedLicenses = processed_licenses.Select(i => i.LicensePurchasedID).ToArray();
            absnow_context.CommandTimeout = 120;
            var platinum_users = absnow_context.vwCustomerLicensePurchaseds.Where(i => !processedLicenses.Contains(i.LicensePurchasedID)).ToList();
            Console.WriteLine(String.Format("Platinum Users: {0}", platinum_users.Count()));
            var productPlatinum = context.Products.FirstOrDefault(i => i.ProductId == PlatinumProductId);
            var PremiumPackage = context.ProductPackages.FirstOrDefault(i => i.PackageId == PremiumPackageId);

            ProductPrice productPrice;
            if (platinum_users != null)
            {
                int counter = 1;
                foreach (var item in platinum_users)
                {
                    Console.WriteLine(String.Format("{1}. PROCESSING {0}", item.EmailAddress, counter));
                    //var purchaseId = absnow_context.CustomerLicensePurchased1.Where(i => i.EmailAddress.ToLower() == item.EmailAddress.ToLower() && i.PackageID == TFCnowPlatinumProductId).OrderByDescending(i => i.LicenseEndDate).First();
                    Console.WriteLine(String.Format("LicensePurchase ID: {0}", item.LicensePurchasedID));
                    counter++;
                    //if (!processed_licenses.Select(i => i.LicensePurchasedID).Contains(purchaseId.LicensePurchasedID))
                    //{
                    var difference = item.LicenseEndDate.Subtract(registDt);

                    var user = context.Users.FirstOrDefault(i => i.TfcNowUserName.ToLower() == item.EmailAddress.ToLower());
                    if (user != null)
                    {
                        Console.WriteLine(String.Format("TAGGED TFCnow {0} TO TFCtv {1}", item.EmailAddress, user.EMail));
                        try
                        {
                            productPrice = productPlatinum.ProductPrices.FirstOrDefault(i => i.CurrencyCode == user.Country.CurrencyCode);
                        }
                        catch (Exception)
                        {
                            productPrice = productPlatinum.ProductPrices.FirstOrDefault(i => i.CurrencyCode == DefaultCurrencyCode);
                        }

                        user.LastUpdated = registDt;


                        //Create Purchase
                        Purchase purchase = CreatePurchase(registDt, "TFC.tv Everywhere");
                        //Create Purchase Item
                        PurchaseItem purchaseItem = CreatePurchaseItem(user.UserId, productPlatinum, productPrice);

                        //Create Entitlement & EntitlementRequest
                        Entitlement entitlement = user.PackageEntitlements.FirstOrDefault(i => i.PackageId == PremiumPackageId);

                        DateTime endDate = registDt;

                        if (entitlement != null)
                        {

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

                            //entitlement.EndDate = item.LicenseEndDate;

                            EntitlementRequest request = new EntitlementRequest()
                            {
                                DateRequested = registDt,
                                EndDate = entitlement.EndDate,
                                Product = PremiumPackage.Product,
                                Source = "TFC.tv Everywhere",
                                ReferenceId = String.Format("{0}", item.LicensePurchasedID)
                                //ReferenceId = String.Format("{0}", String.Empty)
                            };

                            endDate = entitlement.EndDate;

                            user.EntitlementRequests.Add(request);
                        }
                        else
                        {

                            EntitlementRequest request = new EntitlementRequest()
                            {
                                DateRequested = registDt,
                                EndDate = item.LicenseEndDate,
                                Product = PremiumPackage.Product,
                                Source = "TFC.tv Everywhere",
                                ReferenceId = String.Format("{0}", item.LicensePurchasedID)
                                //ReferenceId = String.Format("{0}", String.Empty)
                            };

                            PackageEntitlement pkg_entitlement = new PackageEntitlement()
                            {
                                EndDate = item.LicenseEndDate,
                                Package = (IPTV2_Model.Package)PremiumPackage.Package,
                                OfferingId = OfferingId,
                                LatestEntitlementRequest = request
                            };

                            //endDate = item.LicenseEndDate;

                            user.PackageEntitlements.Add(pkg_entitlement);

                        }

                        //Create TFCtvEverywhereTransaction
                        TfcEverywhereTransaction transaction = new TfcEverywhereTransaction()
                        {
                            GomsTFCEverywhereEndDate = endDate,
                            GomsTFCEverywhereStartDate = registDt,
                            GomsTFCEverywhereSubscriptionId = "N/A",
                            GomsTFCEverywhereServiceId = "N/A",
                            Amount = productPrice.Amount,
                            Currency = productPrice.CurrencyCode,
                            Date = registDt,
                            Reference = String.Format("TVE-{0}", item.TransactionID),
                            OfferingId = OfferingId,
                            StatusId = 1
                        };

                        user.Transactions.Add(transaction);

                        //Console.WriteLine(String.Format("TFCtv {0} LICENSE END DATE UPDATED", user.EMail));

                        if (context.SaveChanges() > 0)
                        {
                            Console.WriteLine(String.Format("TFCtv {0} LICENSE END DATE UPDATED", user.EMail));
                            LicensePurchasedProcessed receipt = new LicensePurchasedProcessed();
                            receipt.LicensePurchasedID = item.LicensePurchasedID;
                            receipt.CreateDate = registDt;
                            absnow_context.LicensePurchasedProcesseds.AddObject(receipt);
                            absnow_context.SaveChanges();
                        }
                    }
                    else
                        Console.WriteLine(String.Format("{0} NOT FOUND. SKIPPING.", item.EmailAddress));

                    //}
                }

                //absnow_context.SaveChanges();
            }
        }
        public ActionResult _Login(FormCollection fc)
        {
            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);
            collection = MyUtility.setError(errorCode, errorMessage);

            string email = fc["TFCnowEmailAddress"];
            string password = fc["TFCnowPassword"];

            var absnow_context = new ABSNowEntities();
            Customer customer = absnow_context.Customers.FirstOrDefault(c => String.Compare(c.EmailAddress, email, true) == 0);
            if (customer == null)
            {
                collection = MyUtility.setError(ErrorCodes.UserDoesNotExist);
            }
            else
            {
                password = MyUtility.GetSHA1(password);
                if (String.Compare(customer.EmailAddress, email, true) == 0 && String.Compare(customer.Password, password, true) == 0)
                {
                    var context = new IPTV2Entities();

                    if (MyUtility.isUserLoggedIn())
                    {
                        var userId = new Guid(User.Identity.Name);
                        var usr = context.Users.FirstOrDefault(u => u.UserId == userId);
                        if (usr != null)
                        {
                            if (!String.IsNullOrEmpty(usr.TfcNowUserName))
                            {
                                collection = MyUtility.setError(ErrorCodes.EntityUpdateError, "This email address has already been matched to a TFC.tv account.");
                                return Content(MyUtility.buildJson(collection), "application/json");
                            }
                        }

                        DateTime registDt = DateTime.Now;
                        string TFCnowPackageIds = GlobalConfig.TFCnowPackageIds;
                        var packageids = MyUtility.StringToIntList(TFCnowPackageIds);

                        bool hasNoWalletBalance = false;
                        bool hasNoLicenses = false;

                        var balance = absnow_context.NCashWalletBalanceTemps.FirstOrDefault(u => u.UserId.ToLower() == customer.EmailAddress.ToLower());
                        if (balance != null)
                        {
                            if (balance.Balance == 0)
                                hasNoWalletBalance = true;
                        }

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

                        if (licenses.Count() == 0)
                            hasNoLicenses = true;

                        var tingi = absnow_context.TFCNowRetailMigrationIDs.Select(item => item.TFCnowPackageID).ToArray();

                        var tingi_license = absnow_context.LicensePurchaseds.Where(l => l.CustomerID == customer.CustomerID && tingi.Contains(l.PackageID) && l.LicenseEndDate > registDt).OrderByDescending(l => l.LicenseEndDate);
                        if (tingi_license.Count() == 0)
                            hasNoLicenses = true;

                        if (hasNoWalletBalance && hasNoLicenses)
                        {
                            collection = MyUtility.setError(ErrorCodes.UnknownError, "You currently do not have any active subscriptions and/or available credits in your TFCnow account.");
                            return Content(MyUtility.buildJson(collection), "application/json");
                        }
                    }

                    User user = context.Users.FirstOrDefault(u => u.TfcNowUserName.ToLower() == email);
                    if (user != null) //Used up TFCnow  account. Already migrated
                    {
                        collection = MyUtility.setError(ErrorCodes.EntityUpdateError, "This email address has already been matched to a TFC.tv account.");
                        return Content(MyUtility.buildJson(collection), "application/json");
                    }

                    TempData["TFCnowCustomer"] = customer;

                    collection = MyUtility.setError(ErrorCodes.Success, "You have successfully logged in your TFCnow account.");
                    if (MyUtility.isUserLoggedIn())
                        collection.Add("href", "/Migration/Migrate");
                    else
                        collection.Add("href", "/User/RegisterViaTFC");
                }
                else
                    collection = MyUtility.setError(ErrorCodes.IsWrongPassword);
            }
            return Content(MyUtility.buildJson(collection), "application/json");
        }
        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");
        }
        private LicenseDisplay GetLicense(ABSNowEntities context, IEnumerable<Int32> enumerable, IOrderedQueryable<LicensePurchased> licenses, int packageId)
        {

            DateTime? LicenseEndDate = null;
            DateTime? LicenseStartDate = null;
            string LicensePurchaseId = String.Empty;
            foreach (var item in licenses)
            {
                if (enumerable.Contains(item.PackageID))
                {
                    if (LicenseEndDate == null)
                    {
                        LicenseStartDate = item.LicenseStartDate;
                        LicenseEndDate = item.LicenseEndDate;
                        LicensePurchaseId = item.LicensePurchasedID.ToString();
                    }
                    else
                    {
                        if (item.LicenseEndDate > LicenseEndDate)
                        {
                            LicenseEndDate = item.LicenseEndDate;
                            LicenseStartDate = item.LicenseStartDate;
                            LicensePurchaseId = item.LicensePurchasedID.ToString();
                        }
                    }
                }
            }

            var package = context.Packages.FirstOrDefault(p => p.PackageID == packageId);

            if (LicenseEndDate != null)
                return new LicenseDisplay()
                {
                    PackageId = package.PackageID,
                    PackageName = package.PackageName,
                    PackageDescription = package.PackageDescription,
                    LicenseEndDate = (DateTime)LicenseEndDate,
                    LicenseEndDateStr = ((DateTime)LicenseEndDate).ToString("MM/dd/yyyy hh:mm:ss tt"),
                    LicenseStartDate = (DateTime)LicenseStartDate,
                    LicenseStartDateStr = ((DateTime)LicenseStartDate).ToString("MM/dd/yyyy hh:mm:ss tt"),
                    LicensePurchaseId = LicensePurchaseId
                };
            else
                return null;
        }
        public ActionResult ListEntitlements()
        {
            if (GlobalConfig.IsTVERegistrationEnabled)
                return RedirectToAction("Index", "Home");

            DateTime registDt = DateTime.Now;
            if (!MyUtility.isUserLoggedIn())
                return RedirectToAction("Index", "Home");

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

            var context = new IPTV2Entities();
            var userId = new Guid(User.Identity.Name);

            var user = context.Users.FirstOrDefault(u => u.UserId == userId);
            if (user != null)
            {
                if (String.IsNullOrEmpty(user.TfcNowUserName))
                {
                    var absnow_context = new ABSNowEntities();
                    var customer = (Customer)TempData["TFCnowCustomer"];
                    TempData["TFCnowCustomer"] = customer;
                    string TFCnowPackageIds = GlobalConfig.TFCnowPackageIds;
                    var packageids = MyUtility.StringToIntList(TFCnowPackageIds);

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

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

                    List<LicenseDisplay> display = new List<LicenseDisplay>();
                    string basePackages = GlobalConfig.TFCnowBasePackageIds;
                    var basePkg = MyUtility.StringToIntList(basePackages);
                    foreach (var item in basePkg)
                    {
                        var lic = GetLicense(absnow_context, TFCnowPremium, licenses, item);
                        if (lic != null)
                            display.Add(lic);
                    }

                    return this.Json(display, JsonRequestBehavior.AllowGet);
                }
            }

            return View();
        }