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 5effd7a..3cf71ee 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 @@ -48,6 +48,10 @@ 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? + @Query(""" + select po.code from PickOrder po where po.code like :prefix% order by po.code desc limit 1 + """) + fun findLatestCodeByPrefix(prefix: String): String? fun findAllByIdInAndStatus(id: List, status: PickOrderStatus): List fun findAllByIdInAndConsoCodeIsNullAndStatus(id: List, status: PickOrderStatus): List 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 5386cf8..fbe193a 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 @@ -4,10 +4,15 @@ import com.ffii.core.response.RecordsRes import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.JdbcDao import com.ffii.fpsms.modules.common.SecurityUtils +import com.ffii.fpsms.modules.master.entity.ItemsRepository +import com.ffii.fpsms.modules.master.entity.UomConversionRepository import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.pickOrder.entity.PickOrder +import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLine +import com.ffii.fpsms.modules.pickOrder.entity.PickOrderLineRepository import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository import com.ffii.fpsms.modules.pickOrder.entity.projection.PickOrderInfo +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderLineStatus import com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus import com.ffii.fpsms.modules.pickOrder.web.models.* import com.ffii.fpsms.modules.stock.entity.InventoryLotLineRepository @@ -39,14 +44,47 @@ import kotlin.jvm.optionals.getOrNull @Service open class PickOrderService( private val jdbcDao: JdbcDao, - val pickOrderRepository: PickOrderRepository, - val suggestedPickLotService: SuggestedPickLotService, - val userService: UserService, + private val pickOrderRepository: PickOrderRepository, + private val pickOrderLineRepository: PickOrderLineRepository, + private val suggestedPickLotService: SuggestedPickLotService, + private val userService: UserService, private val stockOutLIneRepository: StockOutLIneRepository, private val inventoryLotLineRepository: InventoryLotLineRepository, - val inventoryService: InventoryService, - private val stockOutRepository: StockOutRepository + private val inventoryService: InventoryService, + private val stockOutRepository: StockOutRepository, + private val itemsRepository: ItemsRepository, + private val uomConversionRepository: UomConversionRepository ): AbstractBaseEntityService(jdbcDao, pickOrderRepository) { + open fun create(request: SavePickOrderRequest): MessageResponse { + val code = assignPickCode() + val pickOrder = PickOrder().apply { + this.code = code + this.targetDate = request.targetDate + this.type = request.type + this.status = PickOrderStatus.PENDING + } + val savedPickOrder = saveAndFlush(pickOrder) + val polEntries = request.pickOrderLine.map { + val item = itemsRepository.findById(it.itemId).orElseThrow() + val uom = uomConversionRepository.findById(it.uomId).orElseThrow() + PickOrderLine().apply { + this.pickOrder = savedPickOrder + this.item = item + this.qty = it.qty + this.uom = uom + this.status = PickOrderLineStatus.PENDING + } + } + pickOrderLineRepository.saveAll(polEntries) + return MessageResponse( + id = savedPickOrder.id, + name = savedPickOrder.code, + code = savedPickOrder.code, + type = savedPickOrder.type!!.value, + message = "success", + errorPosition = "", + ) + } open fun localDateTimeParse(dateTime: String?, pattern: String? = "YYYY-MM-DD hh:mm:ss"): LocalDateTime? { try { val formatter = DateTimeFormatter.ofPattern(pattern!!) @@ -97,6 +135,26 @@ open class PickOrderService( sql.append(" group by po.consoCode, po.releasedDate, po.status, po.assignTo ") return jdbcDao.queryForList(sql.toString(), args); } + open fun assignPickCode(): String { + val suffixFormat = "%03d" + val pattern = "yyyyMMdd" + val formatter = DateTimeFormatter.ofPattern(pattern) + + val prefix = "P" + val midfix = LocalDate.now().format(formatter) + val suffix = String.format(suffixFormat, 1) + + val latestCode = pickOrderRepository.findLatestCodeByPrefix("${prefix}-${midfix}") + if (latestCode != null) { + val splitLatestCode = latestCode.split("-") + if (splitLatestCode.size > 2) { + val latestNo = splitLatestCode[2].toInt() + return listOf(prefix, midfix, String.format(suffixFormat, latestNo + 1)).joinToString("-") + } + } + + return listOf(prefix, midfix, suffix).joinToString("-") + } // Consolidating Pick Orders open fun assignConsoCode(): String { val suffixFormat = "%03d" 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 a92982b..ced346c 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 @@ -108,4 +108,8 @@ class PickOrderController( return pickOrderService.completeStockOut(consoCode) } + @PostMapping("/create") + fun create(@Valid @RequestBody request: SavePickOrderRequest): MessageResponse { + return pickOrderService.create(request) + } } \ 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 new file mode 100644 index 0000000..7f8c1be --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/models/SavePickOrderRequest.kt @@ -0,0 +1,18 @@ +package com.ffii.fpsms.modules.pickOrder.web.models + +import com.ffii.fpsms.modules.pickOrder.enums.PickOrderType +import java.math.BigDecimal +import java.time.LocalDate +import java.time.LocalDateTime + +data class SavePickOrderLineRequest ( + val itemId: Long, + val qty: BigDecimal, + val uomId: Long +) +data class SavePickOrderRequest ( + val type: PickOrderType, + var targetDate: LocalDateTime, + val pickOrderLine: List +) + diff --git a/src/main/resources/application-db-toa.yml b/src/main/resources/application-db-toa.yml new file mode 100644 index 0000000..8e0e0da --- /dev/null +++ b/src/main/resources/application-db-toa.yml @@ -0,0 +1,5 @@ +spring: + datasource: + jdbc-url: jdbc:mysql://10.100.0.81:3006/fpsmsdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 + username: root + password: secret \ No newline at end of file