From 7c67759297c94a3911c4c85c77da23313e82ef57 Mon Sep 17 00:00:00 2001 From: kelvinsuen Date: Thu, 14 Aug 2025 19:17:32 +0800 Subject: [PATCH] update poline & stockinline --- .../modules/purchaseOrder/entity/PurchaseOrderLine.kt | 7 +++++++ .../entity/projections/PurchaseOrderLineInfo.kt | 4 ++++ .../modules/purchaseOrder/service/PurchaseOrderService.kt | 5 +++-- .../com/ffii/fpsms/modules/stock/entity/StockInLine.kt | 2 ++ .../modules/stock/entity/projection/StockInLineInfo.kt | 2 ++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt index 28044f0..b387bd8 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt @@ -1,12 +1,15 @@ package com.ffii.fpsms.modules.purchaseOrder.entity +import com.fasterxml.jackson.annotation.JsonManagedReference import com.ffii.core.entity.BaseEntity import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.m18.entity.M18DataLog +import com.ffii.fpsms.modules.master.entity.BomMaterial import com.ffii.fpsms.modules.master.entity.Currency import com.ffii.fpsms.modules.master.entity.UomConversion import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatus import com.ffii.fpsms.modules.purchaseOrder.enums.PurchaseOrderLineStatusConverter +import com.ffii.fpsms.modules.stock.entity.StockInLine import jakarta.persistence.* import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.Size @@ -59,4 +62,8 @@ open class PurchaseOrderLine : BaseEntity() { @Size(max = 20) @Column(name = "m18Lot", length = 20) open var m18Lot: String? = null + + @JsonManagedReference + @OneToMany(mappedBy = "purchaseOrderLine", cascade = [CascadeType.ALL], orphanRemoval = true) + open var stockInLines: MutableList = mutableListOf() } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt index 62e132e..f287218 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt @@ -1,9 +1,12 @@ package com.ffii.fpsms.modules.purchaseOrder.entity.projections +import com.fasterxml.jackson.annotation.JsonManagedReference import com.ffii.fpsms.modules.master.entity.QcItem import com.ffii.fpsms.modules.master.entity.UomConversion import com.ffii.fpsms.modules.stock.entity.StockInLine import com.ffii.fpsms.modules.stock.entity.projection.StockInLineInfo +import jakarta.persistence.CascadeType +import jakarta.persistence.OneToMany import org.springframework.beans.factory.annotation.Value import java.math.BigDecimal @@ -29,6 +32,7 @@ data class PoLineWithStockInLine ( val itemName: String?, val qty: BigDecimal, val processed: BigDecimal, + val receivedQty: BigDecimal, @get:Value("#{target.uom}") val uom: UomConversion, val price: BigDecimal, diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt index 236ae48..32ac8d9 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt @@ -111,8 +111,8 @@ open class PurchaseOrderService( " ) sil2 on sil2.purchaseOrderLineId = pol.id" + " left join item_uom iu on iu.itemId = pol.itemId and iu.purchaseUnit = true" + " left join uom_conversion uc on uc.id = iu.uomId" + - " where po.deleted = false " + - " and pol.deleted = false " + " where po.deleted = false " + + " and pol.deleted = false " ) if (args.containsKey("code")){ sql.append(" AND po.code like :code "); @@ -202,6 +202,7 @@ open class PurchaseOrderService( itemName = thisPol.item!!.name, qty = thisPol.qty!!, processed = inLine.filter{ it.status == StockInLineStatus.COMPLETE.status}.sumOf { it.acceptedQty }, + receivedQty = thisPol.stockInLines.sumOf { it.acceptedQty ?: BigDecimal.ZERO }, uom = thisPol.uom!!, price = thisPol.price!!, status = thisPol.status!!.toString(), diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt index 7a66060..73f187f 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLine.kt @@ -1,5 +1,6 @@ package com.ffii.fpsms.modules.stock.entity +import com.fasterxml.jackson.annotation.JsonBackReference import com.ffii.core.entity.BaseEntity import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrder @@ -30,6 +31,7 @@ open class StockInLine : BaseEntity() { @JoinColumn(name = "purchaseOrderId") open var purchaseOrder: PurchaseOrder? = null + @JsonBackReference @ManyToOne @JoinColumn(name = "purchaseOrderLineId") open var purchaseOrderLine: PurchaseOrderLine? = null diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt index f955302..f57222c 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt @@ -23,6 +23,8 @@ interface StockInLineInfo { val purchaseOrderId: Long? val demandQty: BigDecimal? val acceptedQty: BigDecimal + @get:Value("#{target.purchaseOrderLine?.qty}") + val qty: BigDecimal val price: BigDecimal? val priceUnit: BigDecimal? @get:Value("#{target.item?.shelfLife}")