Files
17168ERP/web/App_Code/api/activityController.cs
2025-08-29 01:27:25 +08:00

1536 lines
54 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using PagedList;
using Newtonsoft.Json;
using System.Collections;
using static TreeView;
using System.Data.Entity;
// api/activity
//[ezAuthorize(Roles = "admin")]//群組:*
[ezAuthorize]
public class activityController : ApiController
{
private Model.ezEntities _db = new Model.ezEntities();
// GET api/<controller>
[AllowAnonymous]
public IEnumerable<Model.activity> Get(string startDate = null, string endDate = null)
{
var qry = _db.activities.AsQueryable();
if (!string.IsNullOrEmpty(startDate) && !string.IsNullOrEmpty(endDate))
{
var date = DateTime.Parse(startDate);
qry = qry.Where(x => x.startDate_solar <= date && x.endDate_solar > date);
}
var list = qry.OrderByDescending(x => x.startDate_solar).ThenByDescending(x => x.num).ToList();
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
public IEnumerable<Model.activity> Get(int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
//if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize);
var list = _db.activities.OrderBy(o => o.num).ToPagedList(page, pageSize);
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
// GET api/<controller>/5
public Model.activity Get(int id)
{
var item = _db.activities.Where(q => q.num == id).FirstOrDefault();
//if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return item;
}
// POST api/<controller>
public void Post([FromBody] Model.activity item)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] Model.activity item)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
var prod = _db.activities.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
//刪除相關資料
var prod2 = _db.activity_relating.AsEnumerable().Where(q => q.activity_num == id).ToList(); //相關項目
if (prod2.Count > 0)
{
//查詢結果全部刪除
_db.activity_relating.RemoveRange(prod2);
}
var prod3 = _db.activity_spares.AsEnumerable().Where(q => q.activity_num == id).ToList(); //備品項目
if (prod3.Count > 0)
{
_db.activity_spares.RemoveRange(prod3);
}
//訊息、庫存、收支,從資料庫設定null
_db.activities.Remove(prod);
_db.SaveChanges();//執行
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Activity, (int)Model.admin_log.Status.Delete, prod.subject);
}
}
}
[HttpDelete]
[Route("api/activity/DeleteItem/{id}")]
public void DeleteItem(int id)
{
var prod = _db.actItems.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
/*if (prod != null)
{
//var prod2 = _db.actItem_files.AsEnumerable().Where(q => q.actItem_num == id).ToList(); //相關項目
//if (prod2.Count > 0)
//{
// //查詢結果全部刪除
// _db.actItem_files.RemoveRange(prod2);
// _db.SaveChanges();
//}
_db.actItem_files.RemoveRange(prod.actItem_files);
_db.actItems.Remove(prod);
_db.SaveChanges(); //執行
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Item, (int)Model.admin_log.Status.Delete, prod.subject);
}
}*/
if (prod != null)
{
////prod.IsDel = true; ////不確定是否新增欄位? 先註解
_db.SaveChanges();
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Item, (int)Model.admin_log.Status.Delete, prod.subject);
}
}
}
[HttpDelete]
[Route("api/activity/Delete/{nums}")]
public void Delete(string nums)
{
if (!string.IsNullOrEmpty(nums))
{
var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var prod = _db.activities.AsEnumerable().Where(q => ids.Contains(q.num)).ToList();
if (prod.Count() > 0)
{
//var prod2 = _db.activity_relating.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.activity_num))).ToList();
var prod2 = _db.activity_relating.AsEnumerable().Where(q => ids.Any(x => x == q.activity_num)).ToList();
if (prod2.Count > 0)
{
_db.activity_relating.RemoveRange(prod2);
// _db.SaveChanges();
}
//var prod3 = _db.activity_spares.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.activity_num))).ToList();
var prod3 = _db.activity_spares.AsEnumerable().Where(q => ids.Any(x => x == q.activity_num)).ToList();
if (prod3.Count > 0)
{
_db.activity_spares.RemoveRange(prod3);
//_db.SaveChanges();
}
_db.activities.RemoveRange(prod);
_db.SaveChanges();
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Activity, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList()));
}
}
}
}
[HttpDelete]
[Route("api/activity/DeleteAllItem/{nums}")]
public void DeleteAllItem(string nums)
{
if (!string.IsNullOrEmpty(nums))
{
var ids = nums.TrimEnd(',').Split(',').Select(s => int.Parse(s));
var prod = _db.actItems.AsEnumerable().Where(q => ids.Contains(q.num)).ToList();
if (prod.Count() > 0)
{
//var prod2 = _db.actItem_files.AsEnumerable().Where(q => ids.Contains(Convert.ToInt32(q.actItem_num))).ToList();
var prod2 = _db.actItem_files.AsEnumerable().Where(q => ids.Any(x => x == q.actItem_num)).ToList();
if (prod2.Count > 0)
{
_db.actItem_files.RemoveRange(prod2);
//_db.SaveChanges();
}
_db.actItems.RemoveRange(prod);
_db.SaveChanges();
Model.admin_log admin_log = new Model.admin_log();
MyWeb.admin admin = new MyWeb.admin();//api裡不可以用MyWeb
if (admin.isLoign())
{
admin_log.writeLog(admin.info.u_id, (int)Model.admin_log.Systems.Item, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.subject).ToList()));
}
}
}
}
[HttpGet]
[Route("api/activity/count")]
public int Count()
{
var count = _db.activities.Count();
return count;
}
[HttpPost]
[Route("api/activity/GetList")]
public IHttpActionResult GetList([FromBody] Model.ViewModel.activity q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
var qry = _db.activities.AsEnumerable();
if (!string.IsNullOrEmpty(q.subject))
qry = qry.Where(o => o.subject.Contains(q.subject));
if (q.kind.HasValue && q.kind > 0)
{
var _subKinds = new TreeView().subKinds(_db.activity_kind.Select(o => new TreeItem()
{
num = o.num,
root = o.root,
}).ToList(), q.kind.Value);
//qry = qry.Where(o => o.kind == q.kind);
qry = qry.Where(o => o.kind == q.kind.Value || _subKinds.Any(s => s == o.kind));
}
if (!string.IsNullOrEmpty(q.kindTxt))
qry = qry.Where(o => o.activity_kind.kind.Contains(q.kindTxt));
if (sortBy.Equals("subject"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.subject);
else
qry = qry.OrderBy(o => o.subject);
}
else if (sortBy.Equals("kind"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.kind);
else
qry = qry.OrderBy(o => o.kind);
}
else if (sortBy.Equals("startDate_solar"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.startDate_solar);
else
qry = qry.OrderBy(o => o.startDate_solar);
}
else if (sortBy.Equals("endDate_solar"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.endDate_solar);
else
qry = qry.OrderBy(o => o.endDate_solar);
}
else if (sortBy.Equals("dueDate"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.dueDate);
else
qry = qry.OrderBy(o => o.dueDate);
}
else
qry = qry.OrderByDescending(o => o.num);
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize > 0) qry = qry.ToPagedList(page, pageSize);
var ret = new
{
list = qry.Select(x => new
{
num = x.num,
subject = x.subject,
kind = x.kind,
kindTxt = x.kind.HasValue ? x.activity_kind.kind : "",
kindsTxt = x.kind.HasValue ? new TreeView().kindText(_db.activity_kind.Select(o => new TreeItem()
{
kind = o.kind,
num = o.num,
root = o.root,
}).ToList(), x.kind) : "",
startDate_solar = x.startDate_solar,
endDate_solar = x.endDate_solar,
startDate_lunar = x.startDate_lunar,
endDate_lunar = x.endDate_lunar,
dueDate = x.dueDate,
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpPost]
[Route("api/activity/GetItemList")]
public IHttpActionResult GetItemList([FromBody] Model.ViewModel.actItem q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
//var stockDt = _db.stocks.AsEnumerable(); ;//庫存
var fileDt = _db.files.AsEnumerable().Where(f => f.subject.Contains(q.fileTxt)).Select(f => f.num.ToString());//文件
//每個品項在每個倉庫的結餘量
var stockDt = (
from t_min_max in (
from stock in _db.stocks
group stock by new { stock.kind, stock.actItem_num } into g
select new
{
g.Key.kind,
g.Key.actItem_num,
min_id = g.Min(x => x.num),
max_id = g.Max(x => x.num)
}
)
join t_min in _db.stocks on t_min_max.min_id equals t_min.num
join t_max in _db.stocks on t_min_max.max_id equals t_max.num into t_maxGroup
from t_max in t_maxGroup.DefaultIfEmpty()
select new
{
t_min_max.kind,
t_min_max.actItem_num,
final_last = t_min_max.min_id != t_min_max.max_id ? t_max.final_stock ?? 0 : t_min.final_stock ?? 0,
rent_last = t_min_max.min_id != t_min_max.max_id ? t_max.rent_stock ?? 0 : t_min.rent_stock ?? 0
}
).ToList();
////var qry = _db.actItems.Where(a => a.IsDel == false).AsEnumerable();////不確定是否新增欄位? 先註解
var qry = _db.actItems.AsEnumerable();
if (!string.IsNullOrEmpty(q.subject))
qry = qry.Where(o => o.subject.Contains(q.subject.Trim()));
if (q.kind.HasValue && q.kind.Value > 0)
{
var _subKinds = new TreeView().subKinds(_db.actItem_kind.Select(o => new TreeItem()
{
num = o.num,
root = o.root,
}).ToList(), q.kind.Value);
qry = qry.Where(o => o.kind == q.kind.Value || _subKinds.Any(s => s == o.kind));
}
if (!string.IsNullOrEmpty(q.kindTxt))
qry = qry.Where(o => o.actItem_kind?.kind != null && o.actItem_kind.kind.Contains(q.kindTxt));
if (q.category.HasValue && q.category.Value > 0)
qry = qry.Where(o => o.category == q.category.Value);
if (!string.IsNullOrEmpty(q.categorys))
qry = qry.Where(o => q.categorys.Contains(o.category.HasValue ? o.category.Value.ToString() : "0"));
if (!string.IsNullOrEmpty(q.status))
qry = qry.Where(o => o.status.Contains(q.status));
if (!string.IsNullOrEmpty(q.extend))
qry = qry.Where(o => o.extend == q.extend);
if (!string.IsNullOrEmpty(q.fileTxt))
qry = qry.Where(o => o.actItem_files.Where(f2 => f2.actItem_num == o.num && fileDt.ToArray().Contains(f2.files_num.ToString())).Count() > 0);
//qry = qry.Where(o => o.actItem_files.Where(f2 => f2.actItem_num == o.num && f2.files_num.ToString().Contains( String.Join(",", fileDt.Select(p => p.ToString()).ToArray()) )).Count() >0 ) ;
if (sortBy.Equals("subject"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.subject);
else
qry = qry.OrderBy(o => o.subject);
}
else if (sortBy.Equals("kind"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.kind);
else
qry = qry.OrderBy(o => o.kind);
}
else if (sortBy.Equals("price"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.price);
else
qry = qry.OrderBy(o => o.price);
}
else if (sortBy.Equals("status"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.status);
else
qry = qry.OrderBy(o => o.status);
}
else
qry = qry.OrderByDescending(o => o.num);
var tdesc = publicFun.enum_desc<Model.activity.category>();
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize > 0) qry = qry.ToPagedList(page, pageSize);
var ret = new
{
list = qry.Select(x => new
{
num = x.num,
subject = x.subject,
kind = x.kind,
kindTxt = x.kind.HasValue ? x.actItem_kind.kind : "",
kindsTxt = x.kind.HasValue ? new TreeView().kindText(_db.actItem_kind.Select(o => new TreeItem()
{
kind = o.kind,
num = o.num,
root = o.root,
}).ToList(), x.kind) : "",
category = x.category,
categoryTxt = x.category != null ? tdesc[x.category ?? 1] : "",
price = x.price,
status = x.status,
//stock = new
//{
// //cate1Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Purchase).Select(o => o.qty).Sum(),
// //cate2Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Reduce).Select(o => o.qty).Sum(),
// //cate3Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum(),
// //cate4Qty = stockDt.Where(o => o.actItem_num==x.num && o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum(),
// catePQty= (x.stocks.Where(o => o.category == (int)Model.stock.type.Purchase || o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum()??0) -(x.stocks.Where(o => o.category == (int)Model.stock.type.Reduce || o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum()??0) ,
// cateRQty= (x.stocks.Where(o => o.category == (int)Model.stock.type.Rent).Select(o => o.qty).Sum()??0 ) - (x.stocks.Where(o => o.category == (int)Model.stock.type.Return).Select(o => o.qty).Sum()??0) ,
//},
final_stock = stockDt.Where(o => o.actItem_num == x.num).Select(o => o.final_last).Sum(),
rent_stock = stockDt.Where(o => o.actItem_num == x.num).Select(o => o.rent_last).Sum(),
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpPost]
[Route("api/activity/GetItemBomList")]
public IHttpActionResult GetItemBomList([FromBody] Model.act_bom q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int? this_id = q.item_num;
// 先找到父層
var parent = _db.act_bom.FirstOrDefault(w => w.package_num == null && w.item_num == this_id);
if (parent == null)
{
return Ok(new { list = new List<object>(), count = 0 });
}
// 只抓父層下的直接子項目,且只帶必要欄位
var qlist = _db.act_bom
.Where(w => w.package_num == parent.num)
.Select(b => new
{
b.num,
b.package_num,
b.item_num,
b.qty,
b.memo,
b.optional,
actItem = new
{
num = b.actItem.num,
subject = b.actItem.subject
}
})
.ToList();
var ret = new
{
list = qlist,
count = qlist.Count
};
return Ok(ret);
}
[HttpPost]
[Route("api/activity/SaveDetailBomList")]
public IHttpActionResult SaveDetailBomList([FromBody] Model.act_bom item)
{
if (item.item_num > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.act_bom act_bom = _db.act_bom
.Where(q => q.num == item.num).FirstOrDefault();//修改
if (act_bom != null)
{
if (item.package_num > 0) { act_bom.package_num = item.package_num; }
if (item.item_num > 0) { act_bom.item_num = item.item_num; }
act_bom.qty = item.qty;
act_bom.memo = item.memo;
////SAVE OTHER COLUMNS
//_files.reg_time = DateTime.Now;
_db.SaveChanges();
var ret = act_bom.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
_db.act_bom.Add(item);
_db.SaveChanges();
var ret = item.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
return NotFound();
}
[HttpPost]
[Route("api/activity/GetOrderList")]
public IHttpActionResult GetOrderList([FromBody] Model.ViewModel.activity q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int _activity_id = q.num.HasValue && q.num.Value > 0 ? q.num.Value : 0;
//var relatingDt = _db.activity_relating.AsEnumerable().Where(o => o.activity_num == _activity_id); //活動的相關項目
//if (_activity_id > 0)
//{
// //有選活動
// var qry = _db.activity_relating.AsEnumerable().Where(o => o.activity_num== _activity_id);
// qry =qry.Where(o => o.actItem.status == "Y"); //狀態啟用
// if (!string.IsNullOrEmpty(q.subject))
// qry = qry.Where(o => o.actItem.subject.Contains(q.subject));
// if (!string.IsNullOrEmpty(q.kindTxt))
// qry = qry.Where(o => o.actItem.actItem_kind.kind.Contains(q.kindTxt));
// qry = qry.OrderByDescending(o => o.num);
// var ret = new
// {
// list = qry.ToPagedList(page, pageSize).Select(x => new
// {
// num = x.actItem_num,
// subject = x.actItem.subject,
// kind = x.actItem.kind,
// kindTxt = x.actItem.actItem_kind.kind,
// }),
// count = qry.Count()
// };
// if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
// return Ok(ret);
//}
//else
{
//抓 所有品項
////var qry = _db.actItems.Where(a => a.IsDel == false).AsQueryable();////不確定是否新增欄位? 先註解
var qry = _db.actItems.AsQueryable();
//qry = qry.Where(o => o.status == "Y"); //狀態啟用
if (!string.IsNullOrEmpty(q.subject))
qry = qry.Where(o => o.subject.Contains(q.subject));
if (!string.IsNullOrEmpty(q.kindTxt))
qry = qry.Where(o => o.actItem_kind.kind.Contains(q.kindTxt));
if (!string.IsNullOrEmpty(q.is_reconcile))
qry = qry.Where(o => o.is_reconcile == q.is_reconcile);
qry = qry.Where(o => "1,2,4".Contains(o.category.HasValue ? o.category.Value.ToString() : "0")); //報名,掛單,贊助
qry = qry.OrderByDescending(o => o.num);
var count = qry.Count(); //pageSize = count;//一次取回??
var qryList = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
var ret = new
{
list = qryList.Select(x => new
{
num = x.num,
subject = x.subject,
kind = x.kind,
kindTxt = x.kind.HasValue ? x.actItem_kind.kind : "",
category = x.category,
//price = (_activity_id > 0) ? (relatingDt.Where(o => o.actItem_num == x.num).Select(o => o.price).FirstOrDefault()?? x.price) : (x.price ) , //預設金額,有活動抓活動預設,沒活動抓品項預設
price = (_activity_id > 0) ? (x.activity_relating.Select(o => o.price).FirstOrDefault() ?? x.price) : (x.price), //預設金額,有活動抓活動預設,沒活動抓品項預設
customize_data = x.customize_data ?? "",
files = x.actItem_files.Select(f => new
{
num = f.file.num,
subject = f.file.subject,
word = f.file.word,
cuz_column = f.file.customize_data ?? "", //定義欄位需求
}),
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
}
[HttpPost]
[Route("api/activity/GetItemFiles")]
public IHttpActionResult GetItemFiles([FromBody] Model.actItem_files q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int this_id = q.actItem_num;
if (this_id > 0)
{
//檢查
var qry = _db.actItem_files
.Where(o => o.actItem_num == this_id);
var count = qry.Count(); //pageSize = count;//一次取回??
//if (count==0) throw new HttpResponseException(HttpStatusCode.NotFound);
var qry1 = (pageSize > 0) ? qry.ToPagedList(page, pageSize).ToList() : qry.ToList();
int i = 1;
var list = qry1.Select(x => new
{
id = i++,
num = x.num,
actItem_num = x.actItem_num,
files_num_selected = new
{
text = x.file.subject,
val = x.files_num,
}
}).ToList();
//已有值
var ret = new
{
list = list,
count = count,
};
return Ok(ret);
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/activity/SaveDetailData")]
public IHttpActionResult SaveDetailData([FromBody] Model.actItem_files item)
{
if (item.actItem_num > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.actItem_files _files = _db.actItem_files
.Where(q => q.num == item.num).FirstOrDefault();//修改
if (_files != null)
{
if (item.actItem_num > 0) { _files.actItem_num = item.actItem_num; }
if (item.files_num > 0) { _files.files_num = item.files_num; }
_files.reg_time = DateTime.Now;
_db.SaveChanges();
var ret = _files.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.actItem_files _files = new Model.actItem_files();//新增
if (item.actItem_num > 0) { _files.actItem_num = item.actItem_num; }
if (item.files_num > 0) { _files.files_num = item.files_num; }
_files.reg_time = DateTime.Now;
_db.actItem_files.Add(_files);
_db.SaveChanges();
var ret = _files.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpDelete]
[Route("api/activity/DeleteFilesItem/{id}")]//刪除品項的相關文件
public void DeleteFilesItem(int id)
{
var prod = _db.actItem_files.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.actItem_files.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpPost]
[Route("api/activity/GetKindDetail")]
public IHttpActionResult GetKindDetail([FromBody] Model.activity_kind_detail q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int this_id = q.activity_kind_num;
if (this_id > 0)
{
//檢查
var qry = _db.activity_kind_detail.AsEnumerable();
qry = qry.Where(o => o.activity_kind_num == this_id);
int i = 1;
//已有值
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize > 0) qry = qry.ToPagedList(page, pageSize);
var ret = new
{
list = qry.Select(x => new
{
id = i++,
num = x.num,
activity_kind_num = x.activity_kind_num,
actItem_num = new
{
text = x.actItem?.subject,
val = x.actItem_num,
},
price = x.price ?? 0,
qty = x.qty ?? 0,
}),
count = count,
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/activity/SaveActKindDetail")]
public IHttpActionResult SaveActKindDetail([FromBody] Model.activity_kind_detail item)
{
if (item.activity_kind_num > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.activity_kind_detail _detail = _db.activity_kind_detail.Where(q => q.num == item.num).FirstOrDefault();//修改
if (_detail != null)
{
if (item.activity_kind_num > 0) { _detail.activity_kind_num = item.activity_kind_num; }
if (item.actItem_num > 0) { _detail.actItem_num = item.actItem_num; }
if (item.price.HasValue) { _detail.price = item.price.Value; }
else { _detail.price = null; }
if (item.qty.HasValue) { _detail.qty = item.qty.Value; }
else { _detail.qty = null; }
_detail.reg_time = DateTime.Now;
_db.SaveChanges();
var ret = _detail.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.activity_kind_detail _detail = new Model.activity_kind_detail();//新增
if (item.activity_kind_num > 0) { _detail.activity_kind_num = item.activity_kind_num; }
if (item.actItem_num > 0) { _detail.actItem_num = item.actItem_num; }
if (item.price.HasValue) { _detail.price = item.price.Value; }
else { _detail.price = null; }
if (item.qty.HasValue) { _detail.qty = item.qty.Value; }
else { _detail.qty = null; }
_detail.reg_time = DateTime.Now;
_db.activity_kind_detail.Add(_detail);
_db.SaveChanges();
var ret = _detail.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpDelete]
[Route("api/activity/DeleteActKindDetail/{id}")]//刪除活動分類的detail
public void DeleteActKindDetail(int id)
{
var prod = _db.activity_kind_detail.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.activity_kind_detail.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpPost]
[Route("api/activity/GetActRelaList")]
public IHttpActionResult GetActRelaList([FromBody] Model.activity q, int page, int pageSize = 100,
string sortBy = "", bool sortDesc = false)
{ //if pagesize==-1 get all data
int this_act_id = q.num;
if (this_act_id > 0)
{
//檢查
var prod = _db.activities.AsEnumerable().Where(o => o.num == this_act_id).FirstOrDefault();
if (prod != null)
{
int kind = prod.kind ?? 0; //分類
var qry = _db.activity_relating.AsQueryable();
qry = qry.Where(o => o.activity_num == this_act_id);
qry = qry.OrderBy(o => o.num);
//IEnumerable<Model.activity_relating> qry1=qry.AsEnumerable();
IEnumerable<Model.activity_relating> qry1 = null;
//var retD = qry1;
var count = qry.Count(); //pageSize = count;//一次取回??
if (count > 0)
{
int i = 1;
//已有值
if (pageSize > 0)
{
qry1 = qry.ToPagedList(page, pageSize);
}
else
{
qry1 = qry.ToList();
}
var orderDetails = _db.pro_order_detail
.Where(o => o.pro_order.activity_num == this_act_id)
.ToList();
var ret = new
{
//list = qry1.ToPagedList(page, pageSize).Select(x => new
list = qry1.Select(x => new
{
id = i++,
num = x.num,
activity_num = x.activity_num,
act_item_selected = new
{
text = x.actItem?.subject,
val = x.actItem_num,
},
price = x.price ?? 0,
qty = x.qty ?? 0,
files = x.actItem?.actItem_files.Select(f => new
{
num = f.file.num,
subject = f.file.subject,
list = orderDetails
.Where(o => o.actItem_num == x.actItem_num)
.OrderBy(o => o.print_id)
.ThenBy(o => o.num)
.Select(o => new
{
num = o.num,
print_id = o.print_id,
order_no = o.order_no,
from_id = o.follower1?.u_name,
printed_files = o.printed_files,
isPrinted = (o.printed_files ?? "").Contains("\"" + f.file.num.ToString() + "\""),
}),
}),
}),
count = count,
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
else
{
//未有資料
//帶分類預設
if (kind > 0)
{
int i = 1;
var qry2 = _db.activity_kind_detail.AsEnumerable();
qry2 = qry2.Where(o => o.activity_kind_num == kind);
var count2 = qry2.Count(); //pageSize = count2;//一次取回??
if (pageSize > 0) qry2 = qry2.ToPagedList(page, pageSize);
var ret = new
{
list = qry2.Select(x => new
{
id = i++,
num = 0,
activity_num = this_act_id,
act_item_selected = new
{
text = x.actItem?.subject,
val = x.actItem_num,
},
price = x.price ?? 0,
qty = x.qty ?? 0,
files = new
{
num = "",
subject = "",
list = new
{
num = "",
from_id = "",
printed_files = "",
isPrinted = false,
},
},
}),
count = count2
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
else
{
return NotFound();
}
}
}
else
{
return NotFound();
}
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/activity/GetKindList")]
public IHttpActionResult GetKindList([FromBody] Model.ViewModel.activity_kind q,
int page, int pageSize = 10, string sortBy = "", bool sortDesc = false)
{
var qry = _db.activity_kind.AsEnumerable();
if (q.num.HasValue && q.num > 0)
qry = qry.Where(o => o.num == q.num);
if (!string.IsNullOrEmpty(q.kind))
qry = qry.Where(o => o.kind != null && o.kind.Contains(q.kind));
//qry = qry.OrderBy(O => O.kind).ThenBy(o => o.num);
var qry2 = new TreeView().get_data2(qry.Select(o => new TreeItem()
{
kind = o.kind,
num = o.num,
root = o.root,
range = o.range,
}).OrderBy(x => x.root).ThenBy(x => x.kind).ToList(), 0, 0);
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize <= 0) pageSize = count;
var ret = new
{
list = qry2.ToPagedList(page, pageSize).Select(x => new
{
num = x.num,
kind = new TreeView().RptDash(x.Level) + x.kind,
}),
count = count
};
return Ok(ret);
}
[HttpGet]
[Route("api/activity/GetKindDate/{id}")]
public IHttpActionResult GetKindDate(int id)
{
if (id > 0)
{
var qry = _db.activity_kind.AsEnumerable();
qry = qry.Where(o => o.num == id);
var prop3 = qry.FirstOrDefault();
if (prop3 != null)
{
System.Globalization.ChineseLunisolarCalendar chineseDate = new System.Globalization.ChineseLunisolarCalendar();
string _calendar = prop3.calendar;
DateTime _today = DateTime.Now;
string _startDate_solar = "";
string _endDate_solar = "";
string _startDate_lunar = "";
string _endDate_lunar = "";
if (_calendar == "國曆")
{
DateTime _newDay = Convert.ToDateTime(DateTime.Now.Year + "/" + prop3.month + "/" + prop3.day);
if (_today.Month >= prop3.month && _today.Day >= prop3.day)
{
//過期->預設明年
_newDay = Convert.ToDateTime(DateTime.Now.AddYears(1).Year + "/" + prop3.month + "/" + prop3.day);
}
else
{
//未過期->預設今年
}
_startDate_solar = _newDay.ToString("yyyy-MM-dd");
_endDate_solar = _newDay.ToString("yyyy-MM-dd");
DateTime _newDay2 = Convert.ToDateTime(chineseDate.GetYear(_newDay) + "/" + chineseDate.GetMonth(_newDay) + "/" + chineseDate.GetDayOfMonth(_newDay));
_startDate_lunar = _newDay2.ToString("yyyy-MM-dd");
_endDate_lunar = _newDay2.ToString("yyyy-MM-dd");
//TaiwanLunisolarCalendar tlc = new TaiwanLunisolarCalendar();
//DateTime _newDay3 = Convert.ToDateTime(tlc.GetYear(_newDay) + "/" + tlc.GetMonth(_newDay) + "/" + tlc.GetDayOfMonth(_newDay));
// -> TaiwanLunisolarCalendar 民國年農曆
}
else
{
}
var ret = new
{
startDate_solar = _startDate_solar,
endDate_solar = _endDate_solar,
startDate_lunar = _startDate_lunar,
endDate_lunar = _endDate_lunar,
};
return Ok(ret);
}
else
return NotFound();
}
else
return NotFound();
}
[HttpPost]
[Route("api/activity/SaveRelatingData")]
public IHttpActionResult SaveRelatingData([FromBody] Model.activity_relating item)
{
if (item.activity_num > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.activity_relating _data = _db.activity_relating.Where(q => q.num == item.num).FirstOrDefault();//修改
if (_data != null)
{
if (item.activity_num > 0) { _data.activity_num = item.activity_num; }
if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; }
if (item.price.HasValue) { _data.price = item.price.Value; }
else { _data.price = null; }
if (item.qty.HasValue) { _data.qty = item.qty.Value; }
else { _data.qty = null; }
_data.reg_time = DateTime.Now;
_db.SaveChanges();
var ret = _data.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.activity_relating _data = new Model.activity_relating();//新增
if (item.activity_num > 0) { _data.activity_num = item.activity_num; }
if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; }
if (item.price.HasValue) { _data.price = item.price.Value; }
else { _data.price = null; }
if (item.qty.HasValue) { _data.qty = item.qty.Value; }
else { _data.qty = null; }
_data.reg_time = DateTime.Now;
_db.activity_relating.Add(_data);
_db.SaveChanges();
var ret = _data.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpDelete]
[Route("api/activity/DeleteRelatingData/{id}")]//刪除活動的相關資料
public void DeleteRelatingData(int id)
{
var prod = _db.activity_relating.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.activity_relating.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpPost]
[Route("api/activity/GetActSparesList")]
public IHttpActionResult GetActSparesList([FromBody] Model.activity q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int this_act_id = q.num;
if (this_act_id > 0)
{
//檢查
var prod = _db.activities.AsEnumerable().Where(o => o.num == this_act_id).FirstOrDefault();
if (prod != null)
{
int kind = prod.kind ?? 0; //分類
var qry1 = _db.activity_spares.AsEnumerable();
qry1 = qry1.Where(o => o.activity_num == this_act_id);
qry1 = qry1.OrderBy(o => o.num);
var count = qry1.Count(); //pageSize = count;//一次取回??
int i = 1;
if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize);
var ret = new
{
list = qry1.Select(x => new
{
id = i++,
num = x.num,
activity_num = x.activity_num,
act_item_selected = new
{
text = x.actItem?.subject,
val = x.actItem_num,
},
demo = x.demo,
totalqty = (x.actItem.stocks.Where(o => (o.category == (int)Model.stock.type.Purchase || o.category == (int)Model.stock.type.Return)).Select(o => o.qty).Sum() ?? 0) - x.actItem.stocks.Where(o => (o.category == (int)Model.stock.type.Reduce || o.category == (int)Model.stock.type.Rent)).Select(o => o.qty).Sum() ?? 0
}),
count = count,
};
return Ok(ret);
}
else
{
return NotFound();
}
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/activity/SaveSparesData")]
public IHttpActionResult SaveSparesData([FromBody] Model.activity_spares item)
{
if (item.activity_num > 0)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.activity_spares _data = _db.activity_spares.Where(q => q.num == item.num).FirstOrDefault();//修改
if (_data != null)
{
if (item.activity_num > 0) { _data.activity_num = item.activity_num; }
if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; }
_data.demo = item.demo;
_data.reg_time = DateTime.Now;
_db.SaveChanges();
var ret = _data.num;
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.activity_spares _data = new Model.activity_spares();//新增
if (item.activity_num > 0) { _data.activity_num = item.activity_num; }
if (item.actItem_num > 0) { _data.actItem_num = item.actItem_num; }
_data.demo = item.demo;
_data.reg_time = DateTime.Now;
_db.activity_spares.Add(_data);
_db.SaveChanges();
var ret = _data.num;
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpDelete]
[Route("api/activity/DeleteSparesData/{id}")]//刪除活動的備品資料
public void DeleteSparesData(int id)
{
var prod = _db.activity_spares.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.activity_spares.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpPost]
[Route("api/activity/OrderCheckIn")]
public IHttpActionResult OrderCheckIn([FromBody] Model.activity_check item)
{
if (item.f_num.HasValue && item.activity_num.HasValue && item.qty.HasValue && item.status.HasValue)
{
//同一天不能簽到兩次以上
Model.activity_check check = _db.activity_check
.Where(q => q.f_num == item.f_num && q.activity_num == item.activity_num && q.status == item.status
&& (System.Data.Entity.Core.Objects.EntityFunctions.TruncateTime(q.reg_time) == DateTime.Today))
.FirstOrDefault();
if (check == null)
{
Model.activity_check data = new Model.activity_check();//新增
data.f_num = item.f_num;
data.activity_num = item.activity_num;
data.qty = item.qty;
data.status = item.status;
data.reg_time = DateTime.Now;
_db.activity_check.Add(data);
_db.SaveChanges();
var ret = data.num;
return Ok(ret);
}
else
return NotFound();
}
else
return NotFound();
}
[HttpPost]
[Route("api/activity/GetCheckList")]
public IHttpActionResult GetCheckList([FromBody] Model.ViewModel.activity_check q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
var qry = _db.activity_check.AsEnumerable();
if (!string.IsNullOrEmpty(q.activityTxt))
qry = qry.Where(o => o.activity.subject.Contains(q.activityTxt.Trim()));
if (q.status.HasValue && q.status.Value > 0)
qry = qry.Where(o => o.status == q.status.Value);
if (q.reg_time1.HasValue)
qry = qry.Where(o => o.reg_time >= q.reg_time1.Value);
if (q.reg_time2.HasValue)
qry = qry.Where(o => o.reg_time < Convert.ToDateTime(q.reg_time2.Value).AddDays(1));
if (q.activity_num.HasValue && q.activity_num > 0)
qry = qry.Where(o => o.activity_num == q.activity_num);
if (q.check_time.HasValue)
qry = qry.Where(o => o.reg_time.Value.Date == q.check_time.Value.Date);
if (sortBy.Equals("subject"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.activity_num);
else
qry = qry.OrderBy(o => o.activity_num);
}
else if (sortBy.Equals("statusTxt"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.status);
else
qry = qry.OrderBy(o => o.status);
}
else if (sortBy.Equals("qty"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.f_num).ThenBy(o => o.qty);
else
qry = qry.OrderBy(o => o.f_num).ThenBy(o => o.qty);
}
else if (sortBy.Equals("reg_time_date"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.reg_time);
else
qry = qry.OrderBy(o => o.reg_time);
}
else if (sortBy.Equals("reg_time_time"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.reg_time.Value.TimeOfDay);
else
qry = qry.OrderBy(o => o.reg_time.Value.TimeOfDay);
}
else
qry = qry.OrderByDescending(o => o.num);
var tdesc = publicFun.enum_desc<Model.activity_check.keyin1>();
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize > 0) qry = qry.ToPagedList(page, pageSize);
var ret = new
{
list = qry.Select(x => new
{
num = x.num,
subject = x.activity?.subject,
status = x.status,
statusTxt = x.status != null ? tdesc[x.status ?? 1] : "",
qty = x.qty,
//u_name = x.f_num.HasValue? x.follower.u_name :"",
u_name = x.follower?.u_name,
//reg_timeDate = x.reg_time?.Date,
reg_time = x.reg_time,
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpDelete]
[Route("api/activity/DeleteCheck/{id}")]
public void DeleteCheck(int id)
{
var prod = _db.activity_check.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.activity_check.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpDelete]
[Route("api/activity/DeleteAllCheck/{nums}")]
public void DeleteAllCheck(string nums)
{
if (!string.IsNullOrEmpty(nums))
{
string[] num = nums.Split(',');
int[] ids = new int[num.Length];
for (int i = 0; i < num.Length; i++)
{
if (!string.IsNullOrEmpty(num[i]))
ids[i] = Convert.ToInt32(num[i]);
}
var prod = _db.activity_check.AsEnumerable().Where(q => ids.Contains(q.num)).ToList();
if (prod.Count() > 0)
{
_db.activity_check.RemoveRange(prod);
_db.SaveChanges();
}
}
}
[HttpPost]
[Route("api/activity/GetActivityBoard")]
public IHttpActionResult GetActivityBoard([FromBody] Model.ViewModel.activity_check q)
{
DateTime _now = DateTime.Now;
var qry = _db.activities.AsEnumerable();
if (q.reg_time1.HasValue)
qry = qry.Where(o => o.reg_time >= q.reg_time1.Value);
if (q.reg_time2.HasValue)
qry = qry.Where(o => o.reg_time < Convert.ToDateTime(q.reg_time2.Value).AddDays(1));
qry = qry.Where(o => (_now >= o.startDate_solar && _now < o.endDate_lunar) || (_now < o.startDate_solar && o.dueDate?.Date.CompareTo(_now) <= 180));
qry = qry.OrderByDescending(o => o.num);
qry = qry.Take(10);
var tdesc = publicFun.enum_desc<Model.activity_check.keyin1>();
var r1 = qry.ToList();
var r2 = r1.Select(x => new { num = x.num, subject = x.subject });
var count = qry.Count();
var ret = new
{
list = qry.ToList().Select(x => new
{
num = x.num,
subject = x.subject,
startDate_solar = x.startDate_solar,
endDate_solar = x.endDate_solar,
startDate_lunar = x.startDate_lunar,
endDate_lunar = x.endDate_lunar,
order_qty = x.pro_order.Count(),
check_qty_yest = x.activity_check.Where(c => _now.Date.CompareTo(c.reg_time?.Date) == 1).Count(),
check_qty_today = x.activity_check.Where(c => _now.Date.CompareTo(c.reg_time?.Date) == 0).Count(),
status = (_now >= x.startDate_solar && _now < x.endDate_lunar) ? "進行中" : ((_now < x.startDate_solar && x.dueDate?.Date.CompareTo(_now) <= 180) ? "報名中" : "") //進行中: 活動日期​已開始,未結束​ ; 報名中: 未開始,報名未截止​近半年(?)的活動​
}),
count = count
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpPost]
[Route("api/activity/GetCategoryKindList")]
public IHttpActionResult GetCategoryKindList([FromBody] Model.ViewModel.activity_category_kind q,
int page, int pageSize = 10, string sortBy = "", bool sortDesc = false)
{
var qry = _db.activity_category_kind.AsEnumerable();
if (q.num.HasValue && q.num > 0)
qry = qry.Where(o => o.num == q.num);
if (!string.IsNullOrEmpty(q.kind))
qry = qry.Where(o => o.kind != null && o.kind.Contains(q.kind));
qry = qry.OrderBy(O => O.kind).ThenBy(o => o.num);
var count = qry.Count(); //pageSize = count;//一次取回??
if (pageSize > 0) qry = qry.ToPagedList(page, pageSize);
var ret = new
{
list = qry.Select(x => new
{
num = x.num,
kind = x.kind,
}),
count = count
};
return Ok(ret);
}
}