diff --git a/Controllers/ApiController.cs b/Controllers/ApiController.cs index d72b9814..4a8fc399 100644 --- a/Controllers/ApiController.cs +++ b/Controllers/ApiController.cs @@ -50,8 +50,160 @@ namespace QuotationMaker.Controllers string quotation_name = obj["quotation_name"].ToString(); string quotation_version = obj["quotation_version"].ToString(); string project_uid = obj["project_uid"].ToString(); + string project_name = obj["project_name"].ToString(); + string company_uid = obj["company_uid"].ToString(); + string contactPerson_uid = obj["contactPerson_uid"].ToString(); string method = obj["method"].ToString(); + if (method == "save_to_other") { + quotation oldQuotation = conn.QueryFirstOrDefault("select * from quotation where quotation_isdel = 'N' and quotation_uid = @quotation_uid and quotation_version = @quotation_version ", new { quotation_uid = quotation_uid, quotation_version = quotation_version }); + + if (oldQuotation == null) + { + ret.ret = "no"; + ret.err_code = "0005"; + ret.message = "無此版本號的 quotation_uid 資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string new_quotation_uid = "q_" + GlobalClass.CreateRandomCode(24); + + var config = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapper = config.CreateMapper(); + quotation quotation = new quotation(); + + mapper.Map(oldQuotation, quotation); + + quotation.quotation_uid = new_quotation_uid; + quotation.quotation_name = quotation_name; + quotation.quotation_log = "由 [" + oldQuotation.quotation_name + "] 此報價單另存產生!"; + quotation.quotation_version = 1; + quotation.quotation_createdate = DateTime.Now; + quotation.quotation_modifydate = DateTime.Now; + quotation.quotation_create_uid = token.user_uid; + quotation.quotation_modify_uid = token.user_uid; + quotation.quotation_revoke = "N"; + quotation.company_uid = company_uid; + quotation.contactPerson_uid = contactPerson_uid; + quotation.project_uid = project_uid; + + + List quotationMainItems = new List(); + List quotationSubItems = new List(); + List payments = new List(); + List invoices = new List(); + + List old_quotationMainItems = conn.Query("select * from quotationMainItem where quotation_uid = @quotation_uid and quotationMainItem_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + List old_payments = conn.Query("select * from payment where quotation_uid = @quotation_uid and payment_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + List old_invoices = conn.Query("select * from invoice where quotation_uid = @quotation_uid and invoice_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + //主項目複製 + foreach (quotationMainItem item in old_quotationMainItems) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + quotationMainItem quotationMainItem = new quotationMainItem(); + + mapperItem.Map(item, quotationMainItem); + + quotationMainItem.quotation_uid = new_quotation_uid; + quotationMainItem.quotationMainItem_version = 1; + quotationMainItem.quotationMainItem_revoke = "N"; + quotationMainItem.quotationMainItem_uid = "qm_" + GlobalClass.CreateRandomCode(24); + quotationMainItem.quotationMainItem_createdate = DateTime.Now; + quotationMainItem.quotationMainItem_modifydate = DateTime.Now; + + + quotationMainItems.Add(quotationMainItem); + + List old_quotationSubItems = conn.Query("select * from quotationSubItem where quotation_uid = @quotation_uid and quotationSubItem_version = @quotation_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotation_uid = quotation_uid, quotation_version = quotation_version, quotationMainItem_uid = item.quotationMainItem_uid }).ToList(); + + foreach (quotationSubItem subItem in old_quotationSubItems) + { + var configSubItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperSubItem = configSubItem.CreateMapper(); + + quotationSubItem quotationSubItem = new quotationSubItem(); + + mapperSubItem.Map(subItem, quotationSubItem); + + quotationSubItem.quotationMainItem_uid = quotationMainItem.quotationMainItem_uid; + quotationSubItem.quotation_uid = new_quotation_uid; + quotationSubItem.quotationSubItem_version = 1; + quotationSubItem.quotationSubItem_uid = "qs_" + GlobalClass.CreateRandomCode(24); + quotationSubItem.quotationSubItem_createdate = DateTime.Now; + quotationSubItem.quotationSubItem_modifydate = DateTime.Now; + + quotationSubItems.Add(quotationSubItem); + } + + } + + foreach (payment item in old_payments) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + payment paymentItem = new payment(); + + mapperItem.Map(item, paymentItem); + + paymentItem.payment_uid = "pay_" + GlobalClass.CreateRandomCode(24); + paymentItem.quotation_uid = new_quotation_uid; + paymentItem.payment_version = 1; + paymentItem.payment_createdate = DateTime.Now; + paymentItem.payment_modifydate = DateTime.Now; + + payments.Add(paymentItem); + } + + foreach (invoice item in old_invoices) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + invoice invoiceItem = new invoice(); + + mapperItem.Map(item, invoiceItem); + + invoiceItem.invoice_uid = "inv_" + GlobalClass.CreateRandomCode(24); + invoiceItem.invoice_version = 1; + invoiceItem.invoice_revoke = "N"; + invoiceItem.quotation_uid = new_quotation_uid; + + invoices.Add(invoiceItem); + + } + + conn.Insert(invoices); + conn.Insert(payments); + conn.Insert(quotationSubItems); + conn.Insert(quotationMainItems); + conn.Insert(quotation); + + ret.ret = "yes"; + ret.quotationView = conn.QueryFirstOrDefault("select * from quotationView where quotation_isdel = 'N' and quotation_revoke = 'N' and quotation_uid = @quotation_uid", new { quotation_uid = new_quotation_uid }); + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + if (method == "save_to_same") { quotation oldQuotation = conn.QueryFirstOrDefault("select * from quotation where quotation_isdel = 'N' and quotation_uid = @quotation_uid and quotation_version = @quotation_version ", new { quotation_uid = quotation_uid, quotation_version = quotation_version }); @@ -192,6 +344,170 @@ namespace QuotationMaker.Controllers return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); } + if (method == "save_to_new") { + quotation oldQuotation = conn.QueryFirstOrDefault("select * from quotation where quotation_isdel = 'N' and quotation_uid = @quotation_uid and quotation_version = @quotation_version ", new { quotation_uid = quotation_uid, quotation_version = quotation_version }); + + if (oldQuotation == null) + { + ret.ret = "no"; + ret.err_code = "0005"; + ret.message = "無此版本號的 quotation_uid 資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + project_uid = "p_" + GlobalClass.CreateRandomCode(24); + project new_project = new project(); + new_project.project_uid = project_uid; + new_project.dept_uid = oldQuotation.dept_uid; + new_project.company_uid = company_uid; + new_project.project_datetime = DateTime.Now.ToString("yyyy/MM/dd"); + new_project.project_creative_uid = token.user_uid; + new_project.project_lastmodify_uid = token.user_uid; + new_project.project_isdel = "N"; + new_project.project_modifydate = DateTime.Now; + new_project.project_createdate = DateTime.Now; + new_project.project_name = project_name; + + string new_quotation_uid = "q_" + GlobalClass.CreateRandomCode(24); + + var config = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapper = config.CreateMapper(); + quotation quotation = new quotation(); + + mapper.Map(oldQuotation, quotation); + + quotation.quotation_uid = new_quotation_uid; + quotation.quotation_name = quotation_name; + quotation.quotation_log = "由 [" + oldQuotation.quotation_name + "] 此報價單另存產生!"; + quotation.quotation_version = 1; + quotation.quotation_createdate = DateTime.Now; + quotation.quotation_modifydate = DateTime.Now; + quotation.quotation_create_uid = token.user_uid; + quotation.quotation_modify_uid = token.user_uid; + quotation.quotation_revoke = "N"; + quotation.company_uid = company_uid; + quotation.contactPerson_uid = contactPerson_uid; + quotation.project_uid = project_uid; + + + List quotationMainItems = new List(); + List quotationSubItems = new List(); + List payments = new List(); + List invoices = new List(); + + List old_quotationMainItems = conn.Query("select * from quotationMainItem where quotation_uid = @quotation_uid and quotationMainItem_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + List old_payments = conn.Query("select * from payment where quotation_uid = @quotation_uid and payment_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + List old_invoices = conn.Query("select * from invoice where quotation_uid = @quotation_uid and invoice_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + //主項目複製 + foreach (quotationMainItem item in old_quotationMainItems) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + quotationMainItem quotationMainItem = new quotationMainItem(); + + mapperItem.Map(item, quotationMainItem); + + quotationMainItem.quotation_uid = new_quotation_uid; + quotationMainItem.quotationMainItem_version = 1; + quotationMainItem.quotationMainItem_revoke = "N"; + quotationMainItem.quotationMainItem_uid = "qm_" + GlobalClass.CreateRandomCode(24); + quotationMainItem.quotationMainItem_createdate = DateTime.Now; + quotationMainItem.quotationMainItem_modifydate = DateTime.Now; + + + quotationMainItems.Add(quotationMainItem); + + List old_quotationSubItems = conn.Query("select * from quotationSubItem where quotation_uid = @quotation_uid and quotationSubItem_version = @quotation_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotation_uid = quotation_uid, quotation_version = quotation_version, quotationMainItem_uid = item.quotationMainItem_uid }).ToList(); + + foreach (quotationSubItem subItem in old_quotationSubItems) + { + var configSubItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperSubItem = configSubItem.CreateMapper(); + + quotationSubItem quotationSubItem = new quotationSubItem(); + + mapperSubItem.Map(subItem, quotationSubItem); + + quotationSubItem.quotationMainItem_uid = quotationMainItem.quotationMainItem_uid; + quotationSubItem.quotation_uid = new_quotation_uid; + quotationSubItem.quotationSubItem_version = 1; + quotationSubItem.quotationSubItem_uid = "qs_" + GlobalClass.CreateRandomCode(24); + quotationSubItem.quotationSubItem_createdate = DateTime.Now; + quotationSubItem.quotationSubItem_modifydate = DateTime.Now; + + quotationSubItems.Add(quotationSubItem); + } + + } + + foreach (payment item in old_payments) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + payment paymentItem = new payment(); + + mapperItem.Map(item, paymentItem); + + paymentItem.payment_uid = "pay_" + GlobalClass.CreateRandomCode(24); + paymentItem.quotation_uid = new_quotation_uid; + paymentItem.payment_version = 1; + paymentItem.payment_createdate = DateTime.Now; + paymentItem.payment_modifydate = DateTime.Now; + + payments.Add(paymentItem); + } + + foreach (invoice item in old_invoices) + { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + invoice invoiceItem = new invoice(); + + mapperItem.Map(item, invoiceItem); + + invoiceItem.invoice_uid = "inv_" + GlobalClass.CreateRandomCode(24); + invoiceItem.invoice_version = 1; + invoiceItem.invoice_revoke = "N"; + invoiceItem.quotation_uid = new_quotation_uid; + + invoices.Add(invoiceItem); + + } + + conn.Insert(invoices); + conn.Insert(payments); + conn.Insert(quotationSubItems); + conn.Insert(quotationMainItems); + conn.Insert(quotation); + conn.Insert(new_project); + + ret.ret = "yes"; + ret.quotationView = conn.QueryFirstOrDefault("select * from quotationView where quotation_isdel = 'N' and quotation_revoke = 'N' and quotation_uid = @quotation_uid", new { quotation_uid = new_quotation_uid }); + ret.projectView = conn.QueryFirstOrDefault("select * from projectView where project_isdel = 'N' and project_uid = @project_uid ", new { project_uid = project_uid }); + + 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/ProjectList.cshtml b/Views/Home/ProjectList.cshtml index bc487d39..89d99ee1 100644 --- a/Views/Home/ProjectList.cshtml +++ b/Views/Home/ProjectList.cshtml @@ -737,4 +737,102 @@ + + + + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/wwwroot/assets/javascript/custom/projectlist.js b/wwwroot/assets/javascript/custom/projectlist.js index 393a0b8c..c3b7232e 100644 --- a/wwwroot/assets/javascript/custom/projectlist.js +++ b/wwwroot/assets/javascript/custom/projectlist.js @@ -1075,8 +1075,273 @@ $(document).ready(function () { } }); }); + + //另存至其他專案 + $('#save_to_other_SaveBtn').on('click', function () { + var quotation_uid = $('#save_to_other_quotation_uid').val(); + var quotation_version = $('#save_to_other_quotation_version').val(); + var quotation_name = $('#save_to_other_quotation_name').val(); + var project_value = $('#project_select').val(); + + if (project_value == '') { + alert('請選擇要加入的專案'); + return; + } + + var arr = project_value.split('/'); + var project_uid = arr[0]; + var company_uid = arr[1]; + var contactPerson_uid = $('#contactPerson_select').val(); + + if (quotation_name == '') { + alert('請輸入新的報價單名稱!'); + return; + } + + if (contactPerson_uid == '') { + alert('請選擇窗口!'); + return; + } + + var formData = { + quotation_uid: quotation_uid, + quotation_version: quotation_version, + quotation_name: quotation_name, + project_uid: project_uid, + company_uid: company_uid, + contactPerson_uid: contactPerson_uid, + method: 'save_to_other' + } + + $.ajax({ + url: "/Api/saveas", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + obj = data.quotationView; + + if (obj.project_uid == $('#quotation_project_uid').val()) { + quotationTable.fnAddData(obj); + } + + + + alert('另存至其他專案完成!'); + + $('#clientSaveToOtherModal').modal('toggle'); + $('#clientHistoryListModal').modal('toggle'); + } else { + alert(data.message); + + if (data.err_code == "99999") { + location.href = "/Root/Login"; + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('網路或伺服器發生錯誤,請稍後重試!'); + } + }); + }); + + //另存至新專案 + $('#save_to_new_SaveBtn').on('click', function () { + var quotation_uid = $('#save_to_new_quotation_uid').val(); + var quotation_version = $('#save_to_new_quotation_version').val(); + var quotation_name = $('#save_to_new_quotation_name').val(); + var project_name = $('#save_to_new_project_name').val(); + var company_uid = $('#company_new_select').val(); + var contactPerson_uid = $('#contactPerson_new_select').val(); + + if (project_name == '') { + alert('請輸入新專案名稱!'); + return; + } + + if (quotation_name == '') { + alert('請輸入新報價單名稱!'); + return; + } + + if (company_uid == '') { + aler('請選擇客戶公司!'); + return; + } + + if (contactPerson_uid == '') { + alert('請選擇窗口!'); + return; + } + + var formData = { + quotation_uid: quotation_uid, + quotation_version: quotation_version, + quotation_name: quotation_name, + project_name: project_name, + company_uid: company_uid, + contactPerson_uid: contactPerson_uid, + method: 'save_to_new' + } + + $.ajax({ + url: "/Api/saveas", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + obj = data.projectView; + + projectTable.fnAddData(obj); + + alert('另存至新專案完成!'); + + $('#clientSaveToNewModal').modal('toggle'); + $('#clientHistoryListModal').modal('toggle'); + } else { + alert(data.message); + + if (data.err_code == "99999") { + location.href = "/Root/Login"; + } + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('網路或伺服器發生錯誤,請稍後重試!'); + } + }); + + }); + + //下拉專案列表選擇 + $('#project_select').on('change', function () { + var project_value = $('#project_select').val(); + + if (project_value == '') { + $('#contactPerson_select').empty(); + return; + } + + var arr = project_value.split('/'); + var project_uid = arr[0]; + var company_uid = arr[1]; + + var formData = { + company_uid: company_uid + } + + $.ajax({ + url: "/Api/contactPersonList", + type: "post", + data: formData, + success: function (data, textStatus, jqXHR) { + if (data.ret == "yes") { + var obj = data.contactPersons; + + $("#contactPerson_select").empty(); + + $.each(obj, function (i, item) { + $("#contactPerson_select").append($("'); + + $.each(obj, function (i, item) { + + $("#project_select").append($("