將全年報名移至獨立頁籤,並新增未報名品項名單列印功能
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
using System;
|
||||
using DocumentFormat.OpenXml.Drawing.Charts;
|
||||
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||
using Model;
|
||||
using MyWeb;
|
||||
using Newtonsoft.Json;
|
||||
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
|
||||
using PagedList;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Entity;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Web.Http;
|
||||
using PagedList;
|
||||
using Newtonsoft.Json;
|
||||
using System.Collections;
|
||||
using DocumentFormat.OpenXml.Office2010.Excel;
|
||||
using MyWeb;
|
||||
using System.Data.Entity;
|
||||
using System.Diagnostics;
|
||||
using System.Web.Razor.Tokenizer;
|
||||
|
||||
// api/Follower
|
||||
//[ezAuthorize(Roles = "admin")]//群組:*
|
||||
@@ -532,6 +536,203 @@ public class FollowerController : ApiController
|
||||
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("api/follower/GetAutoEnrollList/{id}")]
|
||||
public IHttpActionResult GetAutoEnrollList(int id)
|
||||
{
|
||||
var prod = _db.auto_enroll.Where(q => q.f_num == id).ToList();
|
||||
var ret = new
|
||||
{
|
||||
list = prod.Select(x => new
|
||||
{
|
||||
num = x.num,
|
||||
auto_enroll_start_date = x.start_date.ToString("yyyy-MM-dd"),
|
||||
auto_enroll_end_date = x.end_date.ToString("yyyy-MM-dd"),
|
||||
auto_enroll_receipt_title = x.receipt_title?? "",
|
||||
auto_enroll_receipt_address = x.receipt_address?? "",
|
||||
}),
|
||||
|
||||
};
|
||||
return Ok(ret);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Route("api/follower/SaveAutoEnrollList")]
|
||||
public IHttpActionResult SaveAutoEnrollList([FromBody] Model.auto_enroll item)
|
||||
{
|
||||
Model.auto_enroll autoEnroll;
|
||||
if (item.num == 0)
|
||||
{
|
||||
// ===== 新增 =====
|
||||
autoEnroll = new Model.auto_enroll()
|
||||
{
|
||||
f_num = item.f_num,
|
||||
start_date = item.start_date,
|
||||
end_date = item.end_date,
|
||||
receipt_title = string.IsNullOrEmpty(item.receipt_title) ? null : item.receipt_title.Trim(),
|
||||
receipt_address = string.IsNullOrEmpty(item.receipt_address) ? null : item.receipt_address.Trim(),
|
||||
}
|
||||
;
|
||||
_db.auto_enroll.Add(autoEnroll);
|
||||
_db.SaveChanges();
|
||||
CreateOrdersForActivities(item.f_num, autoEnroll.num, item.start_date, item.end_date, item.receipt_title, item.receipt_address);
|
||||
}
|
||||
else
|
||||
{
|
||||
// ===== 更新 =====
|
||||
autoEnroll = _db.auto_enroll.Where(q => q.num == item.num).FirstOrDefault();
|
||||
if (autoEnroll == null) return NotFound();
|
||||
|
||||
autoEnroll.start_date = item.start_date;
|
||||
autoEnroll.end_date = item.end_date;
|
||||
autoEnroll.receipt_title = item.receipt_title?.Trim() ?? null;
|
||||
autoEnroll.receipt_address = item.receipt_address?.Trim() ?? null;
|
||||
_db.SaveChanges();
|
||||
CreateOrdersForActivities(item.f_num, autoEnroll.num, item.start_date, item.end_date, item.receipt_title, item.receipt_address);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var ret = new
|
||||
{
|
||||
num = autoEnroll.num,
|
||||
start_date = autoEnroll.start_date.ToString("yyyy-MM-dd"),
|
||||
end_date = autoEnroll.end_date.ToString("yyyy-MM-dd"),
|
||||
receipt_title = autoEnroll.receipt_title,
|
||||
receipt_address = autoEnroll.receipt_address,
|
||||
};
|
||||
return Ok(ret);
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
return InternalServerError(ex);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[Route("api/follower/GetAffectedOrders")]
|
||||
public IHttpActionResult GetAffectedOrders([FromBody] Model.auto_enroll item, bool is_delete = false)
|
||||
{
|
||||
if (item == null) return BadRequest();
|
||||
try
|
||||
{
|
||||
IQueryable<pro_order> query = _db.pro_order
|
||||
.Where(o => o.f_num == item.f_num
|
||||
&& o.order_no.StartsWith("AU")
|
||||
&& o.au_num == item.num);
|
||||
|
||||
if (is_delete)
|
||||
{
|
||||
// 刪除:查期間內所有自動報名訂單
|
||||
query = query.Where(o =>
|
||||
o.activity.startDate_solar >= item.start_date &&
|
||||
o.activity.startDate_solar <= item.end_date
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 修改:查不在新範圍內的訂單
|
||||
query = query.Where(o =>
|
||||
o.activity.startDate_solar < item.start_date ||
|
||||
o.activity.startDate_solar > item.end_date
|
||||
);
|
||||
}
|
||||
|
||||
var rawOrders = query.Select(o => new
|
||||
{
|
||||
o.order_no,
|
||||
o.activity.subject,
|
||||
o.activity.startDate_solar
|
||||
}).ToList();
|
||||
|
||||
var affectedOrders = rawOrders.Select(o => new
|
||||
{
|
||||
order_no = o.order_no,
|
||||
activityname = o.subject,
|
||||
activitydate = o.startDate_solar?.ToString("yyyy/MM/dd") ?? ""
|
||||
}).ToList();
|
||||
|
||||
return Ok(new
|
||||
{
|
||||
count = affectedOrders.Count,
|
||||
list = affectedOrders
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return InternalServerError(ex.GetBaseException());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[HttpDelete]
|
||||
[Route("api/follower/DeleteAutoEnroll/{id}")]
|
||||
public IHttpActionResult DeleteAutoEnroll(int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var prod = _db.auto_enroll.Where(q => q.num == id).FirstOrDefault();
|
||||
if (prod != null)
|
||||
{
|
||||
_db.auto_enroll.Remove(prod);
|
||||
_db.SaveChanges();
|
||||
return Ok();
|
||||
}
|
||||
else return NotFound();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[HttpGet]
|
||||
[Route("api/follower/GetUnfilledActivityOrders/{id}")]
|
||||
public IHttpActionResult GetUnfilledActivityOrders(int id, int page, int pageSize = 10, string sortBy = "", bool sortDesc = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var config = _db.auto_enroll.FirstOrDefault(x => x.num == id);
|
||||
if (config == null) return NotFound();
|
||||
|
||||
var query = from o in _db.pro_order
|
||||
join a in _db.activities on o.activity_num equals a.num
|
||||
where o.f_num == config.f_num
|
||||
&& a.startDate_solar >= config.start_date
|
||||
&& a.startDate_solar <= config.end_date
|
||||
&& !_db.pro_order_detail.Any(d => d.order_no == o.order_no)
|
||||
select new { o, a };
|
||||
|
||||
int totalCount = query.Count();
|
||||
|
||||
var pagedData = query
|
||||
.OrderByDescending(x => x.o.order_no)
|
||||
.Skip((page - 1) * pageSize)
|
||||
.Take(pageSize)
|
||||
.ToList()
|
||||
.Select(x => new {
|
||||
order_no = x.o.order_no,
|
||||
startdate = x.a.startDate_solar?.ToString("yyyy/MM/dd") ?? "",
|
||||
enddate = x.a.endDate_solar?.ToString("yyyy/MM/dd") ?? "",
|
||||
activityname = x.a.subject,
|
||||
category = x.a.activity_category_kind?.kind ?? ""
|
||||
});
|
||||
|
||||
return Ok(new
|
||||
{
|
||||
list = pagedData,
|
||||
count = totalCount,
|
||||
page = page,
|
||||
pageSize = pageSize
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[HttpPost]
|
||||
[Route("api/follower/GetTabletList")]
|
||||
@@ -733,5 +934,132 @@ public class FollowerController : ApiController
|
||||
};
|
||||
return Ok(data);
|
||||
}
|
||||
|
||||
private void CreateOrdersForActivities(int f_num, int au_num, DateTime start_date, DateTime end_date, string receipt_title, string receipt_address)
|
||||
{
|
||||
var follower = _db.followers.Where(x => x.num == f_num).FirstOrDefault();
|
||||
var activities = _db.activities
|
||||
.Where(x =>
|
||||
x.startDate_solar >= start_date &&
|
||||
x.startDate_solar <= end_date
|
||||
)
|
||||
.ToList();
|
||||
|
||||
foreach (var activity in activities)
|
||||
{
|
||||
var existOrder = _db.pro_order
|
||||
.Where(o => o.activity_num == activity.num && o.f_num == f_num)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (existOrder != null) {
|
||||
existOrder.au_num = au_num;
|
||||
_db.SaveChanges();
|
||||
continue;
|
||||
}
|
||||
|
||||
string newOrderNo = AutoOrderService.CreateAutoOrderNumber(_db);
|
||||
string finalPhone = follower?.cellphone ?? follower?.phone ?? "";
|
||||
|
||||
var newOrder = new pro_order
|
||||
{
|
||||
order_no = newOrderNo,
|
||||
up_time = DateTime.Now,
|
||||
reg_time = DateTime.Now,
|
||||
keyin1 = "A01",
|
||||
f_num = f_num,
|
||||
au_num = au_num,
|
||||
phone = finalPhone,
|
||||
address = string.IsNullOrEmpty(receipt_address) ? "" : receipt_address,
|
||||
activity_num = activity.num,
|
||||
receipt_title = receipt_title ?? "",
|
||||
demo = "",
|
||||
customize_data = "",
|
||||
};
|
||||
_db.pro_order.Add(newOrder);
|
||||
|
||||
// 抓取同活動分類的上一筆訂單,複製品項
|
||||
var latestOrder = _db.pro_order
|
||||
.Where(o =>
|
||||
o.f_num == f_num &&
|
||||
o.activity.kind == activity.kind &&
|
||||
o.order_no != newOrderNo &&
|
||||
_db.pro_order_detail.Any(d => d.order_no == o.order_no)
|
||||
)
|
||||
.OrderByDescending(o => o.order_no)
|
||||
.FirstOrDefault();
|
||||
|
||||
if (latestOrder != null)
|
||||
{
|
||||
var prevDetails = _db.pro_order_detail
|
||||
.Where(d => d.order_no == latestOrder.order_no)
|
||||
.ToList();
|
||||
|
||||
foreach (var detail in prevDetails)
|
||||
{
|
||||
var newDetail = new pro_order_detail
|
||||
{
|
||||
order_no = newOrderNo,
|
||||
actItem_num = detail.actItem_num,
|
||||
parent_num = detail.parent_num,
|
||||
print_id = detail.print_id,
|
||||
f_num = detail.f_num,
|
||||
f_num_tablet = detail.f_num_tablet,
|
||||
address = detail.address,
|
||||
from_id = detail.from_id,
|
||||
from_id_tablet = detail.from_id_tablet,
|
||||
bed_type = detail.bed_type,
|
||||
qty = detail.qty,
|
||||
price = detail.price,
|
||||
start_date = DateTime.Today,
|
||||
pay = detail.pay,
|
||||
keyin1 = detail.keyin1,
|
||||
demo = detail.demo,
|
||||
customize_data = detail.customize_data,
|
||||
printed_files = detail.printed_files,
|
||||
UpdateTime = DateTime.Now,
|
||||
};
|
||||
_db.pro_order_detail.Add(newDetail);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
_db.SaveChanges();
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class AutoOrderService
|
||||
{
|
||||
private static readonly object _lock = new object();
|
||||
|
||||
public static string CreateAutoOrderNumber(Model.ezEntities _db)
|
||||
{
|
||||
lock (_lock)
|
||||
{
|
||||
string prefix = "AU" + DateTime.Now.ToString("yyMMdd");
|
||||
|
||||
var company = _db.companies.FirstOrDefault(q => q.num == 1);
|
||||
if (company == null) return "";
|
||||
|
||||
string order_no;
|
||||
if (!string.IsNullOrEmpty(company.last_auto_order_no) && company.last_auto_order_no.StartsWith(prefix))
|
||||
{
|
||||
string serialStr = company.last_auto_order_no.Replace(prefix, "");
|
||||
int nextSerial = int.Parse(serialStr) + 1;
|
||||
order_no = prefix + nextSerial.ToString("0000");
|
||||
}
|
||||
else
|
||||
{
|
||||
order_no = prefix + "0001";
|
||||
}
|
||||
|
||||
company.last_auto_order_no = order_no;
|
||||
_db.SaveChanges();
|
||||
|
||||
return order_no;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user