diff --git a/src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt b/src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt index 4add027..8d807bd 100644 --- a/src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt +++ b/src/main/java/com/ffii/tsms/modules/data/service/DashboardService.kt @@ -23,6 +23,9 @@ open class DashboardService( fun CustomerSubsidiary(args: Map): List> { val sql = StringBuilder("select" + + " row_number()OVER (" + + " ORDER BY c.id" + + " ) as id," + " c.id as customerId," + " c.name as customerName," + " c.code as customerCode," @@ -30,18 +33,17 @@ open class DashboardService( + " c.district as cutomerDistrict," + " c.brNo as customerBrNo," + " c.typeId as customerTypeId," - + " s.id as subsidiaryId," - + " s.name as subsidiaryName," - + " s.code as subsidiaryCode," - + " s.address as subsidiaryAddress," - + " s.district as subsidiaryDistrict," - + " s.brNo as subsidiaryBrNo," - + " s.typeId as subsidiaryTypeId," + + " coalesce (s.id,'-') as subsidiaryId," + + " coalesce (s.name,'-') as subsidiaryName," + + " coalesce (s.code,'-') as subsidiaryCode," + + " coalesce (s.address,'-') as subsidiaryAddress," + + " coalesce (s.district,'-') as subsidiaryDistrict," + + " coalesce (s.brNo,'-') as subsidiaryBrNo," + + " coalesce (s.typeId,'-') as subsidiaryTypeId," + " count(p.id) as projectNo" + " from customer c" - + " left join customer_subsidiary cs on c.id = cs.customerId" - + " left join subsidiary s on cs.subsidiaryId = s.id" - + " left join project p on cs.customerId = p.customerId and cs.subsidiaryId = p.customerSubsidiaryId " + + " left join project p on c.id = p.customerId" + + " left join subsidiary s on p.customerSubsidiaryId = s.id" + " where c.deleted = 0" ) if (args != null) { @@ -94,4 +96,47 @@ open class DashboardService( return jdbcDao.queryForList(sql.toString(), args) } + + fun searchCustomerNonSubsidiaryProject(args: Map): List> { + val sql = StringBuilder("select" + + " p.id as id," + + " p.id as projectId," + + " p.code as projectCode," + + " p.name as projectName," + + " te.code as team," + + " s.name as teamLead," + + " tg.name as expectedStage," + + " p.totalManhour as budgetedManhour," + + " sum(t.normalConsumed) + sum(t.otConsumed) as spentManhour," + + " p.totalManhour - sum(t.normalConsumed) - sum(t.otConsumed) as remainedManhour," + + " coalesce (round(((sum(t.normalConsumed) - sum(t.otConsumed))/p.totalManhour)*100,2),0) as manhourConsumptionPercentage," + + " DATE_FORMAT(milestonePayment.comingPaymentMilestone, '%Y-%m-%d') as comingPaymentMilestone" + + " from project p" + + " left join project_task pt on p.id = pt.project_id" + + " left join timesheet t on pt.id = t.projectTaskId" + + " left join team te on p.teamLead = te.teamLead" + + " left join staff s on te.teamLead = s.id" + + " left join milestone m on p.id = m.projectId and curdate() >= m.startDate and curdate() <= m.endDate" + + " left join task_group tg on m.taskGroupId = tg.id" + + " left join (" + + " select" + + " mp.date as comingPaymentMilestone" + + " from project p" + + " left join milestone m on p.id = m.projectId" + + " left join milestone_payment mp on m.id = mp.milestoneId" + + " where p.customerId = :customerId" + + " and isNull(p.customerSubsidiaryId)" + + " and mp.date >= curdate()" + + " order by date asc" + + " limit 1" + + " ) milestonePayment on 1=1" + + " where p.customerId = :customerId" + + " and isNull(p.customerSubsidiaryId)" + + " group by p.id, p.code, p.name, te.code, s.name, tg.name, p.totalManhour, milestonePayment.comingPaymentMilestone" + ) + + return jdbcDao.queryForList(sql.toString(), args) + } } + + diff --git a/src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt b/src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt index dbe7e3a..dea71c7 100644 --- a/src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt +++ b/src/main/java/com/ffii/tsms/modules/data/web/DashboardController.kt @@ -54,6 +54,7 @@ class DashboardController( val customerId = request?.getParameter("customerId") val subsidiaryId = request?.getParameter("subsidiaryId") val args = mutableMapOf() + var result: List> = emptyList() if (customerId != null) { args["customerId"] = customerId } @@ -61,6 +62,11 @@ class DashboardController( args["subsidiaryId"] = subsidiaryId } - return dashboardService.searchCustomerSubsidiaryProject(args) + if (customerId != null && subsidiaryId != null) { + result = dashboardService.searchCustomerSubsidiaryProject(args) + } else if (customerId != null && subsidiaryId == null){ + result = dashboardService.searchCustomerNonSubsidiaryProject(args) + } + return result } } \ No newline at end of file