using System; using System.Collections.Generic; using System.Web.Mvc; using ApacKernel.Extensions; using ApacKernel.Globalization; using ApacKernel.Web.MVC; using ApacSale.Web.MVC; using Now.Entities.Measure; using Now.Web.Models; using Now.Web.Services; namespace Now.Web.Controllers { [Compress] [ServerStamp] [HandleError] [RoutePrefix("measure")] [HttpsRequired] public class MeasureController : BaseController { [Route("summary/{period:enum(Now.Entities.Measure.MeasureSummaryPeriods)?}")] [Permission(DashboardPermissions.MeasureSummary)] public ActionResult Summary(MeasureSummaryPeriods? period) { period = period ?? MeasureSummaryPeriods.Months; ViewBag.CurrentPeriod = period; ViewBag.LeftMenuType = "summary"; ViewBag.FilterType = "filter"; ViewBag.ContentType = "summary/"; ViewBag.LinkType = "summary"; ViewBag.UrlParceRegex = @"\/*measure\/summary\/*"; ViewBag.PeriodSwitcherFilter = "{2}"; ViewBag.IsCsv = true; return View(); } [Route("summary/live/{period:enum(Now.Entities.Measure.MeasureSummaryPeriods)?}")] [Permission(DashboardPermissions.MeasureSummaryLive)] public ActionResult SummaryCommonLive(MeasureSummaryPeriods? period) { return SummaryCommon(MeasureSummaryType.Live, period); } [Route("summary/buyers/{period:enum(Now.Entities.Measure.MeasureSummaryPeriods)?}")] [Permission(DashboardPermissions.MeasureSummaryBuyers)] public ActionResult SummaryCommonBuyers(MeasureSummaryPeriods? period) { return SummaryCommon(MeasureSummaryType.Buyers, period); } private ActionResult SummaryCommon(MeasureSummaryType viewType, MeasureSummaryPeriods? period) { ViewBag.LeftMenuType = "summaryCommon"; ViewBag.FilterType = "filter/common"; ViewBag.PeriodSwitcherFilter = "{3}"; if (viewType == MeasureSummaryType.Live) { ViewBag.ContentType = "summary/common/live/"; ViewBag.LinkType = "summary/live"; ViewBag.UrlParceRegex = @"\/*measure\/summary\/live\/*"; } else if (viewType == MeasureSummaryType.Buyers) { ViewBag.ContentType = "summary/common/buyers/"; ViewBag.LinkType = "summary/buyers"; ViewBag.UrlParceRegex = @"\/*measure\/summary\/buyers\/*"; } ViewBag.CurrentPeriod = period ?? MeasureSummaryPeriods.Months; return View("Summary"); } [Route("flash/{year:int:min(2007)?}/{week:int:min(1):max(53)?}")] [Permission(DashboardPermissions.MeasureFlash)] public ActionResult Flash(int? year, int? week) { ViewBag.Link = "flash/"; ViewBag.LeftMenuType = "summary"; ViewBag.FilterType = "filter"; ViewBag.PeriodSwitcherFilter = "{2}/{3}"; ViewBag.FilterOptions = GetPeriodsFilter(year, week, "/measure/flash/{0}/{1}"); return View(); } [Route("flash/live/{year:int:min(2007)?}/{week:int:min(1):max(53)?}")] [Permission(DashboardPermissions.MeasureFlashLive)] public ActionResult FlashLive(int? year, int? week) { ViewBag.Link = "flash/live/"; ViewBag.LeftMenuType = "summaryCommon"; ViewBag.FilterType = "filter/common"; ViewBag.PeriodSwitcherFilter = "{3}/{4}"; ViewBag.FilterOptions = GetPeriodsFilter(year, week, "/measure/flash/live/{0}/{1}"); return View("Flash"); } [Route("flash/buyers/{year:int:min(2007)?}/{week:int:min(1):max(53)?}")] [Permission(DashboardPermissions.MeasureFlashBuyers)] public ActionResult FlashBuyers(int? year, int? week) { ViewBag.Link = "flash/buyers/"; ViewBag.LeftMenuType = "summaryCommon"; ViewBag.FilterType = "filter/common"; ViewBag.PeriodSwitcherFilter = "{3}/{4}"; ViewBag.FilterOptions = GetPeriodsFilter(year, week, "/measure/flash/buyers/{0}/{1}"); return View("Flash"); } [Route("Csv")] [Permission(DashboardPermissions.Administration)] public ActionResult Csv() { return View(); } private List GetPeriodsFilter(int? year, int? week, string urlFormat) { var today = DateTime.Today; week = week ?? today.GetWeekOfYear(); year = year ?? today.Year; var prevWeek = week - 1; var nextWeek = week + 1; var prevYear = year; var nextYear = year; if (prevWeek < 1) { prevWeek = 53; prevYear = prevYear - 1; } if (nextWeek > 53) { nextWeek = 1; nextYear = nextYear + 1; } nextWeek = nextWeek > 53 ? 1 : nextWeek; ViewBag.CurrentSelectionWeek = week; ViewBag.CurrentSelectionYear = year; return new List { new SwitcherModel("", urlFormat.F(nextYear, nextWeek), nextWeek.ToString()) }; } } }