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; using System.Data.Entity; // api/activity //[ezAuthorize(Roles = "admin")]//群組:* [ezAuthorize] public class activityController : ApiController { private Model.ezEntities _db = new Model.ezEntities(); // GET api/ [AllowAnonymous] public IEnumerable Get(string startDate = null, string endDate = null) { var qry = _db.activities.AsQueryable(); if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate)) { var date = DateTime.Parse(startDate); qry = qry.Where(x => x.startDate_solar <= date && x.endDate_solar > date); } var list = qry.OrderByDescending(x => x.startDate_solar).ThenByDescending(x => x.num).ToList(); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } public IEnumerable Get(int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { //if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize); var list = _db.activities.OrderBy(o => o.num).ToPagedList(page, pageSize); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } // GET api//5 public Model.activity Get(int id) { var item = _db.activities.Where(q => q.num == id).FirstOrDefault(); //if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound); return item; } // POST api/ public void Post([FromBody] Model.activity item) { } // PUT api//5 public void Put(int id, [FromBody] Model.activity item) { } // DELETE api//5 public void Delete(int id) { var prod = _db.activities.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { //刪除相關資料 var prod2 = _db.activity_relating.AsEnumerable().Where(q => q.activity_num == id).ToList(); //相關項目 if (prod2.Count > 0) { //查詢結果全部刪除 _db.activity_relating.RemoveRange(prod2); } var prod3 = _db.activity_spares.AsEnumerable().Where(q => q.activity_num == id).ToList(); //備品項目 if (prod3.Count > 0) { _db.activity_spares.RemoveRange(prod3); } //訊息、庫存、收支,從資料庫設定null _db.activities.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.Activity, (int)Model.admin_log.Status.Delete, prod.subject); } } } [HttpDelete] [Route("api/activity/DeleteItem/{id}")] public void DeleteItem(int id) { var prod = _db.actItems.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 /*if (prod != null) { //var prod2 = _db.actItem_files.AsEnumerable().Where(q => q.actItem_num == id).ToList(); //相關項目 //if (prod2.Count > 0) //{ // //查詢結果全部刪除 // _db.actItem_files.RemoveRange(prod2); // _db.SaveChanges(); //} _db.actItem_files.RemoveRange(prod.actItem_files); _db.actItems.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.Item, (int)Model.admin_log.Status.Delete, prod.subject); } }*/ if (prod != null) { ////prod.IsDel = true; ////不確定是否新增欄位? 先註解 _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.Item, (int)Model.admin_log.Status.Delete, prod.subject); } } } [HttpDelete] [Route("api/activity/Delete/{nums}")] public void Delete(string nums) { if (!string.IsNullOrEmpty(nums)) { var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)); var prod = _db.activities.AsEnumerable().Where(q => ids.Contains(q.num)).ToList(); if (prod.Count() > 0) { //var prod2 = _db.activity_relating.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.activity_num))).ToList(); var prod2 = _db.activity_relating.AsEnumerable().Where(q => ids.Any(x => x == q.activity_num)).ToList(); if (prod2.Count > 0) { _db.activity_relating.RemoveRange(prod2); // _db.SaveChanges(); } //var prod3 = _db.activity_spares.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.activity_num))).ToList(); var prod3 = _db.activity_spares.AsEnumerable().Where(q => ids.Any(x => x == q.activity_num)).ToList(); if (prod3.Count > 0) { _db.activity_spares.RemoveRange(prod3); //_db.SaveChanges(); } _db.activities.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.Activity, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList())); } } } } [HttpDelete] [Route("api/activity/DeleteAllItem/{nums}")] public void DeleteAllItem(string nums) { if (!string.IsNullOrEmpty(nums)) { var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s)); var prod = _db.actItems.AsEnumerable().Where(q => ids.Contains(q.num)).ToList(); if (prod.Count() > 0) { //var prod2 = _db.actItem_files.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.actItem_num))).ToList(); var prod2 = _db.actItem_files.AsEnumerable().Where(q => ids.Any(x => x == q.actItem_num)).ToList(); if (prod2.Count > 0) { _db.actItem_files.RemoveRange(prod2); //_db.SaveChanges(); } _db.actItems.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.Item, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList())); } } } } [HttpGet] [Route("api/activity/count")] public int Count() { var count = _db.activities.Count(); return count; } [HttpPost] [Route("api/activity/GetList")] public IHttpActionResult GetList([FromBody] Model.ViewModel.activity q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.activities.AsEnumerable(); if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.subject.Contains(q.subject)); if (q.kind.HasValue && q.kind > 0) { var _subKinds = new TreeView().subKinds(_db.activity_kind.Select(o => new TreeItem() { num = o.num, root = o.root, }).ToList(), q.kind.Value); //qry = qry.Where(o => o.kind == q.kind); qry = qry.Where(o => o.kind == q.kind.Value || _subKinds.Any(s => s == o.kind)); } if (!string.IsNullOrEmpty(q.kindTxt)) qry = qry.Where(o => o.activity_kind.kind.Contains(q.kindTxt)); 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("startDate_solar")) { if (sortDesc) qry = qry.OrderByDescending(o => o.startDate_solar); else qry = qry.OrderBy(o => o.startDate_solar); } else if (sortBy.Equals("endDate_solar")) { if (sortDesc) qry = qry.OrderByDescending(o => o.endDate_solar); else qry = qry.OrderBy(o => o.endDate_solar); } else if (sortBy.Equals("dueDate")) { if (sortDesc) qry = qry.OrderByDescending(o => o.dueDate); else qry = qry.OrderBy(o => o.dueDate); } else qry = qry.OrderByDescending(o => o.num); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize > 0) qry = qry.ToPagedList(page, pageSize); var ret = new { list = qry.Select(x => new { num = x.num, subject = x.subject, kind = x.kind, kindTxt = x.kind.HasValue ? x.activity_kind.kind : "", kindsTxt = x.kind.HasValue ? new TreeView().kindText(_db.activity_kind.Select(o => new TreeItem() { kind = o.kind, num = o.num, root = o.root, }).ToList(), x.kind) : "", startDate_solar = x.startDate_solar, endDate_solar = x.endDate_solar, startDate_lunar = x.startDate_lunar, endDate_lunar = x.endDate_lunar, dueDate = x.dueDate, }), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/activity/GetItemList")] public IHttpActionResult GetItemList([FromBody] Model.ViewModel.actItem q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { //var stockDt = _db.stocks.AsEnumerable(); ;//庫存 var fileDt = _db.files.AsEnumerable().Where(f => f.subject.Contains(q.fileTxt)).Select(f => f.num.ToString());//文件 //每個品項在每個倉庫的結餘量 var stockDt = ( from t_min_max in ( from stock in _db.stocks group stock by new { stock.kind, stock.actItem_num } into g select new { g.Key.kind, g.Key.actItem_num, min_id = g.Min(x => x.num), max_id = g.Max(x => x.num) } ) join t_min in _db.stocks on t_min_max.min_id equals t_min.num join t_max in _db.stocks on t_min_max.max_id equals t_max.num into t_maxGroup from t_max in t_maxGroup.DefaultIfEmpty() select new { t_min_max.kind, t_min_max.actItem_num, final_last = t_min_max.min_id != t_min_max.max_id ? t_max.final_stock ?? 0 : t_min.final_stock ?? 0, rent_last = t_min_max.min_id != t_min_max.max_id ? t_max.rent_stock ?? 0 : t_min.rent_stock ?? 0 } ).ToList(); ////var qry = _db.actItems.Where(a => a.IsDel == false).AsEnumerable();////不確定是否新增欄位? 先註解 var qry = _db.actItems.AsEnumerable(); if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.subject.Contains(q.subject.Trim())); if (q.kind.HasValue && q.kind.Value > 0) { var _subKinds = new TreeView().subKinds(_db.actItem_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 (!string.IsNullOrEmpty(q.kindTxt)) qry = qry.Where(o => o.actItem_kind?.kind != null && o.actItem_kind.kind.Contains(q.kindTxt)); if (q.category.HasValue && q.category.Value > 0) qry = qry.Where(o => o.category == q.category.Value); if (!string.IsNullOrEmpty(q.categorys)) qry = qry.Where(o => q.categorys.Contains(o.category.HasValue ? o.category.Value.ToString() : "0")); if (!string.IsNullOrEmpty(q.status)) qry = qry.Where(o => o.status.Contains(q.status)); if (!string.IsNullOrEmpty(q.extend)) qry = qry.Where(o => o.extend == q.extend); if (!string.IsNullOrEmpty(q.fileTxt)) qry = qry.Where(o => o.actItem_files.Where(f2 => f2.actItem_num == o.num && fileDt.ToArray().Contains(f2.files_num.ToString())).Count() > 0); //qry = qry.Where(o => o.actItem_files.Where(f2 => f2.actItem_num == o.num && f2.files_num.ToString().Contains( String.Join(",", fileDt.Select(p => p.ToString()).ToArray()) )).Count() >0 ) ; 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("price")) { if (sortDesc) qry = qry.OrderByDescending(o => o.price); else qry = qry.OrderBy(o => o.price); } else if (sortBy.Equals("status")) { if (sortDesc) qry = qry.OrderByDescending(o => o.status); else qry = qry.OrderBy(o => o.status); } else qry = qry.OrderByDescending(o => o.num); var tdesc = publicFun.enum_desc(); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize > 0) qry = qry.ToPagedList(page, pageSize); var ret = new { list = qry.Select(x => new { num = x.num, subject = x.subject, kind = x.kind, kindTxt = x.kind.HasValue ? x.actItem_kind.kind : "", kindsTxt = x.kind.HasValue ? new TreeView().kindText(_db.actItem_kind.Select(o => new TreeItem() { kind = o.kind, num = o.num, root = o.root, }).ToList(), x.kind) : "", category = x.category, categoryTxt = x.category != null ? tdesc[x.category ?? 1] : "", price = x.price, status = x.status, //stock = new //{ // //cate1Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Purchase).Select(o => o.qty).Sum(), // //cate2Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Reduce).Select(o => o.qty).Sum(), // //cate3Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum(), // //cate4Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum(), // catePQty= (x.stocks.Where(o => o.category == (int)Model.stock.type.Purchase || o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum()??0) -(x.stocks.Where(o => o.category == (int)Model.stock.type.Reduce || o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum()??0) , // cateRQty= (x.stocks.Where(o => o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum()??0 ) - (x.stocks.Where(o => o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum()??0) , //}, final_stock = stockDt.Where(o => o.actItem_num == x.num).Select(o => o.final_last).Sum(), rent_stock = stockDt.Where(o => o.actItem_num == x.num).Select(o => o.rent_last).Sum(), }), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/activity/GetItemBomList")] public IHttpActionResult GetItemBomList([FromBody] Model.act_bom q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int? this_id = q.item_num; // 先找到父層 var parent = _db.act_bom.FirstOrDefault(w => w.package_num == null && w.item_num == this_id); if (parent == null) { return Ok(new { list = new List(), count = 0 }); } // 只抓父層下的直接子項目,且只帶必要欄位 var qlist = _db.act_bom .Where(w => w.package_num == parent.num) .Select(b => new { b.num, b.package_num, b.item_num, b.qty, b.memo, b.optional, actItem = new { num = b.actItem.num, subject = b.actItem.subject } }) .ToList(); var ret = new { list = qlist, count = qlist.Count }; return Ok(ret); } [HttpPost] [Route("api/activity/SaveDetailBomList")] public IHttpActionResult SaveDetailBomList([FromBody] Model.act_bom item) { if (item.item_num > 0) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.act_bom act_bom = _db.act_bom .Where(q => q.num == item.num).FirstOrDefault();//修改 if (act_bom != null) { if (item.package_num > 0) { act_bom.package_num = item.package_num; } if (item.item_num > 0) { act_bom.item_num = item.item_num; } act_bom.qty = item.qty; act_bom.memo = item.memo; ////SAVE OTHER COLUMNS //_files.reg_time = DateTime.Now; _db.SaveChanges(); var ret = act_bom.num; return Ok(ret); } else return NotFound(); } else { _db.act_bom.Add(item); _db.SaveChanges(); var ret = item.num; return Ok(ret); } } else { return NotFound(); } return NotFound(); } [HttpPost] [Route("api/activity/GetOrderList")] public IHttpActionResult GetOrderList([FromBody] Model.ViewModel.activity q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int _activity_id = q.num.HasValue && q.num.Value > 0 ? q.num.Value : 0; //var relatingDt = _db.activity_relating.AsEnumerable().Where(o => o.activity_num == _activity_id); //活動的相關項目 //if (_activity_id > 0) //{ // //有選活動 // var qry = _db.activity_relating.AsEnumerable().Where(o => o.activity_num== _activity_id); // qry =qry.Where(o => o.actItem.status == "Y"); //狀態啟用 // if (!string.IsNullOrEmpty(q.subject)) // qry = qry.Where(o => o.actItem.subject.Contains(q.subject)); // if (!string.IsNullOrEmpty(q.kindTxt)) // qry = qry.Where(o => o.actItem.actItem_kind.kind.Contains(q.kindTxt)); // qry = qry.OrderByDescending(o => o.num); // var ret = new // { // list = qry.ToPagedList(page, pageSize).Select(x => new // { // num = x.actItem_num, // subject = x.actItem.subject, // kind = x.actItem.kind, // kindTxt = x.actItem.actItem_kind.kind, // }), // count = qry.Count() // }; // if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); // return Ok(ret); //} //else { //抓 所有品項 ////var qry = _db.actItems.Where(a => a.IsDel == false).AsQueryable();////不確定是否新增欄位? 先註解 var qry = _db.actItems.AsQueryable(); //qry = qry.Where(o => o.status == "Y"); //狀態啟用 if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.subject.Contains(q.subject)); if (!string.IsNullOrEmpty(q.kindTxt)) qry = qry.Where(o => o.actItem_kind.kind.Contains(q.kindTxt)); if (!string.IsNullOrEmpty(q.is_reconcile)) qry = qry.Where(o => o.is_reconcile == q.is_reconcile); qry = qry.Where(o => "1,2,4".Contains(o.category.HasValue ? o.category.Value.ToString() : "0")); //報名,掛單,贊助 qry = qry.OrderByDescending(o => o.num); var count = qry.Count(); //pageSize = count;//一次取回?? var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList(); var ret = new { list = qryList.Select(x => new { num = x.num, subject = x.subject, kind = x.kind, kindTxt = x.kind.HasValue ? x.actItem_kind.kind : "", category = x.category, //price = (_activity_id > 0) ? (relatingDt.Where(o => o.actItem_num == x.num).Select(o => o.price).FirstOrDefault()?? x.price) : (x.price ) , //預設金額,有活動抓活動預設,沒活動抓品項預設 price = (_activity_id > 0) ? (x.activity_relating.Select(o => o.price).FirstOrDefault() ?? x.price) : (x.price), //預設金額,有活動抓活動預設,沒活動抓品項預設 customize_data = x.customize_data ?? "", files = x.actItem_files.Select(f => new { num = f.file.num, subject = f.file.subject, word = f.file.word, cuz_column = f.file.customize_data ?? "", //定義欄位需求 }), }), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } } [HttpPost] [Route("api/activity/GetItemFiles")] public IHttpActionResult GetItemFiles([FromBody] Model.actItem_files q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int this_id = q.actItem_num; if (this_id > 0) { //檢查 var qry = _db.actItem_files .Where(o => o.actItem_num == this_id); var count = qry.Count(); //pageSize = count;//一次取回?? //if (count==0) throw new HttpResponseException(HttpStatusCode.NotFound); var qry1 = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList(); int i = 1; var list = qry1.Select(x => new { id = i++, num = x.num, actItem_num = x.actItem_num, files_num_selected = new { text = x.file.subject, val = x.files_num, } }).ToList(); //已有值 var ret = new { list = list, count = count, }; return Ok(ret); } else { return NotFound(); } } [HttpPost] [Route("api/activity/SaveDetailData")] public IHttpActionResult SaveDetailData([FromBody] Model.actItem_files item) { if (item.actItem_num > 0) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.actItem_files _files = _db.actItem_files .Where(q => q.num == item.num).FirstOrDefault();//修改 if (_files != null) { if (item.actItem_num > 0) { _files.actItem_num = item.actItem_num; } if (item.files_num > 0) { _files.files_num = item.files_num; } _files.reg_time = DateTime.Now; _db.SaveChanges(); var ret = _files.num; return Ok(ret); } else return NotFound(); } else { Model.actItem_files _files = new Model.actItem_files();//新增 if (item.actItem_num > 0) { _files.actItem_num = item.actItem_num; } if (item.files_num > 0) { _files.files_num = item.files_num; } _files.reg_time = DateTime.Now; _db.actItem_files.Add(_files); _db.SaveChanges(); var ret = _files.num; return Ok(ret); } } else { return NotFound(); } } [HttpDelete] [Route("api/activity/DeleteFilesItem/{id}")]//刪除品項的相關文件 public void DeleteFilesItem(int id) { var prod = _db.actItem_files.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.actItem_files.Remove(prod); _db.SaveChanges(); //執行 } } [HttpPost] [Route("api/activity/GetKindDetail")] public IHttpActionResult GetKindDetail([FromBody] Model.activity_kind_detail q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int this_id = q.activity_kind_num; if (this_id > 0) { //檢查 var qry = _db.activity_kind_detail.AsEnumerable(); qry = qry.Where(o => o.activity_kind_num == this_id); int i = 1; //已有值 var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize > 0) qry = qry.ToPagedList(page, pageSize); var ret = new { list = qry.Select(x => new { id = i++, num = x.num, activity_kind_num = x.activity_kind_num, actItem_num = new { text = x.actItem?.subject, val = x.actItem_num, }, price = x.price ?? 0, qty = x.qty ?? 0, }), count = count, }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } else { return NotFound(); } } [HttpPost] [Route("api/activity/SaveActKindDetail")] public IHttpActionResult SaveActKindDetail([FromBody] Model.activity_kind_detail item) { if (item.activity_kind_num > 0) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.activity_kind_detail _detail = _db.activity_kind_detail.Where(q => q.num == item.num).FirstOrDefault();//修改 if (_detail != null) { if (item.activity_kind_num > 0) { _detail.activity_kind_num = item.activity_kind_num; } if (item.actItem_num > 0) { _detail.actItem_num = item.actItem_num; } if (item.price.HasValue) { _detail.price = item.price.Value; } else { _detail.price = null; } if (item.qty.HasValue) { _detail.qty = item.qty.Value; } else { _detail.qty = null; } _detail.reg_time = DateTime.Now; _db.SaveChanges(); var ret = _detail.num; return Ok(ret); } else return NotFound(); } else { Model.activity_kind_detail _detail = new Model.activity_kind_detail();//新增 if (item.activity_kind_num > 0) { _detail.activity_kind_num = item.activity_kind_num; } if (item.actItem_num > 0) { _detail.actItem_num = item.actItem_num; } if (item.price.HasValue) { _detail.price = item.price.Value; } else { _detail.price = null; } if (item.qty.HasValue) { _detail.qty = item.qty.Value; } else { _detail.qty = null; } _detail.reg_time = DateTime.Now; _db.activity_kind_detail.Add(_detail); _db.SaveChanges(); var ret = _detail.num; return Ok(ret); } } else { return NotFound(); } } [HttpDelete] [Route("api/activity/DeleteActKindDetail/{id}")]//刪除活動分類的detail public void DeleteActKindDetail(int id) { var prod = _db.activity_kind_detail.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.activity_kind_detail.Remove(prod); _db.SaveChanges(); //執行 } } [HttpPost] [Route("api/activity/GetActRelaList")] public IHttpActionResult GetActRelaList([FromBody] Model.activity q, int page, int pageSize = 100, string sortBy = "", bool sortDesc = false) { //if pagesize==-1 get all data int this_act_id = q.num; if (this_act_id > 0) { //檢查 var prod = _db.activities.AsEnumerable().Where(o => o.num == this_act_id).FirstOrDefault(); if (prod != null) { int kind = prod.kind ?? 0; //分類 var qry = _db.activity_relating.AsQueryable(); qry = qry.Where(o => o.activity_num == this_act_id); qry = qry.OrderBy(o => o.num); //IEnumerable qry1=qry.AsEnumerable(); IEnumerable qry1 = null; //var retD = qry1; var count = qry.Count(); //pageSize = count;//一次取回?? if (count > 0) { int i = 1; //已有值 if (pageSize > 0) { qry1 = qry.ToPagedList(page, pageSize); } else { qry1 = qry.ToList(); } var orderDetails = _db.pro_order_detail .Where(o => o.pro_order.activity_num == this_act_id) .ToList(); var ret = new { //list = qry1.ToPagedList(page, pageSize).Select(x => new list = qry1.Select(x => new { id = i++, num = x.num, activity_num = x.activity_num, act_item_selected = new { text = x.actItem?.subject, val = x.actItem_num, }, price = x.price ?? 0, qty = x.qty ?? 0, files = x.actItem?.actItem_files.Select(f => new { num = f.file.num, subject = f.file.subject, list = orderDetails .Where(o => o.actItem_num == x.actItem_num) .OrderBy(o => o.print_id) .ThenBy(o => o.num) .Select(o => new { num = o.num, print_id = o.print_id, order_no = o.order_no, from_id = o.follower1?.u_name, printed_files = o.printed_files, isPrinted = (o.printed_files ?? "").Contains("\"" + f.file.num.ToString() + "\""), }), }), }), count = count, }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } else { //未有資料 //帶分類預設 if (kind > 0) { int i = 1; var qry2 = _db.activity_kind_detail.AsEnumerable(); qry2 = qry2.Where(o => o.activity_kind_num == kind); var count2 = qry2.Count(); //pageSize = count2;//一次取回?? if (pageSize > 0) qry2 = qry2.ToPagedList(page, pageSize); var ret = new { list = qry2.Select(x => new { id = i++, num = 0, activity_num = this_act_id, act_item_selected = new { text = x.actItem?.subject, val = x.actItem_num, }, price = x.price ?? 0, qty = x.qty ?? 0, files = new { num = "", subject = "", list = new { num = "", from_id = "", printed_files = "", isPrinted = false, }, }, }), count = count2 }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } else { return NotFound(); } } } else { return NotFound(); } } else { return NotFound(); } } [HttpPost] [Route("api/activity/GetKindList")] public IHttpActionResult GetKindList([FromBody] Model.ViewModel.activity_kind q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.activity_kind.AsEnumerable(); if (q.num.HasValue && q.num > 0) qry = qry.Where(o => o.num == q.num); if (!string.IsNullOrEmpty(q.kind)) qry = qry.Where(o => o.kind != null && o.kind.Contains(q.kind)); //qry = qry.OrderBy(O => O.kind).ThenBy(o => o.num); 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 count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize <= 0) pageSize = count; var ret = new { list = qry2.ToPagedList(page, pageSize).Select(x => new { num = x.num, kind = new TreeView().RptDash(x.Level) + x.kind, }), count = count }; return Ok(ret); } [HttpGet] [Route("api/activity/GetKindDate/{id}")] public IHttpActionResult GetKindDate(int id) { if (id > 0) { var qry = _db.activity_kind.AsEnumerable(); qry = qry.Where(o => o.num == id); var prop3 = qry.FirstOrDefault(); if (prop3 != null) { System.Globalization.ChineseLunisolarCalendar chineseDate = new System.Globalization.ChineseLunisolarCalendar(); string _calendar = prop3.calendar; DateTime _today = DateTime.Now; string _startDate_solar = ""; string _endDate_solar = ""; string _startDate_lunar = ""; string _endDate_lunar = ""; if (_calendar == "國曆") { DateTime _newDay = Convert.ToDateTime(DateTime.Now.Year + "/" + prop3.month + "/" + prop3.day); if (_today.Month >= prop3.month && _today.Day >= prop3.day) { //過期->預設明年 _newDay = Convert.ToDateTime(DateTime.Now.AddYears(1).Year + "/" + prop3.month + "/" + prop3.day); } else { //未過期->預設今年 } _startDate_solar = _newDay.ToString("yyyy-MM-dd"); _endDate_solar = _newDay.ToString("yyyy-MM-dd"); DateTime _newDay2 = Convert.ToDateTime(chineseDate.GetYear(_newDay) + "/" + chineseDate.GetMonth(_newDay) + "/" + chineseDate.GetDayOfMonth(_newDay)); _startDate_lunar = _newDay2.ToString("yyyy-MM-dd"); _endDate_lunar = _newDay2.ToString("yyyy-MM-dd"); //TaiwanLunisolarCalendar tlc = new TaiwanLunisolarCalendar(); //DateTime _newDay3 = Convert.ToDateTime(tlc.GetYear(_newDay) + "/" + tlc.GetMonth(_newDay) + "/" + tlc.GetDayOfMonth(_newDay)); // -> TaiwanLunisolarCalendar 民國年農曆 } else { } var ret = new { startDate_solar = _startDate_solar, endDate_solar = _endDate_solar, startDate_lunar = _startDate_lunar, endDate_lunar = _endDate_lunar, }; return Ok(ret); } else return NotFound(); } else return NotFound(); } [HttpPost] [Route("api/activity/SaveRelatingData")] public IHttpActionResult SaveRelatingData([FromBody] Model.activity_relating item) { if (item.activity_num > 0) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.activity_relating _data = _db.activity_relating.Where(q => q.num == item.num).FirstOrDefault();//修改 if (_data != null) { if (item.activity_num > 0) { _data.activity_num = item.activity_num; } if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; } if (item.price.HasValue) { _data.price = item.price.Value; } else { _data.price = null; } if (item.qty.HasValue) { _data.qty = item.qty.Value; } else { _data.qty = null; } _data.reg_time = DateTime.Now; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } else { Model.activity_relating _data = new Model.activity_relating();//新增 if (item.activity_num > 0) { _data.activity_num = item.activity_num; } if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; } if (item.price.HasValue) { _data.price = item.price.Value; } else { _data.price = null; } if (item.qty.HasValue) { _data.qty = item.qty.Value; } else { _data.qty = null; } _data.reg_time = DateTime.Now; _db.activity_relating.Add(_data); _db.SaveChanges(); var ret = _data.num; return Ok(ret); } } else { return NotFound(); } } [HttpDelete] [Route("api/activity/DeleteRelatingData/{id}")]//刪除活動的相關資料 public void DeleteRelatingData(int id) { var prod = _db.activity_relating.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.activity_relating.Remove(prod); _db.SaveChanges(); //執行 } } [HttpPost] [Route("api/activity/GetActSparesList")] public IHttpActionResult GetActSparesList([FromBody] Model.activity q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int this_act_id = q.num; if (this_act_id > 0) { //檢查 var prod = _db.activities.AsEnumerable().Where(o => o.num == this_act_id).FirstOrDefault(); if (prod != null) { int kind = prod.kind ?? 0; //分類 var qry1 = _db.activity_spares.AsEnumerable(); qry1 = qry1.Where(o => o.activity_num == this_act_id); qry1 = qry1.OrderBy(o => o.num); var count = qry1.Count(); //pageSize = count;//一次取回?? int i = 1; if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize); var ret = new { list = qry1.Select(x => new { id = i++, num = x.num, activity_num = x.activity_num, act_item_selected = new { text = x.actItem?.subject, val = x.actItem_num, }, demo = x.demo, totalqty = (x.actItem.stocks.Where(o => (o.category == (int)Model.stock.type.Purchase || o.category == (int)Model.stock.type.Return)).Select(o => o.qty).Sum() ?? 0) - x.actItem.stocks.Where(o => (o.category == (int)Model.stock.type.Reduce || o.category == (int)Model.stock.type.Rent)).Select(o => o.qty).Sum() ?? 0 }), count = count, }; return Ok(ret); } else { return NotFound(); } } else { return NotFound(); } } [HttpPost] [Route("api/activity/SaveSparesData")] public IHttpActionResult SaveSparesData([FromBody] Model.activity_spares item) { if (item.activity_num > 0) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.activity_spares _data = _db.activity_spares.Where(q => q.num == item.num).FirstOrDefault();//修改 if (_data != null) { if (item.activity_num > 0) { _data.activity_num = item.activity_num; } if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; } _data.demo = item.demo; _data.reg_time = DateTime.Now; _db.SaveChanges(); var ret = _data.num; return Ok(ret); } else return NotFound(); } else { Model.activity_spares _data = new Model.activity_spares();//新增 if (item.activity_num > 0) { _data.activity_num = item.activity_num; } if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; } _data.demo = item.demo; _data.reg_time = DateTime.Now; _db.activity_spares.Add(_data); _db.SaveChanges(); var ret = _data.num; return Ok(ret); } } else { return NotFound(); } } [HttpDelete] [Route("api/activity/DeleteSparesData/{id}")]//刪除活動的備品資料 public void DeleteSparesData(int id) { var prod = _db.activity_spares.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.activity_spares.Remove(prod); _db.SaveChanges(); //執行 } } [HttpPost] [Route("api/activity/OrderCheckIn")] public IHttpActionResult OrderCheckIn([FromBody] Model.activity_check item) { if (item.f_num.HasValue && item.activity_num.HasValue && item.qty.HasValue && item.status.HasValue) { //同一天不能簽到兩次以上 Model.activity_check check = _db.activity_check .Where(q => q.f_num == item.f_num && q.activity_num == item.activity_num && q.status == item.status && (System.Data.Entity.Core.Objects.EntityFunctions.TruncateTime(q.reg_time) == DateTime.Today)) .FirstOrDefault(); if (check == null) { Model.activity_check data = new Model.activity_check();//新增 data.f_num = item.f_num; data.activity_num = item.activity_num; data.qty = item.qty; data.status = item.status; data.reg_time = DateTime.Now; _db.activity_check.Add(data); _db.SaveChanges(); var ret = data.num; return Ok(ret); } else return NotFound(); } else return NotFound(); } [HttpPost] [Route("api/activity/GetCheckList")] public IHttpActionResult GetCheckList([FromBody] Model.ViewModel.activity_check q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.activity_check.AsEnumerable(); if (!string.IsNullOrEmpty(q.activityTxt)) qry = qry.Where(o => o.activity.subject.Contains(q.activityTxt.Trim())); if (q.status.HasValue && q.status.Value > 0) qry = qry.Where(o => o.status == q.status.Value); if (q.reg_time1.HasValue) qry = qry.Where(o => o.reg_time >= q.reg_time1.Value); if (q.reg_time2.HasValue) qry = qry.Where(o => o.reg_time < Convert.ToDateTime(q.reg_time2.Value).AddDays(1)); if (q.activity_num.HasValue && q.activity_num > 0) qry = qry.Where(o => o.activity_num == q.activity_num); if (q.check_time.HasValue) qry = qry.Where(o => o.reg_time.Value.Date == q.check_time.Value.Date); if (sortBy.Equals("subject")) { if (sortDesc) qry = qry.OrderByDescending(o => o.activity_num); else qry = qry.OrderBy(o => o.activity_num); } else if (sortBy.Equals("statusTxt")) { if (sortDesc) qry = qry.OrderByDescending(o => o.status); else qry = qry.OrderBy(o => o.status); } else if (sortBy.Equals("qty")) { if (sortDesc) qry = qry.OrderByDescending(o => o.f_num).ThenBy(o => o.qty); else qry = qry.OrderBy(o => o.f_num).ThenBy(o => o.qty); } else if (sortBy.Equals("reg_time_date")) { if (sortDesc) qry = qry.OrderByDescending(o => o.reg_time); else qry = qry.OrderBy(o => o.reg_time); } else if (sortBy.Equals("reg_time_time")) { if (sortDesc) qry = qry.OrderByDescending(o => o.reg_time.Value.TimeOfDay); else qry = qry.OrderBy(o => o.reg_time.Value.TimeOfDay); } else qry = qry.OrderByDescending(o => o.num); var tdesc = publicFun.enum_desc(); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize > 0) qry = qry.ToPagedList(page, pageSize); var ret = new { list = qry.Select(x => new { num = x.num, subject = x.activity?.subject, status = x.status, statusTxt = x.status != null ? tdesc[x.status ?? 1] : "", qty = x.qty, //u_name = x.f_num.HasValue? x.follower.u_name :"", u_name = x.follower?.u_name, //reg_timeDate = x.reg_time?.Date, reg_time = x.reg_time, }), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpDelete] [Route("api/activity/DeleteCheck/{id}")] public void DeleteCheck(int id) { var prod = _db.activity_check.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.activity_check.Remove(prod); _db.SaveChanges(); //執行 } } [HttpDelete] [Route("api/activity/DeleteAllCheck/{nums}")] public void DeleteAllCheck(string nums) { if (!string.IsNullOrEmpty(nums)) { string[] num = nums.Split(','); int[] ids = new int[num.Length]; for (int i = 0; i < num.Length; i++) { if (!string.IsNullOrEmpty(num[i])) ids[i] = Convert.ToInt32(num[i]); } var prod = _db.activity_check.AsEnumerable().Where(q => ids.Contains(q.num)).ToList(); if (prod.Count() > 0) { _db.activity_check.RemoveRange(prod); _db.SaveChanges(); } } } [HttpPost] [Route("api/activity/GetActivityBoard")] public IHttpActionResult GetActivityBoard([FromBody] Model.ViewModel.activity_check q) { DateTime _now = DateTime.Now; var qry = _db.activities.AsEnumerable(); if (q.reg_time1.HasValue) qry = qry.Where(o => o.reg_time >= q.reg_time1.Value); if (q.reg_time2.HasValue) qry = qry.Where(o => o.reg_time < Convert.ToDateTime(q.reg_time2.Value).AddDays(1)); qry = qry.Where(o => (_now >= o.startDate_solar && _now < o.endDate_lunar) || (_now < o.startDate_solar && o.dueDate?.Date.CompareTo(_now) <= 180)); qry = qry.OrderByDescending(o => o.num); qry = qry.Take(10); var tdesc = publicFun.enum_desc(); var r1 = qry.ToList(); var r2 = r1.Select(x => new { num = x.num, subject = x.subject }); var count = qry.Count(); var ret = new { list = qry.ToList().Select(x => new { num = x.num, subject = x.subject, startDate_solar = x.startDate_solar, endDate_solar = x.endDate_solar, startDate_lunar = x.startDate_lunar, endDate_lunar = x.endDate_lunar, order_qty = x.pro_order.Count(), check_qty_yest = x.activity_check.Where(c => _now.Date.CompareTo(c.reg_time?.Date) == 1).Count(), check_qty_today = x.activity_check.Where(c => _now.Date.CompareTo(c.reg_time?.Date) == 0).Count(), status = (_now >= x.startDate_solar && _now < x.endDate_lunar) ? "進行中" : ((_now < x.startDate_solar && x.dueDate?.Date.CompareTo(_now) <= 180) ? "報名中" : "") //進行中: 活動日期​已開始,未結束​ ; 報名中: 未開始,報名未截止​近半年(?)的活動​ }), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/activity/GetCategoryKindList")] public IHttpActionResult GetCategoryKindList([FromBody] Model.ViewModel.activity_category_kind q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.activity_category_kind.AsEnumerable(); if (q.num.HasValue && q.num > 0) qry = qry.Where(o => o.num == q.num); if (!string.IsNullOrEmpty(q.kind)) qry = qry.Where(o => o.kind != null && o.kind.Contains(q.kind)); qry = qry.OrderBy(O => O.kind).ThenBy(o => o.num); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize > 0) qry = qry.ToPagedList(page, pageSize); var ret = new { list = qry.Select(x => new { num = x.num, kind = x.kind, }), count = count }; return Ok(ret); } }