| @@ -65,6 +65,7 @@ open class ReportService( | |||||
| private val COMPLETION_PROJECT = "templates/report/AR05_Project Completion Report.xlsx" | private val COMPLETION_PROJECT = "templates/report/AR05_Project Completion Report.xlsx" | ||||
| private val CROSS_TEAM_CHARGE_REPORT = "templates/report/Cross Team Charge Report.xlsx" | private val CROSS_TEAM_CHARGE_REPORT = "templates/report/Cross Team Charge Report.xlsx" | ||||
| private val chargeFee = 1.15 | |||||
| private fun conditionalFormattingNegative(sheet: Sheet) { | private fun conditionalFormattingNegative(sheet: Sheet) { | ||||
| // Create a conditional formatting rule | // Create a conditional formatting rule | ||||
| val sheetCF = sheet.sheetConditionalFormatting | val sheetCF = sheet.sheetConditionalFormatting | ||||
| @@ -3688,21 +3689,38 @@ open class ReportService( | |||||
| rowIndex = 3 | rowIndex = 3 | ||||
| sortedTeams.forEach { team: Team -> | sortedTeams.forEach { team: Team -> | ||||
| // not his/her team staffs | // not his/her team staffs | ||||
| val staffs = timesheets | |||||
| var staffs = timesheets | |||||
| .filter { it.project?.teamLead?.team?.id == team.id && it.staff?.team?.id != team.id } | .filter { it.project?.teamLead?.team?.id == team.id && it.staff?.team?.id != team.id } | ||||
| .mapNotNull { it.staff } | .mapNotNull { it.staff } | ||||
| .sortedBy { it.staffId } | .sortedBy { it.staffId } | ||||
| .distinct() | .distinct() | ||||
| // his/her team projects | // his/her team projects | ||||
| val projects = timesheets | |||||
| .filter { it.project?.teamLead?.team?.id == team.id && it.project?.teamLead?.team?.id != it.staff?.team?.id } | |||||
| var tempTimesheets = timesheets | |||||
| .filter { | |||||
| it.project?.teamLead?.team?.id == team.id | |||||
| && it.project?.teamLead?.team?.id != it.staff?.team?.id | |||||
| } | |||||
| if (teamId.lowercase() != "all" && teamId.toLong() != team.id) { | |||||
| staffs = staffs.filter { | |||||
| it.team.id == teamId.toLong() | |||||
| } | |||||
| tempTimesheets = tempTimesheets.filter { | |||||
| it.staff?.team?.id == teamId.toLong() | |||||
| } | |||||
| } | |||||
| val projects = tempTimesheets | |||||
| .mapNotNull { it.project } | .mapNotNull { it.project } | ||||
| .sortedByDescending { it.code } | .sortedByDescending { it.code } | ||||
| .distinct() | .distinct() | ||||
| // Team | // Team | ||||
| if (projects.isNotEmpty()) { | |||||
| if (projects.isNotEmpty() && staffs.isNotEmpty()) { | |||||
| sheet.createRow(rowIndex++).apply { | sheet.createRow(rowIndex++).apply { | ||||
| createCell(0).apply { | createCell(0).apply { | ||||
| setCellValue("Team to be charged:") | setCellValue("Team to be charged:") | ||||
| @@ -3776,7 +3794,7 @@ open class ReportService( | |||||
| val startRow = rowIndex + 1 | val startRow = rowIndex + 1 | ||||
| var endRow = rowIndex | var endRow = rowIndex | ||||
| projects.forEach { project: Project -> | projects.forEach { project: Project -> | ||||
| if (teamId.lowercase() == "all" || teamId.toLong() == project.teamLead?.team?.id || teamId.toLong() == team.id) { | |||||
| if (teamId.lowercase() == "all" || teamId.toLong() == project.teamLead?.team?.id || teamId.toLong() == team.id || team.id == project.teamLead?.team?.id) { | |||||
| // if (team.id == project.teamLead?.team?.id) { | // if (team.id == project.teamLead?.team?.id) { | ||||
| endRow++ | endRow++ | ||||
| sheet.createRow(rowIndex++).apply { | sheet.createRow(rowIndex++).apply { | ||||
| @@ -3825,7 +3843,7 @@ open class ReportService( | |||||
| } | } | ||||
| createCell(columnIndex).apply { | createCell(columnIndex).apply { | ||||
| setCellValue(totalSalary) | |||||
| setCellValue(totalSalary * chargeFee) | |||||
| val cloneStyle = workbook.createCellStyle() | val cloneStyle = workbook.createCellStyle() | ||||
| cloneStyle.cloneStyleFrom(boldFontWithBorderStyle) | cloneStyle.cloneStyleFrom(boldFontWithBorderStyle) | ||||
| cellStyle = cloneStyle.apply { | cellStyle = cloneStyle.apply { | ||||