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 iBemsDataService; using iBemsDataService.Model; using iBemsDataService.Util; namespace iBemsDataService.Controllers { public class FmsEquipmentHistoryController : ApiController { private iBemsEntities db = new iBemsEntities(); [ResponseType(typeof(void))] [ActionName("AddHistory")] public IHttpActionResult PostFmsEquipmentHistory(FmsEquipmentHistory historyInfo) { if ( historyInfo.EquipmentId == 0) { return BadRequest(ModelState); } if (historyInfo.EquipmentRentId == null || historyInfo.EquipmentRentId == 0) { return BadRequest(ModelState); } try { FmsEquipmentHistory previousHistory = db.FmsEquipmentHistory.Where(fe => fe.SiteId == historyInfo.SiteId && //19.07.12 fe.EquipmentId == historyInfo.EquipmentId && fe.EquipmentRentId == historyInfo.EquipmentRentId) .OrderByDescending(fe => fe.EquipmentHistoryId) .Take(1).FirstOrDefault(); if (previousHistory == null) { previousHistory = db.FmsEquipmentHistory.Where(fe => fe.SiteId == historyInfo.SiteId && //19.07.12 fe.EquipmentId == historyInfo.EquipmentId) .OrderByDescending(fe => fe.EquipmentHistoryId) .Take(1).FirstOrDefault(); } FmsEquipmentHistory lastestHistory = db.FmsEquipmentHistory.Where(fe => fe.SiteId == historyInfo.SiteId && //19.07.12 fe.EquipmentId == historyInfo.EquipmentId) .OrderByDescending(fe => fe.EquipmentHistoryId) .Take(1).FirstOrDefault(); if (previousHistory == null || lastestHistory == null) { return BadRequest("Not Found Stored Info."); } FmsEquipmentHistory targetHistory = new FmsEquipmentHistory() { AddDate = DateTime.Now, // 현재 수량 = 마지막정보의 현재수량 + 반납수량 CurrentStockCount = lastestHistory.CurrentStockCount + historyInfo.ReturnCount, EquipmentId = historyInfo.EquipmentId, EquipmentRentId = historyInfo.EquipmentRentId, LossCount = historyInfo.LossCount, RentCount = previousHistory.RentCount, ReturnCount = historyInfo.ReturnCount, SiteId = historyInfo.SiteId, StoredCount = 0, // 전체수량 = 마지막정보의 전체수량 - 손실수량 TotalStockCount = lastestHistory.TotalStockCount - historyInfo.LossCount, CurrentRentCount = previousHistory.CurrentRentCount - (historyInfo.ReturnCount + historyInfo.LossCount), UpdateDate = DateTime.Now, }; if (targetHistory.ReturnCount > 0 && targetHistory.LossCount == 0) { targetHistory.EquipmentStateTypeId = 3; } else if (targetHistory.ReturnCount > 0 && targetHistory.LossCount > 0) { targetHistory.EquipmentStateTypeId = 4; } else if (targetHistory.ReturnCount == 0 && targetHistory.LossCount > 0) { targetHistory.EquipmentStateTypeId = 5; } if (targetHistory.EquipmentStateTypeId > 2) { // 신규 정보를 대여 로 처리 (ReturnInfo 의 그리드 리스팅을 위함.) if (targetHistory.CurrentRentCount > 0) { targetHistory.IsReturned = false; } else { targetHistory.IsReturned = true; } } previousHistory.IsReturned = true; // 이전 정보는 반납완료 로 처리 함 db.FmsEquipmentHistory.Add(targetHistory); // RentInfo 에 대한 반납 처리 // 현재 대여정보에 해당하는 대여상태의 historyList var historyListByCurrentRentInfo = db.FmsEquipmentHistory .Where(fe => fe.SiteId == historyInfo.SiteId && fe.EquipmentRentId == historyInfo.EquipmentRentId && fe.IsReturned == false).ToList(); // SaveChange 이전 이므로 현저 history 를 임의로 추가 historyListByCurrentRentInfo.Add(targetHistory); var count = historyListByCurrentRentInfo.Where(hl => hl.SiteId == targetHistory.SiteId && hl.IsReturned == false).Count(); if (count == 0) { var rentInfo = db.FmsEquipmentRentInfo.Where(r => r.SiteId == historyInfo.SiteId && r.EquipmentRentId == historyInfo.EquipmentRentId) .FirstOrDefault(); rentInfo.EquipmentStateTypeId = 3; rentInfo.ReturnFixDate = 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); } } }