using System.Linq; using System.Web.Mvc; using Organization.Project.Common.Dal.Objects; using Organization.Project.Common.Enums.Bll; using Organization.Project.Common.Enums.UI; using Organization.Project.Common.Authentication; using Organization.Project.Common.Bll; using Organization.Project.Common.Configuration; using Organization.Project.Web.Helpers; using Organization.Project.Web.Models.Popups; using Organization.Project.Web.Models.Stores; using Organization.Project.Web.ViewData; using Organization.Project.Web.Extensions; using System.Collections.Generic; namespace Organization.Project.Web.Controllers { /// /// Controller for stores-related operations /// public class StoresController : BaseController { #region User Defined Variables private readonly IStoresManager storesManager; private readonly IReferenceBookManager referenceBookManager; #endregion #region Constructor /// /// Constructor /// /// authentication instance /// account manager instance /// cart instance /// Project configuration instance /// reference books instance /// stores manager instance public StoresController(IAuthentication auth, IAccountManager authManager, IProjectCart cart, IProjectConfiguration config, IReferenceBookManager referenceBookManager, IStoresManager storesManager) : base(auth, authManager, cart, config) { this.storesManager = storesManager; this.referenceBookManager = referenceBookManager; } #endregion #region Public Methods /// /// Shows view for searching of stores /// /// view for stores search [ForceNoCache] public ActionResult Index() { var viewData = CreateViewData(ProjectWebPage.Where2Buy); var countries = referenceBookManager.GetAllCountries().ToArray(); ICountry firstCountry = countries.FirstOrDefault(); viewData.StoresModel = new StoresModel { Countries = countries.Select(c => new KeyValuePair(c.Id, c.Name)), CountriesCodes = countries.Select(c => new KeyValuePair(c.Id, c.Abbreviation)), CountriesStatesModel = CreateCountriesStatesModel(), DefaultCountryId = firstCountry != null ? (int?)firstCountry.Id : null, Config = viewData.Config }; return View(viewData); } /// /// Shows view with list of found stores /// /// country id /// zip code /// state id /// search product type /// view with list of found stores public ActionResult GetSearchResults(int countryId, string zip, int? stateId, StoresSearchProductType searchProduct) { return PartialView("StoresList", storesManager.GetStores(countryId, stateId, zip, searchProduct)); } /// /// Gets external part of map dialog view /// /// map dialog view frame public ActionResult GetMapExtView() { var model = new GeneralPopupModel("", null) { IconFile = "icoStoreMap.gif", TitleText = "

", InHeight = 230, InWidth = 721 }; return View("PopupsExt/GeneralPopup", model); } #endregion #region Private Methods private IEnumerable CreateCountriesStatesModel() { return from state in referenceBookManager.GetAllCountriesStates() group state by state.CountryId into grouping select new CountryStatesModel { CountryId = grouping.Key, CountryStates = grouping.OrderBy(g => g.Ordinal).Select( g => new KeyValuePair(g.Id, g.LongName)) }; } #endregion } }