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