2022-01-04 08:33:10 +00:00
|
|
|
|
INCOME_DETAIL = {
|
|
|
|
|
|
"type": [true, "类别"],
|
|
|
|
|
|
"name": [true, "名称"],
|
|
|
|
|
|
"unit": [true, "单位"],
|
|
|
|
|
|
"amount": [true, "数量"],
|
|
|
|
|
|
"price": [true, "单价"],
|
|
|
|
|
|
"taxRate": [true, "税率"],
|
|
|
|
|
|
"totalTaxInclude": [true, "含税总金额"],
|
|
|
|
|
|
"totalTaxExclude": [true, "不含税金额"]
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
COST_DETAIL={
|
|
|
|
|
|
"type":[true,"大类"],
|
|
|
|
|
|
"category":[true,"类别"],
|
|
|
|
|
|
"name":[true,"名称"],
|
|
|
|
|
|
"unit":[true,"单位"],
|
|
|
|
|
|
"amount":[true,"数量"],
|
|
|
|
|
|
"price":[true,"单价"],
|
|
|
|
|
|
"taxRate":[true,"税率"],
|
|
|
|
|
|
"totalTaxInclude":[true,"含税总金额"],
|
|
|
|
|
|
"totalTaxExclude":[true,"不含税金额"]
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
COST_PROJECT_MANAGE_DETAIL={
|
|
|
|
|
|
"type":[true,"财务费用类别"],
|
|
|
|
|
|
"name1":[false,"业务项目"],
|
|
|
|
|
|
"name2":[false,"业务项目"],
|
|
|
|
|
|
"detail":[true,"项目明细"],
|
|
|
|
|
|
"unit":[true,"单位"],
|
|
|
|
|
|
"amount":[true,"数量"],
|
|
|
|
|
|
"price":[true,"单价"],
|
|
|
|
|
|
"total":[true,"总金额"],
|
|
|
|
|
|
"predictMethod":[false,"预估计算方法"],
|
|
|
|
|
|
"predictWhy":[false,"预估依据"],
|
|
|
|
|
|
"remark":[false,"备注"],
|
|
|
|
|
|
"deletable":[true,"是否可删除"]
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
BUDGET_PLAN_DETAIL={
|
|
|
|
|
|
"month":[true,"月份"],
|
|
|
|
|
|
"deviceCost":[true,"设备支出"],
|
|
|
|
|
|
"engineerCost":[true,"工程支出"],
|
|
|
|
|
|
"projectManageCost":[true,"经营性开支"],
|
|
|
|
|
|
"earnestMoneyCost":[true,"保证金支出"],
|
|
|
|
|
|
"totalCost":[true,"支出合计"],
|
|
|
|
|
|
"saleIncome":[true,"销售收款"],
|
|
|
|
|
|
"earnestMoneyIncome":[true,"保证金收款"],
|
|
|
|
|
|
"totalIncome":[true,"收款合计"],
|
|
|
|
|
|
"fundBalance":[true,"资金余额"],
|
|
|
|
|
|
"capitalInterest":[true,"资金利息"],
|
|
|
|
|
|
"underwrittenPlan":[true,"垫资计划"],
|
|
|
|
|
|
"repaymentPlan":[true,"还款计划"]
|
|
|
|
|
|
};
|
2021-11-06 06:45:57 +00:00
|
|
|
|
|
|
|
|
|
|
$(function () {
|
|
|
|
|
|
//绑定删除按钮删除当前行
|
|
|
|
|
|
bindDeleteBtn();
|
|
|
|
|
|
//绑定收入和采购成本的输入框【都有税率】
|
|
|
|
|
|
bindChangeableInput();
|
2021-11-08 06:14:39 +00:00
|
|
|
|
|
|
|
|
|
|
$("#saveDraft").click(function () {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
|
|
|
|
|
|
var dataIncome = collectData("am-modal-prompt-input-income");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataIncome.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写收入明细表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataIncomeCheck = convertDetailVerifyCheck(dataIncome, INCOME_DETAIL, "收入明细表");
|
|
|
|
|
|
if (dataIncomeCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataCost = collectData("am-modal-prompt-input-cost");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataCost.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写采购成本明细表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataCostCheck = convertDetailVerifyCheck(dataCost, COST_DETAIL, "采购成本明细表");
|
|
|
|
|
|
if (dataCostCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataManage = collectData("am-modal-prompt-input-cost-project-manage");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataManage.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写项目管理成本表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataManageCheck = convertDetailVerifyCheck(dataManage, COST_PROJECT_MANAGE_DETAIL, "项目管理成本表");
|
|
|
|
|
|
if (dataManageCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataPlan = collectData("am-modal-prompt-input-budget-plan-detail");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataPlan.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写项目资金计划表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataPlanCheck = convertDetailVerifyCheck(dataPlan, BUDGET_PLAN_DETAIL, "项目资金计划表");
|
|
|
|
|
|
if (dataPlanCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$("#saveDraft").attr('disabled', true);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
|
|
|
|
|
|
var message = verifyProjectContributionProfitRate();
|
|
|
|
|
|
if (message) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveDraft").attr('disabled', false);
|
2021-12-09 12:09:45 +00:00
|
|
|
|
layuiAlert(message);
|
2022-01-04 08:33:10 +00:00
|
|
|
|
return;
|
2021-11-08 06:14:39 +00:00
|
|
|
|
}
|
2021-11-18 07:33:14 +00:00
|
|
|
|
console.log(message);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
|
2021-12-08 09:37:57 +00:00
|
|
|
|
var startTime = $("#startDate").val();
|
|
|
|
|
|
var endTime = $("#endDate").val();
|
|
|
|
|
|
if (startTime > endTime) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveDraft").attr('disabled', false);
|
2021-12-08 09:37:57 +00:00
|
|
|
|
window.confirm('开始日期应早于结束日期');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#pmsForm").attr("action", base + "/project/budgetEditSave");
|
2021-11-08 06:14:39 +00:00
|
|
|
|
$("#pmsForm").submit();
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveDraft").attr('disabled', false);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
});
|
|
|
|
|
|
$("#saveApprove").click(function () {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
|
|
|
|
|
|
var dataIncome = collectData("am-modal-prompt-input-income");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataIncome.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写收入明细表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataIncomeCheck = convertDetailVerifyCheck(dataIncome, INCOME_DETAIL, "收入明细表");
|
|
|
|
|
|
if (dataIncomeCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataCost = collectData("am-modal-prompt-input-cost");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataCost.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写采购成本明细表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataCostCheck = convertDetailVerifyCheck(dataCost, COST_DETAIL, "采购成本明细表");
|
|
|
|
|
|
if (dataCostCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataManage = collectData("am-modal-prompt-input-cost-project-manage");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataManage.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写项目管理成本表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataManageCheck = convertDetailVerifyCheck(dataManage, COST_PROJECT_MANAGE_DETAIL, "项目管理成本表");
|
|
|
|
|
|
if (dataManageCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 07:27:55 +00:00
|
|
|
|
var dataPlan = collectData("am-modal-prompt-input-budget-plan-detail");
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (dataPlan.length <= 0) {
|
2022-01-04 07:27:55 +00:00
|
|
|
|
window.confirm('请填写项目资金计划表');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var dataPlanCheck = convertDetailVerifyCheck(dataPlan, BUDGET_PLAN_DETAIL, "项目资金计划表");
|
|
|
|
|
|
if (dataPlanCheck == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$("#saveApprove").attr('disabled', true);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
|
|
|
|
|
|
var message = verifyProjectContributionProfitRate();
|
|
|
|
|
|
if (message) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveApprove").attr('disabled', false);
|
2021-12-09 12:09:45 +00:00
|
|
|
|
layuiAlert(message);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-12-08 09:37:57 +00:00
|
|
|
|
var startTime = $("#startDate").val();
|
|
|
|
|
|
var endTime = $("#endDate").val();
|
|
|
|
|
|
if (startTime > endTime) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveApprove").attr('disabled', false);
|
2021-12-08 09:37:57 +00:00
|
|
|
|
window.confirm('开始日期应早于结束日期');
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#pmsForm").attr("action", base + "/project/budgetEditSaveAndApprove");
|
2021-11-08 06:14:39 +00:00
|
|
|
|
$("#pmsForm").submit();
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$("#saveApprove").attr('disabled', false);
|
2021-11-08 06:14:39 +00:00
|
|
|
|
});
|
2021-11-06 06:45:57 +00:00
|
|
|
|
});
|
|
|
|
|
|
|
2021-11-08 06:45:41 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* 一维数组变二维数组
|
|
|
|
|
|
* @param list
|
|
|
|
|
|
* @param elementsPerSubArray
|
|
|
|
|
|
* @returns {Array}
|
|
|
|
|
|
*/
|
|
|
|
|
|
function arrayToMatrix(list, elementsPerSubArray) {
|
|
|
|
|
|
var matrix = [], i, k;
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0, k = -1; i < list.length; i++) {
|
|
|
|
|
|
if (i % elementsPerSubArray === 0) {
|
|
|
|
|
|
k++;
|
|
|
|
|
|
matrix[k] = [];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
matrix[k].push(list[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return matrix;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据映射关系将数组变为对象
|
2021-11-24 12:36:50 +00:00
|
|
|
|
* @param arr 一行数据
|
|
|
|
|
|
* @param mapArr 映射数组
|
|
|
|
|
|
* @param keepBlank 如果有空的并且不保留空就返回空,废弃这一行
|
|
|
|
|
|
* @returns {*}
|
2021-11-08 06:45:41 +00:00
|
|
|
|
*/
|
2021-11-24 12:36:50 +00:00
|
|
|
|
function arr2Object(arr, mapArr, keepBlank) {
|
2021-11-08 06:45:41 +00:00
|
|
|
|
var obj = {};
|
|
|
|
|
|
for (var i = 0; i < mapArr.length; i++) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (!arr[i] && !keepBlank) {
|
2021-11-08 06:45:41 +00:00
|
|
|
|
return null;
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
obj[mapArr[i]] = arr[i];
|
2021-11-08 06:45:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
return obj;
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
|
2021-12-09 11:49:42 +00:00
|
|
|
|
function arr2ObjectVerify(line, arr, detailPropertyArr, detailProperty) {
|
|
|
|
|
|
var obj = {};
|
|
|
|
|
|
for (var i = 0; i < detailPropertyArr.length; i++) {
|
|
|
|
|
|
var o = detailProperty[detailPropertyArr[i]];
|
|
|
|
|
|
//空但是要求非空
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (!arr[i] && o[0]) {
|
|
|
|
|
|
layuiAlert("第 " + (line + 1) + " 行的 " + o[1] + " 不允许为空");
|
2021-12-09 11:49:42 +00:00
|
|
|
|
return null;
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
obj[detailPropertyArr[i]] = arr[i];
|
|
|
|
|
|
}
|
|
|
|
|
|
return obj;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function arr2ObjectVerifyCheck(line, arr, detailPropertyArr, detailProperty, s) {
|
|
|
|
|
|
var obj = {};
|
|
|
|
|
|
for (var i = 0; i < detailPropertyArr.length; i++) {
|
|
|
|
|
|
var o = detailProperty[detailPropertyArr[i]];
|
|
|
|
|
|
//空但是要求非空
|
|
|
|
|
|
if (!arr[i] && o[0]) {
|
|
|
|
|
|
layuiAlert(s + "第 " + (line + 1) + " 行的 " + o[1] + " 不允许为空");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
obj[detailPropertyArr[i]] = arr[i];
|
2021-12-09 11:49:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
return obj;
|
|
|
|
|
|
}
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 收集收入明细的数据,因为动态添加的行modal无法识别,所以自己来收集
|
|
|
|
|
|
* @returns {Array}
|
|
|
|
|
|
*/
|
|
|
|
|
|
function collectData(className) {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var a = [];
|
2021-11-08 06:45:41 +00:00
|
|
|
|
$("." + className).each(function (t) {
|
2021-12-31 08:08:04 +00:00
|
|
|
|
console.log("收集:" + className + "," + $(this).val())
|
2021-11-08 06:45:41 +00:00
|
|
|
|
a.push($(this).val());
|
|
|
|
|
|
});
|
|
|
|
|
|
return a;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 绑定每一行的删除事件,删除当前的一行tr
|
|
|
|
|
|
*/
|
|
|
|
|
|
function bindDeleteBtn() {
|
|
|
|
|
|
$(".am-modal-line-delete").click(function () {
|
|
|
|
|
|
//删除自己对应的tr
|
|
|
|
|
|
$(this).parent().parent().remove();
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 将页面收集到的数据转换为ajax请求的数据【一维数组转换为对象数组】
|
|
|
|
|
|
* @param data
|
|
|
|
|
|
* @param detailPropertyArr
|
2021-11-24 12:37:30 +00:00
|
|
|
|
* @param keepBlank
|
2021-11-08 06:45:41 +00:00
|
|
|
|
* @returns {Array}
|
|
|
|
|
|
*/
|
2022-01-04 08:33:10 +00:00
|
|
|
|
function convertDetail(data, detailPropertyArr, keepBlank) {
|
|
|
|
|
|
var arr = arrayToMatrix(data, detailPropertyArr.length);
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
|
|
|
|
|
var details = [];
|
2022-01-04 08:33:10 +00:00
|
|
|
|
for (var i = 0; i < arr.length; i++) {
|
2021-11-24 12:36:50 +00:00
|
|
|
|
var obj = arr2Object(arr[i], detailPropertyArr, keepBlank);
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (obj) {
|
2021-11-08 06:45:41 +00:00
|
|
|
|
details.push(obj);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return details;
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
|
|
|
|
|
|
function convertDetailVerify(data, detailProperty) {
|
2021-12-09 11:49:42 +00:00
|
|
|
|
var detailPropertyArr = Object.keys(detailProperty);
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var arr = arrayToMatrix(data, detailPropertyArr.length);
|
2021-12-09 11:49:42 +00:00
|
|
|
|
var details = [];
|
2022-01-04 08:33:10 +00:00
|
|
|
|
for (var i = 0; i < arr.length; i++) {
|
2021-12-09 11:49:42 +00:00
|
|
|
|
var obj = arr2ObjectVerify(i, arr[i], detailPropertyArr, detailProperty);
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (!obj) {
|
2021-12-09 11:49:42 +00:00
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
details.push(obj);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return details;
|
|
|
|
|
|
}
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
function convertDetailVerifyCheck(data, detailProperty, s) {
|
|
|
|
|
|
var detailPropertyArr = Object.keys(detailProperty);
|
|
|
|
|
|
var arr = arrayToMatrix(data, detailPropertyArr.length);
|
|
|
|
|
|
var details = [];
|
|
|
|
|
|
for (var i = 0; i < arr.length; i++) {
|
|
|
|
|
|
var obj = arr2ObjectVerifyCheck(i, arr[i], detailPropertyArr, detailProperty, s);
|
|
|
|
|
|
if (!obj) {
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
details.push(obj);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return details;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function prepareAjaxData(data, detailPropertyArr, projectId, keepBlank) {
|
2021-11-24 12:36:50 +00:00
|
|
|
|
var details = convertDetail(data, detailPropertyArr, keepBlank);
|
2021-11-08 06:45:41 +00:00
|
|
|
|
return {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
"details": details,
|
|
|
|
|
|
"projectId": projectId
|
2021-11-08 06:45:41 +00:00
|
|
|
|
};
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
|
|
|
|
|
|
function prepareAjaxDataVerify(data, detailProperty, projectId) {
|
2021-12-09 11:49:42 +00:00
|
|
|
|
var details = convertDetailVerify(data, detailProperty);
|
|
|
|
|
|
return {
|
2022-01-04 08:33:10 +00:00
|
|
|
|
"details": details,
|
|
|
|
|
|
"projectId": projectId
|
2021-12-09 11:49:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
|
2021-11-08 06:45:41 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* 绑定每个可改变的输入框,修改后改变对应输入框的值
|
|
|
|
|
|
*/
|
|
|
|
|
|
function bindChangeableInput() {
|
|
|
|
|
|
//数量改变
|
|
|
|
|
|
$(".input-changeable-amount").change(function () {
|
|
|
|
|
|
var amount = parseInt($(this).val());
|
|
|
|
|
|
//找到对应的单价和税率
|
|
|
|
|
|
var price = f2($(this).parent().parent().find(".input-changeable-price").val());
|
|
|
|
|
|
var taxRate = f2($(this).parent().parent().find(".input-changeable-tax-rate").val());
|
2022-01-04 08:33:10 +00:00
|
|
|
|
console.log(amount, price, taxRate);
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price));
|
|
|
|
|
|
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
|
2021-11-08 06:45:41 +00:00
|
|
|
|
});
|
|
|
|
|
|
//单价改变
|
|
|
|
|
|
$(".input-changeable-price").change(function () {
|
|
|
|
|
|
var price = f2($(this).val());
|
|
|
|
|
|
//找到对应的数量和税率
|
|
|
|
|
|
var amount = parseInt($(this).parent().parent().find(".input-changeable-amount").val());
|
|
|
|
|
|
var taxRate = f2($(this).parent().parent().find(".input-changeable-tax-rate").val());
|
2022-01-04 08:33:10 +00:00
|
|
|
|
console.log(amount, price, taxRate);
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount * price));
|
|
|
|
|
|
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
|
2021-11-08 06:45:41 +00:00
|
|
|
|
});
|
|
|
|
|
|
//税率改变
|
|
|
|
|
|
$(".input-changeable-tax-rate").change(function () {
|
|
|
|
|
|
var taxRate = f2($(this).val());
|
|
|
|
|
|
//找到对应的数量和单价
|
|
|
|
|
|
var amount = parseInt($(this).parent().parent().find(".input-changeable-amount").val());
|
|
|
|
|
|
var price = f2($(this).parent().parent().find(".input-changeable-price").val());
|
2022-01-04 08:33:10 +00:00
|
|
|
|
console.log(amount, price, taxRate);
|
2021-11-08 06:45:41 +00:00
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100)));
|
2021-11-08 06:45:41 +00:00
|
|
|
|
});
|
|
|
|
|
|
}
|
2022-01-04 08:33:10 +00:00
|
|
|
|
|
2021-11-08 06:14:39 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* 校验项目贡献利润率必须大于阀值
|
|
|
|
|
|
* 低于阀值就返回提示信息,否则返回""
|
|
|
|
|
|
*/
|
|
|
|
|
|
function verifyProjectContributionProfitRate() {
|
2021-11-17 09:28:55 +00:00
|
|
|
|
var projectContributionProfitRate = f2(inputVal("projectContributionProfitRate"));
|
2021-11-08 06:14:39 +00:00
|
|
|
|
var projectContributionProfitRateThreshold = f2($("#projectContributionProfitRateThreshold").val());
|
2022-01-04 08:33:10 +00:00
|
|
|
|
if (projectContributionProfitRate < projectContributionProfitRateThreshold) {
|
|
|
|
|
|
return "项目贡献利润率[" + projectContributionProfitRate + "]低于阀值[" + projectContributionProfitRateThreshold + "],请调整后重新提交";
|
2021-11-08 06:14:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-05 10:33:13 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* 更新
|
|
|
|
|
|
* 毛利=收入总计(不含税)-成本总计(不含税)-财务费用总计(不含税)
|
|
|
|
|
|
* 毛利率=毛利(不含税)/收入总计(不含税)
|
|
|
|
|
|
* 贡献利润=项目毛利(不含税)-公司管理费用总计(不含税)
|
|
|
|
|
|
* 贡献利润率=贡献利润(不含税)/收入总计(不含税)
|
|
|
|
|
|
*/
|
|
|
|
|
|
function updateProjectContributionProfitRate() {
|
|
|
|
|
|
//收入总计不含税
|
2021-11-17 09:28:55 +00:00
|
|
|
|
var incomeTotalTaxExclude = f2(inputVal("incomeTotalTaxExclude"));
|
2021-11-05 10:33:13 +00:00
|
|
|
|
//成本总计不含税
|
2021-11-17 09:28:55 +00:00
|
|
|
|
var costTotalTaxExclude = f2(inputVal("costTotalTaxExclude"));
|
2021-11-05 10:33:13 +00:00
|
|
|
|
//资金使用成本不含税
|
2021-11-17 09:28:55 +00:00
|
|
|
|
var costExpropriationTaxExclude = f2(inputVal("costExpropriationTaxExclude"));
|
2021-11-05 10:33:13 +00:00
|
|
|
|
//公司管理费用
|
2021-11-17 09:28:55 +00:00
|
|
|
|
var costCompanyManageTaxExclude = f2(inputVal("costCompanyManageTaxExclude"));
|
2021-11-05 10:33:13 +00:00
|
|
|
|
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var projectGrossProfit = f2Fixed(incomeTotalTaxExclude - costTotalTaxExclude - costExpropriationTaxExclude);
|
2021-12-27 01:37:46 +00:00
|
|
|
|
var projectGrossProfitRate = f2Fixed(rate(projectGrossProfit, incomeTotalTaxExclude));
|
2022-01-04 08:33:10 +00:00
|
|
|
|
var projectContributionProfit = f2Fixed(projectGrossProfit - costCompanyManageTaxExclude);
|
2021-12-27 01:37:46 +00:00
|
|
|
|
var projectContributionProfitRate = f2Fixed(rate(projectContributionProfit, incomeTotalTaxExclude));
|
2021-11-05 10:33:13 +00:00
|
|
|
|
|
|
|
|
|
|
$("input[name='projectGrossProfit']").val(projectGrossProfit);
|
|
|
|
|
|
$("input[name='projectGrossProfitRate']").val(projectGrossProfitRate);
|
|
|
|
|
|
$("input[name='projectContributionProfit']").val(projectContributionProfit);
|
|
|
|
|
|
$("input[name='projectContributionProfitRate']").val(projectContributionProfitRate);
|
|
|
|
|
|
}
|