using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using PagedList; using Newtonsoft.Json; using System.Collections; using static TreeView; [ezAuthorize] public class projectController : BaseApiController { // GET api/ public IEnumerable Get() { var list = _db.projects.ToList(); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } // GET api//5 public Model.project Get(int id) { var item = _db.projects.Where(q => q.num == id).FirstOrDefault(); if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound); return item; } // GET api//5 public IEnumerable GetPage(int page) { var project = _db.projects.Where(q => q.num < 10).ToList(); return project; } // POST api/ public void Post([FromBody] string value) { } // PUT api//5 public void Put(int id, [FromBody] string value) { } // DELETE api//5 public void Delete(int id) { var prod = _db.projects.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.project_sub.RemoveRange(prod.project_sub); //刪除活動資料 _db.projects.Remove(prod); _db.SaveChanges(); //執行 Model.admin_log admin_log = new Model.admin_log(); MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb if (admin.isLoign()) { admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Project, (int)Model.admin_log.Status.Delete, prod.subject); } } } [HttpDelete] [Route("api/project/Delete/{nums}")] public void Delete(string nums) { if (!string.IsNullOrEmpty(nums)) { var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)); var prod = _db.projects.AsEnumerable().Where(q => ids.Contains(q.num)).ToList(); if (prod.Count() > 0) { foreach (var item in prod) _db.project_sub.RemoveRange(item.project_sub); //刪除活動資料 _db.projects.RemoveRange(prod); _db.SaveChanges(); Model.admin_log admin_log = new Model.admin_log(); MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb if (admin.isLoign()) { admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Project, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList())); } } } } [HttpDelete] [Route("api/project/DeleteItem/{id}")] public void DeleteDetail(int id) //刪除專案明細 { if (id > 0) { var prod = _db.project_sub.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.project_sub.Remove(prod); _db.SaveChanges(); //執行 } } } [HttpPost] [Route("api/project/GetList")] public IHttpActionResult GetList([FromBody] Model.ViewModel.project q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.projects.AsEnumerable(); if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.subject.Contains(q.subject.Trim())); if (q.kind.HasValue) { var _subKinds = new TreeView().subKinds(_db.project_kind.Select(o => new TreeItem() { num = o.num, root = o.root, }).ToList(), q.kind.Value); qry = qry.Where(o => o.kind == q.kind.Value || _subKinds.Any(s => s == o.kind)); } if (q.actItem_num.HasValue) qry = qry.Where(o => o.actItem_num == q.actItem_num.Value); if (sortBy.Equals("subject")) { if (sortDesc) qry = qry.OrderByDescending(o => o.subject); else qry = qry.OrderBy(o => o.subject); } else if (sortBy.Equals("kind")) { if (sortDesc) qry = qry.OrderByDescending(o => o.kind); else qry = qry.OrderBy(o => o.kind); } else if (sortBy.Equals("actItem_num")) { if (sortDesc) qry = qry.OrderByDescending(o => o.actItem_num); else qry = qry.OrderBy(o => o.actItem_num); } else qry = qry.OrderByDescending(o => o.num); var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { num = x.num, subject = x.subject, kind = x.kind, kindTxt = x.kind.HasValue? x.project_kind.kind :"", kindsTxt = x.kind.HasValue ? new TreeView().kindText(_db.project_kind.Select(o => new TreeItem() { kind = o.kind, num = o.num, root = o.root, }).ToList(), x.kind) : "", actItem_num = x.actItem_num, actItem_Txt = x.actItem_num.HasValue ? x.actItem.subject : "", }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/project/GetKindList")] public IHttpActionResult GetKindList([FromBody] Model.ViewModel.project_kind q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.project_kind.AsEnumerable(); if (!string.IsNullOrEmpty(q.kind)) qry = qry.Where(o => o.kind.Contains(q.kind)); //if (sortBy.Equals("kind")) //{ // if (sortDesc) // qry = qry.OrderByDescending(o => o.kind); // else // qry = qry.OrderBy(o => o.kind); //} //else // qry = qry.OrderBy(o => o.kind); var qry2 = new TreeView().get_data2(qry.Select(o => new TreeItem() { kind = o.kind, num = o.num, root = o.root, range = o.range, }).OrderBy(x => x.root).ThenBy(x => x.kind).ToList(), 0, 0); var ret = new { list = qry2.ToPagedList(page, pageSize).Select(x => new { num = x.num, kind = new TreeView().RptDash(x.Level) + x.kind, }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/project/GetItemList")] public IHttpActionResult GetItemList([FromBody] Model.ViewModel.project q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { if (q.num.HasValue) { var qry = _db.project_sub.AsEnumerable(); qry = qry.Where(o => o.pro_id == q.num.Value); if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.subject.Contains(q.subject.Trim())); qry = qry.OrderByDescending(o => o.num); var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { num = x.num, subject = x.subject, uptime = x.uptime, pic1 = x.pic1, pro_id = x.pro_id, word = x.word, }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } else { return NotFound(); } } [HttpPost] [Route("api/project/SaveDetailData")] public IHttpActionResult SaveDetailData([FromBody] Model.project_sub item) { if (item.pro_id.HasValue) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.project_sub sub = _db.project_sub.Where(q => q.num == item.num).FirstOrDefault();//修改 if (sub != null) { sub.pro_id = item.pro_id; sub.subject = item.subject; sub.word = item.word; sub.pic1 = item.pic1; if (item.uptime.HasValue) { sub.uptime = item.uptime.Value; } _db.SaveChanges(); return Ok(sub.num); } else return NotFound(); } else { Model.project_sub sub = new Model.project_sub();//新增 sub.pro_id = item.pro_id; sub.subject = item.subject; sub.word = item.word; sub.pic1 = item.pic1; if (item.uptime.HasValue ) { sub.uptime = item.uptime.Value; } _db.project_sub.Add(sub); _db.SaveChanges(); return Ok(sub.num); } } else { return NotFound(); } } [HttpPost] [Route("api/project/GetPatronizeList")] public IHttpActionResult GetPatronizeList([FromBody] Model.ViewModel.pro_order_detail q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var projectDt = _db.projects.AsEnumerable(); ;//專案 try { var qry = _db.pro_order_detail.AsEnumerable(); qry = qry.Where(o => (int?)o.actItem.category == (int)Model.activity.category.Patronize); if (q.f_num.HasValue) qry = qry.Where(o => o.f_num == q.f_num.Value); if (q.actItem_num.HasValue) qry = qry.Where(o => o.actItem_num == q.actItem_num.Value); if (!string.IsNullOrEmpty(q.f_num_txt)) qry = qry.Where(o => o.f_num != null && o.follower.u_name.Contains(q.f_num_txt)); if (sortBy.Equals("f_num")) { if (sortDesc) qry = qry.OrderByDescending(o => o.f_num); else qry = qry.OrderBy(o => o.f_num); } else if (sortBy.Equals("actItem_num")) { if (sortDesc) qry = qry.OrderByDescending(o => o.actItem_num); else qry = qry.OrderBy(o => o.actItem_num); } else qry = qry.OrderByDescending(o => o.num); var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { f_num = x.f_num, f_num_Txt = x.f_num.HasValue ? x.follower.u_name : "", actItem_num = x.actItem_num, actItem_Txt = x.actItem_num.HasValue ? x.actItem.subject : "", price = x.price ?? 0, qty = x.qty ?? 0, //projects = projectDt.Where(o => o.actItem_num == x.actItem_num ).Select(o => o.subject), projects = from s in projectDt where s.actItem_num == x.actItem_num select new { subject = s.subject, num = s.num, } }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } catch(Exception ex) { return NotFound(); } } }