コード例 #1
0
        public ActionResult Manage(int id)
        {
            var userId      = this.User.Identity.GetUserId();
            var currentUser = this.users.GetById(userId);

            var campaign = this.campaigns.GetById(id);

            if (campaign == null)
            {
                return(this.HttpNotFound());
            }

            if (!currentUser.Campaigns.Contains(campaign))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
            }

            var campaignParticipations = campaign
                                         .Participations
                                         .OrderBy(p => p.CreatedOn)
                                         .Where(p => p.Status == ParticipationStatus.Pending)
                                         .Select(p => new AcceptParticipationViewModel
            {
                Id                     = p.Id,
                CreatedOn              = p.CreatedOn,
                Status                 = p.Status,
                OfferedPrice           = p.OfferedPrice,
                AvailableShares        = p.Campaign.AvailableShares,
                CompanyName            = p.User.UserName,
                OfferedShares          = p.OfferedPrice,
                ParticipationCreatorId = p.User.Id
            })
                                         .ToList();

            var campaignsManageViewModel = new ManageCampaignViewModel
            {
                AllPendingParticipations = campaignParticipations,
                IsAccepted = true
            };

            return(this.View(campaignsManageViewModel));
        }
コード例 #2
0
        public ActionResult Manage(int id, ManageCampaignViewModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.RedirectToAction("Manage", new { id = id }));
            }

            var userId      = this.User.Identity.GetUserId();
            var currentUser = this.users.GetById(userId);

            var campaign = this.campaigns.GetById(id);

            if (!currentUser.Campaigns.Contains(campaign))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden));
            }

            var participation = campaign.Participations.FirstOrDefault(p => p.Id == model.ParticipationId);

            if (participation == null)
            {
                return(this.HttpNotFound());
            }

            if (model.IsAccepted == true)
            {
                if (model.SharesGivenToUser > participation.OfferedPrice)
                {
                    return(this.PartialView("Error"));
                }

                participation.Status      = ParticipationStatus.Accepted;
                participation.SharesOwned = model.SharesGivenToUser;

                campaign.AvailableShares -= model.SharesGivenToUser;

                if (campaign.AvailableShares < 0)
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                }

                this.participations.Update(participation);
                this.participations.SaveChanges();

                if (campaign.AvailableShares == 0)
                {
                    campaign.Status = CampaignStatus.Finished;
                }

                this.campaigns.Update(campaign);
                this.campaigns.SaveChanges();
            }
            else
            {
                participation.Status = ParticipationStatus.Refused;

                this.participations.Update(participation);
                this.participations.SaveChanges();
            }

            return(this.RedirectToAction("Manage", new { id = id }));
        }