diff --git a/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt b/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt index 1e0f2a5..f34d0a0 100644 --- a/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt +++ b/src/main/java/com/ffii/tsms/modules/report/service/ReportService.kt @@ -2118,10 +2118,18 @@ open class ReportService( // } open fun getProjectResourceOverconsumptionReport(args: Map): List> { - val sql = StringBuilder( - " SELECT " + val sql = StringBuilder("with pe_cte as (" + + " select" + + " pe.projectId," + + " sum(coalesce(amount)) as expense" + + " from project_expense pe" + + " where deleted = false" + + " group by pe.projectId" + + " )" + + " SELECT " + " p.code, p.name, tm.code as team, concat(c.code, ' -',c.name) as client, COALESCE(concat(ss.code, ' -', ss.name), 'N/A') as subsidiary " - + " , (p.expectedTotalFee - ifnull(p.subContractFee, 0)) * 0.8 as plannedBudget, sum(t.consumedBudget) as actualConsumedBudget " + + " , (p.expectedTotalFee - ifnull(p.subContractFee, 0)) * 0.8 as plannedBudget, sum(t.consumedBudget) + coalesce(pc.expense, 0) as actualConsumedBudget " + + " , coalesce(pc.expense, 0) as projectExpense " + " , COALESCE(p.totalManhour, 0) as plannedManhour, sum(t.normalConsumed + COALESCE(t.otConsumed, 0)) as actualConsumedManhour " + " , sum(t.consumedBudget) / ((p.expectedTotalFee - ifnull(p.subContractFee, 0)) * 0.8) as budgetConsumptionRate " + " , sum(t.normalConsumed + COALESCE(t.otConsumed, 0)) / COALESCE(p.totalManhour, 0) as manhourConsumptionRate " @@ -2140,6 +2148,7 @@ open class ReportService( + " LEFT JOIN salary sal on se.salaryId = sal.salaryPoint " + " ) t " + " left join project p on p.id = t.projectId " + + " left join pe_cte pc on pc.projectId = t.projectId " + " left join team tm on p.teamLead = tm.teamLead " + " left join customer c on c.id = p.customerId " + " left join subsidiary ss on p.customerSubsidiaryId = ss.id " @@ -2168,7 +2177,7 @@ open class ReportService( else -> "" } } - sql.append(" group by p.code, p.name, tm.code, c.code, c.name, ss.code, ss.name, p.expectedTotalFee, p.subContractFee, p.totalManhour ") + sql.append(" group by p.code, p.name, tm.code, c.code, c.name, ss.code, ss.name, p.expectedTotalFee, p.subContractFee, p.totalManhour, pc.expense ") sql.append(statusFilter) return jdbcDao.queryForList(sql.toString(), args) } diff --git a/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx b/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx index 4700608..6318513 100644 Binary files a/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx and b/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx differ