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 Model; using System.IdentityModel.Metadata; // api/apporder //[ezAuthorize(Roles = "admin")]//群組:* //[ezAuthorize] public class apporderController : ApiController { private Model.ezEntities _db = new Model.ezEntities(); // GET api/ public IEnumerable Get() { var list = _db.pro_order.ToList(); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } public IEnumerable Get(int page, int pageSize = 10, string sortBy="", bool sortDesc=false) { var list = _db.pro_order.OrderBy(o=>o.order_no).ToPagedList(page, pageSize); if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return list; } // GET api//5 public Model.pro_order Get(string id) { var item = _db.pro_order.Where(q => q.order_no == id).FirstOrDefault(); //if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound); return item; } // POST api/ public void Post([FromBody] Model.pro_order item) { } // PUT api//5 public void Put(int id, [FromBody] Model.pro_order item) { } // DELETE api//5 public void Delete(string id) { var prod = _db.pro_order.AsEnumerable().Where(q => q.order_no == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { //刪除掛單表單 var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == id).ToList(); if (prod3.Count > 0) { //刪除掛單明細 foreach (var item3 in prod3) { var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList(); if (prod4.Count > 0) { _db.bed_order_detail.RemoveRange(prod4); //查詢結果全部刪除 } } _db.bed_order.RemoveRange(prod3); //查詢結果全部刪除 } _db.pro_order_detail.RemoveRange(prod.pro_order_detail); _db.pro_order.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.Order, (int)Model.admin_log.Status.Delete, prod.order_no); } } } [HttpDelete] [Route("api/apporder/DeleteItem/{id}")] public void DeleteDetail(int id) //刪除訂單明細 { if (id > 0) { var prod = _db.pro_order_detail.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { //刪除掛單表單 var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == prod.order_no).ToList(); if (prod3.Count > 0) //count = 1 { //刪除掛單明細 foreach (var item3 in prod3) { var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList(); if (prod4.Count > 0) { _db.bed_order_detail.RemoveRange(prod4); //查詢結果全部刪除 } } _db.bed_order.RemoveRange(prod3); //查詢結果全部刪除 } _db.pro_order_detail.Remove(prod); _db.SaveChanges(); //執行 } } } [HttpDelete] [Route("api/apporder/DeleteAll/{nums}")] public void DeleteAll(string nums) { if (!string.IsNullOrEmpty(nums)) { var ids = nums.TrimEnd(',').Split(','); var prod = _db.pro_order.AsEnumerable().Where(q => ids.Contains(q.order_no)).ToList(); if (prod.Count() > 0) { var prod2 = _db.pro_order_detail.AsEnumerable().Where(q => ids.Contains(Convert.ToString(q.order_no))).ToList(); if (prod2.Count > 0) { foreach (var item2 in prod2) { var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == item2.order_no && q.o_detail_id == item2.num).ToList(); if (prod3.Count > 0) { foreach (var item3 in prod3) { var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList(); if (prod4.Count > 0) { _db.bed_order_detail.RemoveRange(prod4); } } _db.bed_order.RemoveRange(prod3); } //var prod32 = _db.bed_order.AsEnumerable().Where(q => q.order_no == item2.order_no && q.o_detail_id == item2.num).ToList(); //var prod42 = _db.bed_order_detail.AsEnumerable().Where(q => prod32.Select(qf => qf.order_no).ToArray().Contains(q.bed_order_no)).ToList(); //_db.bed_order_detail.RemoveRange(prod42); //_db.bed_order.RemoveRange(prod32); } _db.pro_order_detail.RemoveRange(prod2); //_db.SaveChanges(); } _db.pro_order.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.Order, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.order_no).ToList())); } } } } [HttpGet] [Route("api/apporder/count")] public int Count() { var count = _db.pro_order.Count(); return count; } [HttpPost] [Route("api/apporder/GetList")] public IHttpActionResult GetList([FromBody] Model.ViewModel.pro_order q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry = _db.pro_order.AsEnumerable(); //var aIDt = _db.actItems.AsEnumerable().Where(f => f.subject.Contains(q.actItemTxt.Trim())).Select(f => f.num);//品項 if (!string.IsNullOrEmpty(q.order_no)) qry = qry.Where(o => o.order_no.Contains(q.order_no.Trim())); if (!string.IsNullOrEmpty(q.keyin1)) qry = qry.Where(o => o.keyin1.Contains(q.keyin1)); if (q.f_num.HasValue && q.f_num > 0) qry = qry.Where(o => o.f_num == q.f_num); if (q.activity_num.HasValue && q.activity_num > 0) qry = qry.Where(o => o.activity_num == q.activity_num); if (q.up_time1.HasValue) qry = qry.Where(o => o.up_time >= q.up_time1.Value); if (q.up_time2.HasValue) qry = qry.Where(o => o.up_time < Convert.ToDateTime(q.up_time2.Value).AddDays(1)); if (!string.IsNullOrEmpty(q.address)) qry = qry.Where(o => o.address.Contains(q.address.Trim())); if (!string.IsNullOrEmpty(q.subject)) qry = qry.Where(o => o.activity_num.HasValue && o.activity.subject.Contains(q.subject?.Trim())); if (!string.IsNullOrEmpty(q.u_name)) qry = qry.Where(o => o.f_num.HasValue && o.follower.u_name.Contains(q.u_name?.Trim())); if (!string.IsNullOrEmpty(q.introducerTxt)) qry = qry.Where(o => o.introducer.HasValue && o.follower1.u_name.Contains(q.introducerTxt?.Trim())); if (!string.IsNullOrEmpty(q.actItemTxt)) { //qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.order_no == o.order_no && aIDt.ToArray().Contains(f2.actItem_num?.ToString())).Count() > 0); // qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.order_no == o.order_no && aIDt.Any(x => x == f2.actItem_num)).Count() > 0); qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.actItem_num.HasValue && f2.actItem.subject.Contains(q.actItemTxt?.Trim())).Count() > 0); } if (!string.IsNullOrEmpty(q.country)) qry = qry.Where(o => o.f_num != null && o.follower?.country == q.country); if (!string.IsNullOrEmpty(q.country2)) { if (q.country2 == "1") { qry = qry.Where(o => o.f_num != null && o.follower?.country == "158"); } else if (q.country2 == "2") { qry = qry.Where(o => o.f_num != null && o.follower?.country != "158"); } } if (sortBy.Equals("order_no")) { if (sortDesc) qry = qry.OrderByDescending(o => o.order_no); else qry = qry.OrderBy(o => o.order_no); } else if (sortBy.Equals("keyin1_txt")) { if (sortDesc) qry = qry.OrderByDescending(o => o.keyin1); else qry = qry.OrderBy(o => o.keyin1); } else if (sortBy.Equals("up_time")) { if (sortDesc) qry = qry.OrderByDescending(o => o.up_time); else qry = qry.OrderBy(o => o.up_time); } else if (sortBy.Equals("u_name")) { if (sortDesc) qry = qry.OrderByDescending(o => o.follower?.u_name); else qry = qry.OrderBy(o => o.follower?.u_name); } else if (sortBy.Equals("subject")) { if (sortDesc) qry = qry.OrderByDescending(o => o.activity?.subject); else qry = qry.OrderBy(o => o.activity?.subject); } else qry = qry.OrderByDescending(o => o.reg_time); var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { order_no = x.order_no, f_num = x.f_num, u_name = x.f_num.HasValue? x.follower.u_name:"", activity_num = x.activity_num, subject = x.activity_num.HasValue? x.activity.subject:"", keyin1 = x.keyin1, up_time = x.up_time, keyin1_txt =Model.pro_order.keyin1_value_to_text(x.keyin1), }), count = qry.Count() }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/apporder/GetItemList")] public IHttpActionResult GetItemList([FromBody] Model.ViewModel.pro_order_detail q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { string order_no = q.order_no; if (!string.IsNullOrEmpty( order_no )) { //檢查 var prod = _db.pro_order.AsEnumerable().Where(o => o.order_no == order_no).FirstOrDefault(); if (prod != null) { int activity = prod.activity_num.HasValue ? prod.activity_num.Value : 0; //活動 var bedDt = _db.bed_order_detail.AsEnumerable().Where(b=>b.bed_order.order_no== order_no ); ;//掛單明細 //var qry1 = _db.pro_order_detail.AsEnumerable(); //qry1 = qry1.Where(o => o.order_no == order_no); var qry1 = prod.pro_order_detail.AsEnumerable(); //if (!string.IsNullOrEmpty(q.subject)) // qry = qry.Where(o => o.subject.Contains(q.subject)); if (q.actItem_kind_num.HasValue) { //項目分類 var _subKinds = new TreeView().subKinds(_db.actItem_kind.Select(o => new TreeItem() { num = o.num, root = o.root, }).ToList(), q.actItem_kind_num.Value); qry1 = qry1.Where(o => o.actItem.kind == q.actItem_kind_num || _subKinds.Any(s => s == o.actItem.kind)); } if (sortBy.Equals("subject")) { if (sortDesc) qry1 = qry1.OrderByDescending(o => o.actItem.subject); else qry1 = qry1.OrderBy(o => o.actItem.subject); } else qry1 = qry1.OrderByDescending(o => o.num); var tdesc = publicFun.enum_desc(); int i = 1; //已有值 if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize); var ret = new { list = qry1.Select(x => new { id = i++, num = x.num, order_no = x.order_no, actitem_num_selected = new { text = x.actItem_num.HasValue ? x.actItem.subject : "", val = x.actItem_num.HasValue ? x.actItem_num.Value : 0, }, f_num_selected = new { text = x.f_num.HasValue ? x.follower.u_name : "", val = x.f_num.HasValue ? x.f_num.Value : 0, }, f_num_tablet = x.f_num_tablet, address = x.address, due_date = x.due_date, start_date = x.start_date, extend_date = x.extend_date, from_id_selected = new { text = x.from_id.HasValue ? x.follower1.u_name : "", val = x.from_id.HasValue ? x.from_id : 0, }, from_id_tablet = x.from_id_tablet, price = x.price ?? 0, qty = x.qty ?? 0, writeBedQty = bedDt.Where(b=>b.bed_order.o_detail_id.Value== x.num && b.checkIn_date.HasValue && b.bed_kind_detail_id.HasValue).Count(), //已劃數量 notBedQty = bedDt.Where(b=>b.bed_order.o_detail_id.Value== x.num &&( !b.checkIn_date.HasValue || !b.bed_kind_detail_id.HasValue)).Count(), //未劃數量 //total = x.total.HasValue ? x.total.Value : 0, category = x.actItem?.category, //pay = x.pay ?? 0, pay = x.pro_order_record.Select(c => c.price).Sum(), pay_date = x.pay_date, keyin1_selected = new { text = tdesc[x.keyin1.HasValue && x.keyin1.Value>0 ? x.keyin1.Value : 1], val = x.keyin1, }, demo = x.demo, files = x.actItem?.actItem_files.Select(f => new { num = f.file.num, subject = f.file.subject, word = f.file.word, cuz_column = f.file.customize_data??"", //?? paperset = f.file.paperset ?? "", }), customize_data =x.customize_data??"", customize_data_comb = new { from_id_cuz_data = "", activity_cuz_data = "", actitem_cuz_data = "", order_cuz_data = "", }, printed_files = x.printed_files ?? "", //cash_record = x.pro_order_record.Select( c => new { // c, // //pay_kind = tdesc2[c.payment.HasValue && x.keyin1.Value > 0 ? x.keyin1.Value : 1], //}), }), count = qry1.Count(), }; if (prod.pro_order_detail.Count()==0) { //未有資料 //帶活動預設 if (activity > 0) { i = 1; var qry2 = _db.activity_relating.AsEnumerable(); qry2 = qry2.Where(o => o.activity_num == activity); if (q.actItem_kind_num.HasValue) { //項目分類 var _subKinds = new TreeView().subKinds(_db.actItem_kind.Select(o => new TreeItem() { num = o.num, root = o.root, }).ToList(), q.actItem_kind_num.Value); qry2 = qry2.Where(o => o.actItem.kind == q.actItem_kind_num || _subKinds.Any(s => s == o.actItem.kind)); } var ret2 = new { list = qry2.ToPagedList(page, pageSize).Select(x => new { id = i++, num = 0, //? order_no = order_no, // ? actitem_num_selected = new { text = x.actItem.subject, val = x.actItem_num, }, f_num_selected = new { text = "", val = 0, }, address = "", due_date = DateTime.Today.AddMonths(x.actItem.cycle ?? 0).ToString("yyyy-MM-dd"), // 期滿日期:依據 項目維護 所設定的 收費週期 計算後帶入日期 start_date = DateTime.Today.ToString("yyyy-MM-dd"), //預設今天 extend_date = (x.actItem.extend ?? "").Equals("Y") ? DateTime.Today.AddMonths(x.actItem.cycle ?? 0).ToString("yyyy-MM-dd") : "", //應續約日:預設的日期值與期滿日期相同(項目是"續約項目"者) from_id_selected = new { text = prod.f_num.HasValue ? prod.follower.u_name : "", //預設帶報名者 val = prod.f_num.HasValue ? prod.f_num.Value : 0, }, price = x.price ?? 0, qty = x.qty ?? 0, writeBedQty =0, notBedQty = 0, //total = x.price.HasValue && x.qty.HasValue ? Convert.ToDouble(x.price.Value) * Convert.ToInt32(x.qty.Value) :0, category = x.actItem?.category, pay = 0, pay_date = "", keyin1_selected = new { text = tdesc[1], val = 1, }, demo = "", files =x.actItem?.actItem_files.Select(f => new { num = f.file.num, subject = f.file.subject, word = f.file.word, cuz_column = f.file.customize_data??"", //定義欄位需求 paperset = f.file.paperset ?? "", }) , customize_data = "", customize_data_comb = new { from_id_cuz_data = prod.f_num.HasValue ? prod.follower.customize_data??"" : "", activity_cuz_data = prod.activity_num.HasValue ? prod.activity.customize_data??"" : "", actitem_cuz_data = x.actItem.customize_data, order_cuz_data = prod.customize_data, }, printed_files ="", //cash_record = new { }, }), count = qry2.Count() }; if (ret2.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret2); } else { //不須帶預設資料,自行新增項目 return Ok(); } } else return Ok(ret); } else { return NotFound(); } } else { return NotFound(); } } [HttpPost] [Route("api/apporder/SaveDetailData")] public IHttpActionResult SaveDetailData([FromBody] Model.pro_order_detail item) { if (!string.IsNullOrEmpty(item.order_no)) { //if有資料-修改 , else 新增 if (item.num > 0) { Model.pro_order_detail order = _db.pro_order_detail.Where(q => q.num == item.num).FirstOrDefault();//修改 if (order != null) { if (item.actItem_num.HasValue && item.actItem_num.Value > 0) { order.actItem_num = item.actItem_num.Value; } else { order.actItem_num = null; } if (item.f_num.HasValue && item.f_num.Value > 0) { order.f_num = item.f_num.Value; } else { order.f_num = null; } if (item.from_id.HasValue && item.from_id.Value > 0) { order.from_id = item.from_id.Value; } else { order.from_id = null; } order.f_num_tablet = item.f_num_tablet; order.from_id_tablet = item.from_id_tablet; order.address = item.address; if (item.start_date.HasValue) { order.start_date = item.start_date.Value; } else { order.start_date = null; } if (item.due_date.HasValue) { order.due_date = item.due_date.Value; } else { order.due_date = null; } if (item.extend_date.HasValue) { order.extend_date = item.extend_date.Value; } else { order.extend_date = null; } if (item.price.HasValue) { order.price = item.price.Value; } else { order.price = null; } if (item.qty.HasValue && item.qty.Value > 0) { order.qty = item.qty.Value; } else { order.qty = null; } //if (item.total.HasValue) { order.total = item.price.Value; } //else { order.total = null; } if (item.pay.HasValue) { order.pay = item.pay.Value; } else { order.pay = null; } if (item.pay_date.HasValue) { order.pay_date = item.pay_date.Value; } else { order.pay_date = null; } order.keyin1 = item.keyin1; order.demo = item.demo; ////check customize_data valid column //var _file = _db.actItem_files.Where(q => q.actItem_num == item.actItem_num).Select(q => q.file.customize_data); //List _column = new List(); //if (_file != null) // foreach (var _customize_data in _file) // { // string[] k = _customize_data.Split('$'); // foreach (string v in k) // if (!string.IsNullOrEmpty(v)) // _column.Add("$" + v.Replace("\r", "").Replace("\n", "").TrimEnd()); //有效欄位 // } //if (item.customize_data != "") //{ // string[] k = item.customize_data.Split('$'); // foreach (string v in k) // { // var _k = v.Split(':'); // if (!string.IsNullOrEmpty(_k[0])) // for (var i = 0; i < _column.Count; i++) // if (_column[i] == ("$" + _k[0] + ":")) // _column[i]=_column[i] + _k[1]; // } //} //order.customize_data = _column.Count > 0 ? string.Join("", _column) : ""; order.customize_data = item.customize_data; _db.SaveChanges(); var ret = new { num = order.num, customize_data = order.customize_data, }; return Ok(ret); } else return NotFound(); } else { Model.pro_order_detail order = new Model.pro_order_detail();//新增 order.order_no =item.order_no; if (item.actItem_num.HasValue && item.actItem_num.Value > 0) { order.actItem_num = item.actItem_num.Value; } else { order.actItem_num = null; } if (item.f_num.HasValue && item.f_num.Value > 0) { order.f_num = item.f_num.Value; } else { order.f_num = null; } if (item.from_id.HasValue && item.from_id.Value > 0) { order.from_id = item.from_id.Value; } else { order.from_id = null; } order.f_num_tablet = item.f_num_tablet; order.from_id_tablet = item.from_id_tablet; order.address = item.address; if (item.start_date.HasValue) { order.start_date = item.start_date.Value; } else { order.start_date = null; } if (item.due_date.HasValue) { order.due_date = item.due_date.Value; } else { order.due_date = null; } if (item.extend_date.HasValue) { order.extend_date = item.extend_date.Value; } else { order.extend_date = null; } if (item.price.HasValue) { order.price = item.price.Value; } else { order.price = null; } if (item.qty.HasValue && item.qty.Value > 0) { order.qty = item.qty.Value; } else { order.qty = null; } if (item.pay.HasValue) { order.pay = item.pay.Value; } else { order.pay = null; } if (item.pay_date.HasValue) { order.pay_date = item.pay_date.Value; } else { order.pay_date = null; } order.keyin1 = item.keyin1; order.demo = item.demo; order.customize_data = item.customize_data; _db.pro_order_detail.Add(order); _db.SaveChanges(); var ret = new { num = order.num, customize_data = order.customize_data, }; return Ok(ret); } } else { return NotFound(); } } [HttpPost] [Route("api/apporder/GetUnpayList")] public IHttpActionResult GetUnpayList([FromBody] Model.ViewModel.follower q, string order_no , int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int _follower = q.num.HasValue && q.num.Value > 0 ? q.num.Value : 0; if (_follower > 0) { //家族 : 家長是我的人,跟我同家長的人,我的家長本人,我本人 var cc = _db.followers.Where(x => x.num == _follower || x.leader == _follower).Select(x => x.num); var qry = _db.followers.AsEnumerable().Where(f => cc.Any(x => x == f.num) || cc.Any(x => x == f.leader)); //未付款資料 var unpayDt = _db.pro_order_detail.AsEnumerable(); var coDt = unpayDt.Where(x => x.keyin1 == (int)Model.pro_order.detailKeyin1.Collection);//只列出報名狀態為"收款中"的項目 //未付款訂單 var orderDt = _db.pro_order.AsEnumerable(); if (!string.IsNullOrEmpty(order_no)) orderDt = orderDt.Where(x => x.order_no == order_no); orderDt = orderDt.Where(x => coDt.Select(d => d.order_no).Contains(x.order_no)); //orderDt = orderDt.Where(x => qry.Select(d => d.num).Contains(x.f_num.Value)); orderDt = orderDt.Where(x => qry.Select(f => f.num).Any(f => f == x.f_num)); orderDt = orderDt.OrderByDescending(x => x.reg_time); int i = 1; //已有值 var ret = new { list = orderDt.ToPagedList(page, pageSize).Select(x => new { id = i++, order_no = x.order_no, up_time = x.up_time, reg_time = x.reg_time, f_num = x.f_num, u_name = x.f_num.HasValue ? x.follower.u_name : "", totalPrice = unpayDt.Where(d => d.order_no == x.order_no).Select(o => o.price ?? 0 * o.qty ?? 0).Sum(), //訂單金額 payPrice = unpayDt.Where(d => d.order_no == x.order_no).Select(o => o.pay).Sum(), //已收金額 }), count = orderDt.Count(), }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } return NotFound(); } [HttpPost] [Route("api/apporder/GetUnpayDetail")] public IHttpActionResult GetUnpayDetail([FromBody] Model.ViewModel.pro_order q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { //未付款資料 var unpayDt = _db.pro_order_detail.AsEnumerable(); unpayDt = unpayDt.Where(x => x.keyin1 == (int)Model.pro_order.detailKeyin1.Collection);//只列出報名狀態為"收款中"的項目 if (!string.IsNullOrEmpty(q.order_no)) unpayDt = unpayDt.Where(x => x.order_no == q.order_no); unpayDt = unpayDt.OrderByDescending(x => x.num); int i = 1; //已有值 var ret = new { list = unpayDt.ToPagedList(page, pageSize).Select(x => new { id = i++, order_no = x.order_no, actItem_num = x.actItem_num, actItem_numTxt = x.actItem_num.HasValue? x.actItem.subject:"", f_num = x.f_num, u_name = x.f_num.HasValue ? x.follower.u_name : "", price = x.price??0 * x.qty??0, //訂單金額 pay = x.pay??0, //已收金額 }), count = unpayDt.Count(), }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpGet] [Route("api/apporder/printFileLog/{num}/{detail}")] public IHttpActionResult printFileLog(int num , int detail) { string _num = "\"" + num.ToString() + "\""; Model.pro_order_detail order = _db.pro_order_detail.Where(q => q.num == detail && !((q.printed_files??"").Contains(_num)) ).FirstOrDefault();//修改 if (order != null) { order.printed_files = (order.printed_files ?? "") + _num + ","; _db.SaveChanges(); return Ok(order.printed_files); } return NotFound(); } [HttpPost] [Route("api/apporder/printMultiFileLog")] public IHttpActionResult printMultiFileLog([FromBody] List list, int item, int file) { string _num = "\"" + file.ToString() + "\""; var order = _db.pro_order_detail.Where(q => list.Any( a=>a ==q.num) && !((q.printed_files ?? "").Contains(_num))).ToList(); if (order.Count > 0) { foreach (var row in order) row.printed_files = (row.printed_files ?? "") + _num + ","; _db.SaveChanges(); return Ok(); } return NotFound(); } [HttpGet] [Route("api/apporder/copyDetailData/{num}/{qty}")] public IHttpActionResult copyDetailData(int num, int qty) { if(qty > 0) { var detail = _db.pro_order_detail.Where(q => q.num == num).FirstOrDefault(); if (detail != null) { string jsonStr = JsonConvert.SerializeObject(detail, new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii }); for (int i=0; i < qty; i++) { Model.pro_order_detail order = new Model.pro_order_detail();//新增 //Get properties from EF that are read / write and not marked witht he NotMappedAttribute //var sourceProperties = typeof(Model.pro_order_detail) // .GetProperties() // .Where(p => p.CanRead && p.CanWrite && // p.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.NotMappedAttribute), true).Length == 0); //foreach (var property in sourceProperties) //{ // Copy value // property.SetValue(order, property.GetValue(detail, null), null); //} //order = (Model.pro_order_detail)detail.Clone(); order = JsonConvert.DeserializeObject(jsonStr); // order = detail; //直接給物件,會傳址,若order.pay = null , 則 detail.pay = null , 且 _db.SaveChanges();只會新增一筆 order.pay = null; order.keyin1 = (int)Model.pro_order.detailKeyin1.Unconfirmed; order.printed_files = null; _db.pro_order_detail.Add(order); } _db.SaveChanges(); return Ok(); } } return NotFound(); } [HttpPost] [Route("api/apporder/GetPastOrderList")] public IHttpActionResult GetPastOrderList([FromBody] Model.pro_order q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int u_name = q.f_num??0; if (u_name >0 && (!string.IsNullOrEmpty(q.order_no))) { //檢查 var prod = _db.pro_order.AsEnumerable().Where(o => o.f_num == u_name && o.order_no != q.order_no).ToList(); if (prod.Count > 0) { var qry = _db.pro_order_detail.AsEnumerable().Where(o => prod.Any(x => x.order_no==o.order_no) ); int i = 1; var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { id = i++, num = x.num, order_no = x.order_no, up_time = x.pro_order.up_time, activity_selected = new { text = x.pro_order.activity_num.HasValue ? x.pro_order.activity.subject : "", val = x.pro_order.activity_num.HasValue ? x.pro_order.activity_num.Value : 0, }, actitem_num_selected = new { text = x.actItem_num.HasValue ? x.actItem.subject : "", val = x.actItem_num.HasValue ? x.actItem_num.Value : 0, }, }), count = qry.Count(), }; return Ok(ret); } } return Ok("沒有以往報名"); } [HttpPost] [Route("api/apporder/copyMultiPastItem")] public IHttpActionResult copyMultiPastItem([FromBody] List list,string order_no) { var detail = _db.pro_order_detail.Where(q => list.Any(a => a == q.num) ).OrderByDescending(q=>q.order_no).ToList(); if (detail.Count > 0 && (!string.IsNullOrEmpty(order_no))) { foreach(var row in detail) { string jsonStr = JsonConvert.SerializeObject(row, new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii }); Model.pro_order_detail order = new Model.pro_order_detail();//新增 order = JsonConvert.DeserializeObject(jsonStr); order.order_no = order_no; order.pay = null; order.keyin1 = (int)Model.pro_order.detailKeyin1.Unconfirmed; order.printed_files = null; _db.pro_order_detail.Add(order); } _db.SaveChanges(); return Ok(); } return NotFound(); } [HttpPost] [Route("api/apporder/GetPayOrderList")] public IHttpActionResult GetPayOrderList([FromBody] Model.pro_order_record q, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { int detail_num = q.detail_num ?? 0; if (detail_num > 0 ) { //檢查 var prod = _db.pro_order_record.AsEnumerable().Where(o => o.detail_num == detail_num ) .OrderByDescending(o=>o.pay_date).ToList(); int i = 1; var ret = new { list = prod.ToPagedList(page, pageSize).Select(x => new { id = i++, num = x.num, order_no = x.pro_order_detail.order_no, pay_date = x.pay_date, payment_selected = new { text = x.payment.HasValue && x.payment.Value > 0 ? x.accounting_kind2.kind : "", val = x.payment.HasValue ? x.payment.Value : 0, }, price = x.price??0, organization = x.organization, bank_code = x.bank_code, }), count = prod.Count(), }; return Ok(ret); } return Ok("沒有資料"); } [HttpDelete] [Route("api/apporder/DeleteRecordDetail/{id}")]//刪除收款註記 public void DeleteRecordDetail(int id) { var prod = _db.pro_order_record.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料 if (prod != null) { _db.pro_order_record.Remove(prod); _db.SaveChanges(); //執行 } } [HttpPost] [Route("api/apporder/SaveRecordDetail")] public IHttpActionResult SaveRecordDetail([FromBody] Model.pro_order_record item) { if (item.detail_num > 0) { float total = _db.pro_order_detail.AsEnumerable().Where(x => x.num == item.detail_num).Select(x => x.price.Value * x.qty.Value).Sum(); float pay = _db.pro_order_record.AsEnumerable().Where(x => x.detail_num == item.detail_num).Select(x => x.price.Value).Sum(); if (pay + item.price.Value <= total) { //if有資料-修改 , else 新增 if (item.num > 0) { _db.Entry(item).State = System.Data.Entity.EntityState.Modified; _db.SaveChanges(); //Model.bed_kind_detail _detail = _db.bed_kind_detail.Where(q => q.num == item.num).FirstOrDefault();//修改 //if (_detail != null) //{ // _detail.bed_name = item.bed_name; // if (item.bed_type.HasValue) { _detail.bed_type = item.bed_type.Value; } // else { _detail.bed_type = null; } // _detail.demo = item.demo; // _db.SaveChanges(); var ret = item.num; return Ok(ret); //} //else // return NotFound(); } else { item.reg_time = DateTime.Now; _db.pro_order_record.Add(item); _db.SaveChanges(); var ret = item.num; return Ok(ret); } } else { return Ok("已收金額不能超過小計"); } } else { return NotFound(); } } }