DeviationController.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. using GreenTree.Nachtragsmanagement.Core;
  2. using GreenTree.Nachtragsmanagement.Core.Domain.Appendix;
  3. using GreenTree.Nachtragsmanagement.Core.Domain.Deviation;
  4. using GreenTree.Nachtragsmanagement.Services.Appendix;
  5. using GreenTree.Nachtragsmanagement.Services.Deviation;
  6. using GreenTree.Nachtragsmanagement.Services.Site;
  7. using GreenTree.Nachtragsmanagement.Web.Framework.Authorization;
  8. using GreenTree.Nachtragsmanagement.Web.Models.Deviation;
  9. using Newtonsoft.Json;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Web;
  14. using System.Web.Mvc;
  15. namespace GreenTree.Nachtragsmanagement.Web.Controllers
  16. {
  17. public class DeviationController : Controller
  18. {
  19. private readonly IDeviationService _deviationService;
  20. private readonly IAppendixService _appendixService;
  21. private readonly ISiteService _siteService;
  22. public DeviationController(
  23. IDeviationService deviationService,
  24. IAppendixService appendixService,
  25. ISiteService siteService)
  26. {
  27. _deviationService = deviationService;
  28. _appendixService = appendixService;
  29. _siteService = siteService;
  30. ViewData["AllDisturbances"] = _deviationService.GetAllDisturbances();
  31. ViewData["AllStatuses"] = _deviationService.GetAllStatuses();
  32. ViewData["AllKinds"] = _deviationService.GetAllKinds();
  33. }
  34. #region Deviations
  35. /// <summary>
  36. /// Basic deviation view function
  37. /// </summary>
  38. [FunctionAuthorize(true, "Deviation-Deviations")]
  39. public ActionResult ViewDeviations()
  40. {
  41. var deviations = _deviationService.GetAllDeviations();
  42. var deviationModels = deviations
  43. .Select(u => DeviationDataModel.FromDeviation(u, false))
  44. .ToList();
  45. return View("~/Views/Deviations/View.cshtml", deviationModels);
  46. }
  47. /// <summary>
  48. /// Get JSON data of specific deviation
  49. /// </summary>
  50. /// <param name="id">Deviation id.</param>
  51. public ActionResult GetDeviation(int id = -1)
  52. {
  53. var deviation = _deviationService.GetDeviationById(id);
  54. if (deviation == null)
  55. return new JsonResult
  56. {
  57. Data = "notFound",
  58. JsonRequestBehavior = JsonRequestBehavior.AllowGet
  59. };
  60. var deviationModel = DeviationDataModel.FromDeviation(deviation, false);
  61. return new JsonResult
  62. {
  63. Data = JsonConvert.SerializeObject(deviationModel),
  64. JsonRequestBehavior = JsonRequestBehavior.AllowGet
  65. };
  66. }
  67. /// <summary>
  68. /// Callback result for deviation grid
  69. /// </summary>
  70. public ActionResult PartialDeviations()
  71. {
  72. var deviations = _deviationService.GetAllDeviations();
  73. var deviationModels = deviations
  74. .Select(u => DeviationDataModel.FromDeviation(u, false))
  75. .ToList();
  76. return PartialView("~/Views/Deviations/_DeviationGridPartial.cshtml", deviationModels);
  77. }
  78. /// <summary>
  79. /// Partial edit for editing of existing or for new deviation
  80. /// </summary>
  81. /// <param name="id">Id for existing deviation, otherweise -1.</param>
  82. public ActionResult EditDeviation(int id = -1)
  83. {
  84. var deviation = _deviationService.GetDeviationById(id);
  85. var deviationModel = DeviationDataModel.FromDeviation(deviation, true);
  86. var defaultKind = _deviationService.GetDefaultKind();
  87. var defaultStatus = _deviationService.GetDefaultStatus();
  88. if (defaultKind != null)
  89. ViewData["DefaultKind"] = defaultKind.Id;
  90. if (defaultStatus != null)
  91. ViewData["DefaultStatus"] = defaultStatus.Id;
  92. return PartialView("~/Views/Deviations/_DeviationEditPartial.cshtml", deviationModel);
  93. }
  94. /// <summary>
  95. /// Partial edit for creating a new deviation for a site
  96. /// </summary>
  97. /// <param name="siteId">Id of the site which the deviation should be appended to.</param>
  98. public ActionResult AppendDeviationToSite(int siteId)
  99. {
  100. var site = _siteService.GetSiteById(siteId);
  101. var allDeviations = new List<Deviation>();
  102. allDeviations.AddRange(
  103. site.Appendices
  104. .SelectMany(a => a.Deviations));
  105. allDeviations.AddRange(
  106. site.Deviations);
  107. var lastCustomNumber = allDeviations
  108. .Max(d => StaticHelper.TryParseInt(d.CustomNumber));
  109. var deviationModel = new DeviationDataModel
  110. {
  111. Id = -1,
  112. SiteId = siteId,
  113. CustomNumber = (lastCustomNumber + 1).ToString(),
  114. Percentage = 1,
  115. };
  116. var defaultKind = _deviationService.GetDefaultKind();
  117. var defaultStatus = _deviationService.GetDefaultStatus();
  118. if (defaultKind != null)
  119. ViewData["DefaultKind"] = defaultKind.Id;
  120. if (defaultStatus != null)
  121. ViewData["DefaultStatus"] = defaultStatus.Id;
  122. //ViewData["relationType"] = "site";
  123. //ViewData["relationId"] = siteId;
  124. return PartialView("~/Views/Deviations/_DeviationEditPartial.cshtml", deviationModel);
  125. }
  126. /// <summary>
  127. /// Partial edit for creating a new deviation for an appendix
  128. /// </summary>
  129. /// <param name="appendixId">Id of the appendix which the deviation should be appended to.</param>
  130. public ActionResult AppendDeviationToAppendix(int appendixId)
  131. {
  132. var appendix = _appendixService.GetAppendixById(appendixId);
  133. var site = appendix.Site;
  134. var allDeviations = new List<Deviation>();
  135. allDeviations.AddRange(
  136. site.Appendices
  137. .SelectMany(a => a.Deviations));
  138. allDeviations.AddRange(
  139. site.Deviations);
  140. var lastCustomNumber = allDeviations
  141. .Max(d => StaticHelper.TryParseInt(d.CustomNumber));
  142. var deviationModel = new DeviationDataModel
  143. {
  144. Id = -1,
  145. AppendixId = appendixId,
  146. CustomNumber = (lastCustomNumber + 1).ToString(),
  147. Percentage = 1,
  148. };
  149. var defaultKind = _deviationService.GetDefaultKind();
  150. var defaultStatus = _deviationService.GetDefaultStatus();
  151. if (defaultKind != null)
  152. ViewData["DefaultKind"] = defaultKind.Id;
  153. if (defaultStatus != null)
  154. ViewData["DefaultStatus"] = defaultStatus.Id;
  155. //ViewData["relationType"] = "appendix";
  156. //ViewData["relationId"] = appendixId;
  157. return PartialView("~/Views/Deviations/_DeviationEditPartial.cshtml", deviationModel);
  158. }
  159. /// <summary>
  160. /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
  161. /// </summary>
  162. /// <param name="deviationModel">Deviation model to be saved.</param>
  163. [HttpPost, ValidateInput(false)]
  164. public ActionResult EditDeviation(DeviationDataModel deviationModel)
  165. {
  166. deviationModel.DisturbanceValueEntities =
  167. deviationModel.DisturbanceEntities
  168. .Select(r => JsonConvert.DeserializeObject<DisturbanceValueDataModel>(r))
  169. .ToList();
  170. for (int i = 0; i < deviationModel.DisturbanceValueEntities.Count; i++)
  171. deviationModel.DisturbanceValueEntities.ElementAt(i).Json = deviationModel.DisturbanceEntities.ElementAt(i);
  172. deviationModel.PercentageValue = deviationModel.Value * deviationModel.Percentage;
  173. if (!ModelState.IsValid)
  174. return PartialView("~/Views/Deviations/_DeviationEditPartial.cshtml", deviationModel);
  175. var disturbanceValues = deviationModel.DisturbanceValueEntities
  176. .Select(r => r.ToDisturbanceValue())
  177. .ToList();
  178. if (deviationModel.Id == -1)
  179. {
  180. var deviation = deviationModel.ToDeviation();
  181. deviation.SetDisturbanceValues(disturbanceValues);
  182. _deviationService.InsertDeviation(deviation);
  183. }
  184. else
  185. {
  186. var deviation = _deviationService.GetDeviationById(deviationModel.Id);
  187. deviation.CustomNumber = deviationModel.CustomNumber;
  188. deviation.ReceiptDate = deviationModel.ReceiptDate;
  189. deviation.AppendixDate = deviationModel.AppendixDate;
  190. deviation.Value = deviationModel.Value;
  191. deviation.AppendixId = deviationModel.AppendixId;
  192. deviation.StatusId = deviationModel.StatusId;
  193. deviation.KindId = deviationModel.KindId;
  194. deviation.Comment = deviationModel.Comment;
  195. deviation.SetDisturbanceValues(disturbanceValues);
  196. _deviationService.UpdateDeviation(deviation);
  197. }
  198. return new JsonResult
  199. {
  200. Data = "success"
  201. };
  202. }
  203. /// <summary>
  204. /// Simple JSON result for deleting a specific deviation
  205. /// </summary>
  206. /// <param name="id">Deviation id.</param>
  207. [HttpPost]
  208. public ActionResult DeleteDeviation(int id)
  209. {
  210. var deviation = _deviationService.GetDeviationById(id);
  211. if (deviation != null)
  212. _deviationService.DeleteDeviation(deviation);
  213. return new JsonResult
  214. {
  215. Data = "success"
  216. };
  217. }
  218. #endregion
  219. #region Claims
  220. /// <summary>
  221. /// Basic claim view function
  222. /// </summary>
  223. [FunctionAuthorize(true, "Deviation-Claims")]
  224. public ActionResult ViewClaims()
  225. {
  226. return View("~/Views/Deviations/Claims.cshtml");
  227. }
  228. /// <summary>
  229. /// Get JSON data of specific claim
  230. /// </summary>
  231. /// <param name="claimType">Claim type.</param>
  232. /// <param name="id">Claim id.</param>
  233. public ActionResult GetClaim(string claimType, int id = -1)
  234. {
  235. switch (claimType.ToLower())
  236. {
  237. case "status":
  238. var status = _deviationService.GetStatusById(id);
  239. if (status == null)
  240. return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  241. else
  242. return new JsonResult {
  243. Data = JsonConvert.SerializeObject(status),
  244. JsonRequestBehavior = JsonRequestBehavior.AllowGet
  245. };
  246. case "disturbance":
  247. var disturbance = _deviationService.GetDisturbanceById(id);
  248. if (disturbance == null)
  249. return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  250. else
  251. return new JsonResult
  252. {
  253. Data = JsonConvert.SerializeObject(disturbance),
  254. JsonRequestBehavior = JsonRequestBehavior.AllowGet
  255. };
  256. case "kind":
  257. var kind = _deviationService.GetKindById(id);
  258. if (kind == null)
  259. return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  260. else
  261. return new JsonResult
  262. {
  263. Data = JsonConvert.SerializeObject(kind),
  264. JsonRequestBehavior = JsonRequestBehavior.AllowGet
  265. };
  266. default:
  267. return new JsonResult { Data = "unknownClaimType", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  268. }
  269. }
  270. /// <summary>
  271. /// Callback result for claim grid
  272. /// </summary>
  273. /// <param name="claimType">Claim type.</param>
  274. public ActionResult PartialClaims(string claimType)
  275. {
  276. switch (claimType.ToLower())
  277. {
  278. case "status":
  279. return PartialView("~/Views/Deviations/_StatusListPartial.cshtml", ViewData["AllStatuses"]);
  280. case "disturbance":
  281. return PartialView("~/Views/Deviations/_DisturbanceListPartial.cshtml", ViewData["AllDisturbances"]);
  282. case "kind":
  283. return PartialView("~/Views/Deviations/_KindListPartial.cshtml", ViewData["AllKinds"]);
  284. default:
  285. return new EmptyResult();
  286. }
  287. }
  288. /// <summary>
  289. /// Partial edit for editing of existing or for new claim
  290. /// </summary>
  291. /// <param name="claimType">Claim type.</param>
  292. /// <param name="id">Id for existing claim, otherweise -1.</param>
  293. public ActionResult EditClaim(string claimType = "", int id = -1)
  294. {
  295. switch (claimType.ToLower())
  296. {
  297. case "status":
  298. var status = _deviationService.GetStatusById(id);
  299. var statusModel = StatusDataModel.FromStatus(status, true);
  300. return PartialView("~/Views/Deviations/_StatusEditPartial.cshtml", statusModel);
  301. case "disturbance":
  302. var disturbance = _deviationService.GetDisturbanceById(id);
  303. var disturbanceModel = DisturbanceDataModel.FromDisturbance(disturbance, true);
  304. return PartialView("~/Views/Deviations/_DisturbanceEditPartial.cshtml", disturbanceModel);
  305. case "kind":
  306. var kind = _deviationService.GetKindById(id);
  307. var kindModel = KindDataModel.FromKind(kind, true);
  308. return PartialView("~/Views/Deviations/_KindEditPartial.cshtml", kindModel);
  309. default:
  310. return new EmptyResult();
  311. }
  312. }
  313. /// <summary>
  314. /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
  315. /// </summary>
  316. /// <param name="statusModel">Status model to be saved.</param>
  317. [HttpPost, ValidateInput(false)]
  318. public ActionResult EditStatus(StatusDataModel statusModel)
  319. {
  320. if (!ModelState.IsValid)
  321. return PartialView("~/Views/Deviations/_StatusEditPartial.cshtml", statusModel);
  322. if (statusModel.Id == -1)
  323. {
  324. var claim = statusModel.ToStatus();
  325. _deviationService.InsertStatus(claim);
  326. }
  327. else
  328. {
  329. var status = _deviationService.GetStatusById(statusModel.Id);
  330. status.Description = statusModel.Description;
  331. status.IsDefault = statusModel.IsDefault;
  332. _deviationService.UpdateStatus(status);
  333. }
  334. return new JsonResult
  335. {
  336. Data = "success"
  337. };
  338. }
  339. /// <summary>
  340. /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
  341. /// </summary>
  342. /// <param name="disturbanceModel">Disturbance model to be saved.</param>
  343. [HttpPost, ValidateInput(false)]
  344. public ActionResult EditDisturbance(DisturbanceDataModel disturbanceModel)
  345. {
  346. if (!ModelState.IsValid)
  347. return PartialView("~/Views/Deviations/_DisturbanceEditPartial.cshtml", disturbanceModel);
  348. if (disturbanceModel.Id == -1)
  349. {
  350. var claim = disturbanceModel.ToDisturbance();
  351. _deviationService.InsertDisturbance(claim);
  352. }
  353. else
  354. {
  355. var disturbance = _deviationService.GetDisturbanceById(disturbanceModel.Id);
  356. disturbance.Description = disturbanceModel.Description;
  357. _deviationService.UpdateDisturbance(disturbance);
  358. }
  359. return new JsonResult
  360. {
  361. Data = "success"
  362. };
  363. }
  364. /// <summary>
  365. /// Partial edit result if ModelState is valid, otherwise simple JSON result for success
  366. /// </summary>
  367. /// <param name="kindModel">Kind model to be saved.</param>
  368. [HttpPost, ValidateInput(false)]
  369. public ActionResult EditKind(KindDataModel kindModel)
  370. {
  371. if (!ModelState.IsValid)
  372. return PartialView("~/Views/Deviations/_KindEditPartial.cshtml", kindModel);
  373. if (kindModel.Id == -1)
  374. {
  375. var claim = kindModel.ToKind();
  376. _deviationService.InsertKind(claim);
  377. }
  378. else
  379. {
  380. var kind = _deviationService.GetKindById(kindModel.Id);
  381. kind.Description = kindModel.Description;
  382. kind.IsDefault = kindModel.IsDefault;
  383. _deviationService.UpdateKind(kind);
  384. }
  385. return new JsonResult
  386. {
  387. Data = "success"
  388. };
  389. }
  390. /// <summary>
  391. /// Simple JSON result for deleting a specific claim
  392. /// </summary>
  393. /// <param name="claimType">Claim type.</param>
  394. /// <param name="id">Claim id.</param>
  395. /// <param name="replaceId">Id of claim which deviations get in place of deleting claim.</param>
  396. [HttpPost]
  397. public ActionResult DeleteClaim(string claimType, int id, int replaceId)
  398. {
  399. switch (claimType.ToLower())
  400. {
  401. case "status":
  402. var status = _deviationService.GetStatusById(id);
  403. var replaceStatus = _deviationService.GetStatusById(replaceId);
  404. var statusDeviations = _deviationService.GetDeviationsByStatus(id);
  405. foreach (var deviation in statusDeviations)
  406. {
  407. deviation.StatusId = replaceId;
  408. deviation.Status = replaceStatus;
  409. _deviationService.UpdateDeviation(deviation);
  410. }
  411. if (status != null)
  412. _deviationService.DeleteStatus(status);
  413. break;
  414. case "kind":
  415. var kind = _deviationService.GetKindById(id);
  416. var replaceKind = _deviationService.GetKindById(replaceId);
  417. var kindDeviations = _deviationService.GetDeviationsByKind(id);
  418. foreach (var deviation in kindDeviations)
  419. {
  420. deviation.KindId = replaceId;
  421. deviation.Kind = replaceKind;
  422. _deviationService.UpdateDeviation(deviation);
  423. }
  424. if (kind != null)
  425. _deviationService.DeleteKind(kind);
  426. break;
  427. case "disturbance":
  428. var disturbance = _deviationService.GetDisturbanceById(id);
  429. var replaceDisturbance = _deviationService.GetDisturbanceById(replaceId);
  430. var allDeviations = _deviationService.GetAllDeviations();
  431. foreach (var deviation in allDeviations)
  432. {
  433. foreach (var disturbanceValue in deviation.DisturbanceValues)
  434. {
  435. if (disturbanceValue.DisturbanceId == id)
  436. {
  437. disturbanceValue.Disturbance = replaceDisturbance;
  438. disturbanceValue.DisturbanceId = replaceDisturbance.Id;
  439. }
  440. }
  441. _deviationService.UpdateDeviation(deviation);
  442. }
  443. if (disturbance != null)
  444. _deviationService.DeleteDisturbance(disturbance);
  445. break;
  446. default:
  447. return new EmptyResult();
  448. }
  449. return new JsonResult
  450. {
  451. Data = "success"
  452. };
  453. }
  454. #endregion
  455. }
  456. }