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; using System.Transactions; namespace iBemsDataService.Controllers { public class FmsFacilityCodeClassController : ApiController { private iBemsEntities db = new iBemsEntities(); // cyim 2015.12.30 : 설정-시설관리-시설등록-시설분류목록에 중복 입력 체크 (1개라도 있다면 false) [ResponseType(typeof(void))] [ActionName("Check")] public bool PostFmsFacilityCodeClassCheck(FmsFacilityCodeClass param) { try { IEnumerable newKeyData = (from data in db.FmsFacilityCodeClass where data.SiteId == param.SiteId && (data.Name == param.Name || data.Abbreviation == param.Abbreviation) select data).Take(1); if (newKeyData.Count() > 0) return false; } catch (Exception) { throw; } return true; } [ResponseType(typeof(void))] [ActionName("Insert")] public IHttpActionResult PostFmsFacilityCodeClassInsert(FmsFacilityCodeClass param) { try { IEnumerable newKeyData = (from data in db.FmsFacilityCodeClass where data.SiteId == param.SiteId && (data.ParentFacilityClassId == null || (data.ParentFacilityClassId == param.ParentFacilityClassId)) && data.Depth == param.Depth && data.Name == param.Name select data).Take(1); if (newKeyData.Count() > 0) { return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!"); } db.FmsFacilityCodeClass.Add(param); db.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType(typeof(void))] [ActionName("Update")] public IHttpActionResult PostFmsFacilityCodeClassUpdate(FmsFacilityCodeClass param) { try { IEnumerable newKeyData = (from data in db.FmsFacilityCodeClass where data.FacilityClassId != param.FacilityClassId && data.SiteId == param.SiteId && (data.ParentFacilityClassId == null || (data.ParentFacilityClassId == param.ParentFacilityClassId)) && data.Depth == param.Depth && (data.Name == param.Name || data.Abbreviation == param.Abbreviation) select data).Take(1); if (newKeyData.Count() > 1) { return BadRequest("중복된 이름이나 별명이 이미 존재 합니다!"); } var codeClass = db.FmsFacilityCodeClass .Where(a => a.FacilityClassId == param.FacilityClassId) .FirstOrDefault(); if (codeClass == null) return BadRequest("Not Found Parameters."); codeClass.Name = param.Name; codeClass.Abbreviation = param.Abbreviation; codeClass.IsUse = param.IsUse; db.SaveChanges(); } catch (Exception) { throw; } return StatusCode(HttpStatusCode.NoContent); } [ResponseType( typeof( void ) )] public IHttpActionResult DeleteFmsFacilityCodeClass() { if ( !ModelState.IsValid ) { return BadRequest( ModelState ); } Uri uri = Request.RequestUri; var uriQuery = HttpUtility.ParseQueryString( uri.Query ); int siteId, facilityClassId, depth; if( int.TryParse( uriQuery.Get( "SiteId" ) , out siteId ) == false || int.TryParse( uriQuery.Get( "FacilityClassId" ) , out facilityClassId ) == false || int.TryParse( uriQuery.Get( "Depth" ) , out depth ) == false ) { return BadRequest("Not Found Parameters."); } using( var transaction = new TransactionScope() ) { var qm = new QueryManager( db ); var dbSet = db.FmsFacilityCodeClass; if( depth == 0 ) { var query = from d in dbSet where d.SiteId == siteId && d.ParentFacilityClassId == facilityClassId select d; var list = query.ToList(); foreach( var item in list ) { var queryToDelete = from d in dbSet where d.SiteId == siteId && d.ParentFacilityClassId == item.FacilityClassId select d; qm.Delete( dbSet , queryToDelete ); qm.Delete( dbSet , item , true ); } } else if( depth == 1 ) { var query = from d in dbSet where d.SiteId == siteId && d.ParentFacilityClassId == facilityClassId select d; qm.Delete( dbSet, query ); } qm.Delete( dbSet , new FmsFacilityCodeClass { SiteId = siteId , FacilityClassId = facilityClassId } , true ); db.SaveChanges(); transaction.Complete(); } return StatusCode( HttpStatusCode.NoContent ); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } }