256 lines
8.5 KiB
C#
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
|
|
});
|
|
|
|
}
|
|
} |