From 44907651da15986bf757d565e323ac782b5e4b9a Mon Sep 17 00:00:00 2001 From: Harry Groves Date: Wed, 30 Sep 2026 17:16:27 +0800 Subject: [PATCH] Disable hardcoded reports --- src/main/java/com/ffii/fpsms/m18/M18GrnRules.kt | 15 +-------------- .../modules/report/service/ReportService.kt | 11 +---------- .../fpsms/modules/report/web/ReportController.kt | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/m18/M18GrnRules.kt b/src/main/java/com/ffii/fpsms/m18/M18GrnRules.kt index 258aedbc..45cb98c5 100644 --- a/src/main/java/com/ffii/fpsms/m18/M18GrnRules.kt +++ b/src/main/java/com/ffii/fpsms/m18/M18GrnRules.kt @@ -3,20 +3,7 @@ package com.ffii.fpsms.m18 /** * M18 PO [createUid] is stored on [com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder.m18CreatedUId]. * For these M18 user ids, FPSMS does not post GRN to M18 (see [com.ffii.fpsms.modules.stock.service.StockInLineService]). - * Remarks are shown on PO stock-in traceability report ([com.ffii.fpsms.modules.report.service.ReportService.searchStockInTraceabilityReport]). */ object M18GrnRules { - private val REMARKS_FOR_M18_CREATED_UID: Map = mapOf( - 2569L to "legato", - 2676L to "xtech", - ) - - val SKIP_GRN_FOR_M18_CREATED_UIDS: Set = REMARKS_FOR_M18_CREATED_UID.keys - - /** Display string for PDF/Excel: `2569 (legato)`, or plain id when unknown. */ - fun formatM18CreatedUidForReport(uid: Long?): String { - if (uid == null) return "" - val remark = REMARKS_FOR_M18_CREATED_UID[uid] - return if (remark != null) "$uid ($remark)" else uid.toString() - } + val SKIP_GRN_FOR_M18_CREATED_UIDS: Set = setOf(2569L, 2676L) } diff --git a/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt b/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt index 0f9a34b6..85994fd7 100644 --- a/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt +++ b/src/main/java/com/ffii/fpsms/modules/report/service/ReportService.kt @@ -831,8 +831,7 @@ return result MAX(ROUND(COALESCE(pol.up, 0) * COALESCE(sil.acceptedQty, 0), 2)) AS lineAmount, MAX(COALESCE(cur.code, '')) AS currencyCode, MAX(grn.grn_code) AS grnCode, - MAX(grn.m18_record_id) AS grnId, - MAX(po.m18CreatedUId) AS poM18CreatedUId + MAX(grn.m18_record_id) AS grnId FROM stock_in_line sil LEFT JOIN items it ON sil.itemId = it.id LEFT JOIN purchase_order po ON sil.purchaseOrderId = po.id @@ -895,14 +894,6 @@ return result "currencyCode" to row["currencyCode"], "grnCode" to row["grnCode"], "grnId" to row["grnId"], - "poM18CreatorDisplay" to M18GrnRules.formatM18CreatedUidForReport( - when (val v = row["poM18CreatedUId"]) { - null -> null - is Number -> v.toLong() - is BigDecimal -> v.toLong() - else -> v.toString().toLongOrNull() - }, - ), ) } } diff --git a/src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt b/src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt index 185d807b..5a1ab1b5 100644 --- a/src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt +++ b/src/main/java/com/ffii/fpsms/modules/report/web/ReportController.kt @@ -14,8 +14,10 @@ import org.apache.poi.ss.util.CellRangeAddress import org.apache.poi.ss.util.WorkbookUtil import org.apache.poi.xssf.usermodel.XSSFCellStyle import org.apache.poi.xssf.usermodel.XSSFWorkbook +import org.springframework.beans.factory.annotation.Value import org.springframework.http.* import org.springframework.web.bind.annotation.* +import org.springframework.web.server.ResponseStatusException import java.io.ByteArrayOutputStream import java.io.InputStream import java.time.LocalDate @@ -33,7 +35,13 @@ class ReportController( private val reportService: ReportService, private val m18BomShopSyncReportService: M18BomShopSyncReportService, private val shopOrderReplenishmentReportService: ShopOrderReplenishmentReportService, + @Value("\${fpsms.demo-mode:false}") private val demoMode: Boolean, ) { + private fun refuseIfDemo() { + if (demoMode) { + throw ResponseStatusException(HttpStatus.FORBIDDEN, "Unavailable in demo mode") + } + } private data class ExcelStyles( val title: XSSFCellStyle, val subtitle: XSSFCellStyle, @@ -1238,18 +1246,21 @@ class ReportController( @RequestParam(required = false) syncDateEnd: String?, @RequestParam(required = false) finishedItemCode: String?, @RequestParam(required = false) syncStatus: String?, - ): Map = - m18BomShopSyncReportService.searchBomShopSyncHistoryReport( + ): Map { + refuseIfDemo() + return m18BomShopSyncReportService.searchBomShopSyncHistoryReport( syncDateStart = syncDateStart, syncDateEnd = syncDateEnd, finishedItemCode = finishedItemCode, syncStatus = syncStatus, ) + } @PostMapping("/bom-shop-sync-history") fun getBomShopSyncHistoryReportPost( @RequestBody(required = false) req: ReportItemFilterRequest?, ): Map { + refuseIfDemo() val r = req ?: ReportItemFilterRequest() return m18BomShopSyncReportService.searchBomShopSyncHistoryReport( syncDateStart = r.syncDateStart, @@ -1301,6 +1312,7 @@ class ReportController( @RequestParam receiptDate: String, @RequestParam(required = false, defaultValue = "json") format: String, ): Any { + refuseIfDemo() val rows = reportService.searchGrnPreviewM18(receiptDate) if (format.equals("csv", ignoreCase = true)) { val headers = listOf(