/// <summary> /// Create new TVChannelPackageContract, cancel all TVChannelContracts constains in that package and change user balance /// </summary> public override void Create(TVChannelPackageContract item) { TVChannelPackage tvChannelPackage = tvChannelPackageRepository.Get(item.TVChannelPackageId); double monthPrice = CalculatePrice(tvChannelPackage.Price); double price = CalculatePrice(monthPrice); User user = (userRepository as UserRepository).GetById(item.SubscriberId); if (user.Balance < price) { throw new Exception(); } ContractAddress contractAddress = contractAddressRepository.Get(item.ContractAddressId); IEnumerable <TVChannel> tvChannelsInPackage = tvChannelPackageRepository.Get(item.TVChannelPackageId).Channels.ToArray(); IEnumerable <TVChannelContract> tvChannelContracts = contractAddress.TVChannelContracts.Where(tvChannel => !tvChannel.IsCanceled).ToArray(); foreach (TVChannelContract tvChannelContract in tvChannelContracts) { if (tvChannelsInPackage.Count(tvChannel => tvChannel.Id == tvChannelContract.TVChannelId) != 0) { TVChannelContract tvChannelContractToCancel = tvChannelContractRepository.Get(tvChannelContract.Id); tvChannelContractToCancel.IsCanceled = true; tvChannelContractRepository.Edit(tvChannelContractToCancel); } } base.Create(item); user.Balance -= price; userRepository.Edit(user); }
public ActionResult Cancel(Guid id) { TVChannelContract tvChannelContract = actions.GetNotCanceled(id); if (User.IsInRole("Administrator") || User.IsInRole("Support") || User.Identity.Name == tvChannelContract.Subscriber.UserName) { actions.Cancel(tvChannelContract.Id); if (User.Identity.Name == tvChannelContract.Subscriber.UserName) { return(RedirectToAction("Index", "User")); } else { return(RedirectToAction("Details", "AdminUser", new { @id = tvChannelContract.SubscriberId })); } } else { throw new Exception(); } }