diff --git a/Controllers/AuthApiController.cs b/Controllers/AuthApiController.cs index 81b3cb79..7bd0463f 100644 --- a/Controllers/AuthApiController.cs +++ b/Controllers/AuthApiController.cs @@ -23,6 +23,41 @@ namespace QuotationMaker.Controllers this._httpContextAccessor = httpContextAccessor; } + [Route("authModelQuotationList")] + public ActionResult AuthModelQuotationList(IFormCollection obj) { + modelQuotationResult ret = new modelQuotationResult(); + + 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"); + } + + if (token.user_perm != "system") + { + ret.ret = "no"; + ret.err_code = "90001"; + ret.message = "此帳號無此api使用權限!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string dept_uid = obj["dept_uid"].ToString(); + string modelProj_uid = obj["modelProj_uid"].ToString(); + + List modelQuotations = conn.Query("select * from modelQuotation where dept_uid = @dept_uid and modelProj_uid = @modelProj_uid", new { dept_uid = dept_uid, modelProj_uid = modelProj_uid }).ToList(); + + foreach (modelQuotation modelQuotation in modelQuotations) { + ret.modelQuotationDetails.Add(new modelQuotationDetail(modelQuotation)); + } + + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + [Route("addEditDelGetModelQuotation")] public ActionResult AddEditDelGetModelQuotation(IFormCollection obj) { @@ -167,7 +202,7 @@ namespace QuotationMaker.Controllers modelMainItems.Add(newModelMainItem); - conn.Insert(newModelSubItems); + } modelQuotation newQuotation = new modelQuotation(); @@ -186,6 +221,261 @@ namespace QuotationMaker.Controllers return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } + if (modelQuotation_uid.Trim() == "") + { + ret.ret = "no"; + ret.err_code = "0002"; + ret.message = "沒有modelQuotation_uid!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + modelQuotation modelQuotation = conn.QueryFirstOrDefault("select * from modelQuotation where modelQuotation_uid = @modelQuotation_uid ", new { modelQuotation_uid = modelQuotation_uid }); + + if (method == "get") { + if (modelQuotation == null) { + ret.ret = "no"; + ret.err_code = "0009"; + ret.message = "沒有此modelQuotation_uid資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + ret.modelQuotationDetails.Add(new modelQuotationDetail(modelQuotation)); + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "edit") { + if (modelQuotation == null) + { + ret.ret = "no"; + ret.err_code = "0009"; + ret.message = "沒有此modelQuotation_uid資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + modelQuotation.modelQuotation_name = modelQuotation_name; + modelQuotation.modelQuotation_lastmodify_uid = token.user_uid; + modelQuotation.modelQuotation_modifydate = DateTime.Now; + + dynamic mainItemsJson; + dynamic deledMainItemsJson; + dynamic deledSubItemsJson; + + try + { + mainItemsJson = JsonConvert.DeserializeObject(mainItemsJsonTxt); + deledMainItemsJson = JsonConvert.DeserializeObject(deledMainItemsJsonTxt); + deledSubItemsJson = JsonConvert.DeserializeObject(deledSubItemsJsonTxt); + + } + catch (Exception ex) + { + ret.ret = "no"; + ret.err_code = "0003"; + ret.message = "json error," + ex.Message; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + foreach (dynamic item in deledSubItemsJson) { + string modelSubItem_uid = item.modelSubItem_uid; + + conn.Execute("delete modelSubItem where modelSubItem_uid = @modelSubItem_uid", new { modelSubItem_uid = modelSubItem_uid }); + + } + + foreach (dynamic item in deledMainItemsJson) { + string modelMainItem_uid = item.modelMainItem_uid; + + conn.Execute("delete modelMainItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = modelMainItem_uid }); + conn.Execute("delete modelSubItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = modelMainItem_uid }); + } + + foreach (dynamic item in mainItemsJson) + { + string mainItem_method = item.method; + string mainItem_uid = item.mainItem_uid; + string modelMainItem_uid = item.modelMainItem_uid; + + + string modelMainItem_name = item.modelMainItem_name; + string modelMainItem_ac = item.modelMainItem_ac; + + if (mainItem_method == "add") { + modelMainItem_uid = GlobalClass.CreateRandomCode(24); + + modelMainItem newModelMainItem = new modelMainItem(); + + newModelMainItem.mainItem_uid = mainItem_uid; + newModelMainItem.modelMainItem_uid = modelMainItem_uid; + newModelMainItem.modelMainItem_name = modelMainItem_name; + newModelMainItem.modelMainItem_ac = double.Parse(modelMainItem_ac); + newModelMainItem.modelQuotation_uid = modelQuotation_uid; + newModelMainItem.modelMainItem_lastModify_uid = token.user_uid; + + double acValue = double.Parse(modelMainItem_ac) / 100; + double total = 0; + + foreach (dynamic subItem in item.subItems) + { + string subItem_method = subItem.method; + string modelSubItem_uid = subItem.modelSubItem_uid; + modelSubItem_uid = GlobalClass.CreateRandomCode(24); + string modelSubItem_name = subItem.modelSubItem_name; + string modelSubItem_descript = subItem.modelSubItem_descript; + + double modelSubItem_price = double.Parse(Convert.ToString(subItem.modelSubItem_price)); + string modelSubItem_unitType = subItem.modelSubItem_unitType; + double modelSubItem_number = double.Parse(Convert.ToString(subItem.modelSubItem_number)); + double modelSubItem_subTotal = double.Parse(Convert.ToString(subItem.modelSubItem_subTotal)); + string modelSubItem_hasAC = subItem.modelSubItem_hasAC; + + if (modelSubItem_hasAC == "Y") + { + total += modelSubItem_subTotal * (1 + acValue); + } + else + { + total += modelSubItem_subTotal; + } + + modelSubItem newModelSubItem = new modelSubItem(); + newModelSubItem.modelMainItem_uid = modelMainItem_uid; + newModelSubItem.modelSubItem_uid = modelSubItem_uid; + newModelSubItem.modelSubItem_name = modelSubItem_name; + newModelSubItem.modelSubItem_descript = modelSubItem_descript; + newModelSubItem.modelSubItem_price = modelSubItem_price; + newModelSubItem.modelSubItem_number = modelSubItem_number; + newModelSubItem.modelSubItem_subTotal = modelSubItem_subTotal; + newModelSubItem.modelSubItem_unitType = modelSubItem_unitType; + newModelSubItem.modelSubItem_hasAC = modelSubItem_hasAC; + newModelSubItem.modelSubItem_lastModify_uid = token.user_uid; + + conn.Insert(newModelSubItem); + } + + newModelMainItem.modelMainItem_subTotal = total; + + conn.Insert(newModelMainItem); + } + + if (mainItem_method == "edit") { + modelMainItem editModelMainItem = conn.QueryFirstOrDefault("select * from modelMainItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = modelMainItem_uid }); + + if (editModelMainItem != null) { + editModelMainItem.mainItem_uid = mainItem_uid; + editModelMainItem.modelMainItem_uid = modelMainItem_uid; + editModelMainItem.modelMainItem_name = modelMainItem_name; + editModelMainItem.modelMainItem_ac = double.Parse(modelMainItem_ac); + editModelMainItem.modelQuotation_uid = modelQuotation_uid; + editModelMainItem.modelMainItem_lastModify_uid = token.user_uid; + editModelMainItem.modelMainItem_modifydate = DateTime.Now; + + double acValue = double.Parse(modelMainItem_ac) / 100; + double total = 0; + + foreach (dynamic subItem in item.subItems) + { + string subItem_method = subItem.method; + string modelSubItem_uid = subItem.modelSubItem_uid; + string modelSubItem_name = subItem.modelSubItem_name; + string modelSubItem_descript = subItem.modelSubItem_descript; + + double modelSubItem_price = double.Parse(Convert.ToString(subItem.modelSubItem_price)); + string modelSubItem_unitType = subItem.modelSubItem_unitType; + double modelSubItem_number = double.Parse(Convert.ToString(subItem.modelSubItem_number)); + double modelSubItem_subTotal = double.Parse(Convert.ToString(subItem.modelSubItem_subTotal)); + string modelSubItem_hasAC = subItem.modelSubItem_hasAC; + + if (modelSubItem_hasAC == "Y") + { + total += modelSubItem_subTotal * (1 + acValue); + } + else + { + total += modelSubItem_subTotal; + } + + if (subItem_method == "add") { + + modelSubItem_uid = GlobalClass.CreateRandomCode(24); + + + modelSubItem newModelSubItem = new modelSubItem(); + newModelSubItem.modelMainItem_uid = modelMainItem_uid; + newModelSubItem.modelSubItem_uid = modelSubItem_uid; + newModelSubItem.modelSubItem_name = modelSubItem_name; + newModelSubItem.modelSubItem_descript = modelSubItem_descript; + newModelSubItem.modelSubItem_price = modelSubItem_price; + newModelSubItem.modelSubItem_number = modelSubItem_number; + newModelSubItem.modelSubItem_subTotal = modelSubItem_subTotal; + newModelSubItem.modelSubItem_unitType = modelSubItem_unitType; + newModelSubItem.modelSubItem_hasAC = modelSubItem_hasAC; + newModelSubItem.modelSubItem_lastModify_uid = token.user_uid; + + conn.Insert(newModelSubItem); + } + + if (subItem_method == "edit") { + + + modelSubItem editSubItem = conn.QueryFirstOrDefault("select * from modelSubItem where modelSubItem_uid = @modelSubItem_uid ", new { modelSubItem_uid = modelSubItem_uid }); + + if (editSubItem != null) { + + editSubItem.modelMainItem_uid = modelMainItem_uid; + editSubItem.modelSubItem_name = modelSubItem_name; + editSubItem.modelSubItem_descript = modelSubItem_descript; + editSubItem.modelSubItem_price = modelSubItem_price; + editSubItem.modelSubItem_number = modelSubItem_number; + editSubItem.modelSubItem_subTotal = modelSubItem_subTotal; + editSubItem.modelSubItem_unitType = modelSubItem_unitType; + editSubItem.modelSubItem_hasAC = modelSubItem_hasAC; + editSubItem.modelSubItem_lastModify_uid = token.user_uid; + editSubItem.modelSubItem_modifydate = DateTime.Now; + + conn.Update(editSubItem); + } + } + + } + + editModelMainItem.modelMainItem_subTotal = total; + + conn.Update(editModelMainItem); + } + } + } + + conn.Update(modelQuotation); + + ret.modelQuotationDetails.Add(new modelQuotationDetail(modelQuotation)); + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + if (method == "del") { + + if (modelQuotation == null) + { + ret.ret = "no"; + ret.err_code = "0009"; + ret.message = "沒有此modelQuotation_uid資料可刪除!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + List modelMainItems = conn.Query("select * from modelMainItem where modelQuotation_uid = @modelQuotation_uid", new { modelQuotation_uid = modelQuotation.modelQuotation_uid }).ToList(); + + foreach (modelMainItem modelMainItem in modelMainItems) { + string modelMainItem_uid = modelMainItem.modelMainItem_uid; + conn.Execute("delete modelSubItem where modelMainItem_uid = @modelMainItem_uid", new { modelMainItem_uid = modelMainItem_uid }); + conn.Delete(modelMainItem); + } + + conn.Delete(modelQuotation); + ret.ret = "yes"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } diff --git a/Views/Home/ModalList.cshtml b/Views/Home/ModalList.cshtml index 28229a03..ce921a4f 100644 --- a/Views/Home/ModalList.cshtml +++ b/Views/Home/ModalList.cshtml @@ -183,7 +183,7 @@ @@ -246,7 +246,7 @@ diff --git a/wwwroot/assets/javascript/custom/modallist.js b/wwwroot/assets/javascript/custom/modallist.js index 6ec569a1..d1e76cf6 100644 --- a/wwwroot/assets/javascript/custom/modallist.js +++ b/wwwroot/assets/javascript/custom/modallist.js @@ -27,7 +27,7 @@ $(document).ready(function () { //報價單範本儲存鈕 $('#modelQuotationDialogSaveBtn').on('click', function () { - var method = $('#modelMainItem_method').val(); + var method = $('#modelQuotation_method').val(); var modelQuotation_uid = $('#modelQuotation_uid').val(); var modelMainItem_uid = $('#modelMainItem_uid').val(); var modelQuotation_name = $('#modelQuotation_name').val(); @@ -105,13 +105,19 @@ $(document).ready(function () { data: quotationForm, success: function (data, textStatus, jqXHR) { if (data.ret == "yes") { - if (method == 'add') { + var obj = data.modelQuotationDetails[0]; + if (method == "add") { + modelQuotationTable.fnAddData(obj); + alert('新增範本完成!'); } if (method == 'edit') { - + modelQuotationTable.fnUpdate(obj, modelQuotationRowPos); + alert('儲存範本完成'); } + + $('#clientModelQuotationPreviewModal').modal('toggle'); } else { alert(data.message); @@ -327,7 +333,8 @@ $(document).ready(function () { $('#modelQuotationListNewBtn').on('click', function () { deledMainItems = []; deledSubItems = []; - + $('#modelQuotation_method').val('add'); + $('#modelItem_div').html(''); $('#clientModelQuotationPreviewModal').modal('toggle'); }); @@ -434,12 +441,12 @@ function editSubItemButton(obj) { $('#modelSubItem_method').val('edit'); $('#modelSubItem_uid').val(model_subitem_uid); $('#parent_Item_uid').val(parent_item_uid); - $('#model_parent_data_uid').val(modelMainItem_uid); - $('#modelSubItem_name').val(subItem_name); - $('#modelSubItem_descript').val(modelSubItem_descript); - $('#modelSubItem_price').val(modelSubItem_price); - $('#modelSubItem_unitType').val(modelSubItem_unitType); - $('#modelSubItem_number').val(modelSubItem_number); + $('#model_parent_data_uid').val(modelMainItem_uid).trigger('change'); + $('#modelSubItem_name').val(subItem_name).trigger('change'); + $('#modelSubItem_descript').val(modelSubItem_descript).trigger('change'); + $('#modelSubItem_price').val(modelSubItem_price).trigger('change'); + $('#modelSubItem_unitType').val(modelSubItem_unitType).trigger('change'); + $('#modelSubItem_number').val(modelSubItem_number).trigger('change'); if (modelSubItem_hasAC == 'Y') { $('#modelSubItem_hasAC').prop('checked', true).trigger('change'); @@ -727,7 +734,7 @@ function loadModelQuotationDataTable() { }, handleDataTables: function handleDataTables() { //$('#myTable').append(""); - return $('#dt-responsive-subItem').DataTable({ + return $('#dt-responsive-modelQuotation').DataTable({ dom: '<\'text-muted\'Bif>\n <\'table-responsive\'trl>\n <\'mt-4\'p>', lengthChange: true, lengthMenu: [[25, 50, 100, -1], [25, 50, 100, "All"]], @@ -767,7 +774,7 @@ function loadModelQuotationDataTable() { }, - order: [[0, 'desc']], + order: [[1, 'desc']], info: true, search: "搜尋:", searching: true, @@ -784,7 +791,7 @@ function loadModelQuotationDataTable() { searchable: true, render: function render(data, type, row, meta) { - return '' + row.modelQuotation_name + ''; + return row.modelQuotation_name; } }, @@ -1025,6 +1032,170 @@ function deptList() { }); } +function mainItemHtml(obj) { + var htmlCode = ''; + htmlCode += ''; + htmlCode += '
'; + htmlCode += '
'; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' ' + obj.modelMainItem_name + ''; + htmlCode += '
'; + htmlCode += ' '; + htmlCode += '
'; + htmlCode += ' '; + htmlCode += '
'; + htmlCode += ' '; + htmlCode += '
    '; + + $.each(obj.modelSubItems, function (i, subitem) { + htmlCode += subItemHtml(subitem); + }); + + htmlCode += ' '; + htmlCode += '
'; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += '
'; + + return htmlCode; +} + +function subItemHtml(obj) { + var htmlCode = ''; + + htmlCode += '
  • '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += ' '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += ' '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '

    '; + htmlCode += ' ' + obj.modelSubItem_name; + htmlCode += '


    '; + htmlCode += '

    '; + htmlCode += ' ' + obj.modelSubItem_descript; + htmlCode += '


    '; + htmlCode += '

    '; + htmlCode += ' 單價 NT$' + AppendComma(obj.modelSubItem_price) + ', 數量 ' + obj.modelSubItem_number + ', 單位 ' + obj.modelSubItem_unitType + '\r\n'; + htmlCode += ' 小計 NT$' + AppendComma(obj.modelSubItem_subTotal) + '\r\n'; + htmlCode += ' AC(' + obj.modelSubItem_hasAC + ')'; + htmlCode += '

    '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += ' '; + htmlCode += '
    '; + htmlCode += '
    '; + htmlCode += '
  • '; + + return htmlCode; +} + +function buttonModelQuotationClick(obj) { + var type = obj.getAttribute('data-method'); + var uid = obj.getAttribute('data-uid'); + var dept_uid = $('#dept_select').val(); + var modelProj_uid = $('#parent_modelProj_uid').val(); + + modelQuotationRowID = $('#' + uid); + + modelQuotationRowPos = modelQuotationTable.fnGetPosition($('#' + uid)[0]); + + if (type == "del") { + if (confirm('確定刪除此報價單範本? ')) { + if (confirm('請再次確定刪除此報價單範本? ')) { + var formData = { + dept_uid: dept_uid, + modelQuotation_uid: uid, + modelProj_uid: modelProj_uid, + method: 'del' + } + + $.ajax({ + url: "/AuthApi/addEditDelGetModelQuotation", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + var row = modelQuotationTable.api().row(modelQuotationRowID).remove().draw(false); + alert('刪除成功'); + + } else { + alert(data.message); + + if (data.err_code == "99999") { + location.href = "/Root/Login"; + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('網路或伺服器發生錯誤,請稍後重試!'); + } + }); + } + } + + } + + if (type == "edit") { + var formData = { + dept_uid: dept_uid, + modelQuotation_uid: uid, + modelProj_uid: modelProj_uid, + method: 'get' + } + + $.ajax({ + url: "/AuthApi/addEditDelGetModelQuotation", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + var obj = data.modelQuotationDetails[0]; + + $("#modelQuotation_method").val('edit'); + $("#modelQuotation_uid").val(obj.modelQuotation_uid); + $("#modelQuotation_name").val(obj.modelQuotation_name).trigger('change'); + + var htmlCode = ''; + $.each(obj.modelMainItemDetails, function (i, item) { + htmlCode += mainItemHtml(item); + }); + + $('#modelItem_div').html(htmlCode); + + $('#clientModelQuotationPreviewModal').modal('toggle'); + } else { + alert(data.message); + + if (data.err_code == "99999") { + location.href = "/Root/Login"; + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('網路或伺服器發生錯誤,請稍後重試!'); + } + }); + } +} + function buttonClick(obj) { var type = obj.getAttribute('data-method');