using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using System.Web.Http.Description; using System.Web.Http.OData; using iBemsDataService; using iBemsDataService.Model; namespace iBemsDataService.Controllers { public class FmsBudgetCodeClassController : ODataController { private iBemsEntities db = new iBemsEntities(); // GET: odata/FmsBudgetCodeClassEx [Queryable] public List GetFmsBudgetCodeClass() { // 2019.07.12 Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId; if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false) { throw new Exception("Not Found Parameters."); } var list = db.FmsBudgetCodeClass.Where(a => a.SiteId == siteId && a.Depth == 2) .ToList(); var codeList = db.FmsBudgetCodeClass.ToList(); foreach (var item in list) { item.RootBudgetName = codeList.Where(a => a.BudgetClassId == item.RootBudgetClassId).FirstOrDefault().Name; item.ParentBudgetName = codeList.Where(a => a.BudgetClassId == item.ParentBudgetClassId).FirstOrDefault().Name; } return list; } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } public class FmsBudgetCodeClass2Controller : ApiController { private iBemsEntities db2 = new iBemsEntities(); [ResponseType(typeof(void))] [ActionName("Insert")] public IHttpActionResult PostFmsBudgetCodeClass2Insert(FmsBudgetCodeClass budgetCode) { if (budgetCode == null) return BadRequest("Not Found Parameters."); if (budgetCode.SiteId == 0) return BadRequest("Not Found Parameters."); List codeList = null; IEnumerable newKeyData = (from data in db2.FmsBudgetCodeClass where data.SiteId == budgetCode.SiteId && (data.ParentBudgetClassId == null || (data.ParentBudgetClassId == budgetCode.ParentBudgetClassId)) && data.Depth == budgetCode.Depth && (data.Name == budgetCode.Name || data.Abbreviation == budgetCode.Abbreviation) select data).Take(1); if (newKeyData.Count() > 0) { return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!"); } try { if (budgetCode.Depth == 0) { codeList = db2.FmsBudgetCodeClass .Where(a => a.Depth == 0).ToList(); var lastCode = codeList.OrderByDescending(a => a.BudgetSeq).FirstOrDefault(); int lastBudgetSeq = int.Parse(lastCode.BudgetSeq.Substring(lastCode.BudgetSeq.Length - 2)); budgetCode.BudgetSeq = MakeNumToString(lastBudgetSeq +1, 2); budgetCode.IsUse = true; } else if (budgetCode.Depth == 1) { codeList = db2.FmsBudgetCodeClass .Where(a => a.Depth == 1 && a.ParentBudgetClassId == budgetCode.ParentBudgetClassId).ToList(); var lastCode = codeList.OrderByDescending(a => a.BudgetSeq).FirstOrDefault(); string middleBudgetSeq = string.Empty; int lastBudgetSeq = 0; if (lastCode != null) { middleBudgetSeq = lastCode.BudgetSeq.Substring(0, lastCode.BudgetSeq.Length - 2); lastBudgetSeq = int.Parse(lastCode.BudgetSeq.Substring(lastCode.BudgetSeq.Length - 2)); budgetCode.RootBudgetClassId = lastCode.RootBudgetClassId; } else { var parentCode = db2.FmsBudgetCodeClass.Where(a => a.BudgetClassId == budgetCode.ParentBudgetClassId).FirstOrDefault(); if (parentCode == null) return BadRequest("Not Found Parameters."); middleBudgetSeq = parentCode.BudgetSeq; lastBudgetSeq = 0; budgetCode.RootBudgetClassId = parentCode.BudgetClassId; } budgetCode.BudgetSeq = middleBudgetSeq + MakeNumToString(lastBudgetSeq + 1, 2); budgetCode.IsUse = true; } else if (budgetCode.Depth == 2) { codeList = db2.FmsBudgetCodeClass .Where(a => a.Depth == 2 && a.ParentBudgetClassId == budgetCode.ParentBudgetClassId).ToList(); var lastCode = codeList.OrderByDescending(a => a.BudgetSeq).FirstOrDefault(); string middleBudgetSeq = string.Empty; int lastBudgetSeq = 0; if (lastCode != null) { middleBudgetSeq = lastCode.BudgetSeq.Substring(0, lastCode.BudgetSeq.Length - 2); lastBudgetSeq = int.Parse(lastCode.BudgetSeq.Substring(lastCode.BudgetSeq.Length - 2)); budgetCode.RootBudgetClassId = lastCode.RootBudgetClassId; } else { var parentCode = db2.FmsBudgetCodeClass.Where(a => a.BudgetClassId == budgetCode.ParentBudgetClassId).FirstOrDefault(); if (parentCode == null) return BadRequest("Not Found Parameters."); middleBudgetSeq = parentCode.BudgetSeq; lastBudgetSeq = 0; budgetCode.RootBudgetClassId = parentCode.RootBudgetClassId; } budgetCode.BudgetSeq = middleBudgetSeq + MakeNumToString(lastBudgetSeq + 1, 2); budgetCode.IsUse = true; } else { return BadRequest("Not Found Parameters."); } db2.FmsBudgetCodeClass.Add(budgetCode); db2.SaveChanges(); } catch (Exception) { throw; //return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!"); } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("Update")] public IHttpActionResult PostFmsBudgetCodeClass2Update(FmsBudgetCodeClass budgetCode) { if (budgetCode == null) return BadRequest("Not Found Parameters."); if (budgetCode.SiteId == 0) return BadRequest("Not Found Parameters."); if (budgetCode.BudgetClassId == 0) return BadRequest("Not Found Parameters."); IEnumerable newKeyData = (from data in db2.FmsBudgetCodeClass where data.SiteId == budgetCode.SiteId && (data.ParentBudgetClassId == null || (data.ParentBudgetClassId == budgetCode.ParentBudgetClassId)) && data.Depth == budgetCode.Depth && (data.Name == budgetCode.Name || data.Abbreviation == budgetCode.Abbreviation) select data).Take(1); if (newKeyData.Count() > 1) { return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!"); } try { var codeClass = db2.FmsBudgetCodeClass .Where(a => a.BudgetClassId == budgetCode.BudgetClassId) .FirstOrDefault(); if (codeClass == null) return BadRequest("Not Found Parameters."); codeClass.Name = budgetCode.Name; codeClass.Abbreviation = budgetCode.Abbreviation; //2016 02 03 추가 hcLee codeClass.IsUse = budgetCode.IsUse; db2.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("Delete")] public IHttpActionResult PostFmsBudgetCodeClass2Delete(FmsBudgetCodeClass budgetCode) { if (budgetCode == null) return BadRequest("Not Found Parameters."); if (budgetCode.SiteId == 0) return BadRequest("Not Found Parameters."); if (budgetCode.BudgetClassId == 0) return BadRequest("Not Found Parameters."); try { var codeClass = db2.FmsBudgetCodeClass .Where(a => a.BudgetClassId == budgetCode.BudgetClassId) .FirstOrDefault(); if (codeClass == null) return BadRequest("Not Found Parameters."); db2.FmsBudgetCodeClass.Remove(codeClass); db2.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } private string MakeNumToString(int target, int length) { string targetValue = target.ToString(); if (targetValue.Length >= length) return targetValue; for (int i = 1; i < length; i++) { targetValue = "0" + targetValue; } return targetValue; } } } namespace iBemsDataService.Model { public partial class FmsBudgetCodeClass { public string RootBudgetName { get; set; } public string ParentBudgetName { get; set; } } }