From b89945212d7bdbb29b41763d31c39121c4270edc Mon Sep 17 00:00:00 2001 From: "cyril.tsui" Date: Wed, 26 Jun 2024 17:31:12 +0800 Subject: [PATCH] update report --- .../modules/project/service/InvoiceService.kt | 8 +++---- .../modules/report/service/ReportService.kt | 20 +++++++++--------- .../timesheet/service/TimesheetsService.kt | 2 +- .../report/AR03_Resource Overconsumption.xlsx | Bin 13354 -> 13044 bytes .../AR05_Project Completion Report.xlsx | Bin 12562 -> 12234 bytes ...h Outstanding Accounts Receivable v02.xlsx | Bin 12739 -> 12499 bytes 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/ffii/tsms/modules/project/service/InvoiceService.kt b/src/main/java/com/ffii/tsms/modules/project/service/InvoiceService.kt index 950ab7e..21d3759 100644 --- a/src/main/java/com/ffii/tsms/modules/project/service/InvoiceService.kt +++ b/src/main/java/com/ffii/tsms/modules/project/service/InvoiceService.kt @@ -362,7 +362,7 @@ open class InvoiceService( // Check the import invoice with the data in DB for (i in 2..sheet.lastRowNum){ - val sheetInvoice = ExcelUtils.getCell(sheet, i, 0).toString() + val sheetInvoice = BigDecimal(ExcelUtils.getCell(sheet, i, 0).toString()).toInt().toString() val sheetProjectCode = ExcelUtils.getCell(sheet, i, 1).stringCellValue checkInvoiceNo(sheetInvoice, invoices, invoicesResult, true) checkProjectCode(sheetProjectCode, projects, newProjectCodes) @@ -398,7 +398,7 @@ open class InvoiceService( // val paymentMilestoneId = getMilestonePaymentId(ExcelUtils.getCell(sheet, i, 1).stringCellValue, ExcelUtils.getCell(sheet, i, 5).stringCellValue) // val milestonePayment = milestonePaymentRepository.findById(paymentMilestoneId).orElseThrow() val invoice = Invoice().apply { - invoiceNo = ExcelUtils.getCell(sheet, i, 0).toString() + invoiceNo = BigDecimal(ExcelUtils.getCell(sheet, i, 0).toString()).toInt().toString() projectCode = ExcelUtils.getCell(sheet, i, 1).stringCellValue projectName = ExcelUtils.getCell(sheet, i, 2).stringCellValue team = ExcelUtils.getCell(sheet, i, 3).stringCellValue @@ -447,7 +447,7 @@ open class InvoiceService( val duplicateItemsInInvoice = checkDuplicateItemInImportedInvoice(sheet,2,0) for (i in 2..sheet.lastRowNum){ - val sheetInvoice = ExcelUtils.getCell(sheet, i, 0).toString() + val sheetInvoice = BigDecimal(ExcelUtils.getCell(sheet, i, 0).toString()).toInt().toString() val sheetProjectCode = ExcelUtils.getCell(sheet, i, 1).stringCellValue checkInvoiceNo(sheetInvoice, invoices, invoicesResult, false) checkProjectCode(sheetProjectCode, projects, newProjectCodes) @@ -489,7 +489,7 @@ open class InvoiceService( } for (i in 2..sheet.lastRowNum){ - val invoice = getInvoiceByInvoiceNo(ExcelUtils.getCell(sheet, i, 0).toString()) + val invoice = getInvoiceByInvoiceNo(BigDecimal(ExcelUtils.getCell(sheet, i, 0).toString()).toInt().toString()) invoice.paidAmount = ExcelUtils.getCell(sheet, i, 5).numericCellValue.toBigDecimal() invoice.receiptDate = ExcelUtils.getCell(sheet, i, 4).dateCellValue.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() saveAndFlush(invoice) 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 f7796cb..82cf016 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 @@ -65,7 +65,7 @@ open class ReportService( var rowIndex = startRow var columnIndex = startColumn result.forEachIndexed { index, obj -> - var tempCell = sheet.getRow(rowIndex).createCell(columnIndex) + var tempCell = (sheet.getRow(rowIndex) ?: sheet.createRow(rowIndex)).createCell(columnIndex) tempCell.setCellValue((index + 1).toDouble()) val keys = obj.keys.toList() keys.forEachIndexed { keyIndex, key -> @@ -1846,22 +1846,22 @@ open class ReportService( if (args != null) { var statusFilter: String = "" if (args.containsKey("teamId")) - sql.append("and t.id = :teamId") + sql.append(" and t.id = :teamId") if (args.containsKey("custId")) - sql.append("and c.id = :custId") + sql.append(" and c.id = :custId") if (args.containsKey("subsidiaryId")) - sql.append("and ss.id = :subsidiaryId") + sql.append(" and ss.id = :subsidiaryId") if (args.containsKey("status")) statusFilter = when (args.get("status")) { - "Potential Overconsumption" -> "and " + + "Potential Overconsumption" -> " and " + " (COALESCE((tns.totalConsumed * sa.hourlyRate), 0) / p.expectedTotalFee) >= :lowerLimit " + " and (COALESCE((tns.totalConsumed * sa.hourlyRate), 0) / p.expectedTotalFee) <= 1 " + " or (COALESCE(tns.totalConsumed, 0) / COALESCE(p.totalManhour, 0)) >= :lowerLimit " + " and (COALESCE(tns.totalConsumed, 0) / COALESCE(p.totalManhour, 0)) <= 1 " - "All" -> "and " + + "All" -> " and " + " (COALESCE((tns.totalConsumed * sa.hourlyRate), 0) / p.expectedTotalFee) >= :lowerLimit " + " or (COALESCE(tns.totalConsumed, 0) / COALESCE(p.totalManhour, 0)) >= :lowerLimit " -// "Overconsumption" -> "and " + +// "Overconsumption" -> " and " + // " ((COALESCE((tns.totalConsumed * sa.hourlyRate), 0) / p.expectedTotalFee) >= 1 " + // " or (COALESCE(tns.totalConsumed, 0) / COALESCE(p.totalManhour, 0)) >= 1) " @@ -2403,7 +2403,7 @@ open class ReportService( for(item in queryList){ val hourlyRate = (item.getValue("hourlyRate") as BigDecimal).toDouble() - if(item["code"] !in costAndExpenseList){ + if(item["code"] !in costAndExpenseList.map { it["code"] }){ costAndExpenseList.add( mapOf( "code" to item["code"], @@ -2414,13 +2414,13 @@ open class ReportService( "budget" to item["expectedTotalFee"], "totalManhours" to item["normalConsumed"] as Double + item["otConsumed"] as Double, "manhourExpenditure" to (hourlyRate * item["normalConsumed"] as Double ) - + (hourlyRate * item["otConsumed"]as Double * otFactor) + + (hourlyRate * item["otConsumed"] as Double * otFactor) ) ) }else{ val existingMap = costAndExpenseList.find { it.containsValue(item["code"]) }!! costAndExpenseList[costAndExpenseList.indexOf(existingMap)] = existingMap.toMutableMap().apply { - put("totalManhours", get("manhours") as Double + (item["normalConsumed"] as Double + item["otConsumed"] as Double)) + put("totalManhours", get("totalManhours") as Double + (item["normalConsumed"] as Double + item["otConsumed"] as Double)) put("manhourExpenditure", get("manhourExpenditure") as Double + ((hourlyRate * item["normalConsumed"] as Double ) + (hourlyRate * item["otConsumed"]as Double * otFactor))) } diff --git a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt index 0b4bf12..1b4e2c2 100644 --- a/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt +++ b/src/main/java/com/ffii/tsms/modules/timesheet/service/TimesheetsService.kt @@ -256,7 +256,7 @@ open class TimesheetsService( timesheetRepository.saveAll(timesheetList) logger.info("---------end-------") - logger.info("Not Exist Project List: "+ notExistProjectList.joinToString(", ")) + logger.info("Not Exist Project List: "+ notExistProjectList.distinct().joinToString(", ")) return if (sheet.lastRowNum > 0) "Import Excel success btw " + notExistProjectList.joinToString(", ") else "Import Excel failure" } diff --git a/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx b/src/main/resources/templates/report/AR03_Resource Overconsumption.xlsx index fb9418177b8978fff9da6be57a7ac8d1e8afeef5..20503009bc676f8310a165299bd5749961ca166a 100644 GIT binary patch delta 5037 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 z zIl5$r+BIO6n#NP=JJqj7s@qD{;l(+l~DQ*R}h zJt_~6wM%^2u8~)3>SJwADlv&rt-Lzrg-Sc7$GX~16;uJ1{W4Fs>yY!zHs7vJ^1+%2kpI$MhF zg;#KyQEPhy-wS>L@7cM*wl|rg%SO|ejeYVu>j+V7SVkgQ8+qx`oSLH7?r=mrS>La5 zDU3P?MdVLw_)VF)fQHTrKr(sXGX536NQs7xx~KP-I@eOtx6)Xz*?vQ~*>I;M^B#O%OVSlwsGIpidRfc zA2b15^^+;&EuPI*G)R*R$yr*IsTv-J7wlq=^=%k34J(uBSS(2e)Xy@f14QbSfrUK+ z8m=hGJaA>x%OOJiZ>U||=i7FqA=_U<4~%LpQwlLx+7Gw? zG?{;HqrTs`I#Fmn&8yl+=^GZatg>)~Fqw!G@?35*{2YA$_BD-xVoF>!&Z7Q`6Nk$i zObb)?xklr}Qvc7FRg^dc4~rfZ7iRux>M|PR@uf6$ha+X+UKE212RP z_7XhI|KHU8o1n~qE|6ej{zsdv|FDATk1MAAH~Qz4$BJHJqx%buC&`E}$c|=_e26c^ zfqu#h_cS&+F|1abIV1xcEVM7RwFU1LL{%1-8{0E4I BH@E-* delta 5317 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 delta 4073 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