DeviationDataModel.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using GreenTree.Nachtragsmanagement.Core.Domain.Deviation;
  2. using GreenTree.Nachtragsmanagement.Web.Models.Appendix;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Web;
  8. namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
  9. {
  10. public class DeviationDataModel
  11. : IRequireStatusDataModel, IRequireKindDataModel
  12. {
  13. public int Id { get; set; }
  14. public string CustomNumber { get; set; }
  15. public string Description { get; set; }
  16. public DateTime? ReceiptDate { get; set; }
  17. public DateTime? AppendixDate { get; set; }
  18. public decimal Value { get; set; }
  19. public decimal Percentage { get; set; }
  20. public decimal PercentageValue { get; set; }
  21. public int? StatusId { get; set; }
  22. public string StatusDescription { get; set; }
  23. public int? KindId { get; set; }
  24. public string KindDescription { get; set; }
  25. public string Comment { get; set; }
  26. public string SiteDescription { get; set; }
  27. public int? SiteId { get; set; }
  28. public string AppendixDescription { get; set; }
  29. public int? AppendixId { get; set; }
  30. public int? DaysReceiptToAppendixOffering { get; set; }
  31. public ICollection<string> DisturbanceEntities { get; set; }
  32. public ICollection<DisturbanceValueDataModel> DisturbanceValueEntities { get; set; }
  33. public string DisturbanceValuesDescription
  34. {
  35. get
  36. {
  37. if (DisturbanceValueEntities == null)
  38. return String.Empty;
  39. else
  40. return String.Join(", ", DisturbanceValueEntities.Select(d => d.Description));
  41. }
  42. }
  43. public DeviationDataModel()
  44. {
  45. DisturbanceEntities = new List<string>();
  46. DisturbanceValueEntities = new List<DisturbanceValueDataModel>();
  47. }
  48. public static DeviationDataModel FromDeviation(Core.Domain.Deviation.Deviation deviationEntity, bool newWhenIsNull)
  49. {
  50. if (deviationEntity == null && newWhenIsNull)
  51. return new DeviationDataModel
  52. {
  53. Id = -1,
  54. Percentage = 100
  55. };
  56. if (deviationEntity == null && !newWhenIsNull)
  57. throw new ArgumentNullException("deviationEntity", "Cannot create DeviationDataModel from NULL deviation entity.");
  58. var model = new DeviationDataModel
  59. {
  60. Id = deviationEntity.Id,
  61. CustomNumber = deviationEntity.CustomNumber,
  62. Description = deviationEntity.Description,
  63. ReceiptDate = deviationEntity.ReceiptDate,
  64. AppendixDate = deviationEntity.AppendixDate,
  65. Value = deviationEntity.Value.Value,
  66. Percentage = deviationEntity.Percentage.HasValue
  67. ? deviationEntity.Percentage.Value
  68. : (decimal)1.0,
  69. PercentageValue = deviationEntity.Value.HasValue && deviationEntity.Percentage.HasValue
  70. ? deviationEntity.Value.Value * deviationEntity.Percentage.Value
  71. : 0,
  72. SiteId = deviationEntity.SiteId,
  73. SiteDescription = deviationEntity.Site == null
  74. ? deviationEntity.Appendix == null
  75. ? String.Empty
  76. : deviationEntity.Appendix.Site == null
  77. ? String.Empty
  78. : deviationEntity.Appendix.Site.CustomNumber
  79. : deviationEntity.Site.CustomNumber,
  80. AppendixId = deviationEntity.AppendixId,
  81. AppendixDescription = deviationEntity.Appendix == null
  82. ? "Offen"
  83. : deviationEntity.Appendix.CustomNumber,
  84. StatusId = deviationEntity.StatusId.Value,
  85. StatusDescription = deviationEntity.Status == null
  86. ? null
  87. : deviationEntity.Status.Description,
  88. KindId = deviationEntity.KindId.Value,
  89. KindDescription = deviationEntity.Kind == null
  90. ? null
  91. : deviationEntity.Kind.Description,
  92. Comment = deviationEntity.Comment,
  93. DaysReceiptToAppendixOffering = deviationEntity.Appendix == null
  94. ? null
  95. : deviationEntity.Appendix.OfferingDate.HasValue && deviationEntity.ReceiptDate.HasValue
  96. ? (int?)(deviationEntity.Appendix.OfferingDate.Value - deviationEntity.ReceiptDate.Value).Days
  97. : null,
  98. DisturbanceValueEntities =
  99. deviationEntity.DisturbanceValues
  100. .Select(r =>
  101. new DisturbanceValueDataModel
  102. {
  103. DisturbanceId = r.DisturbanceId,
  104. Description = String.Format("{0} - {1:c2}", r.Disturbance.Description, r.Value),
  105. Value = r.Value
  106. })
  107. .ToList()
  108. };
  109. foreach (var disturbance in model.DisturbanceValueEntities)
  110. {
  111. var json = JsonConvert.SerializeObject(disturbance);
  112. disturbance.Json = json;
  113. model.DisturbanceEntities.Add(json);
  114. }
  115. return model;
  116. }
  117. public Core.Domain.Deviation.Deviation ToDeviation()
  118. {
  119. return new Core.Domain.Deviation.Deviation
  120. {
  121. Id = this.Id,
  122. CustomNumber = this.CustomNumber,
  123. Description = Description,
  124. ReceiptDate = this.ReceiptDate,
  125. AppendixDate = this.AppendixDate,
  126. Value = this.Value,
  127. Percentage = this.Percentage,
  128. SiteId = this.SiteId,
  129. AppendixId = this.AppendixId,
  130. StatusId = this.StatusId,
  131. KindId = this.KindId,
  132. Comment = this.Comment
  133. };
  134. }
  135. }
  136. }