From b0fd635c988aa26819f653f23846138961e3632b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=89=E7=A5=A5=20=E8=A9=B9?= Date: Wed, 11 Sep 2024 19:00:11 +0800 Subject: [PATCH] updates --- Controllers/ApiController.cs | 128 ++++++++++++++++++ Modals/resultClass.cs | 63 +++++++++ Views/Home/ProjectList.cshtml | 2 +- .../assets/javascript/custom/projectlist.js | 101 +++++++++++++- 4 files changed, 288 insertions(+), 6 deletions(-) diff --git a/Controllers/ApiController.cs b/Controllers/ApiController.cs index 6427a5ac..2ffac10d 100644 --- a/Controllers/ApiController.cs +++ b/Controllers/ApiController.cs @@ -28,6 +28,134 @@ namespace QuotationMaker.Controllers } + [Route("addEditDelQuotation")] + public ActionResult AddEditDelQuotation(IFormCollection obj) { + quotationDetailResult ret = new quotationDetailResult(); + + 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 method = obj["method"].ToString(); + string dept_uid = obj["dept_uid"].ToString(); + string project_uid = obj["project_uid"].ToString(); + string quotation_uid = obj["quotation_uid"].ToString(); + string quotation_version = obj["quotation_version"].ToString(); + string quotation_prodMethod = obj["quotation_prodMethod"].ToString(); + string quotation_date = obj["quotation_date"].ToString(); + string quotation_expStart = obj["quotation_expStart"].ToString(); + string quotation_expEnd = obj["quotation_expEnd"].ToString(); + string quotation_name = obj["quotation_name"].ToString(); + string contactPerson_uid = obj["contactPerson_uid"].ToString(); + string company_uid = obj["company_uid"].ToString(); + string quotation_log = obj["quotation_log"].ToString(); + string quotation_noTaxTotal = obj["quotation_noTaxTotal"].ToString(); + string quotation_specTotal = obj["quotation_specTotal"].ToString(); + string quotation_tax = obj["quotation_tax"].ToString(); + string quotation_grandTotal = obj["quotation_grandTotal"].ToString(); + string quotation_sa = obj["quotation_sa"].ToString(); + string mainItems_jsonstr = obj["mainItems"].ToString(); + string payments_jsonstr = obj["payments"].ToString(); + string invoices_jsonstr = obj["invoices"].ToString(); + + if (method == "add") { + quotation objQuotation = new quotation(); + + quotation_log = "報價單資料成立"; + quotation_uid = "q_" + GlobalClass.CreateRandomCode(24); + quotation_version = "1"; + objQuotation.quotation_uid = quotation_uid; + objQuotation.quotation_version = int.Parse(quotation_version); + objQuotation.dept_uid = dept_uid; + objQuotation.quotation_prodMethod = quotation_prodMethod; + objQuotation.quotation_date = quotation_date; + objQuotation.quotation_expStart = quotation_expStart; + objQuotation.quotation_expEnd= quotation_expEnd; + objQuotation.quotation_name = quotation_name; + objQuotation.project_uid = project_uid; + objQuotation.contactPerson_uid = contactPerson_uid; + objQuotation.company_uid = company_uid; + objQuotation.quotation_log = quotation_log; + objQuotation.quotation_create_uid = token.user_uid; + objQuotation.quotation_modify_uid = token.user_uid; + objQuotation.quotation_noTaxTotal = double.Parse(quotation_noTaxTotal); + objQuotation.quotation_specTotal = double.Parse(quotation_specTotal); + objQuotation.quotation_tax = double.Parse(quotation_tax); + objQuotation.quotation_grandTotal = double.Parse(quotation_grandTotal); + objQuotation.quotation_sa = quotation_sa; + objQuotation.quotation_createdate = DateTime.Now; + objQuotation.quotation_modifydate = DateTime.Now; + + dynamic mainItems_Json; + dynamic payments_Json; + dynamic invoices_Json; + + try + { + mainItems_Json = JsonConvert.DeserializeObject(mainItems_jsonstr); + payments_Json = JsonConvert.DeserializeObject(payments_jsonstr); + invoices_Json = JsonConvert.DeserializeObject(invoices_jsonstr); + + } + catch (Exception ex) + { + ret.ret = "no"; + ret.err_code = "0003"; + ret.message = "mainItems or payments or invoices json error," + ex.Message; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + List quotationMainItems = new List(); + List quotationSubItems = new List(); + + foreach (dynamic item in mainItems_Json) { + string quotationMainItem_uid = "qm_" + GlobalClass.CreateRandomCode(24); + + quotationMainItem newItem = new quotationMainItem(); + newItem.quotation_uid = quotation_uid; + newItem.mainItem_uid = item.mainItem_uid; + newItem.quotationMainItem_uid = quotationMainItem_uid; + newItem.quotationMainItem_name = item.quotationMainItem_name; + newItem.quotationMainItem_ac = double.Parse(item.quotationMainItem_ac); + newItem.quotationMainItem_subTotal = double.Parse(item.quotationMainItem_subTotal); + newItem.quotationMainItem_revoke = "N"; + newItem.quotationMainItem_version = int.Parse(quotation_version); + + quotationMainItems.Add(newItem); + + foreach (dynamic subItem in item.subitems) { + quotationSubItem newSubItem = new quotationSubItem(); + newSubItem.quotationSubItem_uid = "qs" +GlobalClass.CreateRandomCode(24); + newSubItem.quotationMainItem_uid = quotationMainItem_uid; + newSubItem.quotation_uid = quotation_uid; + newSubItem.subItem_uid = subItem.subItem_uid; + newSubItem.quotationSubItem_name = subItem.subItem_name; + newSubItem.quotationSubItem_descript = subItem.subItem_descript; + newSubItem.quotationSubItem_price = double.Parse(subItem.subItem_price); + newSubItem.quotationSubItem_unitType = subItem.quotationSubItem_unitType; + newSubItem.quotationSubItem_number = double.Parse(subItem.quotationSubItem_number); + newSubItem.quotationSubItem_subTotal = double.Parse(subItem.quotationSubItem_subTotal); + newSubItem.quotationSubItem_hasAC = subItem.quotationSubItem_hasAC; + newSubItem.quotationSubItem_revoke = "N"; + newSubItem.quotationSubItem_version = int.Parse(quotation_version); + + quotationSubItems.Add(newSubItem); + } + } + + } + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + [Route("getModelQuotation")] public ActionResult AddEditDelGetModelQuotation(IFormCollection obj) { diff --git a/Modals/resultClass.cs b/Modals/resultClass.cs index fddd6080..b6d1289f 100644 --- a/Modals/resultClass.cs +++ b/Modals/resultClass.cs @@ -4,6 +4,15 @@ using Dapper; using static DbTableClass; public class resultClass { + public class quotationDetailResult + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public quotationDetail quotationDetail = new quotationDetail(); + public quotationView quotationView = new quotationView(); + } + public class quotationViewListResult { public string ret = "no"; @@ -148,6 +157,60 @@ public class resultClass } } + public class quotationDetail : quotation { + SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); + + public List quotationMainItemDetails = new List(); + public List payments = new List(); + public List invoices = new List(); + + public quotationDetail() { } + + public quotationDetail(quotation objData) { + Type projectType = objData.GetType(); + + foreach (var prop in projectType.GetProperties()) + { + string propName = prop.Name; + var valueProperty = projectType.GetProperty(propName); + object propValue = valueProperty.GetValue(objData, null); + + this.GetType().GetProperty(propName).SetValue(this, propValue); + } + + List quotationMainItems = conn.Query("select * from quotationMainItem where quotationSubItem_version = @quotationSubItem_version and quotation_uid = @quotation_uid ", new { quotationSubItem_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList(); + + foreach (quotationMainItem qItem in quotationMainItems) { + quotationMainItemDetails.Add(new quotationMainItemDetail(qItem)); + } + + payments = conn.Query("select * from payment where payment_version = @payment_version and quotation_uid = @quotation_uid ", new { payment_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList(); + invoices = conn.Query("select * from invoice where invoice_version = @invoice_version and quotation_uid = @quotation_uid ", new { invoice_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList(); + } + } + + public class quotationMainItemDetail : quotationMainItem { + SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); + public List quotationSubItems = new List(); + + public quotationMainItemDetail() { } + + public quotationMainItemDetail(quotationMainItem objData) { + Type projectType = objData.GetType(); + + foreach (var prop in projectType.GetProperties()) + { + string propName = prop.Name; + var valueProperty = projectType.GetProperty(propName); + object propValue = valueProperty.GetValue(objData, null); + + this.GetType().GetProperty(propName).SetValue(this, propValue); + } + + quotationSubItems = conn.Query("select * from quotationSubItem where quotationSubItem_version = @quotationSubItem_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotationSubItem_version = this.quotationMainItem_version, quotationMainItem_uid = this.quotationMainItem_uid }).ToList(); + } + } + public class modelQuotationDetail : modelQuotation { SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString")); diff --git a/Views/Home/ProjectList.cshtml b/Views/Home/ProjectList.cshtml index f3dab6fa..386338f3 100644 --- a/Views/Home/ProjectList.cshtml +++ b/Views/Home/ProjectList.cshtml @@ -400,7 +400,7 @@
- +
diff --git a/wwwroot/assets/javascript/custom/projectlist.js b/wwwroot/assets/javascript/custom/projectlist.js index 6e634855..332f50d9 100644 --- a/wwwroot/assets/javascript/custom/projectlist.js +++ b/wwwroot/assets/javascript/custom/projectlist.js @@ -697,7 +697,36 @@ $(document).ready(function () { var contactPerson_uid = $('#contactPerson_uid').val(); var contactPerson_uid_old = $('#contactPerson_uid_old').val(); var company_uid = $('#quotation_company_uid').val(); - + var quotation_noTaxTotal = $('#quotation_noTaxTotal').val(); + var quotation_noTaxTotal_old = $('#quotation_noTaxTotal_old').val(); + var quotation_specTotal = $('#quotation_specTotal').val(); + var quotation_specTotal_old = $('#quotation_specTotal_old').val(); + var quotation_tax = $('#quotation_tax').val(); + var quotation_tax_old = $('#quotation_tax_old').val(); + var quotation_grandTotal = $('quotation_grandTotal').val(); + var quotation_grandTotal_old = $('#quotation_grandTotal_old').val(); + var quotation_sa = $('quotation_sa').val(); + var quotation_sa_old = $('#quotation_sa_old').val(); + + var err_msg = ''; + + if (quotation_date == '') { + err_msg += '請輸入報價日期!\n'; + } + + if (quotation_name == '') { + err_msg += '請輸入報價單名稱!\n'; + } + + if (quotation_expStart == '' || quotation_expEnd == '') { + err_msg += '請輸入報價有效起訖日期!\n'; + } + + if (err_msg != '') { + alert(err_msg); + return; + } + var quotation_log = ''; if ($('#quotation_custom').prop('checked') == true) { @@ -725,6 +754,26 @@ $(document).ready(function () { quotation_log += '客戶窗口人選變更\n'; } + if (quotation_noTaxTotal != quotation_noTaxTotal_old) { + quotation_log += '專案總價由 ' + AppendComma(quotation_noTaxTotal_old) + ' 變更為 ' + AppendComma(quotation_noTaxTotal) + '\n'; + } + + if (quotation_specTotal != quotation_specTotal_old) { + quotation_log += '專案優惠總價由 ' + AppendComma(quotation_specTotal_old) + ' 變更為 ' + AppendComma(quotation_specTotal) + '\n'; + } + + if (quotation_tax != quotation_tax_old) { + quotation_log += '加值營業稅由 ' + AppendComma(quotation_tax_old) + ' 變更為 ' + AppendComma(quotation_tax) + '\n'; + } + + if (quotation_grandTotal != quotation_grandTotal_old) { + quotation_log += '實際總價由 ' + AppendComma(quotation_grandTotal_old) + ' 變更為 ' + AppendComma(quotation_grandTotal) + '\n'; + } + + if (quotation_sa != cquotation_sa_old) { + quotation_log += '製作及維護服務協議條款內容有所變更\n'; + } + $.each(deledMainItems, function (index, value) { quotation_log += value.mainItem_msg + '\n'; }); @@ -890,6 +939,8 @@ $(document).ready(function () { var formData = { method: quotation_method, + project_uid: $('#quotation_project_uid').val(), + dept_uid: $('#dept_select').val(), quotation_uid: quotation_uid, quotation_version: quotation_version, quotation_prodMethod: quotation_prodMethod, @@ -900,12 +951,52 @@ $(document).ready(function () { contactPerson_uid: contactPerson_uid, company_uid: company_uid, quotation_log: quotation_log, - mainItems: mainItems, - payments: payments, - invoices: invoices + quotation_noTaxTotal: quotation_noTaxTotal, + quotation_specTotal: quotation_specTotal, + quotation_tax: quotation_tax, + quotation_grandTotal: quotation_grandTotal, + quotation_sa: quotation_sa, + mainItems: JSON.stringify(mainItems), + payments: JSON.stringify(payments), + invoices: JSON.stringify(invoices) } - var testflag = 1; + if (quotation_log == '' && quotation_method == 'edit') { + alert('資料沒有異動,取消儲存!'); + return; + } + + $.ajax({ + url: "/Api/addEditDelQuotation", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + //var obj = data.projectViews[0]; + + if (method == "add") { + //projectTable.fnAddData(obj); + } + + if (method == "edit") { + //projectTable.fnUpdate(obj, projectRowPos); + } + + + + //$('#clientProjectModal').modal('toggle'); + } else { + alert(data.message); + + if (data.err_code == "99999") { + location.href = "/Root/Login"; + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('網路或伺服器發生錯誤,請稍後重試!'); + } + }); }); });