From 7c3aaf6439c4ca04654252d106d096f0d7e3597e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=89=E7=A5=A5=20=E8=A9=B9?= Date: Thu, 29 Aug 2024 18:58:29 +0800 Subject: [PATCH] updates --- Controllers/ApiController.cs | 86 + Controllers/AuthApiController.cs | 2 +- Modals/DbTableClass.cs | 42 + Modals/resultClass.cs | 10 + Views/Home/ProjectList.cshtml | 333 +-- Views/Home/RateList.cshtml | 2 +- Views/Shared/_LooperLayout.cshtml | 5 +- .../assets/javascript/custom/projectlist.js | 310 ++- .../datepicker/css/bootstrap-datepicker.css | 471 ++++ .../css/bootstrap-datepicker.css.map | 1 + .../css/bootstrap-datepicker.min.css | 9 + .../css/bootstrap-datepicker.min.css.map | 1 + .../css/bootstrap-datepicker.standalone.css | 504 ++++ .../bootstrap-datepicker.standalone.css.map | 1 + .../bootstrap-datepicker.standalone.min.css | 9 + ...ootstrap-datepicker.standalone.min.css.map | 1 + .../datepicker/css/bootstrap-datepicker3.css | 678 ++++++ .../css/bootstrap-datepicker3.css.map | 1 + .../css/bootstrap-datepicker3.min.css | 9 + .../css/bootstrap-datepicker3.min.css.map | 1 + .../css/bootstrap-datepicker3.standalone.css | 707 ++++++ .../bootstrap-datepicker3.standalone.css.map | 1 + .../bootstrap-datepicker3.standalone.min.css | 9 + ...otstrap-datepicker3.standalone.min.css.map | 1 + .../datepicker/js/bootstrap-datepicker.js | 2096 +++++++++++++++++ .../datepicker/js/bootstrap-datepicker.min.js | 9 + .../locales/bootstrap-datepicker.ar.min.js | 1 + .../locales/bootstrap-datepicker.az.min.js | 1 + .../locales/bootstrap-datepicker.bg.min.js | 1 + .../locales/bootstrap-datepicker.bs.min.js | 1 + .../locales/bootstrap-datepicker.ca.min.js | 1 + .../locales/bootstrap-datepicker.cs.min.js | 1 + .../locales/bootstrap-datepicker.cy.min.js | 1 + .../locales/bootstrap-datepicker.da.min.js | 1 + .../locales/bootstrap-datepicker.de.min.js | 1 + .../locales/bootstrap-datepicker.el.min.js | 1 + .../locales/bootstrap-datepicker.en-AU.min.js | 1 + .../locales/bootstrap-datepicker.en-GB.min.js | 1 + .../locales/bootstrap-datepicker.eo.min.js | 1 + .../locales/bootstrap-datepicker.es.min.js | 1 + .../locales/bootstrap-datepicker.et.min.js | 1 + .../locales/bootstrap-datepicker.eu.min.js | 1 + .../locales/bootstrap-datepicker.fa.min.js | 1 + .../locales/bootstrap-datepicker.fi.min.js | 1 + .../locales/bootstrap-datepicker.fo.min.js | 1 + .../locales/bootstrap-datepicker.fr-CH.min.js | 1 + .../locales/bootstrap-datepicker.fr.min.js | 1 + .../locales/bootstrap-datepicker.gl.min.js | 1 + .../locales/bootstrap-datepicker.he.min.js | 1 + .../locales/bootstrap-datepicker.hr.min.js | 1 + .../locales/bootstrap-datepicker.hu.min.js | 1 + .../locales/bootstrap-datepicker.hy.min.js | 1 + .../locales/bootstrap-datepicker.id.min.js | 1 + .../locales/bootstrap-datepicker.is.min.js | 1 + .../locales/bootstrap-datepicker.it-CH.min.js | 1 + .../locales/bootstrap-datepicker.it.min.js | 1 + .../locales/bootstrap-datepicker.ja.min.js | 1 + .../locales/bootstrap-datepicker.ka.min.js | 1 + .../locales/bootstrap-datepicker.kh.min.js | 1 + .../locales/bootstrap-datepicker.kk.min.js | 1 + .../locales/bootstrap-datepicker.ko.min.js | 1 + .../locales/bootstrap-datepicker.kr.min.js | 1 + .../locales/bootstrap-datepicker.lt.min.js | 1 + .../locales/bootstrap-datepicker.lv.min.js | 1 + .../locales/bootstrap-datepicker.me.min.js | 1 + .../locales/bootstrap-datepicker.mk.min.js | 1 + .../locales/bootstrap-datepicker.mn.min.js | 1 + .../locales/bootstrap-datepicker.ms.min.js | 1 + .../locales/bootstrap-datepicker.nb.min.js | 1 + .../locales/bootstrap-datepicker.nl-BE.min.js | 1 + .../locales/bootstrap-datepicker.nl.min.js | 1 + .../locales/bootstrap-datepicker.no.min.js | 1 + .../locales/bootstrap-datepicker.pl.min.js | 1 + .../locales/bootstrap-datepicker.pt-BR.min.js | 1 + .../locales/bootstrap-datepicker.pt.min.js | 1 + .../locales/bootstrap-datepicker.ro.min.js | 1 + .../bootstrap-datepicker.rs-latin.min.js | 1 + .../locales/bootstrap-datepicker.rs.min.js | 1 + .../locales/bootstrap-datepicker.ru.min.js | 1 + .../locales/bootstrap-datepicker.sk.min.js | 1 + .../locales/bootstrap-datepicker.sl.min.js | 1 + .../locales/bootstrap-datepicker.sq.min.js | 1 + .../bootstrap-datepicker.sr-latin.min.js | 1 + .../locales/bootstrap-datepicker.sr.min.js | 1 + .../locales/bootstrap-datepicker.sv.min.js | 1 + .../locales/bootstrap-datepicker.sw.min.js | 1 + .../locales/bootstrap-datepicker.th.min.js | 1 + .../locales/bootstrap-datepicker.tr.min.js | 1 + .../locales/bootstrap-datepicker.uk.min.js | 1 + .../locales/bootstrap-datepicker.vi.min.js | 1 + .../locales/bootstrap-datepicker.zh-CN.min.js | 1 + .../locales/bootstrap-datepicker.zh-TW.min.js | 1 + 92 files changed, 5064 insertions(+), 301 deletions(-) create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.min.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.min.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.standalone.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.standalone.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.standalone.min.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker.standalone.min.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.min.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.min.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.standalone.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.standalone.css.map create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.standalone.min.css create mode 100644 wwwroot/assets/vendor/datepicker/css/bootstrap-datepicker3.standalone.min.css.map create mode 100644 wwwroot/assets/vendor/datepicker/js/bootstrap-datepicker.js create mode 100644 wwwroot/assets/vendor/datepicker/js/bootstrap-datepicker.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ar.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.az.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.bg.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.bs.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ca.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.cs.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.cy.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.da.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.de.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.el.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.en-AU.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.en-GB.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.eo.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.es.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.et.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.eu.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.fa.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.fi.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.fo.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.fr-CH.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.fr.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.gl.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.he.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.hr.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.hu.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.hy.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.id.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.is.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.it-CH.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.it.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ja.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ka.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.kh.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.kk.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ko.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.kr.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.lt.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.lv.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.me.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.mk.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.mn.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ms.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.nb.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.nl-BE.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.nl.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.no.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.pl.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.pt-BR.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.pt.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ro.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.rs-latin.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.rs.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.ru.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sl.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sq.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sr-latin.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sr.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sv.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.sw.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.th.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.tr.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.uk.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.vi.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.zh-CN.min.js create mode 100644 wwwroot/assets/vendor/datepicker/locales/bootstrap-datepicker.zh-TW.min.js diff --git a/Controllers/ApiController.cs b/Controllers/ApiController.cs index e00f4186..f7f1297d 100644 --- a/Controllers/ApiController.cs +++ b/Controllers/ApiController.cs @@ -6,6 +6,8 @@ using System.Data.SqlClient; using Dapper.Contrib.Extensions; using Dapper; using Newtonsoft.Json; +using Org.BouncyCastle.Bcpg.OpenPgp; +using NPOI.OpenXmlFormats.Shared; namespace QuotationMaker.Controllers { @@ -25,6 +27,90 @@ namespace QuotationMaker.Controllers } + [Route("deptList")] + public ActionResult DeptList(IFormCollection obj) + { + deptListResult ret = new deptListResult(); + + authToken token = new authToken(this._httpContextAccessor); + if (token.user_isLogin == false) + { + HttpContext.Response.Cookies.Delete("token_key"); + ret.ret = "no"; + ret.err_code = "99999"; + ret.message = "非登入狀態!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + + + string sqlString = "select * from depts order by dept_order"; + + if (token.user_id != GlobalClass.appsettings("Admin:id")) + { + sqlString = "select * from depts where dept_uid in (select dept_uid from userDept where user_uid = '" + token.user_uid + "' ) order by dept_order "; + } + + ret.depts = conn.Query(sqlString).ToList(); + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + [Route("projectViewList")] + public ActionResult ProjectViewList(IFormCollection obj) { + projectViewResult ret = new projectViewResult(); + authToken token = new authToken(this._httpContextAccessor); + if (token.user_isLogin == false) + { + HttpContext.Response.Cookies.Delete("token_key"); + ret.ret = "no"; + ret.err_code = "99999"; + ret.message = "非登入狀態!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string user_uid = token.user_uid; + string user_perm = token.user_perm; + string dept_uid = obj["dept_uid"].ToString(); + string start_txt = obj["start_txt"].ToString(); + string end_txt = obj["end_txt"].ToString(); + + DateTime startDateTime = DateTime.Parse(start_txt + "/1"); + DateTime endDateTime = DateTime.Parse(end_txt + "/1").AddMonths(1).AddDays(-1); + + string user_uid_list = "'" + user_uid + "'"; + + if (user_perm == "system" && token.user_id != GlobalClass.appsettings("Admin:id")) { + groupUser gpUser = conn.QueryFirstOrDefault("select * from groupUser where dept_uid = @dept_uid and user_uid = @user_uid ", new { dept_uid = dept_uid, user_uid = user_uid }); + + if (gpUser != null) { + List groupUsers = conn.Query("select * from groupUser where group_uid = @group_uid", new { group_uid = gpUser.group_uid }).ToList(); + + foreach (groupUser groupUser in groupUsers) + { + user_uid_list += ", '" + groupUser.user_uid + "'"; + } + } + + + } + + if (user_perm == "system" && token.user_id == GlobalClass.appsettings("Admin:id")) + { + List groupUsers = conn.Query("select * from groupUser where dept_uid = @dept_uid", new { dept_uid = dept_uid }).ToList(); + + foreach (groupUser groupUser in groupUsers) + { + user_uid_list += ", '" + groupUser.user_uid + "'"; + } + } + + ret.projectViews = conn.Query("select * from projectView where project_lastmodify_uid in (@user_list) and project_createdate >= @start_date and project_createdate <= @end_date", new { user_list = user_uid_list, start_date = startDateTime.ToString("yyyy/MM/dd"), end_date = endDateTime.ToString("yyyy/MM/dd 23:59:59") } ).ToList(); + ret.ret = "yes"; + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + [Route("addEditDelGetContactPerson")] public ActionResult AddEditDelContactPerson(IFormCollection obj) { diff --git a/Controllers/AuthApiController.cs b/Controllers/AuthApiController.cs index 7bd0463f..166609f8 100644 --- a/Controllers/AuthApiController.cs +++ b/Controllers/AuthApiController.cs @@ -1387,7 +1387,7 @@ namespace QuotationMaker.Controllers string sqlString = "select * from depts order by dept_order"; if (token.user_id != GlobalClass.appsettings("Admin:id")) { - sqlString = "select * from depts where dept_uid in (select dept_uid from groupUser where user_uid = '" + token.user_uid + "' ) order by dept_order "; + sqlString = "select * from depts where dept_uid in (select dept_uid from userDept where user_uid = '" + token.user_uid + "' ) order by dept_order "; } ret.depts = conn.Query(sqlString).ToList(); diff --git a/Modals/DbTableClass.cs b/Modals/DbTableClass.cs index c5ed37cc..76578868 100644 --- a/Modals/DbTableClass.cs +++ b/Modals/DbTableClass.cs @@ -9,6 +9,48 @@ using Org.BouncyCastle.Bcpg.OpenPgp; public class DbTableClass { + [Table("projectView")] + public class projectView + { + [JsonIgnore] + [Key] + public int project_sn { get; set; } + public string dept_uid { get; set; } = ""; + public string project_ps { get; set; } = ""; + public string project_uid { get; set; } = ""; + public string project_name { get; set; } = ""; + public string project_datetime { get; set; } = ""; + public string company_uid { get; set; } = ""; + public string project_lastmodify_uid { get; set; } = ""; + public DateTime project_createdate { get; set; } = DateTime.Now; + public DateTime project_modifydate { get; set; } = DateTime.Now; + public string company_name { get; set; } = ""; + public string company_serialNo { get; set; } = ""; + public string company_address { get; set; } = ""; + public string company_tel { get; set; } = ""; + public string company_fax { get; set; } = ""; + public string user_id { get; set; } = ""; + public string user_name { get; set; } = ""; + public string user_email { get; set; } = ""; + } + + [Table("project")] + public class project + { + [JsonIgnore] + [Key] + public int project_sn { get; set; } + public string dept_uid { get; set; } = ""; + public string project_uid { get; set; } = ""; + public string project_name { get; set; } = ""; + public string project_datetime { get; set; } = ""; + public string company_uid { get; set; } = ""; + public string project_ps { get; set; } = ""; + public string project_lastmodify_uid { get; set; } = ""; + public DateTime project_createdate { get; set; } = DateTime.Now; + public DateTime project_modifydate { get; set; } = DateTime.Now; + } + [Table("modelSubItem")] public class modelSubItem { diff --git a/Modals/resultClass.cs b/Modals/resultClass.cs index c018bf26..69db580f 100644 --- a/Modals/resultClass.cs +++ b/Modals/resultClass.cs @@ -4,6 +4,14 @@ using Dapper; using static DbTableClass; public class resultClass { + public class projectViewResult + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public List projectViews = new List(); + } + public class modelQuotationResult { public string ret = "no"; @@ -182,4 +190,6 @@ public class resultClass modelSubItems = conn.Query("select * from modelSubItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = objData.modelMainItem_uid}).ToList(); } } + + } diff --git a/Views/Home/ProjectList.cshtml b/Views/Home/ProjectList.cshtml index 349f7303..4b234721 100644 --- a/Views/Home/ProjectList.cshtml +++ b/Views/Home/ProjectList.cshtml @@ -55,6 +55,8 @@ + + } @@ -66,12 +68,12 @@ -

報價單清單

+

專案報價單清單

@@ -90,37 +92,33 @@
-
+
-
+
-
+
- -
- -
-
- -
-
- -
+ + +
+
+
+
+ +
-
- - -
+
@@ -133,7 +131,7 @@
- +
@@ -142,12 +140,10 @@ - - + - - - + + @@ -159,8 +155,8 @@ - -
年度 案號 專案建立時間 專案名稱 狀態 合作對象 資料異動時間 客戶公司 備註
- - - - - - - - - - - - - - - -
合作對象 執行 評價
754000 754000 754000
-
-
- -
- -
- - - - - - - - - -
- -
\ No newline at end of file diff --git a/Views/Home/RateList.cshtml b/Views/Home/RateList.cshtml index 725fb82a..0006dccc 100644 --- a/Views/Home/RateList.cshtml +++ b/Views/Home/RateList.cshtml @@ -99,7 +99,7 @@
- +
diff --git a/Views/Shared/_LooperLayout.cshtml b/Views/Shared/_LooperLayout.cshtml index 13bf052f..85633c9f 100644 --- a/Views/Shared/_LooperLayout.cshtml +++ b/Views/Shared/_LooperLayout.cshtml @@ -194,12 +194,12 @@ - + - + @@ -211,6 +211,7 @@ + diff --git a/wwwroot/assets/javascript/custom/projectlist.js b/wwwroot/assets/javascript/custom/projectlist.js index 3f71d572..8965362e 100644 --- a/wwwroot/assets/javascript/custom/projectlist.js +++ b/wwwroot/assets/javascript/custom/projectlist.js @@ -1,7 +1,309 @@ -var mainTable; -var mainRowID; -var mainPos; +var projectTable; +var projectRowID; +var projectPos; $(document).ready(function () { + deptList(); + companyList(); + loadyearmonth(); + -}); \ No newline at end of file + var actualDate = new Date(); // convert to actual date + var prevDate = new Date(actualDate.getFullYear(), actualDate.getMonth() - 13, actualDate.getDate()); + + var startTxt = prevDate.getFullYear().toString() + "/" + padding(prevDate.getMonth() + 1, 2); + var endTxt = actualDate.getFullYear().toString() + "/" + padding(actualDate.getMonth() + 1, 2); + + const fpStart = flatpickr("#dateStart", { + "locale": "zh_tw", + "plugins": [ + new monthSelectPlugin({ + shorthand: true, //defaults to false + dateFormat: "Y/m", //defaults to "F Y" + altFormat: "Y M", //defaults to "F Y" + theme: "light" // defaults to "light" + }) + ] + }); + + const fpEnd = flatpickr("#dateEnd", { + "locale": "zh_tw", + "plugins": [ + new monthSelectPlugin({ + shorthand: true, //defaults to false + dateFormat: "Y/m", //defaults to "F Y" + altFormat: "Y M", //defaults to "F Y" + theme: "light" // defaults to "light" + }) + ] + }); + + fpStart.setDate(new Date(startTxt + '/1')) + fpEnd.setDate(new Date(endTxt + '/1')) + + $('#projectSaveBtn').on('click', function () { + var company_uid = $('#company_select').val(); + var project_name = $('#project_name').val(); + var project_ps = $('#project_ps').val(); + var project_uid = $('#project_uid').val(); + var mehtod = $('#project_method').val(); + + var msg = ''; + + if (company_uid == "") { + msg += '請選擇客戶公司!\n'; + } + + if (project_name == '') { + msg += '請輸入專案名稱!\n'; + } + + if (msg != '') { + alert(msg); + return; + } + + var formData = { + method: method, + project_uid: project_uid, + project_name: project_name, + company_uid: company_uid, + project_ps: project_ps + } + + }); + + $('#projectNewBtn').on('click', function () { + $('#prjoect_method').val('add'); + $('#clientProjectModal').modal("toggle"); + }); + + function loadyearmonth() { + var actualDate = new Date(); // convert to actual date + + var nowYear = actualDate.getFullYear(); + + for (tmpY = nowYear; tmpY >= 2019; tmpY--) { + $("#project_year").append($("").attr("value", tmpY).text(tmpY + " 年度")); + } + + for (tmpM = 1; tmpM <= 12; tmpM++) { + $("#project_month").append($("").attr("value", tmpM).text(tmpM + " 月")); + + } + + } +}); + +function loadDataTable() { + var dataTables = { + init: function init() { + + this.bindUIActions(); + }, + bindUIActions: function bindUIActions() { + + // event handlers + this.table = this.handleDataTables(); + + // add buttons + //this.table.buttons().container().appendTo('#dt-buttons').unwrap(); + }, + handleDataTables: function handleDataTables() { + //$('#myTable').append(""); + return $('#dt-responsive').DataTable({ + dom: '<\'text-muted\'Bif>\n <\'table-responsive\'trl>\n <\'mt-4\'p>', + lengthChange: true, + lengthMenu: [[25, 50, 100, -1], [25, 50, 100, "All"]], + pageLength: 50, + buttons: [ + //{ + // text: '休假設定', + // action: function (e, dt, node, config) { + // vacationBtnFun(); + + // } + //}, + //'excelHtml5' + ], + language: { + paginate: { + previous: '', + next: '' + }, + buttons: { + copyTitle: 'Data copied', + copyKeys: 'Use your keyboard or menu to select the copy command' + } + }, + autoWidth: false, + ajax: { + url: '/Api/projectViewList', + type: 'POST', + data: function (d) { + Object.assign(d, { + dept_uid: $('#dept_select').val(), + start_txt: $('#dateStart').val(), + end_txt: $('#dateEnd').val() + }); + + return d; + }, + dataSrc: 'projectViews' + }, + rowId: 'project_uid', + deferRender: true, + initComplete: function () { + projectTable = $('#dt-responsive').dataTable(); + $('#dt-responsive').on('click', 'a', function () { + buttonClick(this); + }); + + $('#dt-responsive').on('click', 'button', function () { + buttonClick(this); + }); + + + }, + order: [[0, 'desc']], + info: true, + search: "搜尋:", + searching: true, + columns: [ + { data: 'project_datetime', className: 'align-top text-left', orderable: true, searchable: true }, + { data: 'project_name', className: 'align-top text-left', orderable: false, searchable: true }, + { data: 'company_name', className: 'align-top text-left', orderable: false, searchable: true }, + { data: 'project_ps', className: 'align-top text-left', orderable: false, searchable: false }, + { data: 'project_uid', className: 'align-top text-center', orderable: false, searchable: false } + ], + columnDefs: [ + { + targets: 1, + className: 'align-middle text-left', + orderable: false, + searchable: true, + render: function render(data, type, row, meta) { + + + return '' + row.project_name + ''; + + } + }, + { + targets: 4, + orderable: false, + searchable: false, + render: function render(data, type, row, meta) { + var ret = ''; + + ret += ''; + ret += ''; + return ret; + } + } + + ], + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.childRowImmediate, + type: '' + } + } + }); + }, + handleSearchRecords: function handleSearchRecords() { + var self = this; + + $('#table-search, #filterBy').on('keyup change focus', function (e) { + var filterBy = $('#filterBy').val(); + var hasFilter = filterBy !== ''; + var value = $('#table-search').val(); + + self.table.search('').columns().search('').draw(); + + if (hasFilter) { + self.table.columns(filterBy).search(value).draw(); + } else { + self.table.search(value).draw(); + } + + }); + } + } + + dataTables.init(); +} + +function companyList() { + $.ajax({ + url: "/Api/companyList", + type: "post", + data: null, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + var obj = data.companys; + var items = ""; + + $("#company_select").append($("