diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt index 6c2ca47..ffad87d 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/entity/JobOrderRepository.kt @@ -44,7 +44,7 @@ interface JobOrderRepository : AbstractRepository { bi.code as itemCode, b.name, jo.reqQty, - -- b.outputQtyUom, + b.outputQtyUom as unit, uc2.udfudesc as uom, COALESCE(uc2.udfShortDesc, uc2.udfudesc) as shortUom, json_arrayagg( @@ -84,6 +84,7 @@ interface JobOrderRepository : AbstractRepository { jo.code, b.name, jo.reqQty, + b.outputQtyUom as unit, uc2.udfudesc as uom, json_arrayagg( json_object( diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt index 40f7c05..d901da3 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/JoPickOrderService.kt @@ -1123,6 +1123,16 @@ open fun getCompletedJobOrderPickOrderLotDetails(pickOrderId: Long): List { val pageable = PageRequest.of(request.pageNum ?: 0, request.pageSize ?: 10); @@ -289,4 +300,68 @@ open class JobOrderService( entity = mapOf("status" to jo.status?.value) ) } + + //Pick Record + @Throws(IOException::class) + @Transactional + open fun exportPickRecord(request: ExportPickRecordRequest): Map { + val PICKRECORD_PDF = "PickRecord/PickRecordPDF.jrxml" + val resource = ClassPathResource(PICKRECORD_PDF) + if(!resource.exists()){ + throw FileNotFoundException("Report file not found: $PICKRECORD_PDF") + } + val inputStream = resource.inputStream + val pickRecord = JasperCompileManager.compileReport(inputStream) + val pickRecordInfo = joPickOrderService.getCompletedJobOrderPickOrderLotDetails(request.jobOrderIds).toMutableList() + + + val fields = mutableListOf>() + val params = mutableMapOf() + + val sortedPickRecordInfo = pickRecordInfo.sortedBy { info -> + (info["routerIndex"] as? Int) ?: Int.MAX_VALUE + } + + sortedPickRecordInfo.forEachIndexed { index, info -> + val field = mutableMapOf() + + val itemName = info["itemName"] as? String?: "N/A" + val itemCode = info["itemCode"] as? String?: "N/A" + val lotNo = info["lotNo"] as? String?: "N/A" + val uomShortDesc = info["uomShortDesc"] as? String?: "N/A" + val uomDesc = info["uomDesc"] as? String?: "N/A" + val route = info["routerRoute"] as? String?: "N/A" + val actualPickQty = info["actualPickQty"] as? BigDecimal?: "N/A" + + field["sequenceNumber"] = (index + 1).toString() + field["itemName"] = itemName + field["itemNo"] = itemCode + field["lotNo"] = lotNo + field["shortName"] = uomShortDesc + field["uom"] = uomDesc + field["route"] = route + field["qty"] = actualPickQty.toString() + + fields.add(field) + } + + params["JobOrderCode"] = pickRecordInfo.firstOrNull()?.get("jobOrderCode") as? String ?: "N/A" + params["ProductionDate"] = pickRecordInfo.firstOrNull()?.get("jobOrderPlanStart") as? String ?: "N/A" + val reqQty = pickRecordInfo.firstOrNull()?.get("jobOrderReqQty") as? BigDecimal + params["RequiredQuantity"] = reqQty?.toString() ?: "N/A" + params["FGCode"] = pickRecordInfo.firstOrNull()?.get("fgCode") as? String ?: "N/A" + params["FGName"] = pickRecordInfo.firstOrNull()?.get("fgName") as? String ?: "N/A" + + params["unit"] = pickRecordInfo.firstOrNull()?.get("unit") as? String ?: "N/A" + + return mapOf( + "report" to PdfUtils.fillReport(pickRecord, fields, params), + "filename" to "123" + ) + } + + @Transactional + open fun printPickRecord(request: PrintPickRecordRequest){ + + } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt index fbe4bde..593144a 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/JobOrderController.kt @@ -19,8 +19,18 @@ import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController import com.ffii.fpsms.modules.jobOrder.service.JoPickOrderService +import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanSubmitRequest import com.ffii.fpsms.modules.jobOrder.web.model.SecondScanIssueRequest +import jakarta.servlet.http.HttpServletResponse +import net.sf.jasperreports.engine.JasperExportManager +import net.sf.jasperreports.engine.JasperPrint +import org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException +import org.springframework.context.NoSuchMessageException +import java.io.OutputStream +import java.io.UnsupportedEncodingException +import java.text.ParseException + @RestController @RequestMapping("/jo") class JobOrderController( @@ -148,6 +158,18 @@ class JobOrderController( fun getCompletedJobOrderPickOrderLotDetails(@PathVariable pickOrderId: Long): List> { return joPickOrderService.getCompletedJobOrderPickOrderLotDetails(pickOrderId) } + + @PostMapping("/PickRecord") + @Throws(UnsupportedEncodingException::class, NoSuchMessageException::class, ParseException::class, Exception::class) + fun printPickRecord(@Valid @RequestBody request: ExportPickRecordRequest, response: HttpServletResponse){ + response.characterEncoding = "utf-8" + response.contentType = "application/pdf" + val out: OutputStream = response.outputStream + val pdf = jobOrderService.exportPickRecord(request) + val jasperPrint = pdf["report"] as JasperPrint + response.addHeader("filename", "${pdf["filename"]}.pdf") + out.write(JasperExportManager.exportReportToPdf(jasperPrint)) + } @GetMapping("/completed-job-order-pick-orders-only/{userId}") fun getCompletedJobOrderPickOrders(@PathVariable userId: Long): List> { return joPickOrderService.getCompletedJobOrderPickOrders(userId) @@ -157,4 +179,4 @@ class JobOrderController( fun getCompletedJobOrderPickOrderLotDetailsForCompletedPick(@PathVariable pickOrderId: Long): List> { return joPickOrderService.getCompletedJobOrderPickOrderLotDetailsForCompletedPick(pickOrderId) } -} \ No newline at end of file +} diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/ExportPickRecordRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/ExportPickRecordRequest.kt new file mode 100644 index 0000000..34c36ac --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/ExportPickRecordRequest.kt @@ -0,0 +1,5 @@ +package com.ffii.fpsms.modules.jobOrder.web.model + +data class ExportPickRecordRequest ( + val jobOrderIds: Long, +) \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/PrintPickRecordRequest.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/PrintPickRecordRequest.kt new file mode 100644 index 0000000..1656d77 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/PrintPickRecordRequest.kt @@ -0,0 +1,4 @@ +package com.ffii.fpsms.modules.jobOrder.web.model + +class PrintPickRecordRequest { +} \ No newline at end of file