using System; using System.Collections; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Web; using System.Web.Http; using System.Web.Http.Description; using DevExpress.Office.Utils; using iBemsDataService.Model; using iBemsDataService.Util; namespace iBemsDataService.Controllers { public class FmsBudgetDetailController : ApiController { private iBemsEntities db = new iBemsEntities(); // GET: odata/FmsBudgetCodeClassEx [Queryable] public List GetFmsBudgetDetail() { var list = db.FmsBudgetDetail.Where(a => 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; } // POST: api/FmsBudgetDetail [ResponseType(typeof(void))] [ActionName("Save")] public IHttpActionResult PostFmsBudgetDetail(List budgetList) { Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId, year; if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false || int.TryParse(uriQuery.Get("Year"), out year) == false) { return BadRequest("Not Found Parameters."); } try { // 예산편성 등록시 실적 코드도 미리 생성 foreach (var detailItem in budgetList) { for (int i = 1; i <= 12; i++) { FmsBudgetDetailExecution execution = new FmsBudgetDetailExecution() { BudgetClassId = detailItem.BudgetClassId, Month = i, Year = detailItem.Year, MonthlyExecution = 0, YearlyExecution = 0, MonthlyBudget = detailItem.MonthlyBudget, YearlyBudget = detailItem.YearlyBudget, RootBudgetClassId = detailItem.RootBudgetClassId, ParentBudgetClassId = detailItem.ParentBudgetClassId, SiteId = detailItem.SiteId, }; detailItem.FmsBudgetDetailExecution.Add(execution); } } FmsBudget budget = new FmsBudget() { SiteId = siteId, Year = year, FmsBudgetDetail = budgetList }; db.FmsBudget.Add(budget); db.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } // POST: api/FmsBudgetDetail [ResponseType(typeof(void))] [ActionName("Update")] public IHttpActionResult PostFmsBudgetDetailUpdate(List budgetList) { Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId, year; if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false || int.TryParse(uriQuery.Get("Year"), out year) == false) { return BadRequest("Not Found Parameters."); } try { //var query = from d in db.FmsBudgetDetail // where d.SiteId == siteId && d.Year == year // select d; //var qm = new QueryManager(db); //qm.DeleteAndInsert(db.FmsBudgetDetail, budgetList, query); foreach (var item in budgetList) { db.FmsBudgetDetail.Attach(item); DbEntityEntry entry = db.Entry(item); entry.State = System.Data.EntityState.Modified; var updateED = (from us in db.FmsBudgetDetailExecution where us.SiteId == siteId && us.Year == item.Year && us.BudgetClassId == item.BudgetClassId && us.ParentBudgetClassId == item.ParentBudgetClassId select us); foreach (var ED in updateED) ED.MonthlyBudget = item.MonthlyBudget; } db.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("Delete")] public IHttpActionResult PostFmsBudgetDetail() { Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString(uri.Query); int siteId, year; if (int.TryParse(uriQuery.Get("SiteId"), out siteId) == false || int.TryParse(uriQuery.Get("Year"), out year) == false) { return BadRequest("Not Found Parameters."); } try { var budgetED = db.FmsBudgetDetailExecution .Where(b => b.SiteId == siteId && b.Year == year); foreach (var deleteItem in budgetED) { db.FmsBudgetDetailExecution.Remove(deleteItem); } var budgetE = db.FmsBudgetDetail .Where(b => b.SiteId == siteId && b.Year == year); foreach (var deleteItem in budgetE) { db.FmsBudgetDetail.Remove(deleteItem); } var budget = db.FmsBudget .Where(b => b.SiteId == siteId && b.Year == year) .FirstOrDefault(); if (budget != null) { db.FmsBudget.Remove(budget); } db.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } } namespace iBemsDataService.Model { public partial class FmsBudgetDetail { public string RootBudgetName { get; set; } public string ParentBudgetName { get; set; } } }