123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- 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;
- using System.Transactions;
- namespace iBemsDataService.Controllers
- {
- public class FmsWorkRequestController : ApiController
- {
- private iBemsEntities db = new iBemsEntities();
- // POST: api/FmsWorkRequest
- [ActionName("ExecutionPlanGeneration")]
- [ResponseType(typeof(void))]
- public IHttpActionResult GetFmsWorkRequest()
- {
- if (!ModelState.IsValid)
- {
- return BadRequest(ModelState);
- }
- // 2019.07.12
- Uri uri = Request.RequestUri;
- var uriQuery = HttpUtility.ParseQueryString(uri.Query);
- int siteId;
- if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false)
- {
- return BadRequest("Not Found Parameters.");
- }
- var today = DateTime.Now.Date;
- var tomorrow = today.AddDays(1);
- using (var transaction = new TransactionScope())
- {
- // 내일이 작업예정일이고 오늘 생성된 실행계획(작업요청)이 없다면 실행계획을 생성해야 하는 기초계획이다.
- var query = from s in db.FmsWorkSchedule
- where s.IsUse == true &&
- s.WorkDueDate == tomorrow &&
- db.FmsWorkRequest.Where(x =>
- x.SiteId == siteId && // 2019.07.12
- x.WorkScheduleId == s.WorkScheduleId &&
- x.RequestDate == today).Any() == false
- select s;
- foreach (var s in query)
- {
- var workRequest = new FmsWorkRequest
- {
- SiteId = s.SiteId,
- WorkScheduleId = s.WorkScheduleId,
- WorkTypeId = s.WorkTypeId,
- BusinessFieldId = s.BusinessFieldId,
- WorkProgressId = (short)WorkProgress.WORK_PLAN,
- Title = s.Name,
- RequestDate = today,
- StartWorkDate = s.WorkDueDate,
- RequestUserId = s.UpdateUserId,
- InspectionAgencyId = s.InspectionAgencyId
- };
- workRequest = db.FmsWorkRequest.Add(workRequest);
- db.SaveChanges();
- // 기초계획에 설정된 시설들도 옮겨준다.
- var facilitiesQuery = from f in db.FmsWorkScheduleToFacility
- where f.SiteId == s.SiteId &&
- f.WorkScheduleId == s.WorkScheduleId
- select f;
- var facilities = facilitiesQuery.ToList();
- foreach (var f in facilities)
- {
- db.FmsWorkRequestToFacility.Add(new FmsWorkRequestToFacility
- {
- SiteId = f.SiteId,
- WorkRequestId = workRequest.WorkRequestId,
- FacilityCode = f.FacilityCode
- });
- }
- db.SaveChanges();
- // chl 수정(20161021)
- //// 작업지시가 자동이면 작업지시도 생성
- //if (s.IsAutoOrder)
- //{
- // InsertWorkOrder(workRequest, facilities);
- //}
- }
- transaction.Complete();
- }
- return StatusCode(HttpStatusCode.NoContent);
- }
- [ResponseType(typeof(void))]
- [ActionName("Approval")]
- public IHttpActionResult PostFmsWorkRequest()
- {
- Uri uri = Request.RequestUri;
- var uriQuery = HttpUtility.ParseQueryString(uri.Query);
- int siteId, workRequestId, workProgressId;
- bool isConfirmDueDate = false;
- DateTime confirmDueDate = new DateTime();
- if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false ||
- int.TryParse(uriQuery.Get("WorkRequestId"), out workRequestId) == false ||
- int.TryParse(uriQuery.Get("WorkProgressId"), out workProgressId) == false ||
- string.IsNullOrEmpty(uriQuery.Get("UserId"))
- )
- {
- return BadRequest("Not Found Parameters.");
- }
- string userId = uriQuery.Get("UserId");
- // WorkRequest progressid 업데이트 필요
- try
- {
- using (var transaction = new TransactionScope())
- {
- var updateRequest = (
- from u in db.FmsWorkRequest
- where u.SiteId == siteId &&
- u.WorkRequestId == workRequestId
- select u).FirstOrDefault();
- if (updateRequest != null)
- {
- updateRequest.WorkProgressId = workProgressId;
- if (updateRequest.WorkScheduleId != null)
- {
- // FmsWorkSchedule update...
- bool.TryParse(uriQuery.Get("IsConfirmDueDate"), out isConfirmDueDate);
- DateTime.TryParse(uriQuery.Get("ConfirmDueDate"), out confirmDueDate);
- // userId = uriQuery.Get("UserId");
- if (isConfirmDueDate)
- {
- var updateSchedule = (
- from us in db.FmsWorkSchedule
- where us.SiteId == siteId &&
- us.WorkScheduleId == updateRequest.WorkScheduleId &&
- us.IsUse == true
- select us)
- .FirstOrDefault();
- if (updateSchedule != null)
- {
- updateSchedule.WorkDueDate = confirmDueDate;
- }
- }
- }
- if (workProgressId == 6) // 완료승인인 경우에만 수행
- {
- var workResultMaterials = (
- from wm in db.FmsWorkResultCheckItemMaterial
- where wm.SiteId == siteId &&
- wm.WorkRequestId == workRequestId
- select wm).ToList();
- foreach (var item in workResultMaterials)
- {
- var material = db.FmsMaterial.Where(m =>
- m.SiteId == siteId &&
- m.MaterialId == item.MaterialId &&
- m.IsUse == true
- ).FirstOrDefault();
- if (material == null) { continue; }
- FmsMaterialRelease releaseItem = new FmsMaterialRelease()
- {
- SiteId = item.SiteId,
- BusinessFieldId = updateRequest.BusinessFieldId,
- ReleaseDate = DateTime.Now,
- ReleaseTypeId = 1, // 작업출고
- WorkRequestId = workRequestId,
- MaterialId = item.MaterialId,
- MaterialCount = item.MaterialCount,
- //// TODO : 선입선출에 따른 계산이 필요함
- ReleaseTotalCost = 0,
- ConfirmedUserId = userId,
- ConfirmedDate = DateTime.Now,
- IsConfirmed = true,
- AdjustmentTypeId = 0
- };
- // 선입선출에 따른 계산
- var currentStoredList = db.FmsMaterialStored
- .Where(ms => ms.IsApproval == true
- && ms.MaterialId == item.MaterialId
- && ms.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;
- break;
- }
- releaseItem.ReleaseTotalCost += (storedItem.UnitCost * storedItem.RemainStoredCount);
- tempReleasedItemCount -= storedItem.RemainStoredCount;
- storedItem.RemainStoredCount = 0;
- }
- db.FmsMaterialRelease.Add(releaseItem);
- }
- }
- }
- db.SaveChanges();
- transaction.Complete();
- }
- }
- catch (DbUpdateException e) { throw e; }
- return StatusCode(HttpStatusCode.NoContent);
- }
- private void InsertWorkOrder(FmsWorkRequest workRequest, List<FmsWorkScheduleToFacility> facilities)
- {
- var workOrder = new FmsWorkOrder
- {
- SiteId = workRequest.SiteId,
- WorkRequestId = workRequest.WorkRequestId,
- BusinessFieldId = workRequest.BusinessFieldId,
- OrderUserId = workRequest.RequestUserId,
- OrderDate = DateTime.Now.Date,
- Title = workRequest.Title,
- Content = workRequest.Content,
- StartWorkDate = workRequest.StartWorkDate
- };
- workOrder = db.FmsWorkOrder.Add(workOrder);
- foreach (var f in facilities)
- {
- db.FmsWorkOrderToFacility.Add(new FmsWorkOrderToFacility
- {
- SiteId = f.SiteId,
- WorkRequestId = workOrder.WorkRequestId,
- FacilityCode = f.FacilityCode
- });
- }
- workRequest.WorkProgressId = (short)WorkProgress.WORK_STANDBY;
- db.SaveChanges();
- }
- protected override void Dispose(bool disposing)
- {
- if (disposing)
- {
- db.Dispose();
- }
- base.Dispose(disposing);
- }
- }
- }
|