FmsMaterial.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.ComponentModel.DataAnnotations;
  5. using System.ComponentModel.DataAnnotations.Schema;
  6. using Newtonsoft.Json;
  7. using System.Linq.Expressions;
  8. namespace FMSAdmin.Entities {
  9. public partial class FmsMaterial {
  10. public FmsMaterial() {
  11. FmsMaterialPurchaseOrderMaterial = new HashSet<FmsMaterialPurchaseOrderMaterial>();
  12. FmsMaterialPurchaseRequestMaterial = new HashSet<FmsMaterialPurchaseRequestMaterial>();
  13. FmsMaterialRelease = new HashSet<FmsMaterialRelease>();
  14. FmsMaterialStored = new HashSet<FmsMaterialStored>();
  15. FmsWorkResultCheckItemMaterial = new HashSet<FmsWorkResultCheckItemMaterial>();
  16. }
  17. [Display(Name = "고유번호"), Key]
  18. public int SiteId { get; set; }
  19. public int MaterialId { get; set; }
  20. [Display(Name = "업무분야")]
  21. public int BusinessFieldId { get; set; }
  22. [Display(Name = "자재 코드"), Required]
  23. [StringLength(48, ErrorMessage = "자재코드는 최대 48자까지 입력 가능합니다.")]
  24. public string MaterialCode { get; set; }
  25. [Display(Name = "자재 이름"), Required]
  26. [StringLength(48, ErrorMessage = "자재명은 최대 48자까지 입력 가능합니다.")]
  27. public string Name { get; set; }
  28. [Display(Name = "자재분류 대")]
  29. public int? FirstClassId { get; set; }
  30. [Display(Name = "자재분류 중")]
  31. public int? SecondClassId { get; set; }
  32. [Display(Name = "자재분류 소")]
  33. public int? ThirdClassId { get; set; }
  34. [Display(Name = "자재 위치")]
  35. public int? LocationId { get; set; }
  36. [Display(Name = "자재 타입")]
  37. public int? MaterialTypeId { get; set; }
  38. [Display(Name = "자재창고")]
  39. public int? WarehouseId { get; set; }
  40. [Display(Name = "공급업체")]
  41. public int? TradeCompanyId { get; set; }
  42. [Display(Name = "QR코드")]
  43. [StringLength(52, ErrorMessage = "QR코드는 최대 52자까지 입력 가능합니다.")]
  44. public string Rfid { get; set; }
  45. [Display(Name = "단위")]
  46. [StringLength(12, ErrorMessage = "단위는 최대 12자까지 입력 가능합니다.")]
  47. public string Unit { get; set; }
  48. [Display(Name = "내용 연수")]
  49. public short? DurableYears { get; set; }
  50. [Display(Name = "적정 재고량")]
  51. public short? ReasonableStockCount { get; set; }
  52. [Display(Name = "제조사")]
  53. [StringLength(40, ErrorMessage = "제조사명은 최대 40자까지 입력 가능합니다.")]
  54. public string Manufacturer { get; set; }
  55. [Display(Name = "규격")]
  56. [StringLength(20, ErrorMessage = "규격은 최대 20자까지 입력 가능합니다.")]
  57. public string Standard { get; set; }
  58. [Display(Name = "단가")]
  59. public int? FinalPrice { get; set; }
  60. [Display(Name = "파일 ID")]
  61. public int? ImageFileId { get; set; }
  62. [Display(Name = "비고")]
  63. [StringLength(512, ErrorMessage = "비고는 최대 512자까지 입력 가능합니다.")]
  64. public string Note { get; set; }
  65. [Display(Name = "단종 여부")]
  66. public bool? IsDiscontinued { get; set; }
  67. [Display(Name = "사용 유무"), Required]
  68. public bool IsUse { get; set; }
  69. [Display(Name = "재고 수량"), Required]
  70. public int FinalStockCount { get; set; }
  71. [Display(Name = "재고 금액"), Required]
  72. public int FinalTotalStockAmount { get; set; }
  73. [NotMapped]
  74. [Display(Name = "엑셀행번호")]
  75. public int ExcelRowNum { get; set; }
  76. [ForeignKey("SiteId")]
  77. public virtual CmSite CmSite { get; set; }
  78. [ForeignKey("BusinessFieldId")]
  79. public virtual CmBusinessField CmBusinessField { get; set; }
  80. [ForeignKey("SiteId,ImageFileId")]
  81. public virtual CmFile CmFile { get; set; }
  82. [ForeignKey("FirstClassId")]
  83. public virtual FmsMaterialCodeClass FmsMaterialCodeClass { get; set; }
  84. [ForeignKey("SecondClassId")]
  85. public virtual FmsMaterialCodeClass FmsMaterialCodeClass1 { get; set; }
  86. [ForeignKey("ThirdClassId")]
  87. public virtual FmsMaterialCodeClass FmsMaterialCodeClass2 { get; set; }
  88. [ForeignKey("SiteId,LocationId")]
  89. public virtual FmsMaterialCodeLocation FmsMaterialCodeLocation { get; set; }
  90. [ForeignKey("MaterialTypeId")]
  91. public virtual FmsMaterialCodeType FmsMaterialCodeType { get; set; }
  92. [ForeignKey("SiteId,TradeCompanyId")]
  93. public virtual FmsMaterialTradeCompany FmsMaterialTradeCompany { get; set; }
  94. [ForeignKey("SiteId,WarehouseId")]
  95. public virtual FmsMaterialWarehouse FmsMaterialWarehouse { get; set; }
  96. [JsonIgnore]
  97. [InverseProperty("FmsMaterial")]
  98. public virtual ICollection<FmsMaterialPurchaseOrderMaterial> FmsMaterialPurchaseOrderMaterial { get; set; }
  99. [JsonIgnore]
  100. [InverseProperty("FmsMaterial")]
  101. public virtual ICollection<FmsMaterialPurchaseRequestMaterial> FmsMaterialPurchaseRequestMaterial { get; set; }
  102. [JsonIgnore]
  103. [InverseProperty("FmsMaterial")]
  104. public virtual ICollection<FmsMaterialRelease> FmsMaterialRelease { get; set; }
  105. [JsonIgnore]
  106. [InverseProperty("FmsMaterial")]
  107. public virtual ICollection<FmsMaterialStored> FmsMaterialStored { get; set; }
  108. [JsonIgnore]
  109. [InverseProperty("FmsMaterial")]
  110. public virtual ICollection<FmsWorkResultCheckItemMaterial> FmsWorkResultCheckItemMaterial { get; set; }
  111. // LinKit 관련 표현식
  112. internal object AsExpandable() {
  113. throw new NotImplementedException();
  114. }
  115. public static Expression<Func<FmsMaterial, long>> GetStockCount =
  116. // (x) => x.FmsMaterialStored.Where(s => s.IsApproval == true).OrderByDescending(s => s.MaterialStoredId).FirstOrDefault().StockCount // or .Sum(x => (long)x.StoredCount) /* 이게 맞을듯 하다... */
  117. (x) => x.FmsMaterialStored.Where(s => s.IsApproval == true).Sum(s => (long)s.StoredCount)
  118. + (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 2).Sum(r => (long?)r.MaterialCount) ?? 0)
  119. - (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 1).Sum(r => (long?)r.MaterialCount) ?? 0)
  120. - (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 0).Sum(r => (long?)r.MaterialCount) ?? 0);
  121. public static Expression<Func<FmsMaterial, long>> GetStockAmount =
  122. (x) => (x.FmsMaterialStored.Where(s => s.IsApproval == true).Sum(s => (long?)(s.StoredCount * s.UnitCost)) ?? 0)
  123. + (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 2).Sum(r => (long?)r.ReleaseTotalCost) ?? 0)
  124. - (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 1).Sum(r => (long?)r.ReleaseTotalCost) ?? 0)
  125. - (x.FmsMaterialRelease.Where(r => r.IsConfirmed == true && r.AdjustmentTypeId == 0).Sum(r => (long?)r.ReleaseTotalCost) ?? 0);
  126. }
  127. }