(function () { var lists = []; let viewState = z.ui.comm.getUrlParam("_o"); let isKp = z.ui.comm.getUrlParam("kp"); let read = z.ui.comm.getUrlParam("read"); var totalContractAmount = 0; var totalReturnAmount =0; var totalInvoiceAmount = 0; var contractInvoiceList = []; let flowInstanceId = ""; var contractId = $("[name='contractInvoice$contractId']").val() var contractInvoiceId = $("[name='contractInvoice$id']").val() var contractMilestoneId = $("[name='contractInvoice$contractMilestoneId']").val() var contractMilestoneName = $("[name='contractInvoice$contractMilestoneName']").val() let isView = ""; window.onload = function () { flowInstanceId = z.ui.comm.getUrlParam("flowInstanceId"); bindEvents(); }; function bindEvents() { initData(); bindGenerateSerial(); bindSelectMilestone(); initContractReturnMoney(); initContractInvoiceList(); bindCalcInvoiceAmount(); bindReturnMoney(); initReturnReg(); z.workflow.saveBtn.addListener("onSaveClick", submit); } function initData(){ initPayCompany(); initInvoiceCompany(); initLpr(); } function initLpr() { z.ui.ajax({ type: "get", url: "/common/user-tree", data: {}, success: function (res) { if (res && res.length > 0) { selecttree("[name='lpr']", res, clickLpr, allowChildClick,null,setLpr); } }, error: function () { } }) } function setLpr(){ var id = $("[name='contractInvoice$lprId']").val(); if(id){ z.ui.selecttree("[name='lpr']").setValue(id); } } function clickLpr(even, treeId, treeNode) { if (treeNode.type === 3) { $("[name='contractInvoice$lpr']").val(treeNode.name); $("[name='contractInvoice$lprId']").val(treeNode.id); } } function initReturnReg(){ let register = z.ui.comm.getUrlParam("registerReturn"); if(register === '1'){ $("[name=addData]").show().removeClass("z-hide").removeClass("z-readonly"); $("[name=return-header]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly"); $("[name=return-body]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly"); $("[name=returnStats]").css("display", "flex").removeClass("z-hide").removeClass("z-readonly"); } } function bindGenerateSerial(){ $("#generateSerial").on("click",function(){ var serial = $("[name='contractInvoice$invoiceNumber'] input").val(); var postdata = {"name": '开票单号'}; if(serial) { z.ui.confirm("confirm").init({ content: '已有编号[' +serial + '],重新生成会覆盖原有编号,是否继续?', onConfirm: function() { z.ui.ajax({ type: "post", contentType: "application/json", url: "/common/generate-serial-number", data: JSON.stringify(postdata), success: function (res) { if(res && res.code === 0){ $("[name='contractInvoice$invoiceNumber'] input").val(res.data) } else { z.ui.alertWarning(res.msg); } }, error: function () { } }) }, onCancel: function () { } }) } else { z.ui.ajax({ type: "post", contentType: "application/json", url: "/common/generate-serial-number", data: JSON.stringify(postdata), success: function (res) { if(res && res.code === 0){ $("[name='contractInvoice$invoiceNumber'] input").val(res.data) } else { z.ui.alertWarning(res.msg); } }, error: function () { } }) } }) } function bindSelectMilestone(){ $("#selectMilestone").click(function () { var contractId = $("[name='contractInvoice$contractId']").val(); selectMilestone(contractId, setMilestone); }) } function setMilestone(res) { if (res.data) { $("[name='contractInvoice$contractMilestoneName']").val(res.data.name); $("[name='contractInvoice$contractMilestoneId']").val(res.data.id); contractMilestoneName = res.data.name; contractMilestoneId = res.data.id; } } function submit(all, istransfer) { var invoiceAmount = $('[name="contractInvoice$invoiceAmount"] input').val(); var contractBalance = $('[name="amount$contractBalance"] input').val(); if( !contractBalance ){ contractBalance = $('[name="contract$contractAmount"] input').val(); if(!contractBalance){ contractBalance = '0'; } } if(parseFloat(invoiceAmount) > parseFloat(contractBalance)){ all({success: false, errorMsg: "开票金额超出合同余额!"}); return; } var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: istransfer}); if (postData === false) { all({success: false}); return; } let allInvoiceAmount = 0; for (let key of Object.keys(postData)) { let mealName = postData[key]; if (key.startsWith("Contract")) { allInvoiceAmount += Number(mealName.invoiceAmount); } } if(contractInvoiceList.length>1){ if(Number(postData.contractInvoice.invoiceAmount).toFixed(2) != Number(allInvoiceAmount).toFixed(2)){ all({success: false, errorMsg: "开票金额与所有项目开票金额之和不相等!"}); return; } } for (let key of Object.keys(postData)) { let mealName = postData[key]; if (key.startsWith("Contract")) { z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-invoice-relation"), type: 'put', contentType: 'application/json', data: JSON.stringify({ 'id': mealName.id, 'returnAmount': mealName.returnAmount, 'invoiceAmount': mealName.invoiceAmount }), success: function (res) { }, error: function () { } }) } } z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/flow/invoice/update"), data: z.ui.form.childStringify(postData), success: function () { all({success: true}); }, error: function () { all({success: false}); } }) } function initContractInvoiceList(){ var contractList = JSON.parse(window.contractList); if(!contractList || contractList.length<2){ $("[name=invoice-header]").hide(); $("[name=invoice-body]").hide(); return ; } if (contractList.length > 0) { for (let i = 0; i < contractList.length; i++) { let obj = { type: contractList[i].contractType || "", zrbm: contractList[i].zrbm || "", xmjl: contractList[i].xmjl || "", virtualAmount: contractList[i].virtualAmount || "", invoiceAmount: contractList[i].invoiceAmount || "", returnAmount: contractList[i].returnAmount || "", id: contractList[i].id || "", contractId: contractList[i].contractId || "", } contractInvoiceList.push(obj) } } updateContractInoviceListView() } function updateContractInoviceListView() { let tbodyQjsq = document.querySelector('[name=contractInvoiceList]') let html = '' for (let i = 0; i < contractInvoiceList.length; i++) { var type = contractInvoiceList[i].type === 1? '主合同': '子合同' html += '' + '' + (i + 1) + '' + '' + '
' + '
' + '' + '' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + ''; if(viewState !== "v") { html += '
' + '编辑' + '
'; } html += '' + ''; } tbodyQjsq.innerHTML = html for (let i = 0; i < contractInvoiceList.length; i++) { if(viewState !== "v") { $("#invoiceEditBtn_" + i).click(function () { const span = $(this).find("span"); const html = span.html(); var tr = $("#contract_invoce_list" + i); var invoiceInput = tr.find("[name='Contract[" + i + "]$invoiceAmount'] input"); if (html === '编辑') { span.html('保存') invoiceInput.removeAttr('disabled').removeClass("z-readonly").addClass("z-write"); return; } if (html === '保存') { var invoiceAmount = invoiceInput.val(); var returnAmount = tr.find("[name='Contract[" + i + "]$returnAmount'] input").val(); var id = tr.find("[name='Contract[" + i + "]$id']").val(); z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-invoice-relation"), type: 'put', contentType: 'application/json', data: JSON.stringify({ 'id': id, 'returnAmount': returnAmount, 'invoiceAmount': invoiceAmount }), success: function (res) { if (res.code === 0) { z.ui.alertSuccess("保存成功"); invoiceInput.addClass("z-readonly").removeClass("z-write"); invoiceInput[0].disabled = true; span.html("编辑") } else { z.ui.alertWarning(res.msg); } }, error: function () { } }) return; } }) } detailReadonly(i,false,"contract_invoce_list") $("#contract_invoce_list" + i).addClass("form-table-disable") } } function bindCalcInvoiceAmount(){ $("[name='contractInvoice$invoiceAmount'] input").change(function(){ if(!parseFloat($(this).val())){ return; } totalContractAmount = 0; let arr = $('.contractAmount'); for (let i = 0; i < arr.length; i++) { if(parseFloat($(arr[i]).val())) { totalContractAmount += parseFloat($(arr[i]).val()) } } for (let i = 0; i < arr.length; i++) { var dom = $(arr[i]).closest("tr").find(".contractInvoice"); $(dom).val(($(arr[i]).val() / totalContractAmount * $(this).val()).toFixed(2)); } }) } function bindReturnMoney(){ var arr = $('.contractInvoice'); for(var i =0 ;i < arr.length;i++){ $(arr[i]).change(function(){ calcReturnAmount(); }) } $("[name=returnMoney]").delegate('.returnAmount',"propertychange input",function(){ calcReturnAmount(); }) // var arr = $('.returnAmount'); // for(var i =0 ;i < arr.length;i++){ // $(arr[i]).change(function(){ // calcReturnAmount(); // }) // } } function calcReturnAmount(){ calcTotalReturnAmount(); calcTotalInvoiceAmount() let arr = $('.invoiceReturnAmount'); for (let i = 0; i < arr.length; i++) { var ia = $(arr[i]).closest("tr").find(".contractInvoice").val(); $(arr[i]).val((ia / totalInvoiceAmount * totalReturnAmount).toFixed(2)); } } function calcTotalInvoiceAmount(){ totalInvoiceAmount = 0; let arr = $('.contractInvoice'); for (let i = 0; i < arr.length; i++) { if(parseFloat($(arr[i]).val())) { totalInvoiceAmount += parseFloat($(arr[i]).val()); } } } function calcTotalReturnAmount(){ totalReturnAmount = 0; let arr = $('.returnAmount'); for (let i = 0; i < arr.length; i++) { if(parseFloat($(arr[i]).val())) { if(parseFloat($(arr[i]).val())){ totalReturnAmount += parseFloat($(arr[i]).val()) } } } } function initContractReturnMoney(){ var returnMoney = JSON.parse(window.returnMoneyList); if (returnMoney.length > 0) { totalReturnAmount = 0; for (let i = 0; i < returnMoney.length; i++) { totalReturnAmount += returnMoney[i].returnAmount; let obj = { contractMilestoneName: returnMoney[i].contractMilestoneName || contractMilestoneName, contractMilestoneId: returnMoney[i].contractId || contractMilestoneId, returnAmount: returnMoney[i].returnAmount || "", returnDate: returnMoney[i].returnDate || "", bz: returnMoney[i].bz || "", id: returnMoney[i].id || "", contractId: returnMoney[i].contractId || contractId, contractInvoiceId: returnMoney[i].contractInvoiceId || contractInvoiceId, sortnum: returnMoney[i].sortnum || "" } lists.push(obj) } } $("#addData").click(function(){ addContractReturnMoney(); calcReturnAmount(); }) updateView() } function updateList(){ lists = []; var postData = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false}); for (let key of Object.keys(postData)) { let mealName = postData[key]; if (key.startsWith("ContractReturnMoney")) { var dataObj = { contractMilestoneName: contractMilestoneName, contractMilestoneId: contractMilestoneId, returnAmount: mealName.returnAmount, returnDate: mealName.returnDate, bz: mealName.bz, id: mealName.id, contractId: contractId, contractInvoiceId: contractInvoiceId, sortnum: lists.length } lists.push(dataObj); } } } function getCurrentDate() { const now = new Date(); const year = now.getFullYear(); const month = (now.getMonth() + 1).toString().padStart(2, '0'); const day = now.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day}`; } function addContractReturnMoney(){ var trFragment = document.createDocumentFragment(); let tbody = document.querySelectorAll('[name=returnMoney] tr') let qjsjElements = document.getElementsByName("contract_return_seq"); var dataObj = { contractMilestoneName: contractMilestoneName, contractMilestoneId: contractMilestoneId, returnAmount: window.invoiceReceivable, returnDate: getCurrentDate(), bz: "", id: "", contractId: contractId, contractInvoiceId: contractInvoiceId, sortnum: "" } lists.push(dataObj); trFragment.appendChild(generateTableTrHtml(lists.length-1)) var index = lists.length - 1; $("[name=returnMoney]").append(trFragment) $("#delBtn_" + index).click(function () { var i = this.id.substring(this.id.indexOf("_") + 1) var tr =$("#contract_return_" + i); var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val(); z.ui.confirm("compid").init({ content: "确定删除吗?", onConfirm: function () { z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-return-money?id="+returnId), type: 'delete', contentType: 'application/json', data: {}, success: function (res) { if(res.code === 0){ z.ui.alertSuccess("删除成功"); var element = document.getElementById("contract_return_" + i); element.remove(); buildSeq(); updateList(); //lists.splice(i,1); updateView(); } else { z.ui.alertWarning(res.msg); } }, error: function () { } }) }, onCancel: function () { } }) }) $("#editBtn_" + index).click(function () { var i = this.id.substring(this.id.indexOf("_") + 1) const span = $(this).find("span"); const html = span.html(); var tr =$("#contract_return_" + i); if (html === '保存') { var returnAmount = tr.find("[name='ContractReturnMoney["+i+"]$returnAmount'] input").val(); var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val(); var dom = $("[name^='ContractReturnMoney['][name$='$returnAmount'] input"); var totalReturnAmount = 0; for (let j = 0; j < dom.length; j++) { var tmp = $(dom[j]).val() if(parseFloat(tmp)){ totalReturnAmount += parseFloat(tmp); } } var invoiceAmount = $("[name='contractInvoice$invoiceAmount'] input").val(); if(!returnAmount){ z.ui.alertWarning("请填写回款金额"); return; } if(!parseFloat(returnAmount)){ z.ui.alertWarning("回款金额有误"); return; } if(parseFloat(invoiceAmount) && (totalReturnAmount > parseFloat(invoiceAmount))){ z.ui.alertWarning("回款金额不能超过开票金额"); return; } var returnDate = tr.find("[name='ContractReturnMoney["+i+"]$returnDate'] input").val(); if(!returnDate){ z.ui.alertWarning("请填写回款日期"); return; } var bz =tr.find("[name='ContractReturnMoney["+i+"]$bz'] input").val(); var formInfo = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false}); var relationList = []; for (let key of Object.keys(formInfo)) { let mealName = formInfo[key]; if (key.startsWith("Contract[")) { relationList.push(z.ui.form.childStringify(mealName)); } } z.ui.loading(true, true, 0, "保存中..."); z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-return-money"), type: 'post', contentType: 'application/json', data: JSON.stringify({ 'id': returnId, 'contractId' : contractId, 'contractInvoiceId' : contractInvoiceId, 'contractMilestoneId' : contractMilestoneId, 'contractMilestoneName' : contractMilestoneName, 'returnAmount': returnAmount, 'returnDate': returnDate, 'bz': bz, 'relationList': relationList }), success: function (res) { z.ui.loading(false); if(res.code === 0){ if(!returnId){ tr.find("[name='ContractReturnMoney["+i+"]$id']").val(res.data); } z.ui.alertSuccess("回款添加成功"); detailReadonly(i, false,"contract_return_") $("#addData").removeAttr('disabled') tr.addClass("form-table-disable") span.html('编辑'); } else { z.ui.alertWarning(res.msg); } }, error: function () { z.ui.loading(false); } }) } else if (html === '编辑') { span.html('保存') detailWrite(i); $("#addData").attr('disabled', "true"); tr.removeClass("form-table-disable") } }) z.ui.date("[name='ContractReturnMoney[" + (lists.length-1) + "]$returnDate']").init() buildSeq(); for (let i = 0; i < tbody.length; i++) { z.ui.date("[name='ContractReturnMoney[" + i + "]$returnDate']").init({ done: function (value, date, endDate) { //改变日期后触发 console.log(value); } }); } } function buildSeq() { let elementsByName = document.getElementsByName("contract_return_seq"); for (let i = 0; i < elementsByName.length; i++) { const seqElement = elementsByName[i]; seqElement.innerHTML = i + 1; } } function initInvoiceCompany(){ z.ui.ajax({ type: "get", url: "/common/company-tree", data: {}, success: function (res) { if(res && res.code === 0 && res.data.length > 0){ selecttree("[name='invoiceCompany']",res.data,clickInvoiceCompany,null,null,setInvoiceCompany) } }, error: function () { } }) } function setInvoiceCompany(){ var id = $("[name='contractInvoice$invoiceCompanyId']").val(); if(id){ z.ui.selecttree("[name='invoiceCompany']").setValue(id); } } function clickInvoiceCompany(even, treeId, treeNode) { $("[name='contractInvoice$invoiceCompany']").val(treeNode.name); $("[name='contractInvoice$invoiceCompanyId']").val(treeNode.id); } function initPayCompany(){ z.ui.ajax({ type: "get", url: "/customer-tree", data: {}, success: function (res) { if(res && res.code === 0 && res.data.length > 0){ selecttree("[name='payCompany']",res.data,clickPayCompany,null,null,setPayCompany); } }, error: function () { } }) } function setPayCompany(){ var id = $("[name='contractInvoice$payCompanyId']").val(); if(id){ z.ui.selecttree("[name='payCompany']").setValue(id); } } function clickPayCompany(even, treeId, treeNode) { $("[name='contractInvoice$payCompany']").val(treeNode.name); $("[name='contractInvoice$payCompanyId']").val(treeNode.id); $("[name='contractInvoice$payTaxNumber'] input").val(treeNode.extendData.taxNumber); $("[name='contractInvoice$payAddress'] input").val(treeNode.extendData.payAddress); $("[name='contractInvoice$payBank'] input").val(treeNode.extendData.bankaccount); } function updateView() { let tbodyQjsq = document.querySelector('[name=returnMoney]') let html = '' for (let i = 0; i < lists.length; i++) { // var ratio = ''; // if(parseFloat(contractAmount) && parseFloat(contractAmount) > 0 ){ // ratio = ((lists[i].returnAmount / parseFloat(contractAmount)) * 100).toFixed(2) + '%'; // } html += '' + '' + (i + 1) + '' + '' + '
' + '
' + '' + '' + '' + '' + '' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '编辑' + '
' + '
' + '删除' + '
' + ''; } tbodyQjsq.innerHTML = html for (let i = 0; i < lists.length; i++) { z.ui.date("[name='ContractReturnMoney[" + i + "]$returnDate']").init() $("#delBtn_" + i).click(function () { var tr =$("#contract_return_" + i); var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val(); z.ui.confirm("compid").init({ content: "确定删除吗?", onConfirm: function () { z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-return-money?id="+returnId), type: 'delete', contentType: 'application/json', data: {}, success: function (res) { if(res.code === 0){ z.ui.alertSuccess("删除成功"); var element = document.getElementById("contract_return_" + i); element.remove(); buildSeq(); updateList(); //lists.splice(i,1); updateView(); } else { z.ui.alertWarning(res.msg); } }, error: function () { } }) }, onCancel: function () { } }) }) $("#editBtn_" + i).click(function () { const span = $(this).find("span"); const html = span.html(); var tr =$("#contract_return_" + i); var returnAmount = tr.find("[name='ContractReturnMoney["+i+"]$returnAmount'] input").val(); var returnDate = tr.find("[name='ContractReturnMoney["+i+"]$returnDate'] input").val(); var returnId = tr.find("[name='ContractReturnMoney["+i+"]$id']").val(); var bz =tr.find("[name='ContractReturnMoney["+i+"]$bz'] input").val(); var formInfo = z.ui.form.getFormFields("[name=flow-form]", {validatorRequired: false}); var relationList = []; for (let key of Object.keys(formInfo)) { let mealName = formInfo[key]; if (key.startsWith("Contract[")) { relationList.push(z.ui.form.childStringify(mealName)); } } if (html === '保存') { z.ui.loading(true, true, 0, "保存中..."); z.ui.ajax({ url: z.ui.comm.getEntranceUrl("/contract-return-money"), type: 'post', contentType: 'application/json', data: JSON.stringify({ 'id': returnId, 'contractId' : contractId, 'contractInvoiceId' : contractInvoiceId, 'contractMilestoneId' : contractMilestoneId, 'contractMilestoneName' : contractMilestoneName, 'returnAmount': returnAmount, 'returnDate': returnDate, 'bz': bz, 'relationList': relationList }), success: function (res) { z.ui.loading(false) if(res.code === 0){ if(!returnId){ tr.find("[name='ContractReturnMoney["+i+"]$id']").val(res.data); } z.ui.alertSuccess("回款添加成功"); detailReadonly(i, false,"contract_return_") $("#addData").removeAttr('disabled') tr.addClass("form-table-disable") span.html('编辑'); } else { z.ui.alertWarning(res.msg); } }, error: function () { z.ui.loading(false) } }) } else if (html === '编辑'){ span.html('保存') detailWrite(i); $("#addData").attr('disabled', "true"); tr.removeClass("form-table-disable") } }) detailReadonly(i,false,"contract_return_") $("#contract_return_" + i).addClass("form-table-disable") } // detailTotalInit() } function detailReadonly(i, isBool = true,prefix) { if (isBool) { $("#delBtn_" + i).css("display", "none"); $("#editBtn_" + i).css("display", "none"); } let detailElement = document.getElementById(prefix + i); let detailInput = detailElement.getElementsByTagName("input"); for (let j = 0; j < detailInput.length; j++) { detailInput[j].disabled = true; detailInput[j].className += " z-readonly" } } function detailWrite(i) { //财务审核时可以核减修改金额 let detailElement = document.getElementById("contract_return_" + i); let detailInput = detailElement.getElementsByTagName("input"); for (let j = 0; j < detailInput.length; j++) { detailInput[j].disabled = false; $(detailInput[j]).removeClass(" z-readonly") } } function generateTableTrHtml(index) { var trDom = document.createElement("tr"); trDom.style.backgroundColor = "#fff"; trDom.id = "contract_return_" + index; trDom.className = 'qjsjClass'; trDom.innerHTML = '' + (index + 1) + '' + '' + '
' + '
' + '' + '' + '' + '' + '' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '
' + '' + '
' + '
' + '
' + '' + '' + '
' + '
' + '保存' + '
' + '
' + '删除' + '
' + ''; return trDom; } }())