0eb993ae4875ec9b798df0a689dfa2327beec868.svn-base 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.Entity;
  5. using System.Data.Entity.Infrastructure;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Net.Http;
  10. using System.Transactions;
  11. using System.Web;
  12. using System.Web.Http;
  13. using System.Web.Http.Description;
  14. using DevExpress.XtraCharts.Native;
  15. using DevExpress.XtraPrinting.Native;
  16. using iBemsDataService;
  17. using iBemsDataService.Model;
  18. using iBemsDataService.Util;
  19. namespace iBemsDataService.Controllers
  20. {
  21. public class FmsMaterialReleaseController : ApiController
  22. {
  23. private iBemsEntities db = new iBemsEntities();
  24. [ResponseType(typeof(void))]
  25. [ActionName("Add")]
  26. public IHttpActionResult PostFmsMaterialReleaseAdd(List<FmsMaterialRelease> materialList)
  27. {
  28. Uri uri = Request.RequestUri;
  29. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  30. int siteId, businessFieldId;
  31. //workRequestId , int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false ||
  32. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  33. int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false
  34. )
  35. {
  36. return BadRequest("Not Found Parameters.");
  37. }
  38. try
  39. {
  40. var storedList = db.FmsMaterialStored
  41. .Where(ms => ms.IsApproval == true)
  42. .ToList();
  43. using (var transaction = new TransactionScope())
  44. {
  45. foreach (var item in materialList)
  46. {
  47. FmsMaterialRelease releaseItem = new FmsMaterialRelease()
  48. {
  49. SiteId = item.SiteId,
  50. BusinessFieldId = item.BusinessFieldId,
  51. ReleaseDate = DateTime.Now,
  52. ReleaseTypeId = 2, // 조정출고
  53. //WorkRequestId = workRequestId,
  54. MaterialId = item.MaterialId,
  55. MaterialCount = item.MaterialCount,
  56. IsConfirmed = false,
  57. AdjustmentTypeId = item.AdjustmentTypeId,
  58. AdjustmentUserId = item.AdjustmentUserId,
  59. Comment = item.Comment,
  60. ReleaseTotalCost = 0,
  61. StockCountByPoint = item.StockCountByPoint
  62. };
  63. // // 선입선출에 따른 계산
  64. if (item.AdjustmentTypeId == 1) // 조정 손실인 경우
  65. {
  66. var currentStoredList = storedList
  67. .Where(s => s.MaterialId == item.MaterialId
  68. && s.RemainStoredCount > 0)
  69. .OrderBy(s => s.StoredDate)
  70. .ToList();
  71. var tempReleasedItemCount = item.MaterialCount;
  72. foreach (var storedItem in currentStoredList)
  73. {
  74. if ((storedItem.RemainStoredCount - tempReleasedItemCount) >= 0)
  75. {
  76. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * tempReleasedItemCount);
  77. storedItem.RemainStoredCount -= tempReleasedItemCount.Value;
  78. break;
  79. }
  80. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * storedItem.RemainStoredCount);
  81. tempReleasedItemCount -= storedItem.RemainStoredCount;
  82. storedItem.RemainStoredCount = 0;
  83. }
  84. }
  85. else if (item.AdjustmentTypeId == 2) // 조정반납인 경우
  86. {
  87. var currentStoredList = storedList
  88. .Where(s => s.MaterialId == item.MaterialId
  89. && s.StoredCount != s.RemainStoredCount)
  90. .OrderByDescending(s => s.StoredDate)
  91. .ToList();
  92. var tempReleasedItemCount = item.MaterialCount;
  93. foreach (var storedItem in currentStoredList)
  94. {
  95. if ((storedItem.RemainStoredCount + tempReleasedItemCount) <= storedItem.StoredCount )
  96. {
  97. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * tempReleasedItemCount);
  98. storedItem.RemainStoredCount += tempReleasedItemCount.Value;
  99. break;
  100. }
  101. var returnItemCount = storedItem.StoredCount - storedItem.RemainStoredCount;
  102. releaseItem.ReleaseTotalCost += (storedItem.UnitCost * returnItemCount);
  103. tempReleasedItemCount -= returnItemCount;
  104. storedItem.RemainStoredCount = storedItem.StoredCount;
  105. }
  106. }
  107. db.FmsMaterialRelease.Add(releaseItem);
  108. db.SaveChanges();
  109. }
  110. transaction.Complete();
  111. }
  112. }
  113. catch (DbUpdateException e) { throw e; }
  114. return StatusCode(HttpStatusCode.NoContent);
  115. }
  116. [ResponseType(typeof(void))]
  117. [ActionName("Approval")]
  118. public IHttpActionResult PostFmsMaterialRelease(FmsMaterialRelease releaseMaterial)
  119. {
  120. Uri uri = Request.RequestUri;
  121. var uriQuery = HttpUtility.ParseQueryString(uri.Query);
  122. int siteId, businessFieldId, materialId;
  123. if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
  124. int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false ||
  125. int.TryParse(uriQuery.Get("MaterialId"), out materialId) == false)
  126. {
  127. return BadRequest("Not Found Parameters.");
  128. }
  129. try
  130. {
  131. var material = db.FmsMaterial.Where(m =>
  132. m.SiteId == siteId &&
  133. m.MaterialId == materialId &&
  134. m.IsUse == true
  135. ).FirstOrDefault();
  136. if (material == null) { return StatusCode(HttpStatusCode.NoContent); }
  137. db.SaveChanges();
  138. }
  139. catch (DbUpdateException e) { throw e; }
  140. return StatusCode(HttpStatusCode.NoContent);
  141. }
  142. [ResponseType(typeof(void))]
  143. [ActionName("ApprovalMany")]
  144. public IHttpActionResult PostFmsMaterialReleaseApprovalMany(List<FmsMaterialRelease> releaseMaterialList)
  145. {
  146. try
  147. {
  148. foreach (var item in releaseMaterialList)
  149. {
  150. var realItem = db.FmsMaterialRelease.Where(r =>
  151. r.SiteId == item.SiteId && // 19.07.12
  152. r.MaterialReleaseId == item.MaterialReleaseId)
  153. .FirstOrDefault();
  154. realItem.IsConfirmed = true;
  155. realItem.ConfirmedUserId = item.ConfirmedUserId;
  156. realItem.ConfirmedDate = DateTime.Now;
  157. }
  158. db.SaveChanges();
  159. }
  160. catch (DbUpdateException e) { throw e; }
  161. return StatusCode(HttpStatusCode.NoContent);
  162. }
  163. protected override void Dispose(bool disposing)
  164. {
  165. if (disposing)
  166. {
  167. db.Dispose();
  168. }
  169. base.Dispose(disposing);
  170. }
  171. }
  172. public class ReleaseMaterial
  173. {
  174. public int SiteId { get; set; }
  175. public int BusinessFieldId { get; set; }
  176. public string Name { get; set; }
  177. public int MaterialId { get; set; }
  178. public int MaterialCount { get; set; }
  179. public int MaterialCode { get; set; }
  180. public int FinalPrice { get; set; }
  181. };
  182. }