using DocumentFormat.OpenXml.EMMA; using MINOM.COM.Utility; using MyWeb; using PagedList; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Http; using static MyWeb.admin; // 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, admin_name=_db.admins.Where(q=>q.num==x.admin_num).Select(q=>q.u_name).FirstOrDefault(), 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("已經報過名,請勿重複報名"); } string scc = ConfigurationManager.AppSettings["shopCarCode"].ToString(); int admin_num =0; if (HttpContext.Current.Session[scc + "admin"] != null) { MyWeb.admin admin = new MyWeb.admin(); AdmItem item = admin.JDecode(HttpContext.Current.Session[scc + "admin"].ToString()); string info = item.u_id; if (!string.IsNullOrEmpty(info)) { admin_num=_db.admins.Where(x => x.u_id == info).Select(x=>x.num).FirstOrDefault(); } } 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; if (admin_num!=0) { preO.admin_num = admin_num; } 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 }); } }