DeviationDataModel.cs 11 KB

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