DeviationDataModel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. using GreenTree.Nachtragsmanagement.Core.Domain.Deviation;
  2. using GreenTree.Nachtragsmanagement.Services.Configuration;
  3. using GreenTree.Nachtragsmanagement.Web.Models.Appendix;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Web;
  9. namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
  10. {
  11. public class DeviationDataModel
  12. : IRequireStatusDataModel, IRequireKindDataModel
  13. {
  14. public int Id { get; set; }
  15. public string CustomNumber { get; set; }
  16. public string Description { get; set; }
  17. public DateTime? ReceiptDate { get; set; }
  18. public int? DaysReceiptDateToday { get; set; }
  19. public DateTime? AppendixDate { get; set; }
  20. public decimal Value { get; set; }
  21. public decimal Percentage { get; set; }
  22. public decimal PercentageValue { get; set; }
  23. public int? StatusId { get; set; }
  24. public bool IsZeroSummarize { get; set; }
  25. public string StatusDescription { get; set; }
  26. public int? KindId { get; set; }
  27. public string KindDescription { get; set; }
  28. public string Comment { get; set; }
  29. public string SiteDescription { get; set; }
  30. public string SiteCustomNumber { get; set; }
  31. public int? SiteId { get; set; }
  32. public ICollection<string> UserDescriptions { get; set; }
  33. public string UserDescription { get; set; }
  34. public string AppendixDescription { get; set; }
  35. public int? AppendixId { get; set; }
  36. public int? DaysReceiptToAppendixOffering { get; set; }
  37. public ICollection<string> DisturbanceEntities { get; set; }
  38. public ICollection<DisturbanceValueDataModel> DisturbanceValueEntities { get; set; }
  39. public string DisturbanceValuesDescription
  40. {
  41. get
  42. {
  43. if (DisturbanceValueEntities == null)
  44. return String.Empty;
  45. else
  46. return String.Join(", ", DisturbanceValueEntities.Select(d => d.Description));
  47. }
  48. }
  49. public decimal? DisturbanceValueSum
  50. {
  51. get
  52. {
  53. if (DisturbanceValueEntities == null)
  54. return null;
  55. else
  56. return DisturbanceValueEntities.Sum(d => d.Value);
  57. }
  58. }
  59. public string DisplayColor { get; set; }
  60. public DeviationDataModel()
  61. {
  62. DisturbanceEntities = new List<string>();
  63. DisturbanceValueEntities = new List<DisturbanceValueDataModel>();
  64. }
  65. public static DeviationDataModel FromDeviation(Core.Domain.Deviation.Deviation deviationEntity, bool newWhenIsNull,
  66. IConfigurationService configurationService)
  67. {
  68. if (deviationEntity == null && newWhenIsNull)
  69. return new DeviationDataModel
  70. {
  71. Id = -1,
  72. Percentage = 100
  73. };
  74. if (deviationEntity == null && !newWhenIsNull)
  75. throw new ArgumentNullException("deviationEntity", "Cannot create DeviationDataModel from NULL deviation entity.");
  76. var closedDeviationStatuses = configurationService.TryGetConfigItemValue<int[]>(
  77. "GreenTree.Nachtragsmanagement.DeviationGrid.ClosedDeviationStatuses", new[] { 2, 4 });
  78. var model = new DeviationDataModel
  79. {
  80. Id = deviationEntity.Id,
  81. CustomNumber = deviationEntity.CustomNumber,
  82. Description = deviationEntity.Description,
  83. ReceiptDate = deviationEntity.ReceiptDate,
  84. DaysReceiptDateToday = deviationEntity.ReceiptDate == null
  85. ? (int?)(DateTime.Now - deviationEntity.ReceiptDate).Value.Days
  86. : null,
  87. AppendixDate = deviationEntity.AppendixDate,
  88. Value = deviationEntity.Value.Value,
  89. Percentage = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
  90. ? (decimal)0.0
  91. : deviationEntity.Percentage.HasValue
  92. ? deviationEntity.Percentage.Value
  93. : (decimal)1.0,
  94. PercentageValue = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
  95. ? 0
  96. : (deviationEntity.Value.HasValue && deviationEntity.Percentage.HasValue
  97. ? deviationEntity.Value.Value * deviationEntity.Percentage.Value
  98. : 0),
  99. SiteId = deviationEntity.SiteId,
  100. SiteDescription = deviationEntity.Site == null
  101. ? deviationEntity.Appendix == null
  102. ? String.Empty
  103. : deviationEntity.Appendix.Site == null
  104. ? String.Empty
  105. : deviationEntity.Appendix.Site.Description
  106. : deviationEntity.Site.Description,
  107. SiteCustomNumber = deviationEntity.Site == null
  108. ? deviationEntity.Appendix == null
  109. ? String.Empty
  110. : deviationEntity.Appendix.Site == null
  111. ? String.Empty
  112. : deviationEntity.Appendix.Site.CustomNumber
  113. : deviationEntity.Site.CustomNumber,
  114. UserDescriptions = deviationEntity.Site == null
  115. ? deviationEntity.Appendix == null || (deviationEntity.Appendix != null && deviationEntity.Appendix.Site == null)
  116. ? null
  117. : deviationEntity.Appendix.Site.Users
  118. .Select(r => new
  119. {
  120. LastName = r.Lastname,
  121. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  122. })
  123. .OrderBy(r => r.Roles)
  124. .Select(r => String.Format("{0}|({1})", r.LastName, r.Roles))
  125. .ToList()
  126. : deviationEntity.Site.Users
  127. .Select(r => new
  128. {
  129. LastName = r.Lastname,
  130. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  131. })
  132. .OrderBy(r => r.Roles)
  133. .Select(r => String.Format("{0}|({1})", r.LastName, r.Roles))
  134. .ToList(),
  135. UserDescription = deviationEntity.Site == null
  136. ? deviationEntity.Appendix == null || (deviationEntity.Appendix != null && deviationEntity.Appendix.Site == null)
  137. ? String.Empty
  138. : String.Join(", ",
  139. deviationEntity.Appendix.Site.Users
  140. .Select(r => new
  141. {
  142. LastName = r.Lastname,
  143. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  144. })
  145. .Select(u => String.Format("{0} ({1})", u.LastName, u.Roles)))
  146. : String.Join(", ",
  147. deviationEntity.Site.Users
  148. .Select(r => new
  149. {
  150. LastName = r.Lastname,
  151. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  152. })
  153. .Select(u => String.Format("{0} ({1})", u.LastName, u.Roles))),
  154. AppendixId = deviationEntity.AppendixId,
  155. AppendixDescription = deviationEntity.Appendix == null
  156. ? closedDeviationStatuses.Contains(deviationEntity.StatusId ?? 0)
  157. ? "Geschlossen"
  158. : "Offen"
  159. : deviationEntity.Appendix.CustomNumber,
  160. StatusId = deviationEntity.StatusId.Value,
  161. StatusDescription = deviationEntity.Status == null
  162. ? null
  163. : deviationEntity.Status.Description,
  164. IsZeroSummarize = deviationEntity.Status != null && deviationEntity.Status.IsZeroSummarize,
  165. KindId = deviationEntity.KindId.Value,
  166. KindDescription = deviationEntity.Kind == null
  167. ? null
  168. : deviationEntity.Kind.Shortance,
  169. Comment = deviationEntity.Comment,
  170. DaysReceiptToAppendixOffering = deviationEntity.Appendix == null
  171. ? null
  172. : deviationEntity.Appendix.OfferingDate.HasValue && deviationEntity.ReceiptDate.HasValue
  173. ? (int?)(deviationEntity.Appendix.OfferingDate.Value - deviationEntity.ReceiptDate.Value).Days
  174. : null,
  175. DisturbanceValueEntities =
  176. deviationEntity.DisturbanceValues
  177. .Select(r =>
  178. new DisturbanceValueDataModel
  179. {
  180. DisturbanceId = r.DisturbanceId,
  181. Description = String.Format("{0} - {1:c2}", r.Disturbance.Description, r.Value),
  182. Value = r.Value
  183. })
  184. .ToList()
  185. };
  186. var colorLevel1 = configurationService.TryGetConfigItemValue<string>(
  187. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.HexColorLevel1", "#FFD800");
  188. var ageDaysLevel1 = configurationService.TryGetConfigItemValue<int>(
  189. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.AgeDaysLevel1", 40);
  190. var colorLevel2 = configurationService.TryGetConfigItemValue<string>(
  191. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.HexColorLevel2", "#FF6A00");
  192. var ageDaysLevel2 = configurationService.TryGetConfigItemValue<int>(
  193. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.AgeDaysLevel2", 60);
  194. if (model.DaysReceiptDateToday >= ageDaysLevel1 && model.DaysReceiptDateToday < ageDaysLevel2 && !model.AppendixId.HasValue)
  195. model.DisplayColor = colorLevel1;
  196. else if (model.DaysReceiptDateToday >= ageDaysLevel2 && !model.AppendixId.HasValue)
  197. model.DisplayColor = colorLevel2;
  198. foreach (var disturbance in model.DisturbanceValueEntities)
  199. {
  200. var json = JsonConvert.SerializeObject(disturbance);
  201. disturbance.Json = json;
  202. model.DisturbanceEntities.Add(json);
  203. }
  204. return model;
  205. }
  206. public Core.Domain.Deviation.Deviation ToDeviation()
  207. {
  208. return new Core.Domain.Deviation.Deviation
  209. {
  210. Id = this.Id,
  211. CustomNumber = this.CustomNumber,
  212. Description = Description,
  213. ReceiptDate = this.ReceiptDate,
  214. AppendixDate = this.AppendixDate,
  215. Value = this.Value,
  216. Percentage = this.Percentage,
  217. SiteId = this.SiteId,
  218. AppendixId = this.AppendixId,
  219. StatusId = this.StatusId,
  220. KindId = this.KindId,
  221. Comment = this.Comment
  222. };
  223. }
  224. }
  225. }