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

1052 lines
42 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 Model;
using System.IdentityModel.Metadata;
// api/apporder
//[ezAuthorize(Roles = "admin")]//群組:*
//[ezAuthorize]
public class apporderController : ApiController
{
private Model.ezEntities _db = new Model.ezEntities();
// GET api/<controller>
public IEnumerable<Model.pro_order> Get()
{
var list = _db.pro_order.ToList();
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
public IEnumerable<Model.pro_order> Get(int page, int pageSize = 10,
string sortBy="", bool sortDesc=false)
{
var list = _db.pro_order.OrderBy(o=>o.order_no).ToPagedList(page, pageSize);
if (list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return list;
}
// GET api/<controller>/5
public Model.pro_order Get(string id)
{
var item = _db.pro_order.Where(q => q.order_no == id).FirstOrDefault();
//if (item == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return item;
}
// POST api/<controller>
public void Post([FromBody] Model.pro_order item)
{
}
// PUT api/<controller>/5
public void Put(int id, [FromBody] Model.pro_order item)
{
}
// DELETE api/<controller>/5
public void Delete(string id)
{
var prod = _db.pro_order.AsEnumerable().Where(q => q.order_no == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
//刪除掛單表單
var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == id).ToList();
if (prod3.Count > 0)
{
//刪除掛單明細
foreach (var item3 in prod3)
{
var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList();
if (prod4.Count > 0)
{
_db.bed_order_detail.RemoveRange(prod4); //查詢結果全部刪除
}
}
_db.bed_order.RemoveRange(prod3); //查詢結果全部刪除
}
_db.pro_order_detail.RemoveRange(prod.pro_order_detail);
_db.pro_order.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.Order, (int)Model.admin_log.Status.Delete, prod.order_no);
}
}
}
[HttpDelete]
[Route("api/apporder/DeleteItem/{id}")]
public void DeleteDetail(int id) //刪除訂單明細
{
if (id > 0)
{
var prod = _db.pro_order_detail.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
//刪除掛單表單
var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == prod.order_no).ToList();
if (prod3.Count > 0) //count = 1
{
//刪除掛單明細
foreach (var item3 in prod3)
{
var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList();
if (prod4.Count > 0)
{
_db.bed_order_detail.RemoveRange(prod4); //查詢結果全部刪除
}
}
_db.bed_order.RemoveRange(prod3); //查詢結果全部刪除
}
_db.pro_order_detail.Remove(prod);
_db.SaveChanges(); //執行
}
}
}
[HttpDelete]
[Route("api/apporder/DeleteAll/{nums}")]
public void DeleteAll(string nums)
{
if (!string.IsNullOrEmpty(nums))
{
var ids = nums.TrimEnd(',').Split(',');
var prod = _db.pro_order.AsEnumerable().Where(q => ids.Contains(q.order_no)).ToList();
if (prod.Count() > 0)
{
var prod2 = _db.pro_order_detail.AsEnumerable().Where(q => ids.Contains(Convert.ToString(q.order_no))).ToList();
if (prod2.Count > 0)
{
foreach (var item2 in prod2)
{
var prod3 = _db.bed_order.AsEnumerable().Where(q => q.order_no == item2.order_no && q.o_detail_id == item2.num).ToList();
if (prod3.Count > 0)
{
foreach (var item3 in prod3)
{
var prod4 = _db.bed_order_detail.AsEnumerable().Where(q => q.bed_order_no == item3.bed_order_no).ToList();
if (prod4.Count > 0)
{
_db.bed_order_detail.RemoveRange(prod4);
}
}
_db.bed_order.RemoveRange(prod3);
}
//var prod32 = _db.bed_order.AsEnumerable().Where(q => q.order_no == item2.order_no && q.o_detail_id == item2.num).ToList();
//var prod42 = _db.bed_order_detail.AsEnumerable().Where(q => prod32.Select(qf => qf.order_no).ToArray().Contains(q.bed_order_no)).ToList();
//_db.bed_order_detail.RemoveRange(prod42);
//_db.bed_order.RemoveRange(prod32);
}
_db.pro_order_detail.RemoveRange(prod2);
//_db.SaveChanges();
}
_db.pro_order.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.Order, (int)Model.admin_log.Status.Delete, admin_log.LogViewBtn(prod.Select(x => x.order_no).ToList()));
}
}
}
}
[HttpGet]
[Route("api/apporder/count")]
public int Count()
{
var count = _db.pro_order.Count();
return count;
}
[HttpPost]
[Route("api/apporder/GetList")]
public IHttpActionResult GetList([FromBody] Model.ViewModel.pro_order q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
var qry = _db.pro_order.AsEnumerable();
//var aIDt = _db.actItems.AsEnumerable().Where(f => f.subject.Contains(q.actItemTxt.Trim())).Select(f => f.num);//品項
if (!string.IsNullOrEmpty(q.order_no))
qry = qry.Where(o => o.order_no.Contains(q.order_no.Trim()));
if (!string.IsNullOrEmpty(q.keyin1))
qry = qry.Where(o => o.keyin1.Contains(q.keyin1));
if (q.f_num.HasValue && q.f_num > 0)
qry = qry.Where(o => o.f_num == q.f_num);
if (q.activity_num.HasValue && q.activity_num > 0)
qry = qry.Where(o => o.activity_num == q.activity_num);
if (q.up_time1.HasValue)
qry = qry.Where(o => o.up_time >= q.up_time1.Value);
if (q.up_time2.HasValue)
qry = qry.Where(o => o.up_time < Convert.ToDateTime(q.up_time2.Value).AddDays(1));
if (!string.IsNullOrEmpty(q.address))
qry = qry.Where(o => o.address.Contains(q.address.Trim()));
if (!string.IsNullOrEmpty(q.subject))
qry = qry.Where(o => o.activity_num.HasValue && o.activity.subject.Contains(q.subject?.Trim()));
if (!string.IsNullOrEmpty(q.u_name))
qry = qry.Where(o => o.f_num.HasValue && o.follower.u_name.Contains(q.u_name?.Trim()));
if (!string.IsNullOrEmpty(q.introducerTxt))
qry = qry.Where(o => o.introducer.HasValue && o.follower1.u_name.Contains(q.introducerTxt?.Trim()));
if (!string.IsNullOrEmpty(q.actItemTxt))
{
//qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.order_no == o.order_no && aIDt.ToArray().Contains(f2.actItem_num?.ToString())).Count() > 0);
// qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.order_no == o.order_no && aIDt.Any(x => x == f2.actItem_num)).Count() > 0);
qry = qry.Where(o => o.pro_order_detail.Where(f2 => f2.actItem_num.HasValue && f2.actItem.subject.Contains(q.actItemTxt?.Trim())).Count() > 0);
}
if (!string.IsNullOrEmpty(q.country))
qry = qry.Where(o => o.f_num != null && o.follower?.country == q.country);
if (!string.IsNullOrEmpty(q.country2))
{
if (q.country2 == "1")
{
qry = qry.Where(o => o.f_num != null && o.follower?.country == "158");
}
else if (q.country2 == "2")
{
qry = qry.Where(o => o.f_num != null && o.follower?.country != "158");
}
}
if (sortBy.Equals("order_no"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.order_no);
else
qry = qry.OrderBy(o => o.order_no);
}
else if (sortBy.Equals("keyin1_txt"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.keyin1);
else
qry = qry.OrderBy(o => o.keyin1);
}
else if (sortBy.Equals("up_time"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.up_time);
else
qry = qry.OrderBy(o => o.up_time);
}
else if (sortBy.Equals("u_name"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.follower?.u_name);
else
qry = qry.OrderBy(o => o.follower?.u_name);
}
else if (sortBy.Equals("subject"))
{
if (sortDesc)
qry = qry.OrderByDescending(o => o.activity?.subject);
else
qry = qry.OrderBy(o => o.activity?.subject);
}
else
qry = qry.OrderByDescending(o => o.reg_time);
var ret = new
{
list = qry.ToPagedList(page, pageSize).Select(x => new
{
order_no = x.order_no,
f_num = x.f_num,
u_name = x.f_num.HasValue? x.follower.u_name:"",
activity_num = x.activity_num,
subject = x.activity_num.HasValue? x.activity.subject:"",
keyin1 = x.keyin1,
up_time = x.up_time,
keyin1_txt =Model.pro_order.keyin1_value_to_text(x.keyin1),
}),
count = qry.Count()
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpPost]
[Route("api/apporder/GetItemList")]
public IHttpActionResult GetItemList([FromBody] Model.ViewModel.pro_order_detail q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
string order_no = q.order_no;
if (!string.IsNullOrEmpty( order_no ))
{
//檢查
var prod = _db.pro_order.AsEnumerable().Where(o => o.order_no == order_no).FirstOrDefault();
if (prod != null)
{
int activity = prod.activity_num.HasValue ? prod.activity_num.Value : 0; //活動
var bedDt = _db.bed_order_detail.AsEnumerable().Where(b=>b.bed_order.order_no== order_no ); ;//掛單明細
//var qry1 = _db.pro_order_detail.AsEnumerable();
//qry1 = qry1.Where(o => o.order_no == order_no);
var qry1 = prod.pro_order_detail.AsEnumerable();
//if (!string.IsNullOrEmpty(q.subject))
// qry = qry.Where(o => o.subject.Contains(q.subject));
if (q.actItem_kind_num.HasValue)
{
//項目分類
var _subKinds = new TreeView().subKinds(_db.actItem_kind.Select(o => new TreeItem()
{
num = o.num,
root = o.root,
}).ToList(), q.actItem_kind_num.Value);
qry1 = qry1.Where(o => o.actItem.kind == q.actItem_kind_num || _subKinds.Any(s => s == o.actItem.kind));
}
if (sortBy.Equals("subject"))
{
if (sortDesc)
qry1 = qry1.OrderByDescending(o => o.actItem.subject);
else
qry1 = qry1.OrderBy(o => o.actItem.subject);
}
else
qry1 = qry1.OrderByDescending(o => o.num);
var tdesc = publicFun.enum_desc<Model.pro_order.detailKeyin1>();
int i = 1;
//已有值
if (pageSize > 0) qry1 = qry1.ToPagedList(page, pageSize);
var ret = new
{
list = qry1.Select(x => new
{
id = i++,
num = x.num,
order_no = x.order_no,
actitem_num_selected = new
{
text = x.actItem_num.HasValue ? x.actItem.subject : "",
val = x.actItem_num.HasValue ? x.actItem_num.Value : 0,
},
f_num_selected = new
{
text = x.f_num.HasValue ? x.follower.u_name : "",
val = x.f_num.HasValue ? x.f_num.Value : 0,
},
f_num_tablet = x.f_num_tablet,
address = x.address,
due_date = x.due_date,
start_date = x.start_date,
extend_date = x.extend_date,
from_id_selected = new
{
text = x.from_id.HasValue ? x.follower1.u_name : "",
val = x.from_id.HasValue ? x.from_id : 0,
},
from_id_tablet = x.from_id_tablet,
price = x.price ?? 0,
qty = x.qty ?? 0,
writeBedQty = bedDt.Where(b=>b.bed_order.o_detail_id.Value== x.num && b.checkIn_date.HasValue && b.bed_kind_detail_id.HasValue).Count(), //已劃數量
notBedQty = bedDt.Where(b=>b.bed_order.o_detail_id.Value== x.num &&( !b.checkIn_date.HasValue || !b.bed_kind_detail_id.HasValue)).Count(), //未劃數量
//total = x.total.HasValue ? x.total.Value : 0,
category = x.actItem?.category,
//pay = x.pay ?? 0,
pay = x.pro_order_record.Select(c => c.price).Sum(),
pay_date = x.pay_date,
keyin1_selected = new
{
text = tdesc[x.keyin1.HasValue && x.keyin1.Value>0 ? x.keyin1.Value : 1],
val = x.keyin1,
},
demo = x.demo,
files = x.actItem?.actItem_files.Select(f => new
{
num = f.file.num,
subject = f.file.subject,
word = f.file.word,
cuz_column = f.file.customize_data??"", //??
paperset = f.file.paperset ?? "",
}),
customize_data =x.customize_data??"",
customize_data_comb = new
{
from_id_cuz_data = "",
activity_cuz_data = "",
actitem_cuz_data = "",
order_cuz_data = "",
},
printed_files = x.printed_files ?? "",
//cash_record = x.pro_order_record.Select( c => new {
// c,
// //pay_kind = tdesc2[c.payment.HasValue && x.keyin1.Value > 0 ? x.keyin1.Value : 1],
//}),
}),
count = qry1.Count(),
};
if (prod.pro_order_detail.Count()==0)
{
//未有資料
//帶活動預設
if (activity > 0)
{
i = 1;
var qry2 = _db.activity_relating.AsEnumerable();
qry2 = qry2.Where(o => o.activity_num == activity);
if (q.actItem_kind_num.HasValue)
{
//項目分類
var _subKinds = new TreeView().subKinds(_db.actItem_kind.Select(o => new TreeItem()
{
num = o.num,
root = o.root,
}).ToList(), q.actItem_kind_num.Value);
qry2 = qry2.Where(o => o.actItem.kind == q.actItem_kind_num || _subKinds.Any(s => s == o.actItem.kind));
}
var ret2 = new
{
list = qry2.ToPagedList(page, pageSize).Select(x => new
{
id = i++,
num = 0, //?
order_no = order_no, // ?
actitem_num_selected = new
{
text = x.actItem.subject,
val = x.actItem_num,
},
f_num_selected = new
{
text = "",
val = 0,
},
address = "",
due_date = DateTime.Today.AddMonths(x.actItem.cycle ?? 0).ToString("yyyy-MM-dd"), // 期滿日期:依據 項目維護 所設定的 收費週期 計算後帶入日期
start_date = DateTime.Today.ToString("yyyy-MM-dd"), //預設今天
extend_date = (x.actItem.extend ?? "").Equals("Y") ? DateTime.Today.AddMonths(x.actItem.cycle ?? 0).ToString("yyyy-MM-dd") : "", //應續約日:預設的日期值與期滿日期相同(項目是"續約項目"者)
from_id_selected = new
{
text = prod.f_num.HasValue ? prod.follower.u_name : "", //預設帶報名者
val = prod.f_num.HasValue ? prod.f_num.Value : 0,
},
price = x.price ?? 0,
qty = x.qty ?? 0,
writeBedQty =0,
notBedQty = 0,
//total = x.price.HasValue && x.qty.HasValue ? Convert.ToDouble(x.price.Value) * Convert.ToInt32(x.qty.Value) :0,
category = x.actItem?.category,
pay = 0,
pay_date = "",
keyin1_selected = new
{
text = tdesc[1],
val = 1,
},
demo = "",
files =x.actItem?.actItem_files.Select(f => new
{
num = f.file.num,
subject = f.file.subject,
word = f.file.word,
cuz_column = f.file.customize_data??"", //定義欄位需求
paperset = f.file.paperset ?? "",
}) ,
customize_data = "",
customize_data_comb = new
{
from_id_cuz_data = prod.f_num.HasValue ? prod.follower.customize_data??"" : "",
activity_cuz_data = prod.activity_num.HasValue ? prod.activity.customize_data??"" : "",
actitem_cuz_data = x.actItem.customize_data,
order_cuz_data = prod.customize_data,
},
printed_files ="",
//cash_record = new { },
}),
count = qry2.Count()
};
if (ret2.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret2);
}
else
{
//不須帶預設資料,自行新增項目
return Ok();
}
}
else
return Ok(ret);
}
else
{
return NotFound();
}
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/apporder/SaveDetailData")]
public IHttpActionResult SaveDetailData([FromBody] Model.pro_order_detail item)
{
if (!string.IsNullOrEmpty(item.order_no))
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
Model.pro_order_detail order = _db.pro_order_detail.Where(q => q.num == item.num).FirstOrDefault();//修改
if (order != null)
{
if (item.actItem_num.HasValue && item.actItem_num.Value > 0) { order.actItem_num = item.actItem_num.Value; }
else { order.actItem_num = null; }
if (item.f_num.HasValue && item.f_num.Value > 0) { order.f_num = item.f_num.Value; }
else { order.f_num = null; }
if (item.from_id.HasValue && item.from_id.Value > 0) { order.from_id = item.from_id.Value; }
else { order.from_id = null; }
order.f_num_tablet = item.f_num_tablet;
order.from_id_tablet = item.from_id_tablet;
order.address = item.address;
if (item.start_date.HasValue) { order.start_date = item.start_date.Value; }
else { order.start_date = null; }
if (item.due_date.HasValue) { order.due_date = item.due_date.Value; }
else { order.due_date = null; }
if (item.extend_date.HasValue) { order.extend_date = item.extend_date.Value; }
else { order.extend_date = null; }
if (item.price.HasValue) { order.price = item.price.Value; }
else { order.price = null; }
if (item.qty.HasValue && item.qty.Value > 0) { order.qty = item.qty.Value; }
else { order.qty = null; }
//if (item.total.HasValue) { order.total = item.price.Value; }
//else { order.total = null; }
if (item.pay.HasValue) { order.pay = item.pay.Value; }
else { order.pay = null; }
if (item.pay_date.HasValue) { order.pay_date = item.pay_date.Value; }
else { order.pay_date = null; }
order.keyin1 = item.keyin1;
order.demo = item.demo;
////check customize_data valid column
//var _file = _db.actItem_files.Where(q => q.actItem_num == item.actItem_num).Select(q => q.file.customize_data);
//List<string> _column = new List<string>();
//if (_file != null)
// foreach (var _customize_data in _file)
// {
// string[] k = _customize_data.Split('$');
// foreach (string v in k)
// if (!string.IsNullOrEmpty(v))
// _column.Add("$" + v.Replace("\r", "").Replace("\n", "").TrimEnd()); //有效欄位
// }
//if (item.customize_data != "")
//{
// string[] k = item.customize_data.Split('$');
// foreach (string v in k)
// {
// var _k = v.Split(':');
// if (!string.IsNullOrEmpty(_k[0]))
// for (var i = 0; i < _column.Count; i++)
// if (_column[i] == ("$" + _k[0] + ":"))
// _column[i]=_column[i] + _k[1];
// }
//}
//order.customize_data = _column.Count > 0 ? string.Join("", _column) : "";
order.customize_data = item.customize_data;
_db.SaveChanges();
var ret = new
{
num = order.num,
customize_data = order.customize_data,
};
return Ok(ret);
}
else
return NotFound();
}
else
{
Model.pro_order_detail order = new Model.pro_order_detail();//新增
order.order_no =item.order_no;
if (item.actItem_num.HasValue && item.actItem_num.Value > 0) { order.actItem_num = item.actItem_num.Value; }
else { order.actItem_num = null; }
if (item.f_num.HasValue && item.f_num.Value > 0) { order.f_num = item.f_num.Value; }
else { order.f_num = null; }
if (item.from_id.HasValue && item.from_id.Value > 0) { order.from_id = item.from_id.Value; }
else { order.from_id = null; }
order.f_num_tablet = item.f_num_tablet;
order.from_id_tablet = item.from_id_tablet;
order.address = item.address;
if (item.start_date.HasValue) { order.start_date = item.start_date.Value; }
else { order.start_date = null; }
if (item.due_date.HasValue) { order.due_date = item.due_date.Value; }
else { order.due_date = null; }
if (item.extend_date.HasValue) { order.extend_date = item.extend_date.Value; }
else { order.extend_date = null; }
if (item.price.HasValue) { order.price = item.price.Value; }
else { order.price = null; }
if (item.qty.HasValue && item.qty.Value > 0) { order.qty = item.qty.Value; }
else { order.qty = null; }
if (item.pay.HasValue) { order.pay = item.pay.Value; }
else { order.pay = null; }
if (item.pay_date.HasValue) { order.pay_date = item.pay_date.Value; }
else { order.pay_date = null; }
order.keyin1 = item.keyin1;
order.demo = item.demo;
order.customize_data = item.customize_data;
_db.pro_order_detail.Add(order);
_db.SaveChanges();
var ret = new
{
num = order.num,
customize_data = order.customize_data,
};
return Ok(ret);
}
}
else
{
return NotFound();
}
}
[HttpPost]
[Route("api/apporder/GetUnpayList")]
public IHttpActionResult GetUnpayList([FromBody] Model.ViewModel.follower q, string order_no , int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int _follower = q.num.HasValue && q.num.Value > 0 ? q.num.Value : 0;
if (_follower > 0)
{
//家族 : 家長是我的人,跟我同家長的人,我的家長本人,我本人
var cc = _db.followers.Where(x => x.num == _follower || x.leader == _follower).Select(x => x.num);
var qry = _db.followers.AsEnumerable().Where(f => cc.Any(x => x == f.num) || cc.Any(x => x == f.leader));
//未付款資料
var unpayDt = _db.pro_order_detail.AsEnumerable();
var coDt = unpayDt.Where(x => x.keyin1 == (int)Model.pro_order.detailKeyin1.Collection);//只列出報名狀態為"收款中"的項目
//未付款訂單
var orderDt = _db.pro_order.AsEnumerable();
if (!string.IsNullOrEmpty(order_no))
orderDt = orderDt.Where(x => x.order_no == order_no);
orderDt = orderDt.Where(x => coDt.Select(d => d.order_no).Contains(x.order_no));
//orderDt = orderDt.Where(x => qry.Select(d => d.num).Contains(x.f_num.Value));
orderDt = orderDt.Where(x => qry.Select(f => f.num).Any(f => f == x.f_num));
orderDt = orderDt.OrderByDescending(x => x.reg_time);
int i = 1;
//已有值
var ret = new
{
list = orderDt.ToPagedList(page, pageSize).Select(x => new
{
id = i++,
order_no = x.order_no,
up_time = x.up_time,
reg_time = x.reg_time,
f_num = x.f_num,
u_name = x.f_num.HasValue ? x.follower.u_name : "",
totalPrice = unpayDt.Where(d => d.order_no == x.order_no).Select(o => o.price ?? 0 * o.qty ?? 0).Sum(), //訂單金額
payPrice = unpayDt.Where(d => d.order_no == x.order_no).Select(o => o.pay).Sum(), //已收金額
}),
count = orderDt.Count(),
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
return NotFound();
}
[HttpPost]
[Route("api/apporder/GetUnpayDetail")]
public IHttpActionResult GetUnpayDetail([FromBody] Model.ViewModel.pro_order q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
//未付款資料
var unpayDt = _db.pro_order_detail.AsEnumerable();
unpayDt = unpayDt.Where(x => x.keyin1 == (int)Model.pro_order.detailKeyin1.Collection);//只列出報名狀態為"收款中"的項目
if (!string.IsNullOrEmpty(q.order_no))
unpayDt = unpayDt.Where(x => x.order_no == q.order_no);
unpayDt = unpayDt.OrderByDescending(x => x.num);
int i = 1;
//已有值
var ret = new
{
list = unpayDt.ToPagedList(page, pageSize).Select(x => new
{
id = i++,
order_no = x.order_no,
actItem_num = x.actItem_num,
actItem_numTxt = x.actItem_num.HasValue? x.actItem.subject:"",
f_num = x.f_num,
u_name = x.f_num.HasValue ? x.follower.u_name : "",
price = x.price??0 * x.qty??0, //訂單金額
pay = x.pay??0, //已收金額
}),
count = unpayDt.Count(),
};
if (ret.list == null) throw new HttpResponseException(HttpStatusCode.NotFound);
return Ok(ret);
}
[HttpGet]
[Route("api/apporder/printFileLog/{num}/{detail}")]
public IHttpActionResult printFileLog(int num , int detail)
{
string _num = "\"" + num.ToString() + "\"";
Model.pro_order_detail order = _db.pro_order_detail.Where(q => q.num == detail && !((q.printed_files??"").Contains(_num)) ).FirstOrDefault();//修改
if (order != null)
{
order.printed_files = (order.printed_files ?? "") + _num + ",";
_db.SaveChanges();
return Ok(order.printed_files);
}
return NotFound();
}
[HttpPost]
[Route("api/apporder/printMultiFileLog")]
public IHttpActionResult printMultiFileLog([FromBody] List<int> list, int item, int file)
{
string _num = "\"" + file.ToString() + "\"";
var order = _db.pro_order_detail.Where(q => list.Any( a=>a ==q.num) && !((q.printed_files ?? "").Contains(_num))).ToList();
if (order.Count > 0)
{
foreach (var row in order)
row.printed_files = (row.printed_files ?? "") + _num + ",";
_db.SaveChanges();
return Ok();
}
return NotFound();
}
[HttpGet]
[Route("api/apporder/copyDetailData/{num}/{qty}")]
public IHttpActionResult copyDetailData(int num, int qty)
{
if(qty > 0)
{
var detail = _db.pro_order_detail.Where(q => q.num == num).FirstOrDefault();
if (detail != null)
{
string jsonStr = JsonConvert.SerializeObject(detail, new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii });
for (int i=0; i < qty; i++)
{
Model.pro_order_detail order = new Model.pro_order_detail();//新增
//Get properties from EF that are read / write and not marked witht he NotMappedAttribute
//var sourceProperties = typeof(Model.pro_order_detail)
// .GetProperties()
// .Where(p => p.CanRead && p.CanWrite &&
// p.GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.NotMappedAttribute), true).Length == 0);
//foreach (var property in sourceProperties)
//{
// Copy value
// property.SetValue(order, property.GetValue(detail, null), null);
//}
//order = (Model.pro_order_detail)detail.Clone();
order = JsonConvert.DeserializeObject<Model.pro_order_detail>(jsonStr);
// order = detail; //直接給物件,會傳址,若order.pay = null , 則 detail.pay = null , 且 _db.SaveChanges();只會新增一筆
order.pay = null;
order.keyin1 = (int)Model.pro_order.detailKeyin1.Unconfirmed;
order.printed_files = null;
_db.pro_order_detail.Add(order);
}
_db.SaveChanges();
return Ok();
}
}
return NotFound();
}
[HttpPost]
[Route("api/apporder/GetPastOrderList")]
public IHttpActionResult GetPastOrderList([FromBody] Model.pro_order q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int u_name = q.f_num??0;
if (u_name >0 && (!string.IsNullOrEmpty(q.order_no)))
{
//檢查
var prod = _db.pro_order.AsEnumerable().Where(o => o.f_num == u_name && o.order_no != q.order_no).ToList();
if (prod.Count > 0)
{
var qry = _db.pro_order_detail.AsEnumerable().Where(o => prod.Any(x => x.order_no==o.order_no) );
int i = 1;
var ret = new
{
list = qry.ToPagedList(page, pageSize).Select(x => new
{
id = i++,
num = x.num,
order_no = x.order_no,
up_time = x.pro_order.up_time,
activity_selected = new
{
text = x.pro_order.activity_num.HasValue ? x.pro_order.activity.subject : "",
val = x.pro_order.activity_num.HasValue ? x.pro_order.activity_num.Value : 0,
},
actitem_num_selected = new
{
text = x.actItem_num.HasValue ? x.actItem.subject : "",
val = x.actItem_num.HasValue ? x.actItem_num.Value : 0,
},
}),
count = qry.Count(),
};
return Ok(ret);
}
}
return Ok("沒有以往報名");
}
[HttpPost]
[Route("api/apporder/copyMultiPastItem")]
public IHttpActionResult copyMultiPastItem([FromBody] List<int> list,string order_no)
{
var detail = _db.pro_order_detail.Where(q => list.Any(a => a == q.num) ).OrderByDescending(q=>q.order_no).ToList();
if (detail.Count > 0 && (!string.IsNullOrEmpty(order_no)))
{
foreach(var row in detail)
{
string jsonStr = JsonConvert.SerializeObject(row, new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii });
Model.pro_order_detail order = new Model.pro_order_detail();//新增
order = JsonConvert.DeserializeObject<Model.pro_order_detail>(jsonStr);
order.order_no = order_no;
order.pay = null;
order.keyin1 = (int)Model.pro_order.detailKeyin1.Unconfirmed;
order.printed_files = null;
_db.pro_order_detail.Add(order);
}
_db.SaveChanges();
return Ok();
}
return NotFound();
}
[HttpPost]
[Route("api/apporder/GetPayOrderList")]
public IHttpActionResult GetPayOrderList([FromBody] Model.pro_order_record q, int page, int pageSize = 10,
string sortBy = "", bool sortDesc = false)
{
int detail_num = q.detail_num ?? 0;
if (detail_num > 0 )
{
//檢查
var prod = _db.pro_order_record.AsEnumerable().Where(o => o.detail_num == detail_num )
.OrderByDescending(o=>o.pay_date).ToList();
int i = 1;
var ret = new
{
list = prod.ToPagedList(page, pageSize).Select(x => new
{
id = i++,
num = x.num,
order_no = x.pro_order_detail.order_no,
pay_date = x.pay_date,
payment_selected = new
{
text = x.payment.HasValue && x.payment.Value > 0 ? x.accounting_kind2.kind : "",
val = x.payment.HasValue ? x.payment.Value : 0,
},
price = x.price??0,
organization = x.organization,
bank_code = x.bank_code,
}),
count = prod.Count(),
};
return Ok(ret);
}
return Ok("沒有資料");
}
[HttpDelete]
[Route("api/apporder/DeleteRecordDetail/{id}")]//刪除收款註記
public void DeleteRecordDetail(int id)
{
var prod = _db.pro_order_record.AsEnumerable().Where(q => q.num == id).FirstOrDefault(); //刪除該筆資料
if (prod != null)
{
_db.pro_order_record.Remove(prod);
_db.SaveChanges(); //執行
}
}
[HttpPost]
[Route("api/apporder/SaveRecordDetail")]
public IHttpActionResult SaveRecordDetail([FromBody] Model.pro_order_record item)
{
if (item.detail_num > 0)
{
float total = _db.pro_order_detail.AsEnumerable().Where(x => x.num == item.detail_num).Select(x => x.price.Value * x.qty.Value).Sum();
float pay = _db.pro_order_record.AsEnumerable().Where(x => x.detail_num == item.detail_num).Select(x => x.price.Value).Sum();
if (pay + item.price.Value <= total)
{
//if有資料-修改 , else 新增
if (item.num > 0)
{
_db.Entry(item).State = System.Data.Entity.EntityState.Modified;
_db.SaveChanges();
//Model.bed_kind_detail _detail = _db.bed_kind_detail.Where(q => q.num == item.num).FirstOrDefault();//修改
//if (_detail != null)
//{
// _detail.bed_name = item.bed_name;
// if (item.bed_type.HasValue) { _detail.bed_type = item.bed_type.Value; }
// else { _detail.bed_type = null; }
// _detail.demo = item.demo;
// _db.SaveChanges();
var ret = item.num;
return Ok(ret);
//}
//else
// return NotFound();
}
else
{
item.reg_time = DateTime.Now;
_db.pro_order_record.Add(item);
_db.SaveChanges();
var ret = item.num;
return Ok(ret);
}
}
else
{
return Ok("已收金額不能超過小計");
}
}
else
{
return NotFound();
}
}
}