diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt index 273074f..b4b5800 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrder.kt @@ -5,6 +5,8 @@ import com.ffii.core.entity.BaseEntity import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrder import com.ffii.fpsms.modules.jobOrder.entity.JobOrder import com.ffii.fpsms.modules.master.entity.BomMaterial +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatusConverter import com.ffii.fpsms.modules.user.entity.User import jakarta.persistence.* import jakarta.validation.constraints.NotNull @@ -42,10 +44,10 @@ open class PickOrder: BaseEntity() { @Column(name = "type", length = 30) open var type: String? = null - @Size(max = 30) @NotNull + @Convert(converter = PickOrderStatusConverter::class) @Column(name = "status", nullable = false, length = 30) - open var status: String? = null + open var status: PickOrderStatus? = null @ManyToOne @JoinColumn(name = "releasedBy", referencedColumnName = "id") diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt index 0053b23..77f0866 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt @@ -2,6 +2,7 @@ package com.ffii.fpsms.modules.pickOrder.entity import com.ffii.core.support.AbstractRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable @@ -47,7 +48,9 @@ interface PickOrderRepository : AbstractRepository { select po.consoCode from PickOrder po where po.consoCode like :prefix% order by po.consoCode desc limit 1 """) fun findLatestConsoCodeByPrefix(prefix: String): String? - fun findAllByIdIn(id: List): List + fun findAllByIdInAndStatus(id: List, status: PickOrderStatus): List + + fun findAllByIdInAndConsoCodeIsNullAndStatus(id: List, status: PickOrderStatus): List fun findPickOrderInfoByIdIn(id: List): List } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnum.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnum.kt new file mode 100644 index 0000000..e2f74ef --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnum.kt @@ -0,0 +1,13 @@ +package com.ffii.fpsms.modules.pickOrder.enums + +enum class PickOrderStatus(val value: String) { + PENDING ("pending"), + PICKING ("picking"), + COMPLETED ("completed"); +} + +enum class PickOrderType(val value: String) { + MATERIAL ("material"), + JOB_ORDER ("jo"), + DELIVERY_ORDER ("do") +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnumConverter.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnumConverter.kt new file mode 100644 index 0000000..bbed2bc --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderEnumConverter.kt @@ -0,0 +1,32 @@ +package com.ffii.fpsms.modules.pickOrder.enums + +import jakarta.persistence.AttributeConverter +import jakarta.persistence.Converter + +// Pick Order Status +@Converter(autoApply = true) +class PickOrderStatusConverter : AttributeConverter{ + override fun convertToDatabaseColumn(status: PickOrderStatus?): String? { + return status?.value + } + + override fun convertToEntityAttribute(value: String?): PickOrderStatus? { + return value?.let { v -> + PickOrderStatus.entries.find { it.value == v } + } + } +} + +// Pick Order Type +@Converter(autoApply = true) +class PickOrderTypeConverter : AttributeConverter{ + override fun convertToDatabaseColumn(status: PickOrderType?): String? { + return status?.value + } + + override fun convertToEntityAttribute(value: String?): PickOrderType? { + return value?.let { v -> + PickOrderType.entries.find { it.value == v } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnum.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnum.kt new file mode 100644 index 0000000..70fe3c4 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnum.kt @@ -0,0 +1,8 @@ +package com.ffii.fpsms.modules.pickOrder.enums + +enum class PickOrderLineStatus(val value: String) { + PENDING("pending"), + PICKING("picking"), + COMPLETED("completed"); +} + diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnumConverter.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnumConverter.kt new file mode 100644 index 0000000..135e34c --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/enums/PickOrderLineEnumConverter.kt @@ -0,0 +1,17 @@ +package com.ffii.fpsms.modules.pickOrder.enums + +import jakarta.persistence.AttributeConverter +import jakarta.persistence.Converter + +@Converter(autoApply = true) +class PickOrderLineStatusConverter : AttributeConverter { + override fun convertToDatabaseColumn(status: PickOrderLineStatus?): String? { + return status?.value + } + + override fun convertToEntityAttribute(value: String?): PickOrderLineStatus? { + return value?.let { v -> + PickOrderLineStatus.entries.find { it.value == v } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt index 6fa16e7..0cc8bf8 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt @@ -5,6 +5,7 @@ import com.ffii.fpsms.modules.pickOrder.entity.PickOrder import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderLineInfo +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus import com.ffii.fpsms.modules.pickOrder.web.models.ConsoPickOrderRequest import com.ffii.fpsms.modules.pickOrder.web.models.SearchPickOrderRequest import org.springframework.context.annotation.Lazy @@ -75,8 +76,7 @@ open class PickOrderService( open fun consoPickOrders(request: ConsoPickOrderRequest): List { val newConsoCode = assignConsoCode() - val pickOrders = pickOrderRepository.findAllByIdIn(request.ids) - val pickOrderInfos = mutableListOf() + val pickOrders = pickOrderRepository.findAllByIdInAndConsoCodeIsNullAndStatus(request.ids, PickOrderStatus.PENDING) pickOrders.forEach { it.consoCode = newConsoCode } @@ -86,4 +86,16 @@ open class PickOrderService( return updatedPickOrderInfos } + + open fun deconsoPickOrders(request: ConsoPickOrderRequest): List { + val pickOrders = pickOrderRepository.findAllByIdInAndStatus(request.ids, PickOrderStatus.PENDING) + pickOrders.forEach { + it.consoCode = null + } + + val updatedPickOrders = pickOrderRepository.saveAll(pickOrders) + val updatedPickOrderInfos = updatedPickOrders.map { po -> po.id as Serializable }.let { pickOrderRepository.findPickOrderInfoByIdIn(it) } + + return updatedPickOrderInfos + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt index 66ce960..39b55e3 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt @@ -42,4 +42,9 @@ class PickOrderController( fun consoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List { return pickOrderService.consoPickOrders(request) } + + @PostMapping("/deconso") + fun deconsoPickOrders(@Valid @RequestBody request: ConsoPickOrderRequest): List { + return pickOrderService.deconsoPickOrders(request) + } } \ No newline at end of file