/// <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);
        }
Beispiel #2
0
        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();
            }
        }