Files
17168ERP/web/App_Code/api/preOrderController.cs
2026-08-07 18:00:51 +08:00

256 lines
8.5 KiB
C#

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
});
}
}