94ac7f6b3e03e92f8d09646c004fdd44e8a20f43.svn-base 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel.DataAnnotations;
  4. using System.Data;
  5. using System.Data.Entity;
  6. using System.Data.Entity.Infrastructure;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Web.Http;
  11. using System.Web.Http.Description;
  12. using System.Web.Http.OData;
  13. using iBemsDataService;
  14. using iBemsDataService.Model;
  15. namespace iBemsDataService.Controllers
  16. {
  17. public class FmsMaterialStockHistoryMonthlyController : ODataController
  18. {
  19. private iBemsEntities db = new iBemsEntities();
  20. // GET: odata/FmsMaterialStockHistoryMonthly
  21. [Queryable]
  22. public List<FmsMaterialStockHistoryMonthly> GetFmsMaterialStockHistoryMonthly()
  23. {
  24. List<FmsMaterialStockHistoryMonthly> dailiyHistoryList = new List<FmsMaterialStockHistoryMonthly>();
  25. var storedList = db.FmsMaterialStored
  26. .Where(ms => ms.IsApproval == true)
  27. .ToList();
  28. var releaseList = db.FmsMaterialRelease
  29. .Where(mr => mr.IsConfirmed == true)
  30. .ToList();
  31. // 입고정보로 데이터 생성
  32. foreach (var item in storedList)
  33. {
  34. var dailyStoredInfo = dailiyHistoryList
  35. .Where(d => d.MaterialId == item.MaterialId
  36. && d.YearMonthDate.Year == item.StoredDate.Year
  37. && d.YearMonthDate.Month == item.StoredDate.Month)
  38. .FirstOrDefault();
  39. if (dailyStoredInfo == null)
  40. {
  41. FmsMaterialStockHistoryMonthly d = new FmsMaterialStockHistoryMonthly()
  42. {
  43. SiteId = item.SiteId,
  44. BusinessFieldId = item.BusinessFieldId,
  45. BusinessFieldName = item.CmBusinessField.Name,
  46. Unit = item.FmsMaterial.Unit,
  47. Standard = item.FmsMaterial.Standard,
  48. YearMonthDate = new DateTime(item.StoredDate.Year, item.StoredDate.Month, item.StoredDate.Day),
  49. YearMonth = new DateTime(item.StoredDate.Year, item.StoredDate.Month, 1),
  50. MaterialId = item.MaterialId,
  51. MaterialName = item.FmsMaterial.Name,
  52. MaterialCode = item.FmsMaterial.MaterialCode,
  53. StoredCount = item.StoredCount,
  54. StockCount = item.StockCount,
  55. StockAmount = (item.StoredCount * item.UnitCost),//+ dailiyHistoryList.Where(b => b.MaterialId == item.MaterialId).Sum(c => c.StockAmount),
  56. FirstClassId = item.FmsMaterial.FirstClassId != null ? item.FmsMaterial.FirstClassId.Value : 0,
  57. SecondClassId = item.FmsMaterial.SecondClassId != null ? item.FmsMaterial.SecondClassId.Value : 0,
  58. ThirdClassId = item.FmsMaterial.ThirdClassId != null ? item.FmsMaterial.ThirdClassId.Value : 0,
  59. };
  60. dailiyHistoryList.Add(d);
  61. }
  62. else
  63. {
  64. dailyStoredInfo.StoredCount += item.StoredCount;
  65. dailyStoredInfo.StockCount = item.StockCount;
  66. dailyStoredInfo.StockAmount += (item.StoredCount * item.UnitCost); // + dailiyHistoryList.Where(b => b.MaterialId == item.MaterialId).Sum(c => c.StockAmount);
  67. }
  68. }
  69. // 출고 정보로 데이터 생성
  70. foreach (var item in releaseList)
  71. {
  72. var dailyReleasedInfo = dailiyHistoryList
  73. .Where(d => d.MaterialId == item.MaterialId
  74. && d.YearMonthDate.Year == item.ReleaseDate.Year
  75. && d.YearMonthDate.Month == item.ReleaseDate.Month)
  76. .FirstOrDefault();
  77. if (dailyReleasedInfo == null)
  78. {
  79. FmsMaterialStockHistoryMonthly d = new FmsMaterialStockHistoryMonthly()
  80. {
  81. SiteId = item.SiteId,
  82. BusinessFieldId = item.BusinessFieldId,
  83. BusinessFieldName = item.CmBusinessField.Name,
  84. Unit = item.FmsMaterial.Unit,
  85. Standard = item.FmsMaterial.Standard,
  86. YearMonthDate = new DateTime(item.ReleaseDate.Year, item.ReleaseDate.Month, item.ReleaseDate.Day),
  87. YearMonth = new DateTime(item.ReleaseDate.Year, item.ReleaseDate.Month, 1),
  88. MaterialId = item.MaterialId.Value,
  89. MaterialName = item.FmsMaterial.Name,
  90. MaterialCode = item.FmsMaterial.MaterialCode,
  91. StoredCount = 0,
  92. ReleaseCount = item.AdjustmentTypeId == 0 ? item.MaterialCount.Value : 0,
  93. ReleaseLossCount = item.AdjustmentTypeId == 1 ? item.MaterialCount.Value : 0,
  94. ReleaseReturnCount = item.AdjustmentTypeId == 2 ? item.MaterialCount.Value : 0,
  95. FirstClassId = item.FmsMaterial.FirstClassId != null ? item.FmsMaterial.FirstClassId.Value : 0,
  96. SecondClassId = item.FmsMaterial.SecondClassId != null ? item.FmsMaterial.SecondClassId.Value : 0,
  97. ThirdClassId = item.FmsMaterial.ThirdClassId != null ? item.FmsMaterial.ThirdClassId.Value : 0,
  98. };
  99. // StockCount 를 체크하기 위한 코드
  100. var tempStoredInfo = dailiyHistoryList
  101. .Where(h => h.MaterialId == item.MaterialId)
  102. .OrderByDescending(m => m.YearMonthDate)
  103. .Take(1).FirstOrDefault();
  104. if (tempStoredInfo == null) { continue; }
  105. d.StockCount = tempStoredInfo.StockCount - d.ReleaseCount - d.ReleaseLossCount + d.ReleaseReturnCount;
  106. if (item.AdjustmentTypeId == 2)
  107. {
  108. d.StockAmount = tempStoredInfo.StockAmount + item.ReleaseTotalCost.Value;
  109. }
  110. else
  111. {
  112. d.StockAmount = tempStoredInfo.StockAmount - item.ReleaseTotalCost.Value;
  113. }
  114. dailiyHistoryList.Add(d);
  115. }
  116. else
  117. {
  118. if (item.AdjustmentTypeId == 2)
  119. {
  120. dailyReleasedInfo.ReleaseReturnCount += item.MaterialCount.Value;
  121. dailyReleasedInfo.StockCount += item.MaterialCount.Value;
  122. dailyReleasedInfo.StockAmount += item.ReleaseTotalCost.Value;
  123. }
  124. else if (item.AdjustmentTypeId == 1)
  125. {
  126. dailyReleasedInfo.ReleaseLossCount += item.MaterialCount.Value;
  127. dailyReleasedInfo.StockCount -= item.MaterialCount.Value;
  128. dailyReleasedInfo.StockAmount -= item.ReleaseTotalCost.Value;
  129. }
  130. else if (item.AdjustmentTypeId == 0)
  131. {
  132. dailyReleasedInfo.ReleaseCount += item.MaterialCount.Value;
  133. dailyReleasedInfo.StockCount -= item.MaterialCount.Value;
  134. dailyReleasedInfo.StockAmount -= item.ReleaseTotalCost.Value;
  135. }
  136. }
  137. }
  138. return dailiyHistoryList;
  139. }
  140. protected override void Dispose(bool disposing)
  141. {
  142. if (disposing)
  143. {
  144. db.Dispose();
  145. }
  146. base.Dispose(disposing);
  147. }
  148. }
  149. }