diff --git a/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt b/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt index f1827bc..7d7a68c 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt @@ -129,7 +129,7 @@ open class BomService( this.isConsumable = req.isConsumable this.qty = req.qty this.salesUnit = req.salesUnit - this.salesUnitCode = req.salesUnit?.code + this.salesUnitCode = req.salesUnitCode this.uom = req.uom this.uomName = req.uomName this.bom = req.bom @@ -197,23 +197,26 @@ open class BomService( // println(item) bomMatRequest.item = item } + 2-> { + bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal() + } 3 -> { - bomMatRequest.uomName = tempCell.stringCellValue.trim() - val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim()) - bomMatRequest.salesUnit = salesUnit + val uom = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim()) + bomMatRequest.uom = uom + bomMatRequest.uomName = uom?.udfudesc } /* 6 -> { bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal() } + */ 7 -> { val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim()) bomMatRequest.salesUnit = salesUnit + bomMatRequest.salesUnitCode = salesUnit?.udfudesc } - */ - 2-> { - bomMatRequest.qty = tempCell.numericCellValue.toBigDecimal() - } + + /* 2 -> { val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim()) @@ -633,8 +636,8 @@ open class BomService( val resolver = PathMatchingResourcePatternResolver() // val excels = resolver.getResources("bomImport/*.xlsx") //val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx") - val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx") - //val excels = resolver.getResources("file:C:/Users/kw093/Downloads/bom/bom/*.xlsx") + //val excels = resolver.getResources("file:C:/Users/Kelvin YAU/Downloads/bom/*.xlsx") + val excels = resolver.getResources("file:C:/Users/kw093/Downloads/bom/bom/*.xlsx") // val excels = resolver.getResources("file:C:/Users/2Fi/Desktop/Third Wave of BOM Excel/*.xlsx") println("size: ${excels.size}") val logExcel = ClassPathResource("excelTemplate/bom_excel_issue_log.xlsx") diff --git a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt index 76859f6..569aecb 100644 --- a/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt @@ -50,6 +50,7 @@ data class ImportBomMatRequest ( var qty: BigDecimal? = null, var uom: UomConversion? = null, var salesUnit: UomConversion? = null, + var salesUnitCode: String? = null, var uomName: String? = null, var bom: Bom? = null, ) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt index 315931f..7d5a424 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/service/ProductProcessService.kt @@ -485,7 +485,7 @@ open class ProductProcessService( println(" Service: Found ${lines.size} pending lines") return lines } - + open fun productProcessDetailfindbyjoid(joid: Long): List { val productProcesses = productProcessRepository.findByJobOrder_Id(joid) val jobOrder = jobOrderRepository.findById(joid).orElse(null) @@ -674,7 +674,9 @@ open class ProductProcessService( itemCode = line.item?.code?:"", itemName = line.item?.name?:"", reqQty = line.reqQty?.toInt() ?: 0, + stockQty = stockQty, + uom = uomName?:"", shortUom = shortUom?:"", type = line.item?.type?: "", @@ -1321,7 +1323,10 @@ open class ProductProcessService( val productProcessLine = productProcessLineRepository.findById(productProcessLineId).orElse(null) val productProcessId = productProcessLine?.productProcess?.id ?: 0L val allproductProcessLines=productProcessLineRepository.findByProductProcess_Id(productProcessId) - + if(productProcessLine.startTime == null) { + productProcessLine.startTime = LocalDateTime.now() + productProcessLineRepository.save(productProcessLine) + } if(allproductProcessLines.all { it.status == "Completed" }) { updateProductProcessEndTime(productProcessId) updateProductProcessStatus(productProcessId, ProductProcessStatus.COMPLETED) @@ -1330,6 +1335,7 @@ open class ProductProcessService( if(jobOrder != null) { jobOrder.status = JobOrderStatus.PENDING_QC jobOrderRepository.save(jobOrder) + stockInLineService.create( SaveStockInLineRequest( itemId = productProcess?.item?.id?:0L, @@ -1339,9 +1345,10 @@ open class ProductProcessService( jobOrderId = jobOrder.id, acceptQty =jobOrder?.reqQty?:BigDecimal.ZERO , expiryDate=null, - status="", + status="pending", ) ) + } } return MessageResponse( @@ -1598,26 +1605,56 @@ open fun getJobProcessStatus(): List { val lines = productProcessLineRepository.findByProductProcess_Id(process.id ?: 0L) .sortedBy { it.seqNo } val bom=bomRepository.findById(process.bom?.id ?: 0L).orElse(null) - val bomProcesses = bomProcessRepository.findByBomId(bom?.id ?: 0L).sortedBy { it.seqNo } + + //val equipmentDetail = equipmentDetailRepository.findById(equipmentDetailId).orElse(null) + // Calculate planEndTime based on first start time + remaining processing time + val firstStartTime = lines.firstOrNull { it.startTime != null }?.startTime + val calculatedPlanEndTime = if (firstStartTime != null) { + // Calculate total remaining processing time (in minutes) for unfinished processes + var totalRemainingMinutes = 0L + lines.forEach { line -> + if (line.endTime == null) { + // Process is not finished, add its processing time + totalRemainingMinutes += (line.processingTime ?: 0).toLong() + totalRemainingMinutes += (line.setupTime ?: 0).toLong() + totalRemainingMinutes += (line.changeoverTime ?: 0).toLong() + } + } + // Add remaining time to first start time + firstStartTime.plusMinutes(totalRemainingMinutes) + } else { + // No process has started yet, use original planEndTime + jobOrder?.planEnd + } + JobProcessStatusResponse( jobOrderId = jobOrder?.id ?: 0L, jobOrderCode = jobOrder?.code ?: "", itemCode = process.item?.code ?: "", itemName = process.item?.name ?: "", - planEndTime = jobOrder?.planEnd, + planEndTime = calculatedPlanEndTime, processes = (0 until 6).map { index -> if (index < lines.size) { val line = lines[index] + val bomProcesses = bomProcessRepository.findByBomId(bom?.id ?: 0L).sortedBy { it.seqNo } + val equipmentDetailId = line.equipmentDetailId ProcessStatusInfo( - equipmentCode = bomProcesses[index].equipment?.code ?: "", + + equipmentCode = if(equipmentDetailId != null) equipmentDetailRepository.findById(equipmentDetailId).orElse(null)?.code ?: "" else bomProcesses[index].equipment?.code ?: "", startTime = line.startTime, endTime = line.endTime, + processingTime = line.processingTime, + setupTime = line.setupTime, + changeoverTime = line.changeoverTime, isRequired = true ) } else { ProcessStatusInfo( startTime = null, endTime = null, + processingTime = null, + setupTime = null, + changeoverTime = null, isRequired = false, equipmentCode = null, ) diff --git a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt index 4bf6541..f3de9f6 100644 --- a/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt +++ b/src/main/java/com/ffii/fpsms/modules/productProcess/web/model/SaveProductProcessRequest.kt @@ -223,6 +223,9 @@ data class ProcessStatusInfo( val equipmentCode: String?, val startTime: LocalDateTime?, val endTime: LocalDateTime?, + val processingTime: Int?, + val setupTime: Int?, + val changeoverTime: Int?, val isRequired: Boolean )