|
@@ -856,7 +856,7 @@ open class ReportService( |
|
|
val dateFormatter = |
|
|
val dateFormatter = |
|
|
if (dateType == "Date") DateTimeFormatter.ofPattern("yyyy/MM/dd") else DateTimeFormatter.ofPattern("MMM YYYY") |
|
|
if (dateType == "Date") DateTimeFormatter.ofPattern("yyyy/MM/dd") else DateTimeFormatter.ofPattern("MMM YYYY") |
|
|
val combinedResults = |
|
|
val combinedResults = |
|
|
(invoices.map { it.receiptDate } + timesheets.map { it.recordDate }).filterNotNull().sortedBy { it } |
|
|
|
|
|
|
|
|
(invoices.map { it.receiptDate } + timesheets.map { it.recordDate } + projectExpenses.map{ it.issueDate }).filterNotNull().sortedBy { it } |
|
|
.map { it.format(dateFormatter) }.distinct() |
|
|
.map { it.format(dateFormatter) }.distinct() |
|
|
val groupedTimesheets = timesheets.sortedBy { it.recordDate } |
|
|
val groupedTimesheets = timesheets.sortedBy { it.recordDate } |
|
|
.groupBy { timesheetEntry -> timesheetEntry.recordDate?.format(dateFormatter).toString() } |
|
|
.groupBy { timesheetEntry -> timesheetEntry.recordDate?.format(dateFormatter).toString() } |
|
@@ -902,8 +902,8 @@ open class ReportService( |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
// println("grouped Project Expense") |
|
|
|
|
|
// println(groupedProjectExpense) |
|
|
|
|
|
|
|
|
println("grouped Project Expense") |
|
|
|
|
|
println(groupedProjectExpense) |
|
|
// groupedTimesheets.entries.forEach { (key, value) -> |
|
|
// groupedTimesheets.entries.forEach { (key, value) -> |
|
|
// logger.info("key: $key") |
|
|
// logger.info("key: $key") |
|
|
// logger.info("value: " + value.sumOf { it }) |
|
|
// logger.info("value: " + value.sumOf { it }) |
|
@@ -1060,6 +1060,102 @@ open class ReportService( |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (groupedProjectExpense.containsKey(result)) { |
|
|
|
|
|
if (dateType == "Date") { |
|
|
|
|
|
groupedProjectExpense[result]!!.forEachIndexed { _, expense -> |
|
|
|
|
|
sheet.createRow(rowIndex++).apply { |
|
|
|
|
|
createCell(0).apply { |
|
|
|
|
|
setCellValue(result) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(1).apply { |
|
|
|
|
|
setCellValue(0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(2).apply { |
|
|
|
|
|
setCellValue(expense["projectExpense"] as Double? ?: 0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(3).apply { |
|
|
|
|
|
setCellValue(0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(4).apply { |
|
|
|
|
|
val lastRow = rowIndex - 1 |
|
|
|
|
|
if (lastRow == 16) { |
|
|
|
|
|
cellFormula = |
|
|
|
|
|
"C{currentRow}-B{currentRow}".replace("{currentRow}", rowIndex.toString()) |
|
|
|
|
|
} else { |
|
|
|
|
|
cellFormula = |
|
|
|
|
|
"IF(B{currentRow}>0,E{lastRow}-B{currentRow}-C{currentRow},E{lastRow}+D{currentRow}-C{currentRow})".replace( |
|
|
|
|
|
"{currentRow}", |
|
|
|
|
|
rowIndex.toString() |
|
|
|
|
|
).replace("{lastRow}", lastRow.toString()) |
|
|
|
|
|
} |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(5)?.apply { |
|
|
|
|
|
setCellValue( |
|
|
|
|
|
"Expense No.: " + (expense["expenseNo"] as String? ?: "N/A").toString() |
|
|
|
|
|
) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// groupedInvoices[result]!!.forEachIndexed { _, invoice -> |
|
|
|
|
|
sheet.createRow(rowIndex++).apply { |
|
|
|
|
|
createCell(0).apply { |
|
|
|
|
|
setCellValue(result) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(1).apply { |
|
|
|
|
|
setCellValue(0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(2).apply { |
|
|
|
|
|
setCellValue(groupedProjectExpense[result]?.sumOf { it["projectExpense"] as Double } ?: 0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(3).apply { |
|
|
|
|
|
setCellValue(0.0) |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(4).apply { |
|
|
|
|
|
val lastRow = rowIndex - 1 |
|
|
|
|
|
if (lastRow == 16) { |
|
|
|
|
|
cellFormula = |
|
|
|
|
|
"C{currentRow}-B{currentRow}".replace("{currentRow}", rowIndex.toString()) |
|
|
|
|
|
} else { |
|
|
|
|
|
cellFormula = |
|
|
|
|
|
"IF(B{currentRow}>0,E{lastRow}-B{currentRow}-C{currentRow},E{lastRow}+D{currentRow}-C{currentRow})".replace( |
|
|
|
|
|
"{currentRow}", |
|
|
|
|
|
rowIndex.toString() |
|
|
|
|
|
).replace("{lastRow}", lastRow.toString()) |
|
|
|
|
|
} |
|
|
|
|
|
cellStyle.dataFormat = accountingStyle |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
createCell(5)?.apply { |
|
|
|
|
|
// setCellValue(invoice["description"].toString()) |
|
|
|
|
|
val expenseNos = groupedProjectExpense[result]?.map { it["expenseNo"] } |
|
|
|
|
|
if (expenseNos?.size != null && expenseNos.size > 1) { |
|
|
|
|
|
// setCellValue("Invoice Receipt: " + (groupedInvoices[result]?.map { it["invoiceNo"] }?.joinToString() ?: "N/A").toString()) |
|
|
|
|
|
setCellValue("Multiple Expenses") |
|
|
|
|
|
} else { |
|
|
|
|
|
setCellValue("Expense No.: " + (expenseNos?.joinToString() ?: "N/A").toString()) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// } |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|