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.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 FmsMaterialStoredController : ApiController { private iBemsEntities db = new iBemsEntities(); [ResponseType(typeof(void))] [ActionName("Store")] public IHttpActionResult PostFmsMaterialStored(FmsMaterialStored info) { // 2016 01 11 추가 hcLee info.StoredDate = TimeZoneInfo.ConvertTimeFromUtc(info.StoredDate, TimeZoneInfo.Local); if (info.PurchaseOrderId == null || info.PurchaseOrderId == 0 || info.MaterialId == 0) { return BadRequest("Not Found Parameters."); } try { // 해당 material 의 최신 입고 정보 var lastestStoredItem = db.FmsMaterialStored.Where(ms => ms.SiteId == info.SiteId && // 19.07.12 ms.MaterialId == info.MaterialId) .OrderByDescending(sm => sm.MaterialStoredId) .FirstOrDefault(); // 재고정보업데이트 if (lastestStoredItem != null) { info.StockCount += (lastestStoredItem.StockCount+info.StoredCount); } else { info.StockCount = info.StoredCount; } // 입고테이블에 추가 db.FmsMaterialStored.Add(info); db.SaveChanges(); var storedMaterialList = db.FmsMaterialStored.Where(ms => ms.SiteId == info.SiteId && // 19.07.12 ms.PurchaseOrderId == info.PurchaseOrderId) //.GroupBy(ms => ms.MaterialId) //.Select(group => group.Sum(item => item.StoredCount) ) .ToList(); var orderedMaterialList = db.FmsMaterialPurchaseOrderMaterial.Where(mpom => mpom.SiteId == info.SiteId && // 19.07.12 mpom.PurchaseOrderId == info.PurchaseOrderId) .ToList(); bool isAllStored = false; foreach (var order in orderedMaterialList) { int storedCount = storedMaterialList.Where(a=> a.MaterialId == order.MaterialId) .Sum(a=>a.StoredCount); if (order.MaterialCount > storedCount) { isAllStored = false; break; } else { isAllStored = true; } } if(isAllStored) { var requestId = db.FmsMaterialPurchaseOrder.Where(po=> po.SiteId == info.SiteId && // 19.07.12 po.PurchaseOrderId == info.PurchaseOrderId ) .Select(a=>a.PurchaseRequestId); var materialRequest = db.FmsMaterialPurchaseRequest.Where(mpr => mpr.SiteId == info.SiteId && // 19.07.12 mpr.PurchaseRequestId == requestId.FirstOrDefault()) .FirstOrDefault(); if (materialRequest != null) { materialRequest.ProgressId = (short)PurchaseProgress.MATERIAL_STORED; } db.SaveChanges(); } } catch( DbUpdateException e ) { throw e; } return StatusCode( HttpStatusCode.NoContent ); } [ResponseType(typeof(void))] [ActionName("Approval")] public IHttpActionResult PostFmsMaterialStored(MaterialStoredAppovalInfo info) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (info.UserId == null || info.UserId.IsEmpty() || info.MaterialStoredList == null || info.MaterialStoredList.IsEmpty()) { return BadRequest("Not Found Parameters."); } try { var materialStoredList = info.MaterialStoredList; foreach (var p in materialStoredList) { var purchaseOrder = db.FmsMaterialPurchaseOrder.Where(x => x.SiteId == p.SiteId && x.BusinessFieldId == p.BusinessFieldId && x.PurchaseOrderId == p.PurchaseOrderId ).FirstOrDefault(); if (purchaseOrder == null) { continue; } var materialStored = db.FmsMaterialStored.Where(x => x.SiteId == p.SiteId && x.BusinessFieldId == p.BusinessFieldId && x.MaterialStoredId == p.MaterialStoredId ).FirstOrDefault(); if (materialStored == null) { continue; } materialStored.ApprovalUserId = info.UserId; materialStored.ApprovalDate = DateTime.Now; materialStored.IsApproval = true; db.SaveChanges(); // 발주요청과 입고를 비교하여 모두 입고되었다면 상태 변경 bool isAllMaterialStored = false; foreach (var orderMaterial in purchaseOrder.FmsMaterialPurchaseOrderMaterial) { var notApprovedItem = purchaseOrder.FmsMaterialStored.Where(a => a.SiteId == orderMaterial.SiteId && // 19.07.12 a.IsApproval == false).FirstOrDefault(); if (notApprovedItem != null) { isAllMaterialStored = false; break; } int storedCount = purchaseOrder.FmsMaterialStored.Where(ms => ms.SiteId == orderMaterial.SiteId && // 19.07.12 ms.MaterialId == orderMaterial.MaterialId) .Sum(a => a.StoredCount); if (orderMaterial.MaterialCount > storedCount) { isAllMaterialStored = false; break; } else { isAllMaterialStored = true; } } if (isAllMaterialStored) { purchaseOrder.FmsMaterialPurchaseRequest.ProgressId = (short)PurchaseProgress.MATERIAL_STORED_APPROVAL; 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 MaterialStoredAppovalInfo { public string UserId { get; set; } public List MaterialStoredList { get; set; } } public class MaterialStored { public int SiteId { get; set; } public int BusinessFieldId { get; set; } public int MaterialStoredId { get; set; } public int PurchaseOrderId { get; set; } }; }