using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Domain.Repositories; using Domain.Entities; using FilmsRUsOnline.Models; namespace FilmsRUsOnline.Controllers { public class OrderController : Controller { // The controller needs a films repository to access films. private IFilmsRepository filmsRepository; // Constructor, gets given a repository by Dependency Injection (DI). public OrderController(IFilmsRepository filmsRepository) { this.filmsRepository = filmsRepository; } public RedirectToRouteResult AddToOrder(Order order, int filmID, string returnUrl) { Film film = filmsRepository.Films.FirstOrDefault(x => x.FilmID == filmID); order.AddItem(film, 1); return RedirectToAction("Index", new { returnUrl }); } public RedirectToRouteResult RemoveFromOrder(Order order, int filmID, string returnUrl) { Film film = filmsRepository.Films .FirstOrDefault(x => x.FilmID == filmID); order.RemoveItem(film); return RedirectToAction("Index", new { returnUrl }); } public ViewResult Index(Order order, string returnUrl) { return View(new OrderIndexViewModel { Order = order, ReturnUrl = returnUrl }); } public ViewResult Summary(Order order) { return View("_Summary", order); } // First request for the Checkout page (i.e. HTTP GET), so just display empty form. [HttpGet] public ViewResult Checkout() { return View(new DeliveryDetails()); } // Subsequent request for the Checkout page (i.e. HTTP POST), // i.e. user has posted back data. Do go to Done page (maybe...). [HttpPost] public ActionResult Checkout(Order order, DeliveryDetails deliveryDetails) { // Empty orders can't be checked out. if (order.Items.Count == 0) ModelState.AddModelError("Order", "Dude, you ain't ordered any films yet!"); if (ModelState.IsValid) { return View("Done", order); } else { return View(deliveryDetails); } } } }