diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 2fa9f9d..dbca9ba 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -14,6 +14,7 @@ import com.ffii.fpsms.modules.qc.entity.QcResultRepository import com.ffii.fpsms.modules.stock.entity.* import com.ffii.fpsms.modules.stock.sql.StockSql.SQL.INVENTORY_COUNT import net.sf.jasperreports.engine.JasperCompileManager +import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.Lazy import org.springframework.core.io.ClassPathResource import org.springframework.stereotype.Service @@ -102,6 +103,8 @@ open class StockInLineService( private val m18GoodsReceiptNoteLogRepository: M18GoodsReceiptNoteLogRepository, /** Lazy to avoid circular dependency: M18PurchaseOrderService → … → StockInLineService. */ @Lazy private val m18PurchaseOrderService: M18PurchaseOrderService, + /** When false (default), M18 GRN create API is not called — set true in production only. */ + @Value("\${scheduler.m18Grn.createEnabled:false}") private val m18GrnCreateEnabled: Boolean, ) : AbstractBaseEntityService(jdbcDao, stockInLineRepository) { private val logger = LoggerFactory.getLogger(StockInLineService::class.java) @@ -694,6 +697,13 @@ open class StockInLineService( logger.info("[tryUpdatePurchaseOrderAndCreateGrnIfCompleted] Skipping M18 GRN - m18CreatedUId=$m18Created in skip list for PO id=${savedPo.id} code=${savedPo.code}") return } + if (!m18GrnCreateEnabled) { + logger.info( + "[tryUpdatePurchaseOrderAndCreateGrnIfCompleted] Skipping M18 GRN API — scheduler.m18Grn.createEnabled=false " + + "(enable only in production) PO id=${savedPo.id} code=${savedPo.code}" + ) + return + } //temp comment this TODO will only check purchase order + dnNo duplicated //if (m18GoodsReceiptNoteLogRepository.existsByPurchaseOrderIdAndStatusTrue(savedPo.id!!)) { // logger.info("[tryUpdatePurchaseOrderAndCreateGrnIfCompleted] Skipping M18 GRN - already created for PO id=${savedPo.id} code=${savedPo.code} (avoids core_201 duplicate)") diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index ed02b61..e2a0cb4 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -22,6 +22,8 @@ spring: scheduler: + m18Grn: + createEnabled: true postCompletedDnGrn: enabled: true # Missing-success GRN retry window: receiptDate (default yesterday) back N days inclusive. E.g. run 27/3 with receiptDate=26/3 and N=6 => 20/3–26/3. diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e23e183..deca0cb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -11,7 +11,10 @@ server: # PostCompletedDn GRN: runs daily at 00:01, processes all POs with receipt date = yesterday. # Set enabled: false to disable. Optional receiptDate: "yyyy-MM-dd" overrides for testing only. +# m18Grn.createEnabled: M18 GRN PUT/create — false outside production so UAT/dev never posts GRNs. scheduler: + m18Grn: + createEnabled: false postCompletedDnGrn: enabled: false # receiptDate: # leave unset for production (uses yesterday)