소스 검색

make PCS/CTN in stock in qty conversion round up

master
Fai Luk 22 시간 전
부모
커밋
05cc03c689
1개의 변경된 파일18개의 추가작업 그리고 2개의 파일을 삭제
  1. +18
    -2
      src/main/java/com/ffii/fpsms/modules/master/service/ItemUomService.kt

+ 18
- 2
src/main/java/com/ffii/fpsms/modules/master/service/ItemUomService.kt 파일 보기

@@ -224,6 +224,22 @@ open class ItemUomService(
return stockQty.setScale(0, RoundingMode.DOWN)
}

/**
* Stock UOM code [PCS/CTN]* denotes pieces-per-carton; displayed stock qty should be whole cartons (integer).
*/
private fun isPiecesPerCartonStockUomCode(stockUnit: ItemUom?): Boolean {
val code = stockUnit?.uom?.code?.trim() ?: return false
return code.startsWith("PCS/CTN", ignoreCase = true)
}

/** After ratio math: 2 decimals, or integer when stock unit is PCS/CTN… */
private fun finalizePreciseStockQty(stockUnit: ItemUom?, stockQty: BigDecimal): BigDecimal {
if (isPiecesPerCartonStockUomCode(stockUnit)) {
return stockQty.setScale(0, RoundingMode.HALF_UP)
}
return stockQty.setScale(2, RoundingMode.HALF_UP)
}

/**
* Convert purchase qty -> stock qty and keep decimal precision.
* Used for PO flows where decimal quantity must be preserved.
@@ -242,7 +258,7 @@ open class ItemUomService(
.multiply(stockUnit.ratioD ?: one)
.divide(stockUnit.ratioN ?: one, calcScale, RoundingMode.HALF_UP)

return stockQty.setScale(2, RoundingMode.HALF_UP)
return finalizePreciseStockQty(stockUnit, stockQty)
}

/**
@@ -263,7 +279,7 @@ open class ItemUomService(
.multiply(stockUnit.ratioD ?: one)
.divide(stockUnit.ratioN ?: one, calcScale, RoundingMode.HALF_UP)

return stockQty.setScale(2, RoundingMode.HALF_UP)
return finalizePreciseStockQty(stockUnit, stockQty)
}

// See if need to update the response


불러오는 중...
취소
저장