diff --git a/build.gradle b/build.gradle index b205c01..83d0f9e 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,11 @@ dependencies { implementation group: 'org.springframework.cloud', name: 'spring-cloud-context', version: '4.2.1' + implementation("net.sf.jasperreports:jasperreports:7.0.0") { + exclude group: "com.fasterxml.jackson.dataformat", module: "jackson-dataformat-xml" + } + implementation group: 'net.sf.jasperreports', name: 'jasperreports-fonts', version: '7.0.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' implementation group: 'org.apache.poi', name: 'poi', version: '5.2.3' implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.2.3' diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt index 65e01f3..c790b1a 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheck.kt @@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.master.entity import com.ffii.core.entity.BaseEntity import jakarta.persistence.* import jakarta.validation.constraints.NotNull +import java.math.BigDecimal @Entity @Table(name = "qc_check") diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt index b458146..f9d57ed 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/QcCheckRepository.kt @@ -1,10 +1,14 @@ package com.ffii.fpsms.modules.master.entity import com.ffii.core.support.AbstractRepository +import com.ffii.fpsms.modules.master.entity.projections.QcCheckInfo import org.springframework.stereotype.Repository @Repository interface QcCheckRepository: AbstractRepository { fun findAllByDeletedIsFalse(): List fun findAllByItemIdAndDeletedFalse(itemId: Long): List + + fun findAllQcCheckInfoByDeletedFalse(): List + fun findAllQcCheckInfoByItemIdAndDeletedFalse(itemId: Long): List } diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/Warehouse.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/Warehouse.kt index 87feb19..92dc840 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/entity/Warehouse.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/Warehouse.kt @@ -11,17 +11,14 @@ import java.math.BigDecimal @Entity @Table(name = "warehouse") open class Warehouse : BaseEntity() { - @Size(max = 30) @NotNull @Column(name = "code", nullable = false, length = 30) open var code: String? = null - @Size(max = 30) @NotNull @Column(name = "name", nullable = false, length = 30) open var name: String? = null - @Size(max = 30) @NotNull @Column(name = "description", nullable = false, length = 30) open var description: String? = null diff --git a/src/main/java/com/ffii/fpsms/modules/master/entity/projections/QcCheckInfo.kt b/src/main/java/com/ffii/fpsms/modules/master/entity/projections/QcCheckInfo.kt new file mode 100644 index 0000000..b9884d5 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/entity/projections/QcCheckInfo.kt @@ -0,0 +1,18 @@ +package com.ffii.fpsms.modules.master.entity.projections + +import org.springframework.beans.factory.annotation.Value +import java.math.BigDecimal + +interface QcCheckInfo { + val id: Long + @get:Value("#{target.qcItem?.code}") + val code: String + @get:Value("#{target.qcItem?.name}") + val name: String + @get:Value("#{target.item?.id}") + val itemId: Long +// val isRange: Boolean // bug jor + val systemInput: Boolean + val lowerLimit: Double? + val upperLimit: Double? +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt index f664ffe..351bbb3 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/ItemsService.kt @@ -69,7 +69,7 @@ open class ItemsService( code = it.code!!, description = it.description!!, instruction = check?.description, - lowerLimit = check?.lowerLimit, + lowerLimit = check?.lowerLimit , upperLimit = check?.upperLimit, isActive = check != null ) // Create combined item diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt index 8ad93d1..64779a9 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/QcCheckService.kt @@ -4,8 +4,8 @@ import com.ffii.core.support.AbstractBaseEntityService import com.ffii.core.support.JdbcDao import com.ffii.fpsms.modules.master.entity.* import com.ffii.fpsms.modules.master.web.models.MessageResponse -import com.ffii.fpsms.modules.master.web.models.NewItemRequest import com.ffii.fpsms.modules.master.web.models.NewQcCheckRequest +import com.ffii.fpsms.modules.master.entity.projections.QcCheckInfo import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.io.IOException @@ -17,6 +17,12 @@ open class QcCheckService( private val qcCheckRepository: QcCheckRepository, private val qcItemRepository: QcItemRepository, ): AbstractBaseEntityService(jdbcDao, qcCheckRepository) { + open fun getAllQcCheckInfo(): List { + return qcCheckRepository.findAllQcCheckInfoByDeletedFalse() + } + open fun getAllQcCheckInfoById(itemId: Long): List { + return qcCheckRepository.findAllQcCheckInfoByItemIdAndDeletedFalse(itemId) + } @Throws(IOException::class) @Transactional diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt new file mode 100644 index 0000000..349739b --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/service/WarehouseService.kt @@ -0,0 +1,26 @@ +package com.ffii.fpsms.modules.master.service + +import com.ffii.core.support.AbstractBaseEntityService +import com.ffii.core.support.JdbcDao +import com.ffii.fpsms.modules.master.entity.ItemsRepository +import com.ffii.fpsms.modules.master.entity.Warehouse +import com.ffii.fpsms.modules.master.entity.WarehouseRepository +import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository +import com.ffii.fpsms.modules.stock.entity.InventoryLotRepository +import com.ffii.fpsms.modules.stock.entity.StockInLine +import com.ffii.fpsms.modules.stock.entity.StockInLineRepository +import com.ffii.fpsms.modules.stock.entity.StockInRepository +import com.ffii.fpsms.modules.stock.service.InventoryLotService +import com.ffii.fpsms.modules.stock.service.StockInService +import org.springframework.stereotype.Service + +@Service +open class WarehouseService( + private val jdbcDao: JdbcDao, + private val warehouseRepository: WarehouseRepository, +): AbstractBaseEntityService(jdbcDao, warehouseRepository) { + + open fun getWarehouses(): List { + return warehouseRepository.findAll().filter { it.deleted == false } + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt index 4467080..7ea7940 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/QcCheckController.kt @@ -1,14 +1,14 @@ package com.ffii.fpsms.modules.master.web +import com.ffii.core.utils.CriteriaArgsBuilder +import com.ffii.fpsms.modules.master.entity.projections.QcCheckInfo import com.ffii.fpsms.modules.master.service.QcCheckService import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.master.web.models.NewItemRequest import com.ffii.fpsms.modules.master.web.models.NewQcCheckRequest +import jakarta.servlet.http.HttpServletRequest import jakarta.validation.Valid -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController +import org.springframework.web.bind.annotation.* @RestController @RequestMapping("/qcCheck") @@ -19,4 +19,13 @@ class QcCheckController( fun saveItem(@Valid @RequestBody newQcs: List): MessageResponse { return qcCheckService.saveQcChecks(newQcs) } + + @GetMapping + fun allQcCheckInfo(): List { + return qcCheckService.getAllQcCheckInfo() + } + @GetMapping("/{itemId}") + fun allQcCheckInfoByItemId(@PathVariable itemId: Long): List { + return qcCheckService.getAllQcCheckInfoById(itemId) + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt b/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt new file mode 100644 index 0000000..51106fc --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/master/web/WarehouseController.kt @@ -0,0 +1,18 @@ +package com.ffii.fpsms.modules.master.web + +import com.ffii.fpsms.modules.master.entity.Warehouse +import com.ffii.fpsms.modules.master.service.WarehouseService +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RestController + +@RestController +@RequestMapping("/warehouse") +class WarehouseController( + private val warehouseService: WarehouseService +) { + @GetMapping + fun getWarehouses(): List { + return warehouseService.getWarehouses() + } +} \ 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 958bebe..15d3ec7 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 @@ -24,6 +24,7 @@ data class PoLineWithStockInLine ( val itemNo: String, val itemName: String?, val qty: BigDecimal, + val processed: BigDecimal, val uom: String? = null, val price: BigDecimal, val status: String, 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 b58d5bd..fd41b1d 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 @@ -16,6 +16,7 @@ import com.ffii.fpsms.modules.purchaseOrder.web.model.SavePurchaseOrderResponse import com.ffii.fpsms.modules.stock.entity.StockInLine 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 java.util.HashMap import java.util.Objects @@ -56,6 +57,7 @@ open class PurchaseOrderService( thisPol.itemNo!!, thisPol.item!!.name, thisPol.qty!!, + inLine.filter{ it.status == StockInLineStatus.COMPLETE.status}.sumOf { it.acceptedQty }, thisPol.uom!!.code, thisPol.price!!, thisPol.status!!.toString(), diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 1cdb91f..1578dd6 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -91,11 +91,17 @@ open class StockInLineService( message = "stock in line id is null", errorPosition = null, ) + if (stockInLine.expiryDate != null && request.expiryDate == null) { + request.apply { + expiryDate = stockInLine.expiryDate + } + } // return list of stock in line, update data grid with the list if (request.acceptedQty.compareTo(stockInLine.acceptedQty) == 0) { var savedInventoryLot: InventoryLot? = null if (request.status == StockInLineStatus.RECEIVED.status) { if (request.expiryDate == null) { + println("trigger1?") return MessageResponse( id = null, code = null, @@ -107,13 +113,15 @@ open class StockInLineService( } savedInventoryLot = saveInventoryLotWhenStockIn(request = request, stockInLine = stockInLine) } +// if (request.status == StockInLineStatus.RECEIVED.status) { +// } stockInLine.apply { // user = null productionDate = request.productionDate?.atStartOfDay() // maybe need to change the request to LocalDateTime productLotNo = request.productLotNo receiptDate = request.receiptDate?.atStartOfDay() status = request.status - expiryDate = request.expiryDate + expiryDate = stockInLine.expiryDate ?: request.expiryDate lotNo = savedInventoryLot?.lotNo } val savedStockInLine = saveAndFlush(stockInLine) @@ -173,7 +181,7 @@ open class StockInLineService( acceptedQty = request.acceptedQty status = request.status lotNo = savedInventoryLot?.lotNo - expiryDate = request.expiryDate + expiryDate = stockInLine.expiryDate ?: request.expiryDate productLotNo = request.productLotNo } diff --git a/src/main/java/com/ffii/fpsms/modules/stock/web/model/SaveStockInRequest.kt b/src/main/java/com/ffii/fpsms/modules/stock/web/model/SaveStockInRequest.kt index 7b86d25..cc1dc20 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/web/model/SaveStockInRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/web/model/SaveStockInRequest.kt @@ -34,15 +34,15 @@ data class SaveStockInRequest( ) data class SaveStockInLineRequest( - val id: Long?, - val purchaseOrderId: Long, - val purchaseOrderLineId: Long, - val itemId: Long, - val acceptedQty: BigDecimal, - val acceptedWeight: BigDecimal?, - val status: String?, - val expiryDate: LocalDate?, - val productLotNo: String?, - val receiptDate: LocalDate?, - val productionDate: LocalDate?, + var id: Long?, + var purchaseOrderId: Long, + var purchaseOrderLineId: Long, + var itemId: Long, + var acceptedQty: BigDecimal, + var acceptedWeight: BigDecimal?, + var status: String?, + var expiryDate: LocalDate?, + var productLotNo: String?, + var receiptDate: LocalDate?, + var productionDate: LocalDate?, )