diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt index e0da6d2..d7a2d71 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoWorkbenchMainService.kt @@ -1362,8 +1362,9 @@ return MessageResponse( dop.deliveryNoteCode = CodeGenerator.generateNo(prefix = prefix, midfix = midfix, latestCode = latestCode) } deliveryOrderPickOrderRepository.save(dop) - } + } + markDeliveryOrdersCompletedForDeliveryOrderPickOrder(deliveryOrderPickOrderId) return MessageResponse( id = dop.id, code = "SUCCESS", @@ -2276,6 +2277,35 @@ return MessageResponse( """.trimIndent(), mapOf("dopId" to dopId, "deliveryNoteCode" to newDeliveryNoteCode), ) + markDeliveryOrdersCompletedForDeliveryOrderPickOrder(dopId) + } + /** + * When a workbench ticket ([delivery_order_pick_order]) is completed, align linked [delivery_order] headers. + */ + private fun markDeliveryOrdersCompletedForDeliveryOrderPickOrder(dopId: Long) { + if (dopId <= 0L) return + val rows = try { + jdbcDao.queryForList( + """ + SELECT DISTINCT po.doId AS doId + FROM fpsmsdb.pick_order po + WHERE po.deliveryOrderPickOrderId = :dopId + AND po.deleted = 0 + AND po.doId IS NOT NULL + """.trimIndent(), + mapOf("dopId" to dopId), + ) + } catch (_: Exception) { + emptyList() + } + for (row in rows) { + val doId = (row["doId"] as? Number)?.toLong() ?: continue + val deliveryOrder = deliveryOrderRepository.findByIdAndDeletedIsFalse(doId) ?: continue + if (deliveryOrder.status == DeliveryOrderStatus.COMPLETED) continue + deliveryOrder.status = DeliveryOrderStatus.COMPLETED + deliveryOrder.completeDate = LocalDateTime.now() + deliveryOrderRepository.save(deliveryOrder) + } } private fun checkWorkbenchPickOrderLineCompleted(pickOrderLineId: Long, allStockOutLines: List) {