DeviationDataModel.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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 model = new DeviationDataModel
  77. {
  78. Id = deviationEntity.Id,
  79. CustomNumber = deviationEntity.CustomNumber,
  80. Description = deviationEntity.Description,
  81. ReceiptDate = deviationEntity.ReceiptDate,
  82. DaysReceiptDateToday = deviationEntity.ReceiptDate == null
  83. ? (int?)(DateTime.Now - deviationEntity.ReceiptDate).Value.Days
  84. : null,
  85. AppendixDate = deviationEntity.AppendixDate,
  86. Value = deviationEntity.Value.Value,
  87. Percentage = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
  88. ? (decimal)0.0
  89. : deviationEntity.Percentage.HasValue
  90. ? deviationEntity.Percentage.Value
  91. : (decimal)1.0,
  92. PercentageValue = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
  93. ? 0
  94. : (deviationEntity.Value.HasValue && deviationEntity.Percentage.HasValue
  95. ? deviationEntity.Value.Value * deviationEntity.Percentage.Value
  96. : 0),
  97. SiteId = deviationEntity.SiteId,
  98. SiteDescription = deviationEntity.Site == null
  99. ? deviationEntity.Appendix == null
  100. ? String.Empty
  101. : deviationEntity.Appendix.Site == null
  102. ? String.Empty
  103. : deviationEntity.Appendix.Site.Description
  104. : deviationEntity.Site.Description,
  105. SiteCustomNumber = deviationEntity.Site == null
  106. ? deviationEntity.Appendix == null
  107. ? String.Empty
  108. : deviationEntity.Appendix.Site == null
  109. ? String.Empty
  110. : deviationEntity.Appendix.Site.CustomNumber
  111. : deviationEntity.Site.CustomNumber,
  112. UserDescriptions = deviationEntity.Site == null
  113. ? deviationEntity.Appendix == null || (deviationEntity.Appendix != null && deviationEntity.Appendix.Site == null)
  114. ? null
  115. : deviationEntity.Appendix.Site.Users
  116. .Select(r => new
  117. {
  118. LastName = r.Lastname,
  119. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  120. })
  121. .OrderBy(r => r.Roles)
  122. .Select(r => String.Format("{0}|({1})", r.LastName, r.Roles))
  123. .ToList()
  124. : deviationEntity.Site.Users
  125. .Select(r => new
  126. {
  127. LastName = r.Lastname,
  128. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  129. })
  130. .OrderBy(r => r.Roles)
  131. .Select(r => String.Format("{0}|({1})", r.LastName, r.Roles))
  132. .ToList(),
  133. UserDescription = deviationEntity.Site == null
  134. ? deviationEntity.Appendix == null || (deviationEntity.Appendix != null && deviationEntity.Appendix.Site == null)
  135. ? String.Empty
  136. : String.Join(", ",
  137. deviationEntity.Appendix.Site.Users
  138. .Select(r => new
  139. {
  140. LastName = r.Lastname,
  141. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  142. })
  143. .Select(u => String.Format("{0} ({1})", u.LastName, u.Roles)))
  144. : String.Join(", ",
  145. deviationEntity.Site.Users
  146. .Select(r => new
  147. {
  148. LastName = r.Lastname,
  149. Roles = String.Join(", ", r.Roles.Select(u => u.Description))
  150. })
  151. .Select(u => String.Format("{0} ({1})", u.LastName, u.Roles))),
  152. AppendixId = deviationEntity.AppendixId,
  153. AppendixDescription = deviationEntity.Appendix == null
  154. ? "Offen"
  155. : deviationEntity.Appendix.CustomNumber,
  156. StatusId = deviationEntity.StatusId.Value,
  157. StatusDescription = deviationEntity.Status == null
  158. ? null
  159. : deviationEntity.Status.Description,
  160. IsZeroSummarize = deviationEntity.Status != null && deviationEntity.Status.IsZeroSummarize,
  161. KindId = deviationEntity.KindId.Value,
  162. KindDescription = deviationEntity.Kind == null
  163. ? null
  164. : deviationEntity.Kind.Shortance,
  165. Comment = deviationEntity.Comment,
  166. DaysReceiptToAppendixOffering = deviationEntity.Appendix == null
  167. ? null
  168. : deviationEntity.Appendix.OfferingDate.HasValue && deviationEntity.ReceiptDate.HasValue
  169. ? (int?)(deviationEntity.Appendix.OfferingDate.Value - deviationEntity.ReceiptDate.Value).Days
  170. : null,
  171. DisturbanceValueEntities =
  172. deviationEntity.DisturbanceValues
  173. .Select(r =>
  174. new DisturbanceValueDataModel
  175. {
  176. DisturbanceId = r.DisturbanceId,
  177. Description = String.Format("{0} - {1:c2}", r.Disturbance.Description, r.Value),
  178. Value = r.Value
  179. })
  180. .ToList()
  181. };
  182. var colorLevel1 = configurationService.TryGetConfigItemValue<string>(
  183. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.HexColorLevel1", "#FFD800");
  184. var ageDaysLevel1 = configurationService.TryGetConfigItemValue<int>(
  185. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.AgeDaysLevel1", 40);
  186. var colorLevel2 = configurationService.TryGetConfigItemValue<string>(
  187. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.HexColorLevel2", "#FF6A00");
  188. var ageDaysLevel2 = configurationService.TryGetConfigItemValue<int>(
  189. "GreenTree.Nachtragsmanagement.DeviationNotificationPlugin.ProcessDeviationReceipt.AgeDaysLevel2", 60);
  190. if (model.DaysReceiptDateToday >= ageDaysLevel1 && model.DaysReceiptDateToday < ageDaysLevel2 && !model.AppendixId.HasValue)
  191. model.DisplayColor = colorLevel1;
  192. else if (model.DaysReceiptDateToday >= ageDaysLevel2 && !model.AppendixId.HasValue)
  193. model.DisplayColor = colorLevel2;
  194. foreach (var disturbance in model.DisturbanceValueEntities)
  195. {
  196. var json = JsonConvert.SerializeObject(disturbance);
  197. disturbance.Json = json;
  198. model.DisturbanceEntities.Add(json);
  199. }
  200. return model;
  201. }
  202. public Core.Domain.Deviation.Deviation ToDeviation()
  203. {
  204. return new Core.Domain.Deviation.Deviation
  205. {
  206. Id = this.Id,
  207. CustomNumber = this.CustomNumber,
  208. Description = Description,
  209. ReceiptDate = this.ReceiptDate,
  210. AppendixDate = this.AppendixDate,
  211. Value = this.Value,
  212. Percentage = this.Percentage,
  213. SiteId = this.SiteId,
  214. AppendixId = this.AppendixId,
  215. StatusId = this.StatusId,
  216. KindId = this.KindId,
  217. Comment = this.Comment
  218. };
  219. }
  220. }
  221. }