using GreenTree.Nachtragsmanagement.Core.Domain.Deviation; using GreenTree.Nachtragsmanagement.Services.Appendix; using GreenTree.Nachtragsmanagement.Services.Deviation; using GreenTree.Nachtragsmanagement.Services.Site; using GreenTree.Nachtragsmanagement.Services.User; using GreenTree.Nachtragsmanagement.Web.Framework.Authorization; using GreenTree.Nachtragsmanagement.Web.Models.Site; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace GreenTree.Nachtragsmanagement.Web.Controllers { public class SiteController : Controller { private readonly ISiteService _siteService; private readonly IDeviationService _deviationService; private readonly IAppendixService _appendixService; private readonly IUserService _userService; public SiteController( ISiteService siteService, IDeviationService deviationService, IAppendixService appendixService, IUserService userService) { _siteService = siteService; _deviationService = deviationService; _appendixService = appendixService; _userService = userService; ViewData["AllSite"] = _siteService.GetAllSites(); } #region Sites /// /// Basic site view function /// [FunctionAuthorize(true, "Site-Sites")] public ActionResult ViewSites() { var sites = _siteService.GetAllSites(); var siteModels = sites .Select(u => SiteDataModel.FromSite(u, false)) .ToList(); return View("~/Views/Sites/View.cshtml", siteModels); } /// /// Get JSON data of specific site /// /// Site id. public ActionResult GetSite(int id = -1) { var site = _siteService.GetSiteById(id); if (site == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; var siteModel = SiteDataModel.FromSite(site, false); return new JsonResult { Data = JsonConvert.SerializeObject(siteModel), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } /// /// Callback result for site grid /// public ActionResult PartialSites() { var sites = _siteService.GetAllSites(); var siteModels = sites .Select(u => SiteDataModel.FromSite(u, false)) .ToList(); return PartialView("~/Views/Sites/_SiteGridPartial.cshtml", siteModels); } /// /// Partial edit for editing of existing or for new site /// /// Id for existing site, otherweise -1. public ActionResult EditSite(int id = -1) { var site = _siteService.GetSiteById(id); var siteModel = SiteDataModel.FromSite(site, true); return PartialView("~/Views/Sites/_SiteEditPartial.cshtml", siteModel); } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// Site model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditSite(SiteDataModel siteModel) { if (!ModelState.IsValid) { //foreach (var deviation in siteModel.DeviationValues) // siteModel.DeviationDescriptions.Add( // ((IList)ViewData["AllDeviations"]) // .First(r => r.Id == deviation).Description); //foreach (var deviation in siteModel.DeviationValues) // siteModel.DeviationDescriptions.Add( // ((IList)ViewData["AllDeviations"]) // .First(r => r.Id == deviation).Description); //foreach (var deviation in siteModel.DeviationValues) // siteModel.DeviationDescriptions.Add( // ((IList)ViewData["AllDeviations"]) // .First(r => r.Id == deviation).Description); return PartialView("~/Views/Sites/_SiteEditPartial.cshtml", siteModel); } var selectedDeviations = _deviationService.GetDeviationsByIds(siteModel.DeviationValues.ToArray()); var selectedAppendices = _appendixService.GetAppendicesByIds(siteModel.AppendixValues.ToArray()); var selectedUsers = _userService.GetUsersByIds(siteModel.UserValues.ToArray()); if (siteModel.Id == -1) { var site = siteModel.ToSite(); site.SetDeviations(selectedDeviations); site.SetAppendices(selectedAppendices); site.SetUsers(selectedUsers); _siteService.InsertSite(site); } else { var site = _siteService.GetSiteById(siteModel.Id); site.CustomNumber = siteModel.CustomNumber; site.Description = siteModel.Description; site.Start = siteModel.Start; site.End = siteModel.End; site.Comment = siteModel.Comment; site.SetDeviations(selectedDeviations); site.SetAppendices(selectedAppendices); site.SetUsers(selectedUsers); _siteService.UpdateSite(site); } return new JsonResult { Data = "success" }; } /// /// Simple JSON result for deleting a specific site /// /// Site id. [HttpPost] public ActionResult DeleteSite(int id) { var site = _siteService.GetSiteById(id); if (site != null) _siteService.DeleteSite(site); return new JsonResult { Data = "success" }; } #endregion } }