diff --git a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java index c53a5c0..138c9da 100644 --- a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java +++ b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java @@ -58,14 +58,14 @@ public class HumanCostController extends BaseController{ Map model) { //当前登录人的角色类型 Admin admin = getAdmin(); - int roleId = admin.getRoleId(); + int roleLevel = admin.getRoleLevel(); List selfProjects = projectRepository.findByCreator(admin.getId(), new Date()); - if (roleId <= 18) { + if (roleLevel <= 2 || roleLevel == 4) { model.put("deptVary", 1); model.put("deptList", deptRepository.findAll()); model.put("projectList", projectRepository.findAll()); model.put("showSalary", 1); - } else if (roleId <= 20) { + } else if (roleLevel == 3) { model.put("deptVary", -1); model.put("deptList", new ArrayList<>()); model.put("projectList", projectRepository.findByDeptId(admin.getDeptId())); @@ -140,14 +140,12 @@ public class HumanCostController extends BaseController{ */ @RequestMapping("/template") public void importTemplate(HttpServletResponse response) throws IOException { - String[] headers = new String[]{"项目名称", "人员1", "人员2"}; String[] columns = new String[]{""}; downloadHeader(response , Utils.generateExcelName("人力成本导入模板")); - ExportUtils exportUtils = new ExportUtils(headers); List data = new ArrayList<>(); data.add("成本"); - data.add("项目1"); - data.add("项目2"); + String[] headers = humanCostService.template(data); + ExportUtils exportUtils = new ExportUtils(headers); exportUtils.exportTemplate(columns , data, "yyyy-MM-dd HH:mm:ss" , 1); exportUtils.write(response.getOutputStream()); } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java index 30ffea0..53b6646 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSettleController.java @@ -4,10 +4,7 @@ import cn.palmte.work.bean.BudgetSettleBean; import cn.palmte.work.bean.EstimateSettleBean; import cn.palmte.work.bean.FormerBean; import cn.palmte.work.bean.SettleBean; -import cn.palmte.work.model.Project; -import cn.palmte.work.model.ProjectBudgetPlanDetail; -import cn.palmte.work.model.ProjectSettleIncome; -import cn.palmte.work.model.ProjectSettleIncomeRepository; +import cn.palmte.work.model.*; import cn.palmte.work.service.ProjectBudgetService; import cn.palmte.work.service.ProjectEstimateService; import cn.palmte.work.service.ProjectService; @@ -18,7 +15,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import top.jfunc.common.utils.CollectionUtil; +import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -48,8 +47,12 @@ public class ProjectSettleController extends BaseController{ @Autowired private ProjectSettleIncomeRepository projectSettleIncomeRepository; + @Autowired + private ProjectUserTimeRepository projectUserTimeRepository; + @RequestMapping("/add") public String add(@RequestParam("id") int id, Map model) { + String time = null; Project project = projectService.getProject(id); List projectBudgetPlanDetails = projectBudgetService.getProjectBudgetPlanDetails(project); ProjectSettleIncome projectSettleIncome = projectSettleIncomeRepository.findNewByProjectId(id); @@ -60,11 +63,11 @@ public class ProjectSettleController extends BaseController{ instance.setTime(date); instance.set(Calendar.MONTH, instance.get(Calendar.MONTH) + 1); Date current = instance.getTime(); - String time = DateKit.toStr(current, DateKit.DATE_FORMAT_YEAR_MONTH2); + time = DateKit.toStr(current, DateKit.DATE_FORMAT_YEAR_MONTH2); model.put("time", time); model.put("formerBean", projectSettleService.getFormerSettle(project, time)); } else { - String time = DateKit.toStr(project.getStartDate(), DateKit.DATE_FORMAT_YEAR_MONTH2); + time = DateKit.toStr(project.getStartDate(), DateKit.DATE_FORMAT_YEAR_MONTH2); model.put("time", time); model.put("formerBean", new FormerBean()); @@ -73,7 +76,13 @@ public class ProjectSettleController extends BaseController{ model.put("project", project); model.put("estimateBean", projectEstimateService.getEstimate(project)); model.put("budgetBean", projectBudgetService.getBudget(project)); - + List projectUserTimes = projectUserTimeRepository.findByProjectIdAndTime(project.getId(), time); + if(CollectionUtil.isNotEmpty(projectUserTimes)){ + BigDecimal result = projectUserTimes.stream().map((ProjectUserTime t) -> t.getUserCost().multiply(t.getUserSalary())).reduce(BigDecimal.ZERO, BigDecimal::add); + model.put("salary", result); + } else { + model.put("salary", new BigDecimal(0)); + } //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); //freemarker可以利用的静态方法 @@ -94,6 +103,13 @@ public class ProjectSettleController extends BaseController{ model.put("formerBean", projectSettleService.getFormerSettle(project, time)); model.put("monthBean", projectSettleService.getMonthSettle(project, time)); model.put("currentBean", projectSettleService.getCurrentSettle(project, time)); + List projectUserTimes = projectUserTimeRepository.findByProjectIdAndTime(project.getId(), time); + if(CollectionUtil.isNotEmpty(projectUserTimes)){ + BigDecimal result = projectUserTimes.stream().map((ProjectUserTime t) -> t.getUserCost().multiply(t.getUserSalary())).reduce(BigDecimal.ZERO, BigDecimal::add); + model.put("salary", result); + } else { + model.put("salary", new BigDecimal(0)); + } //现金表 model.put("cashFlowBean", projectBudgetService.getCashFlowBean(project, projectBudgetPlanDetails)); //freemarker可以利用的静态方法 diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java index 95667a1..07de543 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectSummaryController.java @@ -53,8 +53,7 @@ public class ProjectSummaryController extends BaseController { } else { time = searchInfo.get("time"); } - - List list = projectSummaryService.getList(searchInfo, time); + List list = projectSummaryService.getList(searchInfo, time, admin); model.put("pager", list); return "admin/project_statistics"; diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java index d809216..4c642d3 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.List; /** @@ -20,6 +21,9 @@ public interface ProjectUserTimeRepository extends JpaRepository findAllByTime(String time); + @Query(value = "select * from project_user_time where project_id = ?1 and time = ?2", nativeQuery = true) + List findByProjectIdAndTime(int projectId, String time); + @Modifying @Query(value = "delete from project_user_time where time = ?1", nativeQuery = true) int deleteByTime(String date); diff --git a/src/main/java/cn/palmte/work/service/HumanCostService.java b/src/main/java/cn/palmte/work/service/HumanCostService.java index ccd7247..66b5859 100644 --- a/src/main/java/cn/palmte/work/service/HumanCostService.java +++ b/src/main/java/cn/palmte/work/service/HumanCostService.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.db.bean.Page; +import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; @@ -36,6 +37,9 @@ public class HumanCostService { @Autowired private AdminRepository adminRepository; + @Autowired + private Pagination pagination; + public Page project(ConcurrentHashMap searchInfo, Admin admin, int pageNumber, int pageSize) { Page list = projectUserTimeRepositoryImpl.project(searchInfo, admin, pageNumber, pageSize); return list; @@ -214,4 +218,31 @@ public class HumanCostService { } return new BigDecimal(0); } + + public String[] template(List data) { + List admins = adminRepository.getAllEnable(); + String[] headers = new String[admins.size() + 1]; + headers[0] = "项目名称"; + for (int i = 1; i < admins.size(); i++) { + headers[i] = admins.get(i - 1).getRealName(); + } + Admin admin = InterfaceUtil.getAdmin(); + List projectList = null; + if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) { + String sql = "select proj.id, proj.name from project proj where proj.status = ? order by proj.id asc"; + projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE); + } else { + String sql = "select proj.id, proj.name from project proj where proj.status = ? and " + + " (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) order by proj.id asc"; + //项目可见性,根据角色和人员id + int roleId = admin.getRoleId(); + Integer adminId = admin.getId(); + //自己创建的肯定能看见 + projectList = pagination.find(sql, Project.class, Project.STATUS_SETTLE, adminId, roleId, adminId); + } + for (Project project : projectList) { + data.add(project.getName()); + } + return headers; + } } diff --git a/src/main/java/cn/palmte/work/service/ProjectSettleService.java b/src/main/java/cn/palmte/work/service/ProjectSettleService.java index bae636c..5217ce9 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSettleService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSettleService.java @@ -44,31 +44,13 @@ public class ProjectSettleService { public void save(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) { - //收入记录 - income(project, settleBean, budgetBean, estimateBean, time); - //成本记录 - cost(project, settleBean, budgetBean, estimateBean, time); - //管理记录 - costManage(project, settleBean, budgetBean, estimateBean, time); - //利润记录 - profit(project, settleBean, budgetBean, estimateBean, time); - //资金流量记录 - cashFlow(project, settleBean, budgetBean, time); + step(project, settleBean, budgetBean, estimateBean, time); projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_UNCOMMIT); } public void saveAndApprove(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) throws Exception{ - //收入记录 - income(project, settleBean, budgetBean, estimateBean, time); - //成本记录 - cost(project, settleBean, budgetBean, estimateBean, time); - //管理记录 - costManage(project, settleBean, budgetBean, estimateBean, time); - //利润记录 - profit(project, settleBean, budgetBean, estimateBean, time); - //资金流量记录 - cashFlow(project, settleBean, budgetBean, time); + step(project, settleBean, budgetBean, estimateBean, time); projectService.updateStatusAndApproveStatus(project.getId(), StatusEnum.SETTLE_ACCOUNTS, ApproveStatusEnum.APPROVAL_PENDING); @@ -77,8 +59,23 @@ public class ProjectSettleService { } + private void step(Project project, SettleBean settleBean, BudgetSettleBean budgetBean, EstimateSettleBean estimateBean, String time) { + //清除旧纪录 + clearSettle(project, time); + //收入记录 + income(project, settleBean, budgetBean, estimateBean, time); + //成本记录 + cost(project, settleBean, budgetBean, estimateBean, time); + //管理记录 + costManage(project, settleBean, budgetBean, estimateBean, time); + //利润记录 + profit(project, settleBean, budgetBean, estimateBean, time); + //资金流量记录 + cashFlow(project, settleBean, budgetBean, time); + } - public void clearSettle(Project project, String time){ + + private void clearSettle(Project project, String time){ List incomes = projectSettleIncomeRepository.findAllByProjectIdAndTime(project.getId(), time); if(CollectionUtil.isNotEmpty(incomes)){ projectSettleIncomeRepository.deleteInBatch(incomes); diff --git a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java index cd9b174..f546e8f 100644 --- a/src/main/java/cn/palmte/work/service/ProjectSummaryService.java +++ b/src/main/java/cn/palmte/work/service/ProjectSummaryService.java @@ -11,9 +11,7 @@ import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** @@ -45,11 +43,20 @@ public class ProjectSummaryService { @Autowired private Pagination pagination; - public List getList(ConcurrentHashMap searchInfo, String time) { - //预算金额 - Map budget = new HashMap<>(40); - String sql = "select proj.id, proj.name, proj.approve_status_budget from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; - List projectList = pagination.find(sql, Project.class, time); + public List getList(ConcurrentHashMap searchInfo, String time, Admin admin) { + List projectList = null; + if (admin.getRoleLevel() <= 2 || admin.getRoleLevel() == 4) { + String sql = "select proj.id, proj.name, proj.approve_status_settle from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? group by proj.id order by proj.id asc"; + projectList = pagination.find(sql, Project.class, time); + } else { + String sql = "select proj.id, proj.name, proj.approve_status_settle from project_settle_cost psc left join project proj on psc.project_id = proj.id where psc.time = ? and " + + " (proj.creator_id=? OR proj.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)) group by proj.id order by proj.id asc"; + //项目可见性,根据角色和人员id + int roleId = admin.getRoleId(); + Integer adminId = admin.getId(); + //自己创建的肯定能看见 + projectList = pagination.find(sql, Project.class, time, adminId, roleId, adminId); + } List projects = new ArrayList<>(); List projectInt = new ArrayList<>(); for (Project project : projectList) { diff --git a/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java b/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java index 691b60e..51d2ee5 100644 --- a/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java +++ b/src/main/java/cn/palmte/work/utils/excel/ExportUtils.java @@ -243,7 +243,7 @@ public class ExportUtils { * * @throws IOException */ - public void exportTemplate(String[] columns, List dataset, String pattern, int rowIndex) throws IOException{ + public void exportTemplate(String[] columns, List dataset, String pattern, int rowIndex) throws IOException{ // 遍历集合数据,产生数据行 int index = rowIndex; Font font3 = workbook.createFont(); diff --git a/src/main/resources/static/assets/js/project_settle.js b/src/main/resources/static/assets/js/project_settle.js index 93fbe3a..8c8bc49 100644 --- a/src/main/resources/static/assets/js/project_settle.js +++ b/src/main/resources/static/assets/js/project_settle.js @@ -4,16 +4,19 @@ function calculateSettle() { calIncomeDeviceSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); $("input[name='incomeEngineer']").change(function () { calIncomeEngineerSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); $("input[name='incomeService']").change(function () { calIncomeServiceSettleTotal(); calIncomeTotal(); calIncomeSettleTotal(); + calProfit(); }); @@ -21,31 +24,37 @@ function calculateSettle() { calCostPurchaseDeviceSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseBuild']").change(function () { calCostPurchaseBuildSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseService']").change(function () { calCostPurchaseServiceSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costPurchaseOther']").change(function () { calCostPurchaseOtherSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costProjectManage']").change(function () { calCostProjectManageSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); $("input[name='costOther']").change(function () { calCostOtherSettleTotal(); calCostTotal(); calCostSettleTotal(); + calProfit(); }); @@ -53,106 +62,176 @@ function calculateSettle() { calCostExpropriationSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); + calProfit(); }); $("input[name='costCompanyManage']").change(function () { calCostCompanyManageSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); + + calContributionProfit(); + calContributionProfitSettleTotal(); + calContributionProfitProfitMargin(); + calNetProfit(); + calNetProfitSettleTotal(); + calNetProfitProfitMargin(); }); $("input[name='costIncomeTax']").change(function () { calCostIncomeTaxSettleTotal(); calCostManageTotal(); calCostManageSettleTotal(); - }); - - $("input[name='grossProfit']").change(function () { - calGrossProfitSettleTotal(); - calGrossProfitProfitMargin(); - }); - $("input[name='contributionProfit']").change(function () { - calContributionProfitSettleTotal(); - calContributionProfitProfitMargin(); - }); - $("input[name='netProfit']").change(function () { + calNetProfit(); calNetProfitSettleTotal(); calNetProfitProfitMargin(); }); + // $("input[name='grossProfit']").change(function () { + // calGrossProfitSettleTotal(); + // calGrossProfitProfitMargin(); + // }); + // $("input[name='contributionProfit']").change(function () { + // calContributionProfitSettleTotal(); + // calContributionProfitProfitMargin(); + // }); + // $("input[name='netProfit']").change(function () { + // calNetProfitSettleTotal(); + // calNetProfitProfitMargin(); + // }); + + $("input[name='saleIncomeCash']").change(function () { calSaleIncomeCashSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='taxReturn']").change(function () { calTaxReturnSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='earnestMoneyIncome']").change(function () { calEarnestMoneyIncomeSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='purchaseCost']").change(function () { calPurchaseCostSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='taxCost']").change(function () { calTaxCostSettle(); + calNetCashFlow(); + calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='earnestMoneyCost']").change(function () { calEarnestMoneyCostSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netCashFlow']").change(function () { + calNetCashFlow(); calNetCashFlowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='netCashFlow']").change(function () { + // calNetCashFlowSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); $("input[name='cashInflowFromInvestingActivities']").change(function () { calCashInflowFromInvestingActivitiesSettle(); + calNetCashFromInvestingActivities(); + calNetCashFromInvestingActivitiesSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='cashOutflowFromInvestingActivities']").change(function () { calCashOutflowFromInvestingActivitiesSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netCashFromInvestingActivities']").change(function () { + calNetCashFromInvestingActivities(); calNetCashFromInvestingActivitiesSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='netCashFromInvestingActivities']").change(function () { + // calNetCashFromInvestingActivitiesSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); $("input[name='financingCapitalInflow']").change(function () { calFinancingCapitalInflowSettle(); + calFinancingCapitalCashflow(); + calFinancingCapitalCashflowSettle(); + calNetIncreaseMonetaryFunds(); + calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); $("input[name='financingCapitalOutflow']").change(function () { calFinancingCapitalOutflowSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='financingCapitalCashflow']").change(function () { + calFinancingCapitalCashflow(); calFinancingCapitalCashflowSettle(); - calCashFlowTotal(); - calCashFlowSettleTotal(); - }); - $("input[name='netIncreaseMonetaryFunds']").change(function () { + calNetIncreaseMonetaryFunds(); calNetIncreaseMonetaryFundsSettle(); calCashFlowTotal(); calCashFlowSettleTotal(); }); + // $("input[name='financingCapitalCashflow']").change(function () { + // calFinancingCapitalCashflowSettle(); + // calNetIncreaseMonetaryFunds(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); + // $("input[name='netIncreaseMonetaryFunds']").change(function () { + // calNetIncreaseMonetaryFundsSettle(); + // calCashFlowTotal(); + // calCashFlowSettleTotal(); + // }); } +/** + * 收入和支出均需调用的利润方法 + */ +function calProfit() { + calGrossProfit(); + calGrossProfitSettleTotal(); + calGrossProfitProfitMargin(); + calContributionProfit(); + calContributionProfitSettleTotal(); + calContributionProfitProfitMargin(); + calNetProfit(); + calNetProfitSettleTotal(); + calNetProfitProfitMargin(); +} + /** * 收入设备类结算总额(不含税),有一项没填就置空 */ @@ -455,6 +534,23 @@ function calCostManageSettleTotal() { } } +/** + * 本月项目毛利结算总额,有一项没填就置空 + */ +function calGrossProfit() { + var incomeTotal = $("input[name='incomeTotal']").val(); + var costTotal = $("input[name='costTotal']").val(); + var costExpropriation = $("input[name='costExpropriation']").val(); + + var grossProfit = $("input[name='grossProfit']"); + + if(incomeTotal && costTotal && costExpropriation){ + grossProfit.val(parseFloat(incomeTotal)-parseFloat(costTotal)-parseFloat(costExpropriation)); + }else { + grossProfit.val(""); + } +} + /** * 项目毛利结算总额,有一项没填就置空 */ @@ -487,6 +583,22 @@ function calGrossProfitProfitMargin() { } } +/** + * 本月项目贡献利润,有一项没填就置空 + */ +function calContributionProfit() { + var grossProfit = $("input[name='grossProfit']").val(); + var costCompanyManage = $("input[name='costCompanyManage']").val(); + + var contributionProfit = $("input[name='contributionProfit']"); + + if(grossProfit && costCompanyManage){ + contributionProfit.val(parseFloat(grossProfit)-parseFloat(costCompanyManage)); + }else { + contributionProfit.val(""); + } +} + /** * 项目贡献利润,有一项没填就置空 */ @@ -519,6 +631,22 @@ function calContributionProfitProfitMargin() { } } +/** + * 本月项目净利润,有一项没填就置空 + */ +function calNetProfit() { + var contributionProfit = $("input[name='contributionProfit']").val(); + var costIncomeTax = $("input[name='costIncomeTax']").val(); + + var netProfit = $("input[name='netProfit']"); + + if(contributionProfit && costIncomeTax){ + netProfit.val(parseFloat(contributionProfit)-parseFloat(costIncomeTax)); + }else { + netProfit.val(""); + } +} + /** * 项目净利润,有一项没填就置空 */ @@ -543,7 +671,7 @@ function calNetProfitProfitMargin() { var incomeSettleTotal = $("input[name='incomeSettleTotal']").val(); var netProfitProfitMargin = $("input[name='netProfitProfitMargin']"); - console.log("calNetProfitProfitMargin " + netProfitSettleTotal + " " + incomeSettleTotal); + if(netProfitSettleTotal && incomeSettleTotal){ netProfitProfitMargin.val(100*(parseFloat(netProfitSettleTotal)/parseFloat(incomeSettleTotal))); }else { @@ -776,6 +904,77 @@ function calNetIncreaseMonetaryFundsSettle() { } } +/** + * 本月经营活动产生的现金流量净额,有一项没填就置空 + */ +function calNetCashFlow() { + var saleIncomeCash = $("input[name='saleIncomeCash']").val(); + var taxReturn = $("input[name='taxReturn']").val(); + var earnestMoneyIncome = $("input[name='earnestMoneyIncome']").val(); + var purchaseCost = $("input[name='purchaseCost']").val(); + var taxCost = $("input[name='taxCost']").val(); + var earnestMoneyCost = $("input[name='earnestMoneyCost']").val(); + + var netCashFlow = $("input[name='netCashFlow']"); + + if(saleIncomeCash && taxReturn && earnestMoneyIncome && + purchaseCost && taxCost && earnestMoneyCost) { + netCashFlow.val(parseFloat(saleIncomeCash)+parseFloat(taxReturn)+parseFloat(earnestMoneyIncome)- + parseFloat(purchaseCost)-parseFloat(taxCost)-parseFloat(earnestMoneyCost)); + }else { + netCashFlow.val(""); + } +} + +/** + * 本月投资活动产生的现金流量净额,有一项没填就置空 + */ +function calNetCashFromInvestingActivities() { + var cashInflowFromInvestingActivities = $("input[name='cashInflowFromInvestingActivities']").val(); + var cashOutflowFromInvestingActivities = $("input[name='cashOutflowFromInvestingActivities']").val(); + + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']"); + + if(cashInflowFromInvestingActivities && cashOutflowFromInvestingActivities){ + netCashFromInvestingActivities.val(parseFloat(cashInflowFromInvestingActivities)-parseFloat(cashOutflowFromInvestingActivities)); + }else { + netCashFromInvestingActivities.val(""); + } +} + +/** + * 本月筹资活动产生的现金流量净额,有一项没填就置空 + */ +function calFinancingCapitalCashflow() { + var financingCapitalInflow = $("input[name='financingCapitalInflow']").val(); + var financingCapitalOutflow = $("input[name='financingCapitalOutflow']").val(); + + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']"); + + if(financingCapitalInflow && financingCapitalOutflow){ + financingCapitalCashflow.val(parseFloat(financingCapitalInflow)-parseFloat(financingCapitalOutflow)); + }else { + financingCapitalCashflow.val(""); + } +} + +/** + * 本月货币资金净增加额,有一项没填就置空 + */ +function calNetIncreaseMonetaryFunds() { + var netCashFlow = $("input[name='netCashFlow']").val(); + var netCashFromInvestingActivities = $("input[name='netCashFromInvestingActivities']").val(); + var financingCapitalCashflow = $("input[name='financingCapitalCashflow']").val(); + + var netIncreaseMonetaryFunds = $("input[name='netIncreaseMonetaryFunds']"); + + if(netCashFlow && netCashFromInvestingActivities && financingCapitalCashflow){ + netIncreaseMonetaryFunds.val(parseFloat(netCashFlow)+parseFloat(netCashFromInvestingActivities)+parseFloat(financingCapitalCashflow)); + }else { + netIncreaseMonetaryFunds.val(""); + } +} + /** * 本月现金流量表总额(不含税),有一项没填就置空 */ diff --git a/src/main/resources/static/assets/js/project_settle_valid.js b/src/main/resources/static/assets/js/project_settle_valid.js new file mode 100644 index 0000000..25d4154 --- /dev/null +++ b/src/main/resources/static/assets/js/project_settle_valid.js @@ -0,0 +1,454 @@ +var valid = function() { + return incomeDeviceValid() && incomeEngineerValid() && incomeServiceValid() && costPurchaseDeviceValid() && costPurchaseBuildValid() && costPurchaseServiceValid() && costPurchaseOtherValid() && costProjectManageValid() && costOtherValid() && costExpropriationValid() && costCompanyManageValid() + && grossProfitValid() && contributionProfitValid() && netProfitValid() && saleIncomeCashValid() && earnestMoneyIncomeValid() && purchaseCostValid() && earnestMoneyCostValid() && financingCapitalInflowValid() && financingCapitalOutflowValid() && financingCapitalCashflowValid(); +}; + +var incomeDeviceValid = function() { + var settle = $("input[name='incomeDeviceSettleTotal']").val(); + var month = $("input[name='incomeDevice']").val(); + var budget = $("input[name='incomeDeviceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入设备类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入设备类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var incomeEngineerValid = function() { + var settle = $("input[name='incomeEngineerSettleTotal']").val(); + var month = $("input[name='incomeEngineer']").val(); + var budget = $("input[name='incomeEngineerBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入工程类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入工程类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var incomeServiceValid = function() { + var settle = $("input[name='incomeServiceSettleTotal']").val(); + var month = $("input[name='incomeService']").val(); + var budget = $("input[name='incomeServiceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收入服务类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收入服务类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseDeviceValid = function() { + var settle = $("input[name='costPurchaseDeviceSettleTotal']").val(); + var month = $("input[name='costPurchaseDevice']").val(); + var budget = $("input[name='costPurchaseDeviceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本设备类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本设备类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseBuildValid = function() { + var settle = $("input[name='costPurchaseBuildSettleTotal']").val(); + var month = $("input[name='costPurchaseBuild']").val(); + var budget = $("input[name='costPurchaseBuildBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本施工类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本施工类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseServiceValid = function() { + var settle = $("input[name='costPurchaseServiceSettleTotal']").val(); + var month = $("input[name='costPurchaseService']").val(); + var budget = $("input[name='costPurchaseServiceBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本服务类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本服务类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costPurchaseOtherValid = function() { + var settle = $("input[name='costPurchaseOtherSettleTotal']").val(); + var month = $("input[name='costPurchaseOther']").val(); + var budget = $("input[name='costPurchaseOtherBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月采购成本其他类数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("采购成本其他类结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costProjectManageValid = function() { + var settle = $("input[name='costProjectManageSettleTotal']").val(); + var month = $("input[name='costProjectManage']").val(); + var salary = $("input[name='salary']").val(); + var budget = $("input[name='costProjectManageBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目管理成本数据"); + }); + return false; + } + if (parseFloat(salary) > parseFloat(month)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("本月项目管理成本不能低于人力成本"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目管理成本结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costOtherValid = function() { + var settle = $("input[name='costOtherSettleTotal']").val(); + var month = $("input[name='costOther']").val(); + var budget = $("input[name='costOtherBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月其他成本数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("其他成本结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costExpropriationValid = function() { + var settle = $("input[name='costExpropriationSettleTotal']").val(); + var month = $("input[name='costExpropriation']").val(); + var budget = $("input[name='costExpropriationBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月财务费用数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("财务费用结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var costCompanyManageValid = function() { + var settle = $("input[name='costCompanyManageSettleTotal']").val(); + var month = $("input[name='costCompanyManage']").val(); + var budget = $("input[name='costCompanyManageBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月公司管理费用数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("公司管理费用结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var grossProfitValid = function() { + var settle = $("input[name='grossProfitSettleTotal']").val(); + var month = $("input[name='grossProfit']").val(); + var budget = $("input[name='grossProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目毛利数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目毛利结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var contributionProfitValid = function() { + var settle = $("input[name='contributionProfitSettleTotal']").val(); + var month = $("input[name='contributionProfit']").val(); + var budget = $("input[name='contributionProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目贡献利润数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目贡献利润结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var netProfitValid = function() { + var settle = $("input[name='netProfitSettleTotal']").val(); + var month = $("input[name='netProfit']").val(); + var budget = $("input[name='netProfitBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月项目净利润数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("项目净利润结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var saleIncomeCashValid = function() { + var settle = $("input[name='saleIncomeCashSettleTotal']").val(); + var month = $("input[name='saleIncomeCash']").val(); + var budget = $("input[name='saleIncomeCashBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月销售商品、提供劳务收到的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("销售商品、提供劳务收到的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var earnestMoneyIncomeValid = function() { + var settle = $("input[name='earnestMoneyIncomeSettleTotal']").val(); + var month = $("input[name='earnestMoneyIncome']").val(); + var budget = $("input[name='earnestMoneyIncomeBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月收到其他与经营活动有关的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("收到其他与经营活动有关的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var purchaseCostValid = function() { + var settle = $("input[name='purchaseCostSettleTotal']").val(); + var month = $("input[name='purchaseCost']").val(); + var budget = $("input[name='purchaseCostBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月购买商品、接受劳务支付的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("购买商品、接受劳务支付的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var earnestMoneyCostValid = function() { + var settle = $("input[name='earnestMoneyCostSettleTotal']").val(); + var month = $("input[name='earnestMoneyCost']").val(); + var budget = $("input[name='earnestMoneyCostBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月支付其他与经营活动有关的现金数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("支付其他与经营活动有关的现金结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalInflowValid = function() { + var settle = $("input[name='financingCapitalInflowSettleTotal']").val(); + var month = $("input[name='financingCapitalInflow']").val(); + var budget = $("input[name='financingCapitalInflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月融资资金流入数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("融资资金流入结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalOutflowValid = function() { + var settle = $("input[name='financingCapitalOutflowSettleTotal']").val(); + var month = $("input[name='financingCapitalOutflow']").val(); + var budget = $("input[name='financingCapitalOutflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月还款资金流出数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("还款资金流出结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + +var financingCapitalCashflowValid = function() { + var settle = $("input[name='financingCapitalCashflowSettleTotal']").val(); + var month = $("input[name='financingCapitalCashflow']").val(); + var budget = $("input[name='financingCapitalCashflowBudgetTotal']").val(); + if (month == "") { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("请填入本月筹资活动产生的现金流量净额数据"); + }); + return false; + } + if (parseFloat(settle) > parseFloat(budget)) { + layui.use('layer', function(){ + var layer = layui.layer; + layer.alert("筹资活动产生的现金流量净额结算总额不能高于预算总额"); + }); + return false; + } + return true; +}; + diff --git a/src/main/resources/templates/admin/project_list.ftl b/src/main/resources/templates/admin/project_list.ftl index 27e104c..1b7ea07 100644 --- a/src/main/resources/templates/admin/project_list.ftl +++ b/src/main/resources/templates/admin/project_list.ftl @@ -231,7 +231,7 @@ <#-- --> <#-- 项目等于预算状态、预算审核等于通过状态 --> - <#if list.status==5 && list.approveStatusBudget=2 > + <#if (list.status==5 && list.approveStatusBudget=2) || (list.status=10 && list.approveStatusSettle=2) >