DeviationDataModel.cs 8.3 KB

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