public void ComUserDurationSet(int CommunityId, int UserId, int Duration, bool AddToPrevious) { if (!Manager.IsInTransaction()) { Manager.BeginTransaction(); } Domain.SubscriptionExpiration expiration = Manager.GetAll <Domain.SubscriptionExpiration>(exp => exp.Deleted == BaseStatusDeleted.None && exp.CommunityId == CommunityId && exp.PersonId == UserId) .OrderByDescending(exp => exp.CreatedOn) .FirstOrDefault(); if (expiration == null || expiration.Id <= 0) { expiration = new Domain.SubscriptionExpiration(); expiration.CreateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress); expiration.PersonId = UserId; expiration.CommunityId = UC.CurrentCommunityID; } else { expiration.UpdateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress); } if (AddToPrevious && Duration >= 0) { expiration.Duration += Duration; } else { expiration.Duration = Duration; } //if (expiration.StartDate != null) //{ // expiration.EndDate = expiration.StartDate + new TimeSpan(Duration, 0, 0, 0); //} bool saved = false; try { Manager.SaveOrUpdate <Domain.SubscriptionExpiration>(expiration); Manager.Commit(); saved = true; } catch (Exception ex) { Manager.RollBack(); } if (saved) { CacheHelper.UserReset(UserId); } }
public void ComUserStartUpdate(int CommunityId, IList <int> UsersId, bool Start) { if (!Manager.IsInTransaction()) { Manager.BeginTransaction(); } IList <Domain.SubscriptionExpiration> expirations = new List <Domain.SubscriptionExpiration>(); UsersId = UsersId.Distinct().ToList(); int counter = UsersId.Count; if (counter > 500) { int block = (counter / 500) + 1; for (int curblock = 0; curblock < block; curblock++) { IList <int> currentId = UsersId.Skip(500 * curblock).Take(500).ToList(); IList <Domain.SubscriptionExpiration> curExps = Manager.GetAll <Domain.SubscriptionExpiration>(se => currentId.Contains(se.PersonId)); expirations = expirations.Union(curExps).ToList(); } expirations = expirations.Distinct().ToList(); } else { expirations = Manager.GetAll <Domain.SubscriptionExpiration>(exp => exp.Deleted == BaseStatusDeleted.None && exp.CommunityId == CommunityId && UsersId.Contains(exp.PersonId)); } IList <int> settedUsersId = expirations.Select(exp => exp.PersonId).Distinct().ToList(); IList <int> unSettedUsersId = UsersId.Except(settedUsersId).ToList(); if (unSettedUsersId != null && unSettedUsersId.Any()) { foreach (int UserIdNotSet in unSettedUsersId) { Domain.SubscriptionExpiration expiration = new Domain.SubscriptionExpiration(); expiration.CreateMetaInfo(Manager.GetLitePerson(UC.CurrentUserID), UC.IpAddress, UC.ProxyIpAddress); expiration.CommunityId = CommunityId; expiration.PersonId = UserIdNotSet; Domain.dtoUserExpiration exp = ComUserDurationGet(CommunityId, UserIdNotSet); expiration.Duration = exp.Duration; expirations.Add(expiration); } } DateTime StartDt = DateTime.Now; foreach (Domain.SubscriptionExpiration exp in expirations) { if (Start && exp.Duration >= 0) { exp.StartDate = StartDt; //exp.EndDate = StartDt.AddDays(exp.Duration); } else { exp.StartDate = null; //exp.EndDate = null; } } bool saved = false; try { Manager.SaveOrUpdateList <Domain.SubscriptionExpiration>(expirations); Manager.Commit(); saved = true; } catch { Manager.RollBack(); } if (saved) { CacheHelper.UserReset(); } }