@@ -2,7 +2,7 @@ package com.ffii.fpsms.modules.purchaseOrder.enums | |||
enum class PurchaseOrderLineStatus(val value: String) { | |||
PENDING("pending"), | |||
PICKING("picking"), | |||
RECEIVING("receiving"), | |||
COMPLETED("completed"); | |||
} | |||
@@ -22,6 +22,8 @@ import com.ffii.fpsms.modules.stock.entity.StockInLineRepository | |||
import com.ffii.fpsms.modules.stock.entity.StockInRepository | |||
import com.ffii.fpsms.modules.stock.web.model.StockInLineStatus | |||
import org.springframework.stereotype.Service | |||
import org.springframework.transaction.annotation.Transactional | |||
import java.io.IOException | |||
import java.util.HashMap | |||
import java.util.Objects | |||
import kotlin.jvm.optionals.getOrDefault | |||
@@ -31,7 +33,6 @@ import kotlin.jvm.optionals.getOrNull | |||
open class PurchaseOrderService( | |||
private val jdbcDao: JdbcDao, | |||
private val purchaseOrderRepository: PurchaseOrderRepository, | |||
private val purchaseOrderLineRepository: PurchaseOrderLineRepository, | |||
private val polRepository: PurchaseOrderLineRepository, | |||
private val shopRepository: ShopRepository, | |||
private val m18DataLogRepository: M18DataLogRepository, | |||
@@ -89,6 +90,8 @@ open class PurchaseOrderService( | |||
return purchaseOrderRepository.findTopByM18DataLogIdAndDeletedIsFalseOrderByModifiedDesc(m18DataLogId) | |||
} | |||
@Throws(IOException::class) | |||
@Transactional | |||
open fun savePurchaseOrder(request: SavePurchaseOrderRequest): SavePurchaseOrderResponse { | |||
val purchaseOrder = | |||
request.id?.let { purchaseOrderRepository.findById(it).getOrDefault(PurchaseOrder()) } ?: PurchaseOrder() | |||
@@ -132,13 +135,28 @@ open class PurchaseOrderService( | |||
return savedPurchaseOrder | |||
} | |||
fun checkPolAndCompletePo(id: Long): MessageResponse { | |||
val unfinishedLines = purchaseOrderLineRepository | |||
.findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse( | |||
purchaseOrderId = id, | |||
status = PurchaseOrderLineStatus.COMPLETED | |||
) | |||
@Throws(IOException::class) | |||
@Transactional | |||
open fun startPo(id: Long): MessageResponse { | |||
val po = purchaseOrderRepository.findById(id).orElseThrow() | |||
po.apply { | |||
status = PurchaseOrderStatus.RECEIVING | |||
} | |||
val savedPo = purchaseOrderRepository.saveAndFlush(po) | |||
return MessageResponse( | |||
id = savedPo.id, | |||
name = savedPo.code, | |||
code = savedPo.code, | |||
type = PurchaseOrderStatus.RECEIVING.value, | |||
message = "Update Success", | |||
errorPosition = null, | |||
entity = savedPo, | |||
) | |||
} | |||
@Throws(IOException::class) | |||
@Transactional | |||
open fun checkPolAndCompletePo(id: Long): MessageResponse { | |||
val unfinishedLines = polRepository.findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse(purchaseOrderId = id, status = PurchaseOrderLineStatus.COMPLETED) | |||
val po = purchaseOrderRepository.findById(id).orElseThrow() | |||
if (unfinishedLines.isEmpty()) { | |||
po.apply { | |||
@@ -23,6 +23,10 @@ class PurchaseOrderController( | |||
return purchaseOrderService.getDetailedPo(id) | |||
} | |||
@PostMapping("/start/{id}") // purchaseOrderId | |||
fun startPo(@PathVariable id: Long): MessageResponse { | |||
return purchaseOrderService.startPo(id) | |||
} | |||
@PostMapping("/check/{id}") // purchaseOrderId | |||
fun checkPolAndCompletePo(@PathVariable id: Long): MessageResponse { | |||
return purchaseOrderService.checkPolAndCompletePo(id) | |||
@@ -23,6 +23,8 @@ interface StockInLineInfo { | |||
val acceptedQty: BigDecimal | |||
val price: BigDecimal? | |||
val priceUnit: BigDecimal? | |||
@get:Value("#{target.item?.shelfLife}") | |||
val shelfLife: Double? | |||
val receiptDate: LocalDateTime? | |||
val productionDate: LocalDateTime? | |||
val expiryDate: LocalDate? | |||
@@ -64,8 +64,20 @@ open class StockInLineService( | |||
val stockInLine = StockInLine() | |||
val item = itemRepository.findById(request.itemId).orElseThrow() | |||
val purchaseOrderLine = polRepository.findById(request.purchaseOrderLineId).orElseThrow() | |||
val stockIn = stockInRepository.findByPurchaseOrderIdAndDeletedFalse(request.purchaseOrderId) | |||
?: stockInService.create(SaveStockInRequest(purchaseOrderId = request.purchaseOrderId)).entity as StockIn | |||
var stockIn = stockInRepository.findByPurchaseOrderIdAndDeletedFalse(request.purchaseOrderId) | |||
purchaseOrderLine.apply { | |||
status = PurchaseOrderLineStatus.RECEIVING | |||
} | |||
polRepository.saveAndFlush(purchaseOrderLine) | |||
if (stockIn == null) { | |||
stockIn = stockInService.create(SaveStockInRequest(purchaseOrderId = request.purchaseOrderId)).entity as StockIn | |||
// update po status to receiving | |||
val po = purchaseOrderRepository.findById(request.purchaseOrderId).orElseThrow() | |||
po.apply { | |||
status = PurchaseOrderStatus.RECEIVING | |||
} | |||
purchaseOrderRepository.save(po) | |||
} | |||
stockInLine.apply { | |||
this.item = item | |||
itemNo = item.code | |||
@@ -112,6 +124,7 @@ open class StockInLineService( | |||
@Transactional | |||
fun saveInventoryLotLineWhenStockIn(request: SaveStockInLineRequest, stockInLine: StockInLine): InventoryLotLine { | |||
val inventoryLotLine = InventoryLotLine() | |||
println(request.warehouseId!!) | |||
val warehouse = warehouseRepository.findById(request.warehouseId!!).orElseThrow() | |||
inventoryLotLine.apply { | |||
this.inventoryLot = stockInLine.inventoryLot | |||
@@ -148,10 +161,8 @@ open class StockInLineService( | |||
@Transactional | |||
fun updatePurchaseOrderStatus(request: SaveStockInLineRequest) { | |||
if (request.status == StockInLineStatus.COMPLETE.status) { | |||
val unfinishedLines = polRepository.findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse( | |||
purchaseOrderId = request.purchaseOrderId, | |||
status = PurchaseOrderLineStatus.COMPLETED | |||
) | |||
val unfinishedLines = polRepository | |||
.findAllByPurchaseOrderIdAndStatusNotAndDeletedIsFalse(purchaseOrderId = request.purchaseOrderId, status = PurchaseOrderLineStatus.COMPLETED) | |||
if (unfinishedLines.isEmpty()) { | |||
val po = purchaseOrderRepository.findById(request.purchaseOrderId).orElseThrow() | |||
po.apply { | |||
@@ -223,7 +234,7 @@ open class StockInLineService( | |||
val savedStockInLine = saveAndFlush(stockInLine) | |||
// check if all line completed | |||
updatePurchaseOrderLineStatus(request) | |||
updatePurchaseOrderStatus(request) | |||
// updatePurchaseOrderStatus(request) | |||
// val allLineByStockInId = find | |||
val lineInfo = stockInLineRepository.findStockInLineInfoByIdAndDeletedFalse(savedStockInLine.id!!) | |||
// println("checkpoint2") | |||
@@ -297,7 +308,7 @@ open class StockInLineService( | |||
val lineInfoList = stockInLineRepository.findStockInLineInfoByIdInAndDeletedFalse(ids) | |||
// check if all line completed | |||
updatePurchaseOrderLineStatus(request) | |||
updatePurchaseOrderStatus(request) | |||
// updatePurchaseOrderStatus(request) | |||
return MessageResponse( | |||
id = stockInLine.id, | |||
@@ -29,7 +29,7 @@ data class SaveStockInRequest( | |||
val orderDate: Long? = null, | |||
val estimatedCompleteDate: LocalDateTime? = null, | |||
val completeDate: LocalDateTime? = null, | |||
val status: LocalDateTime? = null, | |||
val status: String? = null, | |||
val stockOutId: Long? = null, | |||
// val m18 | |||
) | |||