diff --git a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt index 4cc5237..e805eb0 100644 --- a/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/m18/service/M18PurchaseOrderService.kt @@ -315,6 +315,19 @@ open class M18PurchaseOrderService( val latestPurchaseOrderLog = m18DataLogService.findLatestM18DataLogWithSuccess(m18PurchaseOrderId, poRefType) + val existingPurchaseOrderForSync = + latestPurchaseOrderLog?.id?.let { purchaseOrderService.findByM18DataLogId(it) } + if (existingPurchaseOrderForSync != null && + existingPurchaseOrderForSync.status != PurchaseOrderStatus.PENDING + ) { + logger.info( + "${poRefType}: Skipping M18 sync — local PO id=${existingPurchaseOrderForSync.id} " + + "code=${existingPurchaseOrderForSync.code} status=${existingPurchaseOrderForSync.status?.value} " + + "(only pending may be overwritten). M18 ID: $m18PurchaseOrderId" + ) + return@forEach + } + // logger.info(latestPurchaseOrderLog.toString()) // Save to m18_data_log table // logger.info("${poRefType}: Saving for M18 Data Log...") @@ -336,10 +349,9 @@ open class M18PurchaseOrderService( // logger.info("${poRefType}: Saved M18 Data Log. ID: ${saveM18PurchaseOrderLog.id}") try { - // Find the purchase_order if exist + // Find the purchase_order if exist (re-use lookup from pending guard above) // logger.info("${poRefType}: Finding exising purchase order...") - val existingPurchaseOrder = - latestPurchaseOrderLog?.id?.let { purchaseOrderService.findByM18DataLogId(it) } + val existingPurchaseOrder = existingPurchaseOrderForSync // logger.info("${poRefType}: Exising purchase order ID: ${existingPurchaseOrder?.id}") // Save to purchase_order table