/** * 一个资金计划的字段 */ BUDGET_PLAN_DETAIL_ARR=["month","deviceCost","engineerCost","projectManageCost","earnestMoneyCost","totalCost","saleIncome","earnestMoneyIncome","totalIncome","fundBalance","capitalInterest","underwrittenPlan","repaymentPlan"]; $(function () { $(".budget-plan-detail").click(function () { $('#my-prompt-budget-plan-detail').modal({ relatedTarget: this, onConfirm: function(e) { //校验数据正确性 var message = verifyBudgetPlan(); if (message) { alert(message); return; } //不能使用e.data,因为无法获取动态添加的 var data = collectData("am-modal-prompt-input-budget-plan-detail"); data = prepareAjaxData(data, BUDGET_PLAN_DETAIL_ARR, $("#id").val()); postAjax(base+"/project/budgetEditSaveBudgetPlanDetail", data, updateBudgetPlanDetailData); }, onCancel: function(e) { } }); }); $("#budgetPlanDetailAddBtn").click(function () { appendTrBudgetPlan(); }); //绑定资金计划明细输入框 bindChangeableInputBudgetPlanDetail(); //绑定资金计划的删除按钮 bindBudgetPlanDeleteBtn(); //绑定公司管理费用的输入框 bindCompanyManageChangeable(); }); /** * 校验资金计划表 * 校验失败返回相应的报错信息,否则返回"" */ function verifyBudgetPlan(){ var costPurchaseDeviceTaxExclude = $("input[name='costPurchaseDeviceTaxExclude']").val(); var costPurchaseBuildTaxExclude = $("input[name='costPurchaseBuildTaxExclude']").val(); var costPurchaseServiceTaxExclude = $("input[name='costPurchaseServiceTaxExclude']").val(); var costPurchaseOtherTaxExclude = $("input[name='costPurchaseOtherTaxExclude']").val(); var costProjectManageTaxExclude = $("input[name='costProjectManageTaxExclude']").val(); var incomeTotalTaxExclude = $("input[name='incomeTotalTaxExclude']").val(); var input_total_device_cost_budget_plan = $(".input-total-device-cost-budget-plan").val(); var input_total_engineer_cost_budget_plan = $(".input-total-engineer-cost-budget-plan").val(); var input_total_project_manage_budget_plan = $(".input-total-project-manage-cost-budget-plan").val(); var input_total_sale_income_budget_plan = $(".input-total-sale-income-budget-plan").val(); var input_total_earnest_money_cost_budget_plan = $(".input-total-earnest-money-cost-budget-plan").val(); var input_total_earnest_money_income_budget_plan = $(".input-total-earnest-money-income-budget-plan").val(); //从采购成本明细中取“设备”大类下的总计---设备支出 if(costPurchaseDeviceTaxExclude != input_total_device_cost_budget_plan){ return "采购成本明细中取“设备”大类下的总计["+costPurchaseDeviceTaxExclude+"]与设备支出["+input_total_device_cost_budget_plan+"]不等"; } //从采购成本明细中取“服务+施工+其他”大类的总计---工程支出 var t = f2(f2(costPurchaseBuildTaxExclude)+f2(costPurchaseServiceTaxExclude)+f2(costPurchaseOtherTaxExclude)); if(t != f2(input_total_engineer_cost_budget_plan)){ return "采购成本明细中取“服务+施工+其他”大类的总计["+t+"]与工程支出["+input_total_engineer_cost_budget_plan+"]不等"; } //从项目管理成本取总计金额--经营性开支 if(costProjectManageTaxExclude != input_total_project_manage_budget_plan){ return "项目管理成本取总计金额["+costProjectManageTaxExclude+"]与经营性开支["+input_total_project_manage_budget_plan+"]不等"; } //从“销售收入明细”中取合计--销售收款 if(incomeTotalTaxExclude != input_total_sale_income_budget_plan){ return "销售收入明细金额["+incomeTotalTaxExclude+"]与销售收款["+input_total_sale_income_budget_plan+"]不等"; } //保证金支出和收入一致 if(input_total_earnest_money_cost_budget_plan != input_total_earnest_money_income_budget_plan){ return "保证金支出["+input_total_earnest_money_cost_budget_plan+"]与保证金收款["+input_total_earnest_money_income_budget_plan+"]不等"; } return ""; } /** * 资金计划增加一行 */ function appendTrBudgetPlan() { var template = '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' '; $("#budgetPlanDetailTable").append(template); //重新绑定删除事件和input修改事件 bindBudgetPlanDeleteBtn(); bindChangeableInputBudgetPlanDetail(); } /** * 绑定删除删除按钮,不仅删除还需要重新计算统计的数据 */ function bindBudgetPlanDeleteBtn() { $(".am-modal-line-delete-budget-plan").click(function () { //删除自己对应的tr $(this).parent().parent().remove(); //还需要更新每一列的合计数据 updateBudgetPlanTotal("input-changeable-device-cost-budget-plan","input-total-device-cost-budget-plan"); updateBudgetPlanTotal("input-changeable-engineer-cost-budget-plan","input-total-engineer-cost-budget-plan"); updateBudgetPlanTotal("input-changeable-project-manage-cost-budget-plan","input-total-project-manage-cost-budget-plan"); updateBudgetPlanTotal("input-changeable-earnest-money-cost-budget-plan","input-total-earnest-money-cost-budget-plan"); updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); updateBudgetPlanTotal("input-changeable-sale-income-budget-plan","input-total-sale-income-budget-plan"); updateBudgetPlanTotal("input-changeable-earnest-money-income-budget-plan","input-total-earnest-money-income-budget-plan"); updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); /*updateBudgetPlanTotal("input-changeable-fund-balance-budget-plan","input-total-fund-balance-budget-plan");*/ updateBudgetPlanTotal("input-changeable-capital-interest-budget-plan","input-total-capital-interest-budget-plan"); updateBudgetPlanTotal("input-changeable-underwritten-plan-budget-plan","input-total-underwritten-plan-budget-plan"); updateBudgetPlanTotal("input-changeable-repayment-plan-budget-plan","input-total-repayment-plan-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); } function bindChangeableInputBudgetPlanDetail() { //设备支出改变 $(".input-changeable-device-cost-budget-plan").change(function () { var deviceCost = f2($(this).val()); //找到对应的工程支出、经营性支出、保证金支出 var engineerCost = f2($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); var projectManageCost = f2($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); var earnestMoneyCost = f2($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); //更新本月所有项支出 $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); //更新所有月设备支出总额 updateBudgetPlanTotal("input-changeable-device-cost-budget-plan","input-total-device-cost-budget-plan"); //更新所有月支出总额 updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); //工程支出改变 $(".input-changeable-engineer-cost-budget-plan").change(function () { var engineerCost = f2($(this).val()); //找到对应的设备支出、经营性支出、保证金支出 var deviceCost = f2($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); var projectManageCost = f2($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); var earnestMoneyCost = f2($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); //更新本月所有项支出 $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); //更新所有月工程支出总额 updateBudgetPlanTotal("input-changeable-engineer-cost-budget-plan","input-total-engineer-cost-budget-plan"); //更新所有月支出总额 updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); //经营性支出改变 $(".input-changeable-project-manage-cost-budget-plan").change(function () { var projectManageCost = f2($(this).val()); //找到对应的设备支出、工程支出、保证金支出 var deviceCost = f2($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); var engineerCost = f2($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); var earnestMoneyCost = f2($(this).parent().parent().find(".input-changeable-earnest-money-cost-budget-plan").val()); //更新本月所有项支出 $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(deviceCost+engineerCost+projectManageCost+earnestMoneyCost); //更新所有月经营性支出总额 updateBudgetPlanTotal("input-changeable-project-manage-cost-budget-plan","input-total-project-manage-cost-budget-plan"); //更新所有月支出总额 updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); //保证金改变 $(".input-changeable-earnest-money-cost-budget-plan").change(function () { var earnestMoneyCost = f2($(this).val()); //找到对应的设备支出、经营性支出、保证金支出 var deviceCost = f2($(this).parent().parent().find(".input-changeable-device-cost-budget-plan").val()); var engineerCost = f2($(this).parent().parent().find(".input-changeable-engineer-cost-budget-plan").val()); var projectManageCost = f2($(this).parent().parent().find(".input-changeable-project-manage-cost-budget-plan").val()); //更新本月所有项支出 $(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val(f2(deviceCost+engineerCost+projectManageCost+earnestMoneyCost)); //更新所有月保证金支出总额 updateBudgetPlanTotal("input-changeable-earnest-money-cost-budget-plan","input-total-earnest-money-cost-budget-plan"); //更新所有月支出总额 updateBudgetPlanTotal("input-changeable-total-cost-budget-plan","input-total-total-cost-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); //销售收款改变 $(".input-changeable-sale-income-budget-plan").change(function () { var saleIncome = f2($(this).val()); //找到保证金收款 var earnestMoneyIncome = f2($(this).parent().parent().find(".input-changeable-earnest-money-income-budget-plan").val()); //更新本月所有项收入 $(this).parent().parent().find(".input-changeable-total-income-budget-plan").val(f2(saleIncome+earnestMoneyIncome)); //更新所有月销售收款总额 updateBudgetPlanTotal("input-changeable-sale-income-budget-plan","input-total-sale-income-budget-plan"); //更新所有月收入总额 updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); //保证金收款改变 $(".input-changeable-earnest-money-income-budget-plan").change(function () { var earnestMoneyIncome = f2($(this).val()); //找到保证金收款 var saleIncome = f2($(this).parent().parent().find(".input-changeable-sale-income-budget-plan").val()); //更新本月所有项收入 $(this).parent().parent().find(".input-changeable-total-income-budget-plan").val(f2(saleIncome+earnestMoneyIncome)); //更新所有月保证金收款总额 updateBudgetPlanTotal("input-changeable-earnest-money-income-budget-plan","input-total-earnest-money-income-budget-plan"); //更新所有月收入总额 updateBudgetPlanTotal("input-changeable-total-income-budget-plan","input-total-total-income-budget-plan"); //更新余额 updateEachFundBalance(); //更新垫资计划 updateEachUnderwrittenPlan(); //更新回款计划 updateEachRepaymentPlan(); //更新资金利息 updateEachCapitalInterest(); //更新垫资峰值月 updateUnderwrittenInfo(); }); /*//资金余额改变 $(".input-changeable-fund-balance-budget-plan").change(function () { updateBudgetPlanTotal("input-changeable-fund-balance-budget-plan","input-total-fund-balance-budget-plan"); });*/ //资金利息改变 $(".input-changeable-capital-interest-budget-plan").change(function () { updateBudgetPlanTotal("input-changeable-capital-interest-budget-plan","input-total-capital-interest-budget-plan"); }); //垫资计划改变 $(".input-changeable-underwritten-plan-budget-plan").change(function () { updateBudgetPlanTotal("input-changeable-underwritten-plan-budget-plan","input-total-underwritten-plan-budget-plan"); }); //还款计划改变 $(".input-changeable-repayment-plan-budget-plan").change(function () { updateBudgetPlanTotal("input-changeable-repayment-plan-budget-plan","input-total-repayment-plan-budget-plan"); }); } /** * 更新每列的总计 */ function updateBudgetPlanTotal(className, totalClassName) { var total = 0; //找到本列所有的 $("."+className).each(function (t) { total += f2($(this).val()); }); $("."+totalClassName).val(f2(total)); } /** * 更新每一行【即每个月】的资金余额 * 每个月的余额=本月收入-支出+上月余额 */ function updateEachFundBalance() { var fundBalance = 0; //找到每个月的资金余额输入框 $(".input-changeable-fund-balance-budget-plan").each(function (t) { //找到当前月的收入和支出 var income = f2($(this).parent().parent().find(".input-changeable-total-income-budget-plan").val()); var cost = f2($(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val()); //我的上月余额 var prevFundBalance = f2($(this).parent().parent().prev("tr").find(".input-changeable-fund-balance-budget-plan").val()); if(!prevFundBalance){ //第一个月的话,上月余额就为0 prevFundBalance = 0; } fundBalance = income - cost + prevFundBalance; $(this).val(f2(fundBalance)); }); //总余额=最后一个月的余额 $(".input-total-fund-balance-budget-plan").val(f2(fundBalance)); } /** * 更新每一行【即每个月】的垫资计划 */ function updateEachUnderwrittenPlan() { var total = 0; //找到每个月的垫资计划输入框 $(".input-changeable-underwritten-plan-budget-plan").each(function (t) { //找到当前月的收入和支出 var income = f2($(this).parent().parent().find(".input-changeable-total-income-budget-plan").val()); var cost = f2($(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val()); //我的上月余额 var prevFundBalance = f2($(this).parent().parent().prev("tr").find(".input-changeable-fund-balance-budget-plan").val()); if(!prevFundBalance){ //第一个月的话,上月余额就为0 prevFundBalance = 0; } var underwrittenPlan = calUnderwrittenPlan(income, cost, prevFundBalance); total += underwrittenPlan; $(this).val(f2(underwrittenPlan)); }); //总垫资计划=所有月累加 $(".input-total-underwritten-plan-budget-plan").val(f2(total)); //下放小表的垫资峰值金额 $(".input-underwritten-plan-statistic-amount-budget-plan").val(f2(total)); } /** * 计算垫资计划 * @param income 收入 * @param cost 支出 * @param prevFundBalance 上月余额 */ function calUnderwrittenPlan(income, cost, prevFundBalance) { var underwrittenPlan = 0; if(!income || !cost){ //数据还不全的时候 underwrittenPlan = NaN; }else { if (income - cost >= 0) { underwrittenPlan = 0; } else { if (prevFundBalance < 0) { underwrittenPlan = cost - income; } else { if (prevFundBalance <= cost - income) { underwrittenPlan = cost - income - prevFundBalance; } else { underwrittenPlan = 0; } } } } return underwrittenPlan; } /** * 更新每一行【即每个月】的还款计划 */ function updateEachRepaymentPlan() { var total = 0; //找到每个月的回款计划输入框 $(".input-changeable-repayment-plan-budget-plan").each(function (t) { //找到当前月的收入和支出 var income = f2($(this).parent().parent().find(".input-changeable-total-income-budget-plan").val()); var cost = f2($(this).parent().parent().find(".input-changeable-total-cost-budget-plan").val()); //我的上月余额 var prevFundBalance = f2($(this).parent().parent().prev("tr").find(".input-changeable-fund-balance-budget-plan").val()); if(!prevFundBalance){ //第一个月的话,上月余额就为0 prevFundBalance = 0; } var repaymentPlan = calRepaymentPlan(income, cost, prevFundBalance); total += repaymentPlan; $(this).val(f2(repaymentPlan)); }); //总回款计划=所有月累加 $(".input-total-repayment-plan-budget-plan").val(f2(total)); } /** * 计算回款计划 * @param income 收入 * @param cost 支出 * @param prevFundBalance 上月余额 */ function calRepaymentPlan(income, cost, prevFundBalance) { var repaymentPlan = 0; if(!income || !cost){ //数据还不全的时候 repaymentPlan = NaN; }else { if(income - cost <= 0){ repaymentPlan = 0; }else { if(prevFundBalance >= 0){ repaymentPlan = 0; }else { if(income - cost <= -prevFundBalance){ repaymentPlan = income - cost; }else { repaymentPlan = -prevFundBalance; } } } } return repaymentPlan; } /** * 更新每一行【即每个月】的资金利息 */ function updateEachCapitalInterest() { var underwrittenPlanTaxRate = f2($(".input-underwritten-plan-statistic-tax-rate-budget-plan").val()); var total = 0; //找到每个月的资金利息输入框 $(".input-changeable-capital-interest-budget-plan").each(function (t) { //找到当前月的垫资计划 var underwrittenPlan = f2($(this).parent().parent().find(".input-changeable-underwritten-plan-budget-plan").val()); var capitalInterest = underwrittenPlan*underwrittenPlanTaxRate/100/12; total += capitalInterest; $(this).val(f2(capitalInterest)); }); //总资金利息=所有月累加 $(".input-total-capital-interest-budget-plan").val(f2(total)); //下方小表的资金利息 $(".input-underwritten-plan-statistic-capital-interest-budget-plan").val(f2(total)); } /** * 更新资金相关信息 * 垫资峰值时间 垫资最大的那一个月 垫资峰值金额 垫资累计 @see updateEachUnderwrittenPlan 资金利息 垫资每月利息累加 @see updateEachCapitalInterest */ function updateUnderwrittenInfo() { var max = 0; var month = ''; //找到每个月的垫资计划输入框 $(".input-changeable-underwritten-plan-budget-plan").each(function (t) { //找到当前月垫资计划 var underwrittenPlan = f2($(this).val()); //当月比最大的还大,就取当月的 if(underwrittenPlan > max){ month = $(this).parent().parent().find(".input-changeable-month-budget-plan").val(); max = underwrittenPlan; } }); //垫资峰值时间为每个月最大的那个月 $(".input-underwritten-plan-statistic-max-month-budget-plan").val(month); } /** * 更新页面收入的数据 */ function updateBudgetPlanDetailData(data,returnData) { //var details = data.details; //主页面上的财务费用 $("input[name='costExpropriationTaxExclude']").val($(".input-underwritten-plan-statistic-capital-interest-budget-plan").val()); //更新项目贡献率 updateProjectContributionProfitRate(); //更新现金流量 updateCashFlow(); } /** * 绑定公司管理费用输入框 */ function bindCompanyManageChangeable() { $("input[name='costCompanyManageTaxExclude']").change(function () { //更新项目贡献率 updateProjectContributionProfitRate(); }); } /** * 更新现金流量表 */ function updateCashFlow() { var saleIncome = $(".input-total-sale-income-budget-plan").val(); var earnestMoneyIncome = $(".input-total-earnest-money-income-budget-plan").val(); var deviceCost = $(".input-total-device-cost-budget-plan").val(); var engineerCost = $(".input-total-engineer-cost-budget-plan").val(); var projectManageCost = $(".input-total-project-manage-cost-budget-plan").val(); var earnestMoneyCost = $(".input-total-earnest-money-cost-budget-plan").val(); var capitalInterest = $(".input-total-capital-interest-budget-plan").val(); var underwrittenPlan = $(".input-total-underwritten-plan-budget-plan").val(); var repaymentPlan = $(".input-total-repayment-plan-budget-plan").val(); var d = f2(f2(deviceCost)+f2(engineerCost)); var f = f2(f2(projectManageCost)+f2(earnestMoneyCost)+f2(capitalInterest)); var g = f2(f2(saleIncome)+0+f2(earnestMoneyIncome)-d-0-f); var m = f2(f2(underwrittenPlan)-f2(repaymentPlan)); var n = f2(g+0+m); console.log(saleIncome,earnestMoneyIncome,deviceCost, engineerCost,projectManageCost,earnestMoneyCost, capitalInterest,underwrittenPlan,repaymentPlan, d,f,g,m,m); $("input[name='saleIncomeCash']").val(saleIncome); $("input[name='earnestMoneyIncome']").val(earnestMoneyIncome); $("input[name='purchaseCost']").val(d); $("input[name='earnestMoneyCost']").val(f); $("input[name='netCashFlow']").val(g); $("input[name='financingCapitalInflow']").val(underwrittenPlan); $("input[name='financingCapitalOutflow']").val(repaymentPlan); $("input[name='financingCapitalCashflow']").val(m); $("input[name='netIncreaseMonetaryFunds']").val(n); }