protected void UserProductMapDetailUpdate_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(UsrProdNewMapValues);
            SimplicityEntities DatabaseContext = new SimplicityEntities();
            int companyId = company.CompanyID;

            String [] selectedUsersAndProds = UsrProdNewMapValues.Value.Split(',');
            int totalSelectedUsersAndProducts = selectedUsersAndProds.Length;
            Dictionary<int, List<int>> usersGroupByProduct = new Dictionary<int, List<int>>();
            for (int i = 0; i < totalSelectedUsersAndProducts - 1; i++) {
                String[] parsedId = selectedUsersAndProds[i].Split('_');
                int userId = Int32.Parse(parsedId[2]);
                int prodId = Int32.Parse(parsedId[3]);

                if (usersGroupByProduct.ContainsKey(prodId) == false) {
                    List<int> usersOfSameProduct = new List<int>();
                    usersGroupByProduct.Add(prodId, usersOfSameProduct);
                }

                List<int> usersOfSameProductValue = null;
                if (usersGroupByProduct.TryGetValue(prodId, out usersOfSameProductValue) == true)
                    usersOfSameProductValue.Add(userId);
            }

            List<int> allCompanyProds = company.CompanyProducts.Select(cmpProd => cmpProd.ProductID).ToList();
            foreach (int prodId in allCompanyProds)
            {
                if (usersGroupByProduct.ContainsKey(prodId) == true)
                {
                    List<int> usersOfSameProduct = usersGroupByProduct[prodId];
                    var userUsingProductID = from usrProd in DatabaseContext.UserProducts where usrProd.User.CompanyID == companyId && usrProd.ProductID == prodId && usrProd.IsTrial == false select usrProd;
                    var userIdOdUsersUsingProductID = userUsingProductID.Select(users => users.UserID);
                    var myUsers = userIdOdUsersUsingProductID.Except(usersOfSameProduct);

                    if (myUsers != null && myUsers.Count() > 0)
                    {
                        var usersToDelete = userUsingProductID.Where(usersOfProduct => myUsers.Where(usr => usr == usersOfProduct.UserID).Any());// usersOfProduct.UserID == myUsers);
                        foreach (UserProduct userProduct in usersToDelete)
                            DatabaseContext.UserProducts.DeleteObject(userProduct);
                    }
                }
                else {
                    var companyUsersUsingProduct = from usrProd in DatabaseContext.UserProducts where usrProd.User.CompanyID == companyId && usrProd.ProductID == prodId && usrProd.IsTrial == false select usrProd;
                    foreach (UserProduct userProduct in companyUsersUsingProduct)
                        DatabaseContext.UserProducts.DeleteObject(userProduct);
                }//if there is only one user using the product and admin removes it.
            }//remove users using the products first so licences can be made available to other users.
            DatabaseContext.SaveChanges();

            foreach (int prodId in usersGroupByProduct.Keys) {
                int noOfLicencesForProduct = 0;
                var userUsingProduct = from usrProd in DatabaseContext.UserProducts where usrProd.User.CompanyID == companyId && usrProd.ProductID == prodId && usrProd.IsTrial == false select usrProd;
                var companyProd = company.CompanyProducts.Where(compProd => compProd.ProductID == prodId);

                List<int> newUsersUsingProduct = usersGroupByProduct[prodId];
                foreach (int userId in newUsersUsingProduct) {
                    var usrProd = userUsingProduct.Where(usrExist => usrExist.UserID == userId);
                    if (usrProd != null && usrProd.Count() > 0)
                    {
                        continue;
                    }
                    else {

                        if (companyProd != null)
                        {
                            foreach (Simplicity.Data.CompanyProduct companyProduct in companyProd)
                            {
                                UserProduct newUsrOfProd = null;
                                noOfLicencesForProduct = companyProduct.NumOfLicenses;
                                if (userUsingProduct.Count() < noOfLicencesForProduct)
                                {
                                    newUsrOfProd = new UserProduct();
                                    newUsrOfProd.UserID = userId;
                                    newUsrOfProd.ProductID = prodId;
                                    newUsrOfProd.IsTrial = false;
                                    newUsrOfProd.StartDate = DateTime.Now;
                                    newUsrOfProd.EndDate = DateTime.Now.AddYears(1);

                                    DatabaseContext.UserProducts.AddObject(newUsrOfProd);
                                    DatabaseContext.SaveChanges();
                                }
                                else {
                                    SetErrorMessage("No. of users are greater than No. of Licenses for " + companyProduct.Product.Name);
                                }
                                break;
                            }//there should be only one product. So loop will run only once.
                        }
                    }
                }
            }
            DatabaseContext.Dispose();
            updateUserProdMapTable();
        }
 /// <summary>
 /// Deprecated Method for adding a new object to the UserProducts EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
 /// </summary>
 public void AddToUserProducts(UserProduct userProduct)
 {
     base.AddObject("UserProducts", userProduct);
 }
 /// <summary>
 /// Create a new UserProduct object.
 /// </summary>
 /// <param name="userID">Initial value of the UserID property.</param>
 /// <param name="productID">Initial value of the ProductID property.</param>
 /// <param name="isTrial">Initial value of the IsTrial property.</param>
 /// <param name="startDate">Initial value of the StartDate property.</param>
 /// <param name="endDate">Initial value of the EndDate property.</param>
 public static UserProduct CreateUserProduct(global::System.Int32 userID, global::System.Int32 productID, global::System.Boolean isTrial, global::System.DateTime startDate, global::System.DateTime endDate)
 {
     UserProduct userProduct = new UserProduct();
     userProduct.UserID = userID;
     userProduct.ProductID = productID;
     userProduct.IsTrial = isTrial;
     userProduct.StartDate = startDate;
     userProduct.EndDate = endDate;
     return userProduct;
 }
예제 #4
0
 private void UpdateTrialLicense()
 {
     CompanyTableAdapters.un_co_detailsTableAdapter compTA = new CompanyTableAdapters.un_co_detailsTableAdapter();
     if (Session[WebConstants.Session.REGISTERING_FOR_TRIAL] != null)
     {
         compTA.CompanyTrialUpdate((int)Session[WebConstants.Session.SIMPLICITY_COMPANY_ID], true);
         Simplicity.Data.SimplicityEntities simplicityDatabaseContext = new Simplicity.Data.SimplicityEntities();
         int userId = (int)Session[WebConstants.Session.SIMPLICITY_USER_ID];
         Simplicity.Data.UserProduct userProduct = (from userProd in simplicityDatabaseContext.UserProducts where userProd.ProductID == 2 && userProd.UserID == userId select userProd).FirstOrDefault();
         if (userProduct == null)
         {
             userProduct = new Simplicity.Data.UserProduct();
             userProduct.UserID = userId;
             userProduct.ProductID = 2;
             simplicityDatabaseContext.AddToUserProducts(userProduct);
         }
         userProduct.IsTrial = true;
         userProduct.StartDate = DateTime.Now;
         userProduct.EndDate = DateTime.Now.AddDays(15);
         simplicityDatabaseContext.SaveChanges();
     }
     else
     {
         compTA.CompanyTrialUpdate((int)Session[WebConstants.Session.SIMPLICITY_COMPANY_ID], false);
     }
 }