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 FmsBudgetCodeClassExController : ODataController { private iBemsEntities db = new iBemsEntities(); // GET: odata/FmsBudgetCodeClassEx [Queryable] public List GetFmsBudgetCodeClassEx() { List flatList = null; // 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 codeList = db.FmsBudgetCodeClass.ToList(); flatList = ( from c in codeList where c.SiteId == siteId && c.Depth == 2 select new FmsBudgetCodeClassEx { SiteId = c.SiteId, ThirdBudgetClassId = c.BudgetClassId, ThirdBudgetName = c.Name, YearlyBudget = 0, MonthlyBudget = 0, //Depth = c.Depth, //ParentBudgetClassId = c.ParentBudgetClassId }).ToList(); foreach (var item in flatList) { // Todo : 방어코드 혹은 exception 필요 //catch (DbUpdateException e) { throw e; } KeyValuePair secondBudgetValue = GetParent(item.ThirdBudgetClassId, codeList); KeyValuePair firstBudgetValue = GetParent(secondBudgetValue.Key, codeList); if (secondBudgetValue.Key == 0 || firstBudgetValue.Key == 0) { throw new Exception("Budget Code 가 잘못설정되었습니다."); } item.SecondBudgetClassId = secondBudgetValue.Key; item.SecondBudgetName = secondBudgetValue.Value; item.SecondBudgetNameWithSum = secondBudgetValue.Value; ; item.FirstBudgetClassId = firstBudgetValue.Key; item.FirstBudgetName = firstBudgetValue.Value; item.FirstBudgetNameWithSum = firstBudgetValue.Value; ; } return flatList; } private KeyValuePair GetParent(int budgetId, List codeList) { // 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 tempCodeClass = codeList.Where(c => c.SiteId == siteId && c.BudgetClassId == budgetId).FirstOrDefault(); var tempParent = codeList.Where(c => c.SiteId == siteId && c.BudgetClassId == tempCodeClass.ParentBudgetClassId).FirstOrDefault(); if (tempParent == null) { return new KeyValuePair(0, ""); } return new KeyValuePair(tempParent.BudgetClassId, tempParent.Name); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } }