|
|
@@ -2147,8 +2147,16 @@ open class ReportService( |
|
|
|
"description" to projectsCode["description"] |
|
|
|
) |
|
|
|
|
|
|
|
val financialYears = getFinancialYearDates(queryStartMonth, queryEndMonth, 10) |
|
|
|
|
|
|
|
val staffInfoList = mutableListOf<Map<String, Any>>() |
|
|
|
println("manHoursSpent------- ${manHoursSpent}") |
|
|
|
// println("manHoursSpent------- ${manHoursSpent}") |
|
|
|
|
|
|
|
for (financialYear in financialYears){ |
|
|
|
// println("${financialYear.start.year}-${financialYear.start.monthValue} - ${financialYear.end.year}-${financialYear.end.monthValue}") |
|
|
|
println("financialYear--------- ${financialYear.start} - ${financialYear.end}") |
|
|
|
} |
|
|
|
|
|
|
|
for (item in manHoursSpent) { |
|
|
|
if (info["teamLead"] != item.getValue("teamLead")) { |
|
|
|
info["teamLead"] = item.getValue("teamLead") |
|
|
@@ -2175,7 +2183,10 @@ open class ReportService( |
|
|
|
info["description"] = item.getValue("description") |
|
|
|
} |
|
|
|
val hourlyRate = (item.getValue("hourlyRate") as BigDecimal).toDouble() |
|
|
|
val recordDate = item.getValue("recordDate") as String |
|
|
|
|
|
|
|
if (!staffInfoList.any { it["staffId"] == item["staffId"] && it["name"] == item["name"] }) { |
|
|
|
|
|
|
|
staffInfoList.add( |
|
|
|
mapOf( |
|
|
|
"staffId" to item.getValue("staffId"), |
|
|
@@ -2184,6 +2195,7 @@ open class ReportService( |
|
|
|
"grade" to item.getValue("gradeCode"), |
|
|
|
"salaryPoint" to item.getValue("salaryPoint"), |
|
|
|
"hourlyRate" to hourlyRate, |
|
|
|
"financialYears" to financialYears, |
|
|
|
"hourlySpent" to mutableListOf( |
|
|
|
mapOf( |
|
|
|
"recordDate" to item.getValue("recordDate"), |
|
|
@@ -2234,13 +2246,13 @@ open class ReportService( |
|
|
|
staffInfoList[updatedIndex] = updatedMap |
|
|
|
} |
|
|
|
} |
|
|
|
println("staffInfoList----------------- $staffInfoList") |
|
|
|
println("info----------------- $info") |
|
|
|
// println("staffInfoList----------------- $staffInfoList") |
|
|
|
// println("info----------------- $info") |
|
|
|
|
|
|
|
tempList.add(mapOf("info" to info)) |
|
|
|
tempList.add(mapOf("staffInfoList" to staffInfoList)) |
|
|
|
|
|
|
|
println("Only Staff Info List --------------------- ${tempList.first() { it.containsKey("staffInfoList") }["staffInfoList"]}") |
|
|
|
// println("Only Staff Info List --------------------- ${tempList.first() { it.containsKey("staffInfoList") }["staffInfoList"]}") |
|
|
|
println("tempList----------------- $tempList") |
|
|
|
|
|
|
|
return tempList |
|
|
@@ -2260,6 +2272,52 @@ open class ReportService( |
|
|
|
return outputStream.toByteArray() |
|
|
|
} |
|
|
|
|
|
|
|
// For Calculating the Financial Year |
|
|
|
data class FinancialYear(val start: YearMonth, val end: YearMonth, val hourlyRate: Double) |
|
|
|
|
|
|
|
fun getFinancialYearDates(startDate: YearMonth, endDate: YearMonth, financialYearStartMonth: Int): Array<FinancialYear> { |
|
|
|
val financialYearDates = mutableListOf<FinancialYear>() |
|
|
|
|
|
|
|
var currentYear = startDate.year |
|
|
|
var currentMonth = startDate.monthValue |
|
|
|
|
|
|
|
// Adjust the current year and month to the previous financial year if the start date is before the financial year start month |
|
|
|
if (currentMonth < financialYearStartMonth) { |
|
|
|
currentYear-- |
|
|
|
currentMonth += 12 |
|
|
|
} |
|
|
|
|
|
|
|
while (currentYear * 100 + currentMonth <= endDate.year * 100 + endDate.monthValue) { |
|
|
|
var startMonth = if (financialYearStartMonth == 10) 10 else currentMonth - financialYearStartMonth + 1 |
|
|
|
var startYear = currentYear |
|
|
|
if (startMonth <= 0) { |
|
|
|
startMonth += 12 |
|
|
|
startYear -= 1 |
|
|
|
} |
|
|
|
var endMonth = startMonth + 11 |
|
|
|
var endYear = startYear |
|
|
|
if (endMonth > 12) { |
|
|
|
endMonth -= 12 |
|
|
|
endYear += 1 |
|
|
|
} |
|
|
|
|
|
|
|
val financialYear = FinancialYear( |
|
|
|
start = YearMonth.of(startYear, startMonth), |
|
|
|
end = YearMonth.of(endYear, endMonth), |
|
|
|
hourlyRate = 0.0 |
|
|
|
) |
|
|
|
financialYearDates.add(financialYear) |
|
|
|
|
|
|
|
currentMonth += 12 |
|
|
|
if (currentMonth > 12) { |
|
|
|
currentYear++ |
|
|
|
currentMonth -= 12 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return financialYearDates.toTypedArray() |
|
|
|
} |
|
|
|
|
|
|
|
fun createPandLReportWorkbook( |
|
|
|
templatePath: String, |
|
|
|
manhoursSpent: List<Map<String, Any>>, |
|
|
@@ -2293,6 +2351,7 @@ open class ReportService( |
|
|
|
val convertEndMonth = YearMonth.of(endDate.year, endDate.month) |
|
|
|
|
|
|
|
val monthRange: MutableList<Map<String, Any>> = ArrayList() |
|
|
|
|
|
|
|
var currentDate = startDate |
|
|
|
if (currentDate == endDate){ |
|
|
|
monthRange.add( |
|
|
@@ -2312,6 +2371,7 @@ open class ReportService( |
|
|
|
currentDate = currentDate.plusMonths(1) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
val info: Map<String, Any> = manhoursSpent.first() { it.containsKey("info") }["info"] as Map<String, Any> |
|
|
|
val staffInfoList: List<Map<String, Any>> = |
|
|
|
manhoursSpent.first() { it.containsKey("staffInfoList") }["staffInfoList"] as List<Map<String, Any>> |
|
|
@@ -2389,6 +2449,8 @@ open class ReportService( |
|
|
|
} |
|
|
|
row6Cell.setCellValue(clientSubsidiary) |
|
|
|
|
|
|
|
// Need to be updated to financial year |
|
|
|
// Base on the searching criteria |
|
|
|
rowNum = 9 |
|
|
|
val row9: Row = sheet.getRow(rowNum) |
|
|
|
val row9Cell = row9.getCell(3) |
|
|
@@ -2425,6 +2487,7 @@ open class ReportService( |
|
|
|
|
|
|
|
sheet.setRowBreak(rowNum++); |
|
|
|
} |
|
|
|
|
|
|
|
rowNum += 2 |
|
|
|
val titleRow = sheet.getRow(rowNum) ?: sheet.createRow(rowNum) |
|
|
|
sheet.addMergedRegion(CellRangeAddress(rowNum, rowNum, 0, monthRange.size + 3)) |
|
|
|