using PagedList; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Web; using System.Web.Http; using MyWeb; using MINOM.COM.Utility; using System.Text; // api/pre_order //[ezAuthorize(Roles = "admin")]//群組:* //[ezAuthorize] public class preOrderController: ApiController { private Model.ezEntities _db = new Model.ezEntities(); public preOrderController() { // // TODO: 在這裡新增建構函式邏輯 // } [HttpPost] [Route("api/preOrder/CheckPreVsOrder")] public IHttpActionResult CheckPreVsOrder([FromBody] Model.ViewModel.preOrder pre) { try { //用order_no去檢查pre_order登記的總數量跟pro_order_detail數量比較 var order_qry = _db.pro_order_detail.AsQueryable(); order_qry = order_qry.Where(x => x.order_no == pre.order_no); var order = order_qry.ToList(); var pre_qry = _db.pre_order.AsQueryable(); pre_qry = pre_qry.Where(y => y.order_no == pre.order_no); var pre_order = pre_qry.FirstOrDefault(); if (order != null && pre_order != null) { StringBuilder sb = new StringBuilder(); if (pre_order.total_amt != order.Sum(x => x.price * x.qty)) { sb.Append("金額與客堂登記不符\n"); } int order_count = order.Where(x => !x.parent_num.HasValue).ToList().Count; if (pre_order.item_count != order_count) { sb.Append("功德項目數與客堂登記不符\n"); } if (sb.Length > 0) { return Ok(new { result = "Y", message = sb.ToString(), }); } else { return Ok(new { result = "Y", message = "與客堂登記相符", }); } } else { return Ok(new { result = "Y", message = "無客堂登記資料", }); } } catch (Exception ex) { return Ok(new { result="N", message=ex.Message, }); } } [HttpPost] [Route("api/preOrder/GetPreOrder")] public IHttpActionResult GetPreOrder([FromBody] Model.ViewModel.preOrder pre, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false) { var qry=_db.pre_order.AsQueryable(); if (!string.IsNullOrEmpty(pre.f_name)) { qry = qry.Where(x => _db.followers.Where(y => y.u_name.Contains( pre.f_name)).Select(y => y.num).ToList().Contains((int)x.f_num)); } if (!string.IsNullOrEmpty(pre.order_no)) { qry = qry.Where(x => x.order_no.Contains(pre.order_no)); } if (!string.IsNullOrEmpty(pre.act_name)) { qry = qry.Where(x => _db.activities.Where(z=>z.subject.Contains(pre.act_name)).Select(z=>z.num).ToList().Contains((int)x.act_num)); } //sortBy = sortBy ?? string.Empty; qry =qry.OrderByDescending(x => x.num); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize == -1) { pageSize = count; } if (pageSize == 0) pageSize = 10; var ret = new { list = qry.ToPagedList(page, pageSize).Select(x => new { x.num,x.f_num,x.admin_num,x.order_no,x.item_count,x.total_amt,x.reg_time,x.receipt_num,x.act_num, f_name=_db.followers.Where(z=>z.num==x.f_num).Select(z=>z.u_name).FirstOrDefault(), act_name=_db.activities.Where(w=>w.num==x.act_num).Select(w=>w.subject).FirstOrDefault(), receipt_amt=(_db.receipt_detail.Where(rd=>_db.receipt_master.Where(rm=>rm.order_no==x.order_no).Select(rm=>rm.num).ToList().Contains((int)rd.receipt_num))).Select(rd=>rd.amt).Sum() }).ToList(), count = count }; if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound); return Ok(ret); } [HttpPost] [Route("api/preOrder/SavePreOrder")] public IHttpActionResult SavePreOrder([FromBody] Model.ViewModel.preOrder pre) { try { //要檢查有無報過名 var qry1 = _db.pro_order.AsQueryable(); qry1 = qry1.Where(y=>y.f_num==pre.f_num&&y.activity_num==pre.act_num); var o=qry1.FirstOrDefault(); if (o != null && !string.IsNullOrEmpty(o.order_no)) { throw new Exception("已經報過名,請勿重複報名"); } var qry = _db.followers.AsQueryable(); qry = qry.Where(x => x.num == pre.f_num); var f = qry.FirstOrDefault(); //寫入pre_order,同時寫入pro_order pre.order_no = new MyWeb.autoNum().createOrderNumber(); Model.pre_order preO = new Model.pre_order(); Model.pro_order proO = new Model.pro_order(); preO.order_no = pre.order_no; preO.act_num = pre.act_num; preO.f_num = pre.f_num; preO.item_count = pre.item_count; preO.total_amt = pre.total_amt; preO.reg_time = DateTime.Now; proO.up_time= DateTime.Now; proO.reg_time = DateTime.Now; proO.order_no = preO.order_no; proO.activity_num = pre.act_num; proO.f_num = pre.f_num; proO.keyin1 = "A01"; proO.phone = f.phone; proO.address = f.address??""; proO.demo = ""; _db.pre_order.Add(preO); _db.pro_order.Add(proO); _db.SaveChanges(); return Ok(new {result="Y",message="新增成功"}); } catch (Exception ex) { LogUtility log = new LogUtility(); log.writeErrorPath(ex.Message+ex.StackTrace); return Ok(new { result = "N", message = $"新增失敗 {ex.Message}" }); } } [HttpPost] [Route("api/preOrder/GetPreOrderByNum")] public IHttpActionResult GetPreOrderByNum([FromBody] Model.ViewModel.preOrder pre) { var qry = _db.pre_order.AsQueryable(); qry = qry.Where(x => x.order_no==pre.order_no); //sortBy = sortBy ?? string.Empty; qry = qry.OrderByDescending(x => x.num); var ret = new { data=qry.Select(x => new { x.num, x.f_num, x.admin_num, x.order_no, x.item_count, x.total_amt, x.reg_time, x.receipt_num, x.act_num, f_name = _db.followers.Where(z => z.num == x.f_num).Select(z => z.u_name).FirstOrDefault(), act_name = _db.activities.Where(w => w.num == x.act_num).Select(w => w.subject).FirstOrDefault(), }).FirstOrDefault() }; if (ret.data == null) { return Ok(new {result="N",message=""}); } ; return Ok(new { result = "Y", ret }); } }