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)); }
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 })); }