diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt index 5a53eee..498e99b 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt @@ -18,7 +18,16 @@ import org.springframework.transaction.annotation.Transactional import java.io.IOException import kotlin.jvm.optionals.getOrDefault import kotlin.jvm.optionals.getOrNull - +import com.ffii.fpsms.modules.deliveryOrder.web.models.DoDetailResponse +import com.ffii.fpsms.modules.deliveryOrder.web.models.DoDetailLineResponse +import com.ffii.fpsms.modules.deliveryOrder.web.models.ReleaseDoRequest +import com.ffii.fpsms.modules.pickOrder.web.models.SavePickOrderRequest +import com.ffii.fpsms.modules.pickOrder.web.models.SavePickOrderLineRequest +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderType +import com.ffii.fpsms.modules.pickOrder.service.PickOrderService +import java.time.LocalDate +import java.math.BigDecimal +import com.ffii.fpsms.modules.master.web.models.MessageResponse @Service open class DeliveryOrderService( private val deliveryOrderRepository: DeliveryOrderRepository, @@ -28,6 +37,7 @@ open class DeliveryOrderService( private val m18DataLogRepository: M18DataLogRepository, private val userService: UserService, private val userRepository: UserRepository, + private val pickOrderService: PickOrderService ) { open fun findByM18DataLogId(m18DataLogId: Long): DeliveryOrder? { @@ -37,11 +47,37 @@ open class DeliveryOrderService( open fun getDoList() : List { return deliveryOrderRepository.findDeliveryOrderInfoByDeletedIsFalse(); } - + /* open fun getDetailedDo(id: Long) : DeliveryOrder? { return deliveryOrderRepository.findByIdAndDeletedIsFalse(id); } - + */ + open fun getDetailedDo(id: Long): DoDetailResponse? { + val deliveryOrder = deliveryOrderRepository.findByIdAndDeletedIsFalse(id) ?: return null + + return DoDetailResponse( + id = deliveryOrder.id!!, + code = deliveryOrder.code ?: "", + supplierCode = deliveryOrder.supplier?.code, + shopCode = deliveryOrder.shop?.code, + currencyCode = deliveryOrder.currency?.code, + orderDate = deliveryOrder.orderDate, + estimatedArrivalDate = deliveryOrder.estimatedArrivalDate, + completeDate = deliveryOrder.completeDate, + status = deliveryOrder.status?.value, + deliveryOrderLines = deliveryOrder.deliveryOrderLines.map { line -> + DoDetailLineResponse( + id = line.id!!, + itemNo = line.itemNo, + qty = line.qty, + price = line.price, + status = line.status?.value, + itemName = line.item?.name, + uomCode = line.uom?.code + ) + } + ) + } open fun searchByCode(code: String) : List { return deliveryOrderRepository.findAllByCodeAndDeletedIsFalse(code); } @@ -123,4 +159,42 @@ open class DeliveryOrderService( return savedDeliveryOrder } + + + @Transactional(rollbackFor = [Exception::class]) +open fun releaseDeliveryOrder(request: ReleaseDoRequest): MessageResponse { + val deliveryOrder = deliveryOrderRepository.findByIdAndDeletedIsFalse(request.id) + ?: throw NoSuchElementException("Delivery Order not found") + + deliveryOrder.apply { + status = DeliveryOrderStatus.PENDING + } + deliveryOrderRepository.save(deliveryOrder) + + val pols = deliveryOrder.deliveryOrderLines.map { + SavePickOrderLineRequest( + itemId = it.item?.id, + qty = it.qty ?: BigDecimal.ZERO, + uomId = it.uom?.id, + ) + } + val po = SavePickOrderRequest( + doId = deliveryOrder.id, // Set doId instead of joId + type = PickOrderType.DELIVERY_ORDER, // You might need to add this enum value + targetDate = deliveryOrder.estimatedArrivalDate?.toLocalDate() ?: LocalDate.now(), + pickOrderLine = pols + ) + + pickOrderService.create(po) + + return MessageResponse( + id = deliveryOrder.id, + code = deliveryOrder.code, + name = deliveryOrder.shop?.name, + type = null, + message = null, + errorPosition = null, + entity = mapOf("status" to deliveryOrder.status?.value) + ) +} } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt index cf855f3..427b5b7 100644 --- a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt @@ -14,7 +14,10 @@ import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController - +import com.ffii.fpsms.modules.deliveryOrder.web.models.DoDetailResponse +import com.ffii.fpsms.modules.deliveryOrder.web.models.ReleaseDoRequest +import com.ffii.fpsms.modules.master.web.models.MessageResponse +import jakarta.validation.Valid @RequestMapping("/do") @RestController class DeliveryOrderController( @@ -26,7 +29,7 @@ class DeliveryOrderController( } @GetMapping("/detail/{id}") - fun getDetailedDo(@PathVariable id: Long): DeliveryOrder? { + fun getDetailedDo(@PathVariable id: Long): DoDetailResponse? { return deliveryOrderService.getDetailedDo(id); } @@ -48,4 +51,8 @@ class DeliveryOrderController( ) return deliveryOrderService.updateDeliveryOrderStatus(request); } + @PostMapping("/release") + fun releaseDeliveryOrder(@Valid @RequestBody request: ReleaseDoRequest): MessageResponse { + return deliveryOrderService.releaseDeliveryOrder(request) + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/DoDetailResponse.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/DoDetailResponse.kt new file mode 100644 index 0000000..b538d43 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/DoDetailResponse.kt @@ -0,0 +1,26 @@ +package com.ffii.fpsms.modules.deliveryOrder.web.models + +import java.time.LocalDateTime + +data class DoDetailResponse( + val id: Long, + val code: String, + val supplierCode: String?, + val shopCode: String?, + val currencyCode: String?, + val orderDate: LocalDateTime?, + val estimatedArrivalDate: LocalDateTime?, + val completeDate: LocalDateTime?, + val status: String?, + val deliveryOrderLines: List +) + +data class DoDetailLineResponse( + val id: Long, + val itemNo: String?, + val qty: java.math.BigDecimal?, + val price: java.math.BigDecimal?, + val status: String?, + val itemName: String?, + val uomCode: String? +) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ReleaseDoRequest.kt b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ReleaseDoRequest.kt new file mode 100644 index 0000000..35d1629 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ReleaseDoRequest.kt @@ -0,0 +1,5 @@ +package com.ffii.fpsms.modules.deliveryOrder.web.models + +data class ReleaseDoRequest( + val id: Long +) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SavePickOrderRequest.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SavePickOrderRequest.kt index f812237..aec6b0f 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SavePickOrderRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SavePickOrderRequest.kt @@ -14,6 +14,7 @@ data class SavePickOrderLineRequest ( ) data class SavePickOrderRequest ( val joId: Long? = null, + val doId: Long? = null, val type: PickOrderType, var targetDate: LocalDate, val pickOrderLine: List