using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; 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 System.Web.Http.OData; using iBemsDataService; using iBemsDataService.Model; namespace iBemsDataService.Controllers { public class FacilityController : ODataController { private iBemsEntities db = new iBemsEntities(); // GET: odata/Facility [Queryable] public IQueryable GetFacility() { // 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 query = from f in db.CmFacility from mu in db.CmUser from su in db.CmUser from fc in db.FmsFacilityCodeClass from sc in db.FmsFacilityCodeClass from tc in db.FmsFacilityCodeClass join b in db.CmBuilding on f.BuildingId equals b.BuildingId into gb from subBuilding in gb.DefaultIfEmpty() join l in db.CmZone on f.ZoneId equals l.ZoneId into gl from subZone in gl.DefaultIfEmpty() join fl in db.CmFloor on f.FloorId equals fl.FloorId into gf from subFloor in gf.DefaultIfEmpty() join pf in db.CmFacility on f.ParentFacilityCode equals pf.FacilityCode into gpf from subParentFacility in gpf.DefaultIfEmpty() where f.SiteId == siteId && f.MainContactorUserId == mu.UserId && f.SubContactorUserId == su.UserId && f.FirstClassId == fc.FacilityClassId && f.SecondClassId == sc.FacilityClassId && f.ThirdClassId == tc.FacilityClassId select new Facility { SiteId = f.SiteId , FacilityCode = f.FacilityCode , FirstClassId = f.FirstClassId , SecondClassId = f.SecondClassId , ThirdClassId = f.ThirdClassId , FirstClassName = fc.Name , SecondClassName = sc.Name , ThirdClassName = tc.Name , Name = f.Name , Nickname = f.Nickname , ParentFacilityName = subParentFacility.Name, ManufactureModel = f.ManufactureModel , MainContactorUserName = mu.Name , SubContactorUserName = su.Name , BuildingId = f.BuildingId, FloorId = f.FloorId, ZoneId = f.ZoneId, BuildingName = (subBuilding.Name == null) ? string.Empty : subBuilding.Name , ZoneName = (subZone.Name == null) ? string.Empty : subZone.Name , FloorName = (subFloor.Name == null) ? string.Empty : subFloor.Name }; Trace.WriteLine( "test" ); return query; } [Queryable] public IQueryable GetTargetFacility() { // 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 query = from t in db.FmsWorkScheduleToFacility from f in db.CmFacility from mu in db.CmUser from su in db.CmUser from fc in db.FmsFacilityCodeClass from sc in db.FmsFacilityCodeClass from tc in db.FmsFacilityCodeClass join b in db.CmBuilding on f.BuildingId equals b.BuildingId into gb from subBuilding in gb.DefaultIfEmpty() join l in db.CmZone on f.ZoneId equals l.ZoneId into gl from subZone in gl.DefaultIfEmpty() join fl in db.CmFloor on f.FloorId equals fl.FloorId into gf from subFloor in gf.DefaultIfEmpty() join pf in db.CmFacility on f.ParentFacilityCode equals pf.FacilityCode into gpf from subParentFacility in gpf.DefaultIfEmpty() where t.SiteId == siteId && t.SiteId == f.SiteId && t.FacilityCode == f.FacilityCode && f.MainContactorUserId == mu.UserId && f.SubContactorUserId == su.UserId && f.FirstClassId == fc.FacilityClassId && f.SecondClassId == sc.FacilityClassId && f.ThirdClassId == tc.FacilityClassId select new TargetFacility { SiteId = f.SiteId , WorkScheduleId = t.WorkScheduleId , FacilityCode = f.FacilityCode , FirstClassId = f.FirstClassId , SecondClassId = f.SecondClassId , ThirdClassId = f.ThirdClassId , FirstClassName = fc.Name , SecondClassName = sc.Name , ThirdClassName = tc.Name , Name = f.Name , Nickname = f.Nickname , ParentFacilityName = subParentFacility.Name , ManufactureModel = f.ManufactureModel , MainContactorUserName = mu.Name , SubContactorUserName = su.Name , BuildingName = (subBuilding.Name == null) ? string.Empty : subBuilding.Name , ZoneName = (subZone.Name == null) ? string.Empty : subZone.Name , FloorName = (subFloor.Name == null) ? string.Empty : subFloor.Name }; return query; } /* // GET: api/Facilitiy/5 [ResponseType(typeof(CmFacility))] public IHttpActionResult GetCmFacility(int id) { CmFacility cmFacility = db.CmFacility.Find(id); if (cmFacility == null) { return NotFound(); } return Ok(cmFacility); } // PUT: api/Facilitiy/5 [ResponseType(typeof(void))] public IHttpActionResult PutCmFacility(int id, CmFacility cmFacility) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != cmFacility.SiteId) { return BadRequest(); } db.Entry(cmFacility).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!CmFacilityExists(id)) { return NotFound(); } else { throw; } } return StatusCode(HttpStatusCode.NoContent); } // POST: api/Facilitiy [ResponseType(typeof(CmFacility))] public IHttpActionResult PostCmFacility(CmFacility cmFacility) { if (!ModelState.IsValid) { return BadRequest(ModelState); } db.CmFacility.Add(cmFacility); try { db.SaveChanges(); } catch (DbUpdateException) { if (CmFacilityExists(cmFacility.SiteId)) { return Conflict(); } else { throw; } } return CreatedAtRoute("DefaultApi", new { id = cmFacility.SiteId }, cmFacility); } // DELETE: api/Facilitiy/5 [ResponseType(typeof(CmFacility))] public IHttpActionResult DeleteCmFacility(int id) { CmFacility cmFacility = db.CmFacility.Find(id); if (cmFacility == null) { return NotFound(); } db.CmFacility.Remove(cmFacility); db.SaveChanges(); return Ok(cmFacility); } */ protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } private bool FacilityExists(int id , int facilityCode) { return db.CmFacility.Count( e => e.SiteId == id && e.FacilityCode == facilityCode ) > 0; } } public class Facility { public Facility() { } [Key] public int SiteId { get; set; } public int FacilityType { get; set; } [Key] public int FacilityCode { get; set; } public Nullable FirstClassId { get; set; } public Nullable SecondClassId { get; set; } public Nullable ThirdClassId { get; set; } public string FirstClassName { get; set; } public string SecondClassName { get; set; } public string ThirdClassName { get; set; } public string DeviceType { get; set; } public string ParentFacilityCode { get; set; } public string ParentFacilityName { get; set; } public string Name { get; set; } public string Nickname { get; set; } public string Manufacturer { get; set; } public string ManufactureModel { get; set; } public Nullable BuildingId { get; set; } public Nullable FloorId { get; set; } public Nullable ZoneId { get; set; } public string BuildingName { get; set; } public string FloorName { get; set; } public string ZoneName { get; set; } public string MainContactorUserId { get; set; } public string SubContactorUserId { get; set; } public string MainContactorUserName { get; set; } public string SubContactorUserName { get; set; } public Nullable IsUse { get; set; } public Nullable SortOrderNo { get; set; } } }