c1c34da28958a019e9ad2bda41c15ecc97ee9296.svn-base 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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 FmsMaterialStockHistoryDailyController : ODataController
  18. {
  19. private iBemsEntities db = new iBemsEntities();
  20. // TODO : 출고에 따른 StockAmount 계산 수정 필요
  21. // GET: odata/FmsMaterialStockHistoryDaily
  22. [Queryable]
  23. public List<FmsMaterialStockHistoryDaily> GetFmsMaterialStockHistoryDaily()
  24. {
  25. List<FmsMaterialStockHistoryDaily> dailiyHistoryList = new List<FmsMaterialStockHistoryDaily>();
  26. var storedList = db.FmsMaterialStored
  27. .Where(ms => ms.IsApproval == true)
  28. .OrderBy(a => a.StoredDate)
  29. .ToList();
  30. var releaseList = db.FmsMaterialRelease
  31. .Where(mr => mr.IsConfirmed == true)
  32. .OrderBy(a => a.ReleaseDate)
  33. .ToList();
  34. //var storedInfoByUnitCost = storedList.GroupBy()
  35. // MaterialId / UnitCost / StoredCount
  36. // UnitCost 별 카운팅 리스트
  37. //var storedInfoByUnitCost = (
  38. // from c in storedList
  39. // group c by new
  40. // {
  41. // c.MaterialId,
  42. // c.UnitCost,
  43. // } into gcs
  44. // select new
  45. // {
  46. // MaterialId = gcs.Key.MaterialId,
  47. // UnitCost = gcs.Key.UnitCost,
  48. // StockCount = gcs.Sum(a=>a.StoredCount),
  49. // }).ToList();
  50. // 입고정보로 데이터 생성
  51. foreach (var item in storedList)
  52. {
  53. var dailyStoredInfo = dailiyHistoryList
  54. .Where(d => d.MaterialId == item.MaterialId
  55. && d.YearMonthDate.Date == item.StoredDate.Date)
  56. .FirstOrDefault();
  57. if (dailyStoredInfo == null)
  58. {
  59. FmsMaterialStockHistoryDaily d = new FmsMaterialStockHistoryDaily()
  60. {
  61. SiteId = item.SiteId,
  62. BusinessFieldId = item.BusinessFieldId,
  63. BusinessFieldName = item.CmBusinessField.Name,
  64. Unit = item.FmsMaterial.Unit,
  65. Standard = item.FmsMaterial.Standard,
  66. YearMonthDate = new DateTime(item.StoredDate.Year, item.StoredDate.Month, item.StoredDate.Day),
  67. YearMonth = new DateTime(item.StoredDate.Year, item.StoredDate.Month, 1),
  68. MaterialId = item.MaterialId,
  69. MaterialName = item.FmsMaterial.Name,
  70. MaterialCode = item.FmsMaterial.MaterialCode,
  71. StoredCount = item.StoredCount,
  72. StockCount = item.StockCount,
  73. FirstClassId = item.FmsMaterial.FirstClassId != null ? item.FmsMaterial.FirstClassId.Value : 0,
  74. SecondClassId = item.FmsMaterial.SecondClassId != null ? item.FmsMaterial.SecondClassId.Value : 0,
  75. ThirdClassId = item.FmsMaterial.ThirdClassId != null ? item.FmsMaterial.ThirdClassId.Value : 0,
  76. };
  77. //d.StockAmount = (item.StoredCount * item.UnitCost) + dailiyHistoryList.Where(b => b.MaterialId == item.MaterialId).Sum(c => c.StockAmount);
  78. var tempDailiyInfo = dailiyHistoryList.Where(b => b.MaterialId == item.MaterialId).OrderByDescending(a => a.StoredDate).LastOrDefault();
  79. if (tempDailiyInfo != null)
  80. {
  81. d.StockAmount = (item.StoredCount * item.UnitCost) + tempDailiyInfo.StockAmount;
  82. }
  83. else
  84. {
  85. d.StockAmount = (item.StoredCount * item.UnitCost);
  86. }
  87. dailiyHistoryList.Add(d);
  88. }
  89. else
  90. {
  91. dailyStoredInfo.StoredCount += item.StoredCount;
  92. dailyStoredInfo.StockCount = item.StockCount;
  93. dailyStoredInfo.StockAmount += (item.StoredCount * item.UnitCost);
  94. }
  95. }
  96. // 출고 정보로 데이터 생성
  97. foreach (var item in releaseList)
  98. {
  99. var dailyReleasedInfo = dailiyHistoryList
  100. .Where(d => d.MaterialId == item.MaterialId
  101. && d.YearMonthDate.Date == item.ReleaseDate.Date)
  102. .FirstOrDefault();
  103. if (dailyReleasedInfo == null)
  104. {
  105. FmsMaterialStockHistoryDaily d = new FmsMaterialStockHistoryDaily()
  106. {
  107. SiteId = item.SiteId,
  108. BusinessFieldId = item.BusinessFieldId,
  109. BusinessFieldName = item.CmBusinessField.Name,
  110. Unit = item.FmsMaterial.Unit,
  111. Standard = item.FmsMaterial.Standard,
  112. YearMonthDate = new DateTime(item.ReleaseDate.Year, item.ReleaseDate.Month, item.ReleaseDate.Day),
  113. YearMonth = new DateTime(item.ReleaseDate.Year, item.ReleaseDate.Month, 1),
  114. MaterialId = item.MaterialId.Value,
  115. MaterialName = item.FmsMaterial.Name,
  116. MaterialCode = item.FmsMaterial.MaterialCode,
  117. StoredCount = 0,
  118. ReleaseCount = item.AdjustmentTypeId == 0 ? item.MaterialCount.Value : 0,
  119. ReleaseLossCount = item.AdjustmentTypeId == 1 ? item.MaterialCount.Value : 0,
  120. ReleaseReturnCount = item.AdjustmentTypeId == 2 ? item.MaterialCount.Value : 0,
  121. FirstClassId = item.FmsMaterial.FirstClassId != null ? item.FmsMaterial.FirstClassId.Value : 0,
  122. SecondClassId = item.FmsMaterial.SecondClassId != null ? item.FmsMaterial.SecondClassId.Value : 0,
  123. ThirdClassId = item.FmsMaterial.ThirdClassId != null ? item.FmsMaterial.ThirdClassId.Value : 0,
  124. };
  125. // StockCount 를 체크하기 위한 코드
  126. var tempStoredInfo = dailiyHistoryList
  127. .Where(h => h.MaterialId == item.MaterialId)
  128. .OrderByDescending(m => m.YearMonthDate)
  129. .Take(1).FirstOrDefault();
  130. if (tempStoredInfo == null) { continue; }
  131. d.StockCount = tempStoredInfo.StockCount - d.ReleaseCount - d.ReleaseLossCount + d.ReleaseReturnCount;
  132. if (item.AdjustmentTypeId == 2) { d.StockAmount = tempStoredInfo.StockAmount + item.ReleaseTotalCost.Value; }
  133. else { d.StockAmount = tempStoredInfo.StockAmount - item.ReleaseTotalCost.Value; }
  134. dailiyHistoryList.Add(d);
  135. }
  136. else
  137. {
  138. if (item.AdjustmentTypeId == 2)
  139. {
  140. dailyReleasedInfo.ReleaseReturnCount += item.MaterialCount.Value;
  141. dailyReleasedInfo.StockCount += item.MaterialCount.Value;
  142. dailyReleasedInfo.StockAmount += item.ReleaseTotalCost.Value;
  143. }
  144. else if (item.AdjustmentTypeId == 1)
  145. {
  146. dailyReleasedInfo.ReleaseLossCount += item.MaterialCount.Value;
  147. dailyReleasedInfo.StockCount -= item.MaterialCount.Value;
  148. dailyReleasedInfo.StockAmount -= item.ReleaseTotalCost.Value;
  149. }
  150. else if (item.AdjustmentTypeId == 0)
  151. {
  152. dailyReleasedInfo.ReleaseCount += item.MaterialCount.Value;
  153. dailyReleasedInfo.StockCount -= item.MaterialCount.Value;
  154. dailyReleasedInfo.StockAmount -= item.ReleaseTotalCost.Value;
  155. }
  156. }
  157. }
  158. return dailiyHistoryList;
  159. }
  160. protected override void Dispose(bool disposing)
  161. {
  162. if (disposing)
  163. {
  164. db.Dispose();
  165. }
  166. base.Dispose(disposing);
  167. }
  168. }
  169. }