From e60b172b39e8c390f76a18927e9dac8a05f66c9e Mon Sep 17 00:00:00 2001 From: minom Date: Thu, 6 Aug 2026 18:00:04 +0800 Subject: [PATCH] modify --- web/App_Code/Model/ViewModel/preOrder.cs | 1 + web/App_Code/api/activityController.cs | 78 ++++++ web/App_Code/api/preOrderController.cs | 78 +++++- web/admin/activity/index.aspx | 39 ++- web/admin/activity/index.aspx.cs | 3 +- web/admin/order/pre_index.aspx | 302 ++++------------------- web/admin/order/pre_order.vue | 21 +- web/admin/order/pre_order_reg.vue | 33 ++- web/admin/order/reg.aspx | 45 +++- web/admin/order/reg.aspx.cs | 2 + 10 files changed, 317 insertions(+), 285 deletions(-) diff --git a/web/App_Code/Model/ViewModel/preOrder.cs b/web/App_Code/Model/ViewModel/preOrder.cs index f938ce7..a03e456 100644 --- a/web/App_Code/Model/ViewModel/preOrder.cs +++ b/web/App_Code/Model/ViewModel/preOrder.cs @@ -26,6 +26,7 @@ namespace Model.ViewModel public Nullable reg_time { get; set; } public Nullable receipt_num { get; set; } public string f_name { get; set; } + public string act_name { get; set; } } } \ No newline at end of file diff --git a/web/App_Code/api/activityController.cs b/web/App_Code/api/activityController.cs index e051a34..93661c7 100644 --- a/web/App_Code/api/activityController.cs +++ b/web/App_Code/api/activityController.cs @@ -2,16 +2,20 @@ using MINOM.COM.Utility; using Model; using Newtonsoft.Json; +using OfficeOpenXml; using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.Crypto.Tls; using PagedList; using System; using System.Collections; using System.Collections.Generic; using System.Data.Entity; using System.Diagnostics; +using System.IO; using System.Linq; using System.Net; using System.Net.Http; +using System.Web; using System.Web.Http; using System.Web.Services; using static TreeView; @@ -2165,4 +2169,78 @@ string sortBy = "", bool sortDesc = false) } } + [HttpPost] + [Route("api/activity/ComparePreAndOrder")] + public IHttpActionResult ComparePreAndOrder([FromBody] Model.ViewModel.activity act) + { + //用活動撈pre_order + //檢查pro_order_detail 的數量跟金額與pre_order登記是否相符 + var qry = _db.pre_order.AsQueryable(); + qry = qry.Where(x => x.act_num == act.num); + var dqry = _db.pro_order_detail.AsQueryable(); + dqry = dqry.Where(y => _db.pro_order.Where(z => z.activity_num == act.num).Select(z => z.order_no).ToList().Contains(y.order_no)); + + var list = qry.Select(x => new + { + x.num, + x.order_no, + x.reg_time, + x.receipt_num, + x.item_count, + x.f_num, + x.total_amt, + x.admin_num, + act_name=_db.activities.Where(w=>w.num==act.num).Select(w=>w.subject).FirstOrDefault(), + f_name=_db.followers.Where(z=>z.num==x.f_num).Select(z=>z.u_name).FirstOrDefault(), + order_amt=dqry.Where(y=>y.order_no==x.order_no).Sum(y=>y.qty*y.price), + order_count=dqry.Where(y=> y.order_no == x.order_no&&!y.parent_num.HasValue).ToList().Count(), + }).ToList(); + string rootPath = HttpRuntime.AppDomainAppPath; + string name = $"output{DateTime.Now.ToString("yyyyMMddHHmmss")}.xlsx"; + string fileName = Path.Combine(new string[] { rootPath, "rpt", name }); + + var file = new FileInfo($"{fileName}"); // 檔案路徑 + using (var excel = new ExcelPackage()) + { + LogUtility log = new LogUtility(); + // 建立分頁 + var ws = excel.Workbook.Worksheets.Add("MySheet"); + int i = 0; + i++; + ws.Cells[i, 1].Value = "序號"; + ws.Cells[i, 2].Value = "法會名稱"; + ws.Cells[i, 3].Value = "信眾"; + ws.Cells[i, 4].Value = "登記數量"; + ws.Cells[i, 5].Value = "登記金額"; + ws.Cells[i, 6].Value = "報名數量"; + ws.Cells[i, 7].Value = "報名金額"; + ws.Cells[i, 8].Value = "是否相符"; + i++; + foreach (var data in list) + { + ws.Cells[i, 1].Value = i-1; + ws.Cells[i, 2].Value =data.act_name; + ws.Cells[i, 3].Value = data.f_name; + ws.Cells[i, 4].Value = data.item_count; + ws.Cells[i, 5].Value = data.total_amt; + ws.Cells[i, 6].Value = data.order_count; + ws.Cells[i, 7].Value = data.order_amt; + + if (data.total_amt != data.order_amt || data.item_count != data.order_count) + { + ws.Cells[i, 8].Value = "否"; + } + else + { + ws.Cells[i, 8].Value = "是"; + } + } + excel.SaveAs(file); + } + + return Ok(new { result = "Y", filename = $"rpt/{name}" }); + + + } + } diff --git a/web/App_Code/api/preOrderController.cs b/web/App_Code/api/preOrderController.cs index 90668d7..a5dd57b 100644 --- a/web/App_Code/api/preOrderController.cs +++ b/web/App_Code/api/preOrderController.cs @@ -7,6 +7,7 @@ using System.Web; using System.Web.Http; using MyWeb; using MINOM.COM.Utility; +using System.Text; // api/pre_order //[ezAuthorize(Roles = "admin")]//群組:* //[ezAuthorize] @@ -20,6 +21,71 @@ public class preOrderController: ApiController // 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")] @@ -29,10 +95,17 @@ public class preOrderController: ApiController var qry=_db.pre_order.AsQueryable(); if (!string.IsNullOrEmpty(pre.f_name)) { - qry = qry.Where(x => _db.followers.Where(y => y.u_name == pre.f_name).Select(y => y.num).ToList().Contains((int)x.f_num)); + 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); + qry =qry.OrderByDescending(x => x.num); var count = qry.Count(); //pageSize = count;//一次取回?? if (pageSize == -1) { @@ -47,6 +120,7 @@ public class preOrderController: ApiController 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 }; diff --git a/web/admin/activity/index.aspx b/web/admin/activity/index.aspx index d2b7d14..41a3ec8 100644 --- a/web/admin/activity/index.aspx +++ b/web/admin/activity/index.aspx @@ -81,7 +81,38 @@ deep: true, }, }, - methods: { + methods: { + compare(item) { + // console.log("compare:", item); + axios + .post(HTTP_HOST + 'api/activity/ComparePreAndOrder', {num:item.num}) + .then(response => { + if (response.data.result == "N") { + this.message_dialog.message = response.data.message; + this.message_dialog.show = true; + } else if (response.data.result == "Y") { + const link = document.createElement('a'); + link.href = HTTP_HOST + "/" + response.data.filename; + link.target = "_blank"; + + // 5. Specify the filename for the download + //link.setAttribute('download', 'my-downloaded-file.pdf'); + + // 6. Append link to the body, click it, and remove it immediately + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + // 7. Free up memory by revoking the object URL + //window.URL.revokeObjectURL(blobUrl); + //window.open(HTTP_HOST +"/" +response.data.filename, "_blank"); + } + this.isdisabled = false; + this.isloading = false; + + }) + .catch(error => console.log(error)) + }, getDefault(clearpage = false) { const { sortBy, sortDesc, page, itemsPerPage } = this.options const params = { @@ -208,7 +239,11 @@ diff --git a/web/admin/activity/index.aspx.cs b/web/admin/activity/index.aspx.cs index 2b67b3a..2f144c7 100644 --- a/web/admin/activity/index.aspx.cs +++ b/web/admin/activity/index.aspx.cs @@ -14,12 +14,13 @@ using static TreeView; public partial class admin_activity_index : MyWeb.config { private Model.ezEntities _db = new Model.ezEntities(); + public string IsPreOrder = "false"; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { - + IsPreOrder = ConfigurationManager.AppSettings["IsPreOrder"]; BuildKind(); } diff --git a/web/admin/order/pre_index.aspx b/web/admin/order/pre_index.aspx index 64cdfb1..914cd6b 100644 --- a/web/admin/order/pre_index.aspx +++ b/web/admin/order/pre_index.aspx @@ -4,87 +4,82 @@ -
- <%-- - 新增 - --%> - <%-- 刪除勾選--%> -
-
- <%-- - 列印管理報表 - - -
- 匯出查詢資料(Excel) -
--%> -
+
- +
+
+
+ + +
+
+ + +
+
+ + +
+ +
diff --git a/web/admin/order/pre_order.vue b/web/admin/order/pre_order.vue index f7e4c92..d46a0a8 100644 --- a/web/admin/order/pre_order.vue +++ b/web/admin/order/pre_order.vue @@ -50,13 +50,13 @@ style="top: 5vh !important; left: 5vw !important; display: flex; margin: auto !important; width: 100% !important; height: 100% !important; "> -