using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Diagnostics; using System.Linq; using System.Net; using System.Net.Http; using System.Transactions; using System.Web; using System.Web.Http; using System.Web.Http.Description; using DevExpress.XtraCharts.Native; using DevExpress.XtraPrinting.Native; using iBemsDataService; using iBemsDataService.Model; using iBemsDataService.Util; namespace iBemsDataService.Controllers { public class FmsMaterialReleaseController : ApiController { private iBemsEntities db = new iBemsEntities(); [ResponseType(typeof(void))] [ActionName("Add")] public IHttpActionResult PostFmsMaterialReleaseAdd(List materialList) { Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId, businessFieldId; //workRequestId , int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false || if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false || int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false ) { return BadRequest("Not Found Parameters."); } try { var storedList = db.FmsMaterialStored .Where(ms => ms.IsApproval == true) .ToList(); using (var transaction = new TransactionScope()) { foreach (var item in materialList) { FmsMaterialRelease releaseItem = new FmsMaterialRelease() { SiteId = item.SiteId, BusinessFieldId = item.BusinessFieldId, ReleaseDate = DateTime.Now, ReleaseTypeId = 2, // 조정출고 //WorkRequestId = workRequestId, MaterialId = item.MaterialId, MaterialCount = item.MaterialCount, IsConfirmed = false, AdjustmentTypeId = item.AdjustmentTypeId, AdjustmentUserId = item.AdjustmentUserId, Comment = item.Comment, ReleaseTotalCost = 0, StockCountByPoint = item.StockCountByPoint }; // // 선입선출에 따른 계산 if (item.AdjustmentTypeId == 1) // 조정 손실인 경우 { var currentStoredList = storedList .Where(s => s.MaterialId == item.MaterialId && s.RemainStoredCount > 0) .OrderBy(s => s.StoredDate) .ToList(); var tempReleasedItemCount = item.MaterialCount; foreach (var storedItem in currentStoredList) { if ((storedItem.RemainStoredCount - tempReleasedItemCount) >= 0) { releaseItem.ReleaseTotalCost += (storedItem.UnitCost * tempReleasedItemCount); storedItem.RemainStoredCount -= tempReleasedItemCount.Value; break; } releaseItem.ReleaseTotalCost += (storedItem.UnitCost * storedItem.RemainStoredCount); tempReleasedItemCount -= storedItem.RemainStoredCount; storedItem.RemainStoredCount = 0; } } else if (item.AdjustmentTypeId == 2) // 조정반납인 경우 { var currentStoredList = storedList .Where(s => s.MaterialId == item.MaterialId && s.StoredCount != s.RemainStoredCount) .OrderByDescending(s => s.StoredDate) .ToList(); var tempReleasedItemCount = item.MaterialCount; foreach (var storedItem in currentStoredList) { if ((storedItem.RemainStoredCount + tempReleasedItemCount) <= storedItem.StoredCount ) { releaseItem.ReleaseTotalCost += (storedItem.UnitCost * tempReleasedItemCount); storedItem.RemainStoredCount += tempReleasedItemCount.Value; break; } var returnItemCount = storedItem.StoredCount - storedItem.RemainStoredCount; releaseItem.ReleaseTotalCost += (storedItem.UnitCost * returnItemCount); tempReleasedItemCount -= returnItemCount; storedItem.RemainStoredCount = storedItem.StoredCount; } } db.FmsMaterialRelease.Add(releaseItem); db.SaveChanges(); } transaction.Complete(); } } catch (DbUpdateException e) { throw e; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("Approval")] public IHttpActionResult PostFmsMaterialRelease(FmsMaterialRelease releaseMaterial) { Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId, businessFieldId, materialId; if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false || int.TryParse(uriQuery.Get("BusinessFieldId"), out businessFieldId) == false || int.TryParse(uriQuery.Get("MaterialId"), out materialId) == false) { return BadRequest("Not Found Parameters."); } try { var material = db.FmsMaterial.Where(m => m.SiteId == siteId && m.MaterialId == materialId && m.IsUse == true ).FirstOrDefault(); if (material == null) { return StatusCode(HttpStatusCode.NoContent); } db.SaveChanges(); } catch (DbUpdateException e) { throw e; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("ApprovalMany")] public IHttpActionResult PostFmsMaterialReleaseApprovalMany(List releaseMaterialList) { try { foreach (var item in releaseMaterialList) { var realItem = db.FmsMaterialRelease.Where(r => r.SiteId == item.SiteId && // 19.07.12 r.MaterialReleaseId == item.MaterialReleaseId) .FirstOrDefault(); realItem.IsConfirmed = true; realItem.ConfirmedUserId = item.ConfirmedUserId; realItem.ConfirmedDate = DateTime.Now; } db.SaveChanges(); } catch (DbUpdateException e) { throw e; } return StatusCode(HttpStatusCode.NoContent); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } public class ReleaseMaterial { public int SiteId { get; set; } public int BusinessFieldId { get; set; } public string Name { get; set; } public int MaterialId { get; set; } public int MaterialCount { get; set; } public int MaterialCode { get; set; } public int FinalPrice { get; set; } }; }