123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- 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<FmsMaterialRelease> 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<FmsMaterialRelease> 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; }
- };
- }
|