(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;
}
}())