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