| @@ -46,6 +46,7 @@ dependencies { | |||
| exclude group: "com.fasterxml.jackson.dataformat", module: "jackson-dataformat-xml" | |||
| } | |||
| implementation group: 'net.sf.jasperreports', name: 'jasperreports-fonts', version: '6.21.0' | |||
| implementation group: 'org.mozilla', name: 'rhino', version: '1.7.14' | |||
| implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' | |||
| implementation group: 'org.apache.poi', name: 'poi', version: '5.2.3' | |||
| @@ -19,4 +19,5 @@ interface DoPickOrderRepository : JpaRepository<DoPickOrder, Long> { | |||
| status: DoPickOrderStatus | |||
| ): List<DoPickOrder> | |||
| fun findByPickOrderId(pickOrderId: Long): List<DoPickOrder> | |||
| } | |||
| @@ -15,4 +15,6 @@ interface DeliveryOrderLineInfo { | |||
| val price: BigDecimal? | |||
| val status: String? | |||
| @get:Value("#{target.item?.id}") | |||
| val itemId: Long? | |||
| } | |||
| @@ -59,6 +59,16 @@ import java.io.FileNotFoundException | |||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderRecord | |||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderRecordRepository | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.ExportDNLabelsRequest | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.PrintDNLabelsRequest | |||
| import com.ffii.fpsms.modules.pickOrder.entity.RouterRepository | |||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | |||
| import com.ffii.fpsms.modules.stock.entity.InventoryLotRepository | |||
| import com.ffii.fpsms.modules.stock.service.InventoryLotService | |||
| import com.ffii.fpsms.modules.pickOrder.entity.Router | |||
| import net.sf.jasperreports.engine.JasperPrintManager | |||
| import net.sf.jasperreports.engine.JRPrintPage | |||
| import com.ffii.fpsms.modules.stock.entity.SuggestPickLotRepository | |||
| @Service | |||
| open class DeliveryOrderService( | |||
| @@ -79,7 +89,12 @@ open class DeliveryOrderService( | |||
| private val stockOutLineRepository: StockOutLIneRepository, | |||
| private val pickOrderLineRepository: PickOrderLineRepository, | |||
| private val printerService: PrinterService, | |||
| private val doPickOrderRecordRepository: DoPickOrderRecordRepository | |||
| private val doPickOrderRecordRepository: DoPickOrderRecordRepository, | |||
| private val routerRepository: RouterRepository, | |||
| private val purchaseOrderRepository: PurchaseOrderRepository, | |||
| private val inventoryLotService: InventoryLotService, | |||
| private val suggestedPickLotRepository: SuggestPickLotRepository, | |||
| private val inventoryLotRepository: InventoryLotRepository, | |||
| ) { | |||
| open fun findByM18DataLogId(m18DataLogId: Long): DeliveryOrder? { | |||
| @@ -535,16 +550,58 @@ open class DeliveryOrderService( | |||
| ) | |||
| } | |||
| private fun buildShopAddress(shop: com.ffii.fpsms.modules.master.entity.Shop?): String { | |||
| if (shop == null) return "" | |||
| open fun getRouteAndIndexByInventoryLotId(inventoryLotId: Int): List<Router> { | |||
| return routerRepository.findByInventoryLotIdAndDeletedFalse(inventoryLotId) | |||
| .sortedBy { it.index } | |||
| } | |||
| open fun getRoutesByInventoryLotId(inventoryLotId: Int): List<String> { | |||
| return getRouteAndIndexByInventoryLotId(inventoryLotId) | |||
| .mapNotNull { it.route } | |||
| } | |||
| val addressParts = mutableListOf<String>() | |||
| open fun getRouteByItemId(itemId: Long): String? { | |||
| val inventoryLots = inventoryLotService.findByItemId(itemId) | |||
| if (inventoryLots.isNotEmpty()){ | |||
| val inventoryLotId = inventoryLots.first().id?.toInt() | |||
| return inventoryLotId?.let { lotId -> | |||
| getRoutesByInventoryLotId(lotId).firstOrNull() | |||
| } | |||
| } | |||
| return null | |||
| } | |||
| shop.addr3?.let { if (it.isNotBlank()) addressParts.add(it) } | |||
| open fun getRouterIndexByItemId(itemId: Long): Int? { | |||
| val inventoryLots = inventoryLotService.findByItemId(itemId) | |||
| if( inventoryLots.isNotEmpty()){ | |||
| val inventoryLotId = inventoryLots.first().id?.toInt() | |||
| return inventoryLotId?.let { lotId -> | |||
| getRouteAndIndexByInventoryLotId(lotId).firstOrNull()?.index | |||
| } | |||
| } | |||
| return null | |||
| } | |||
| return addressParts.joinToString(", ") | |||
| open fun getLotNumbersForPickOrderByItemId(itemId: Long, pickOrderId: Long): String { | |||
| try { | |||
| val pickOrderLines = pickOrderLineRepository.findAllByPickOrderId(pickOrderId) | |||
| val pickOrderLineIds = pickOrderLines.mapNotNull { it.id } | |||
| val suggestedPickLots = suggestedPickLotRepository.findAllByPickOrderLineIdIn(pickOrderLineIds) | |||
| val lotNumbers = suggestedPickLots | |||
| .filter { it.pickOrderLine?.item?.id == itemId } | |||
| .mapNotNull { it.suggestedLotLine?.inventoryLot?.lotNo } | |||
| .distinct() | |||
| return lotNumbers.joinToString(", ") | |||
| } catch (e: Exception) { | |||
| println("Error getting lot numbers for item $itemId in pick order $pickOrderId: ${e.message}") | |||
| return "" | |||
| } | |||
| } | |||
| //Delivery Note | |||
| @Throws(IOException::class) | |||
| @Transactional | |||
| open fun exportDeliveryNote(request: ExportDeliveryNoteRequest): Map<String, Any> { | |||
| @@ -556,12 +613,30 @@ open class DeliveryOrderService( | |||
| val inputStream = resource.inputStream | |||
| val deliveryNote = JasperCompileManager.compileReport(inputStream) | |||
| val deliveryNoteInfo = deliveryOrderRepository.findDeliveryOrderInfoById(request.deliveryOrderIds).toMutableList() | |||
| val fields = mutableListOf<MutableMap<String, Any>>() | |||
| val params = mutableMapOf<String, Any>() | |||
| val deliveryOrderEntity = deliveryOrderRepository.findByIdAndDeletedIsFalse(request.deliveryOrderIds) | |||
| val selectedTruckNo = deliveryOrderEntity?.shop?.id?.let { shopId -> | |||
| val trucks = truckRepository.findByShopIdAndDeletedFalse(shopId) | |||
| trucks.firstOrNull()?.truckNo | |||
| } ?: "" | |||
| val selectedPickOrder = pickOrderRepository.findById(request.pickOrderIds).orElse(null) | |||
| for (info in deliveryNoteInfo) { | |||
| info.deliveryOrderLines.forEachIndexed { index, line -> | |||
| val sortedLines = info.deliveryOrderLines.sortedBy { line -> | |||
| line.itemId?.let { itemId -> | |||
| getRouterIndexByItemId(itemId) | |||
| } ?: Int.MAX_VALUE | |||
| } | |||
| sortedLines.forEachIndexed { index, line -> | |||
| val field = mutableMapOf<String, Any>() | |||
| field["sequenceNumber"] = (index + 1).toString() | |||
| field["itemNo"] = line.itemNo | |||
| field["itemName"] = line.itemName ?:"" | |||
| @@ -569,20 +644,44 @@ open class DeliveryOrderService( | |||
| field["qty"] = line.qty.toString() | |||
| field["shortName"] = line.uomShortDesc ?:"" | |||
| val route = line.itemId?.let { itemId -> | |||
| getRouteByItemId(itemId) | |||
| } ?: "" | |||
| field["route"] = route | |||
| val lotNo = line.itemId?.let { itemId -> | |||
| getLotNumbersForPickOrderByItemId(itemId, request.pickOrderIds) | |||
| } ?: "" | |||
| field["lotNo"] = lotNo | |||
| fields.add(field) | |||
| } | |||
| } | |||
| if(request.isDraft){ | |||
| params["dnTitle"] = "送貨單(初稿)" | |||
| params["colQty"] = "所需數量" | |||
| params["totalCartonTitle"] = "" | |||
| } | |||
| else{ | |||
| params["dnTitle"] = "送貨單" | |||
| params["colQty"] = "數量" | |||
| params["totalCartonTitle"] = "總箱數:" | |||
| } | |||
| params["numOfCarton"] = request.numOfCarton.toString() | |||
| if(params["numOfCarton"] == "0"){ | |||
| params["numOfCarton"] = "" | |||
| } | |||
| params["deliveryOrderCode"] = deliveryNoteInfo[0].code | |||
| params["shopName"] = deliveryNoteInfo[0].shopName ?: "" | |||
| params["shopAddress"] = deliveryNoteInfo[0].shopAddress ?: "" | |||
| params["deliveryDate"] = deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" | |||
| //numOfCarton | |||
| //truckNo | |||
| params["truckNo"] = selectedTruckNo | |||
| params["ShopPurchaseOrderNo"] = deliveryNoteInfo[0].code | |||
| params["FGPickOrderNo"] = selectedPickOrder?.code ?: "" | |||
| //FGPickOrderNo | |||
| //ShopPurchaseOrderNo | |||
| return mapOf( | |||
| "report" to PdfUtils.fillReport(deliveryNote, fields, params), | |||
| @@ -590,13 +689,82 @@ open class DeliveryOrderService( | |||
| ) | |||
| } | |||
| //Print Delivery Note | |||
| @Transactional | |||
| open fun printDeliveryNote(request: PrintDeliveryNoteRequest){ | |||
| val printer = printerService.findById(request.printerId) ?: throw java.util.NoSuchElementException("No such printer") | |||
| //val printer = printerService.findById(request.printerId) ?: throw java.util.NoSuchElementException("No such printer") | |||
| val pdf = exportDeliveryNote( | |||
| ExportDeliveryNoteRequest( | |||
| deliveryOrderIds = request.deliveryOrderId | |||
| deliveryOrderIds = request.deliveryOrderId, | |||
| numOfCarton = request.numOfCarton, | |||
| isDraft = request.isDraft, | |||
| pickOrderIds = request.pickOrderId | |||
| ) | |||
| ) | |||
| val jasperPrint = pdf["report"] as JasperPrint | |||
| val tempPdfFile = File.createTempFile("print_job_",".pdf") | |||
| try{ | |||
| JasperExportManager.exportReportToPdfFile(jasperPrint,tempPdfFile.absolutePath) | |||
| // val printQty = if (request.printQty == null || request.printQty <= 0) 1 else request.printQty | |||
| // printer.ip?.let { ip -> printer.port?.let { port -> | |||
| // ZebraPrinterUtil.printPdfToZebra(tempPdfFile, ip, port, printQty, ZebraPrinterUtil.PrintDirection.ROTATED) | |||
| // }} | |||
| } finally { | |||
| // tempPdfFile.delete() | |||
| } | |||
| } | |||
| //Carton Labels | |||
| open fun exportDNLabels(request: ExportDNLabelsRequest): Map<String, Any>{ | |||
| val DNLABELS_PDF = "DeliveryNote/DeliveryNoteCartonLabelsPDF.jrxml" | |||
| val resource = ClassPathResource(DNLABELS_PDF) | |||
| if(!resource.exists()){ | |||
| throw FileNotFoundException("Label file not found: $DNLABELS_PDF") | |||
| } | |||
| val inputStream = resource.inputStream | |||
| val cartonLabel = JasperCompileManager.compileReport(inputStream) | |||
| val cartonLabelInfo = deliveryOrderRepository.findDeliveryOrderInfoById(request.deliveryOrderIds).toMutableList() | |||
| val params = mutableMapOf<String, Any>() | |||
| val fields = mutableListOf<MutableMap<String ,Any>>() | |||
| for (info in cartonLabelInfo) { | |||
| val field = mutableMapOf<String, Any>() | |||
| } | |||
| params["shopPurchaseOrderNo"] = cartonLabelInfo[0].code | |||
| params["deliveryOrderCode"] = cartonLabelInfo[0].code | |||
| params["shopAddress"] = cartonLabelInfo[0].shopAddress?: "" | |||
| params["shopName"] = cartonLabelInfo[0].shopName?: "" | |||
| for(cartonNumber in 1..request.numOfCarton){ | |||
| val field = mutableMapOf<String, Any>() | |||
| fields.add(field) | |||
| } | |||
| return mapOf( | |||
| "report" to PdfUtils.fillReport(cartonLabel, fields, params), | |||
| "filename" to "${cartonLabelInfo[0].code}_carton_labels" | |||
| ) | |||
| } | |||
| //Print Carton Labels | |||
| @Transactional | |||
| open fun printDNLabels(request: PrintDNLabelsRequest){ | |||
| //val printer = printerService.findById(request.printerId) ?: throw java.util.NoSuchElementException("No such printer") | |||
| val pdf = exportDNLabels( | |||
| ExportDNLabelsRequest( | |||
| deliveryOrderIds = request.deliveryOrderId, | |||
| numOfCarton = request.numOfCarton | |||
| ) | |||
| ) | |||
| @@ -607,12 +775,16 @@ open class DeliveryOrderService( | |||
| try{ | |||
| JasperExportManager.exportReportToPdfFile(jasperPrint,tempPdfFile.absolutePath) | |||
| val printQty = if (request.printQty == null || request.printQty <= 0) 1 else request.printQty | |||
| printer.ip?.let { ip -> printer.port?.let { port -> | |||
| ZebraPrinterUtil.printPdfToZebra(tempPdfFile, ip, port, printQty, ZebraPrinterUtil.PrintDirection.ROTATED) | |||
| }} | |||
| //val printQty = if (request.printQty == null || request.printQty <= 0) 1 else request.printQty | |||
| //printer.ip?.let { ip -> printer.port?.let { port -> | |||
| // ZebraPrinterUtil.printPdfToZebra(tempPdfFile, ip, port, printQty, ZebraPrinterUtil.PrintDirection.ROTATED) | |||
| //}} | |||
| println("Test PDF saved to: ${tempPdfFile.absolutePath}") | |||
| } finally { | |||
| tempPdfFile.delete() | |||
| //tempPdfFile.delete() | |||
| } | |||
| } | |||
| @@ -148,4 +148,9 @@ class DoPickOrderService( | |||
| } | |||
| return doPickOrderRecordRepository.saveAll(doPickOrderRecords) | |||
| } | |||
| // Add method to find do_pick_order records by pick order ID | |||
| fun findByPickOrderId(pickOrderId: Long): List<DoPickOrder> { | |||
| return doPickOrderRepository.findByPickOrderId(pickOrderId) | |||
| } | |||
| } | |||
| @@ -15,7 +15,9 @@ import org.springframework.web.bind.annotation.RequestMapping | |||
| import org.springframework.web.bind.annotation.RequestParam | |||
| import org.springframework.web.bind.annotation.RestController | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.DoDetailResponse | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.ExportDNLabelsRequest | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.ExportDeliveryNoteRequest | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.PrintDNLabelsRequest | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.PrintDeliveryNoteRequest | |||
| import com.ffii.fpsms.modules.deliveryOrder.web.models.ReleaseDoRequest | |||
| import com.ffii.fpsms.modules.master.web.models.MessageResponse | |||
| @@ -197,4 +199,21 @@ class DeliveryOrderController( | |||
| fun printDN(@RequestBody request: PrintDeliveryNoteRequest) { | |||
| deliveryOrderService.printDeliveryNote(request) | |||
| } | |||
| @PostMapping("/DNLabels") | |||
| @Throws(UnsupportedEncodingException::class, NoSuchMessageException::class, ParseException::class, Exception::class) | |||
| fun printDNLabels(@Valid @RequestBody request: ExportDNLabelsRequest, response: HttpServletResponse){ | |||
| response.characterEncoding = "utf-8" | |||
| response.contentType = "application/pdf" | |||
| val out: OutputStream = response.outputStream | |||
| val pdf = deliveryOrderService.exportDNLabels(request) | |||
| val jasperPrint = pdf["report"] as JasperPrint | |||
| response.addHeader("filename", "${pdf["filename"]}.pdf") | |||
| out.write(JasperExportManager.exportReportToPdf(jasperPrint)) | |||
| } | |||
| @GetMapping("print-DNLabels") | |||
| fun printDN(@RequestBody request: PrintDNLabelsRequest) { | |||
| deliveryOrderService.printDNLabels(request) | |||
| } | |||
| } | |||
| @@ -0,0 +1,6 @@ | |||
| package com.ffii.fpsms.modules.deliveryOrder.web.models | |||
| data class ExportDNLabelsRequest ( | |||
| val deliveryOrderIds: Long, | |||
| val numOfCarton: Int, | |||
| ) | |||
| @@ -1,5 +1,9 @@ | |||
| package com.ffii.fpsms.modules.deliveryOrder.web.models | |||
| import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderRepository | |||
| data class ExportDeliveryNoteRequest ( | |||
| val deliveryOrderIds: Long | |||
| val deliveryOrderIds: Long, | |||
| val numOfCarton: Int, | |||
| val isDraft: Boolean, | |||
| val pickOrderIds: Long, | |||
| ) | |||
| @@ -0,0 +1,8 @@ | |||
| package com.ffii.fpsms.modules.deliveryOrder.web.models | |||
| data class PrintDNLabelsRequest ( | |||
| val deliveryOrderId: Long, | |||
| val printerId: Long, | |||
| val printQty: Int?, | |||
| val numOfCarton: Int, | |||
| ) | |||
| @@ -4,4 +4,7 @@ data class PrintDeliveryNoteRequest( | |||
| val deliveryOrderId: Long, | |||
| val printerId: Long, | |||
| val printQty: Int?, | |||
| val numOfCarton: Int, | |||
| val isDraft: Boolean, | |||
| val pickOrderId: Long, | |||
| ) | |||
| @@ -72,4 +72,7 @@ interface PickOrderRepository : AbstractRepository<PickOrder, Long> { | |||
| fun findAllByStatusAndDeletedFalse(@Param("status") status: PickOrderStatus): List<PickOrder> | |||
| @Query("SELECT p FROM PickOrder p WHERE p.assignTo.id = :assignToId AND p.status IN :statuses AND p.deleted = false") | |||
| fun findAllByAssignToIdAndStatusIn(@Param("assignToId") assignToId: Long, @Param("statuses") statuses: List<PickOrderStatus>): List<PickOrder> | |||
| @Query("SELECT p FROM PickOrder p WHERE p.deliveryOrder.id = :deliveryOrderId AND p.deleted = false") | |||
| fun findByDeliveryOrderId(@Param("deliveryOrderId") deliveryOrderId: Long): List<PickOrder> | |||
| } | |||
| @@ -23,4 +23,5 @@ interface RouterRepository : AbstractRepository<Router, Long> { | |||
| @Query("SELECT r FROM Router r WHERE r.route = :route AND r.deleted = false") | |||
| fun findByRouteAndDeletedFalse(@Param("route") route: String): List<Router> | |||
| } | |||
| @@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Query | |||
| import org.springframework.stereotype.Repository | |||
| import java.io.Serializable | |||
| import com.ffii.fpsms.modules.stock.entity.enum.InventoryLotLineStatus | |||
| import org.springframework.data.repository.query.Param | |||
| @Repository | |||
| interface InventoryLotLineRepository : AbstractRepository<InventoryLotLine, Long> { | |||
| @@ -36,5 +37,4 @@ interface InventoryLotLineRepository : AbstractRepository<InventoryLotLine, Long | |||
| fun findAllByInventoryLotId(id: Serializable): List<InventoryLotLine> | |||
| fun findAllByInventoryLotItemIdAndStatus(itemId: Long, status: String): List<InventoryLotLine> | |||
| fun findAllByInventoryLotItemIdAndStatus(itemId: Long, status: InventoryLotLineStatus): List<InventoryLotLine> | |||
| } | |||
| @@ -7,4 +7,7 @@ import java.io.Serializable | |||
| @Repository | |||
| interface InventoryLotRepository: AbstractRepository<InventoryLot, Long> { | |||
| fun findByStockInLineIdAndDeletedFalse(stockInLineId: Serializable): InventoryLot? | |||
| fun findByItemIdAndDeletedFalse(itemId: Long): List<InventoryLot> | |||
| } | |||
| @@ -47,4 +47,8 @@ open class InventoryLotService( | |||
| entity = savedInventoryLot, | |||
| ) | |||
| } | |||
| open fun findByItemId(itemId: Long): List<InventoryLot>{ | |||
| return inventoryLotRepository.findByItemIdAndDeletedFalse(itemId) | |||
| } | |||
| } | |||
| @@ -43,6 +43,7 @@ open class SuggestedPickLotService( | |||
| val stockOutRepository: StockOutRepository, | |||
| val itemRepository: ItemsRepository | |||
| ) { | |||
| // Calculation Available Qty / Remaining Qty | |||
| open fun calculateRemainingQtyForInfo(inventoryLotLine: InventoryLotLineInfo?): BigDecimal { | |||
| val zero = BigDecimal.ZERO | |||
| @@ -0,0 +1,150 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd --> | |||
| <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4" pageWidth="500" pageHeight="120" columnWidth="460" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="baa9f270-b398-4f1c-b01e-ba216b7997e9"> | |||
| <parameter name="shopPurchaseOrderNo" class="java.lang.String"/> | |||
| <parameter name="shopName" class="java.lang.String"/> | |||
| <parameter name="shopAddress" class="java.lang.String"/> | |||
| <parameter name="deliveryOrderCode" class="java.lang.String"/> | |||
| <queryString> | |||
| <![CDATA[]]> | |||
| </queryString> | |||
| <background> | |||
| <band splitType="Stretch"/> | |||
| </background> | |||
| <detail> | |||
| <band height="80" splitType="Stretch"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <textField> | |||
| <reportElement x="80" y="0" width="150" height="18" uuid="8fac39f8-4936-43a5-8e1f-1afbc8ccca9c"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{shopPurchaseOrderNo}]]></textFieldExpression> | |||
| </textField> | |||
| <staticText> | |||
| <reportElement x="0" y="0" width="80" height="18" uuid="e03fcb92-259c-4427-a68e-60fe5924d763"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[店鋪採購單編號: | |||
| ]]></text> | |||
| </staticText> | |||
| <staticText> | |||
| <reportElement x="0" y="60" width="80" height="18" uuid="c8e417ed-73ce-4349-b83c-e59e25258544"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[箱數:]]></text> | |||
| </staticText> | |||
| <staticText> | |||
| <reportElement x="230" y="0" width="80" height="18" uuid="f3ffd4ee-0513-41a5-94d7-f1fdb9966a76"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[送貨單編號:]]></text> | |||
| </staticText> | |||
| <textField> | |||
| <reportElement x="310" y="0" width="150" height="18" uuid="4319059b-9096-4c49-8275-287be93d3e6a"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{deliveryOrderCode}]]></textFieldExpression> | |||
| </textField> | |||
| <staticText> | |||
| <reportElement x="0" y="20" width="80" height="18" uuid="22ce2f40-8f43-46f0-8298-e2f224cfb239"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[店鋪名稱:]]></text> | |||
| </staticText> | |||
| <textField> | |||
| <reportElement x="80" y="20" width="300" height="18" uuid="9a440925-1bd4-4001-9b4b-7163ac27551e"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{shopName}]]></textFieldExpression> | |||
| </textField> | |||
| <staticText> | |||
| <reportElement x="0" y="40" width="80" height="18" uuid="057cd155-5fc8-44e5-8764-b134cb4c24f4"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[店鋪地址:]]></text> | |||
| </staticText> | |||
| <textField> | |||
| <reportElement x="80" y="40" width="300" height="18" uuid="26b2c156-341b-4f59-abce-bd84ea000d9d"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{shopAddress}]]></textFieldExpression> | |||
| </textField> | |||
| <staticText> | |||
| <reportElement x="150" y="60" width="20" height="18" uuid="7467bc85-22c2-4b2a-bed0-a2e82a5dba6d"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[箱]]></text> | |||
| </staticText> | |||
| <textField> | |||
| <reportElement x="80" y="60" width="25" height="18" uuid="e340a673-9fdc-4559-8431-af8ea391c472"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||
| <font size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> | |||
| </textField> | |||
| <textField evaluationTime="Report"> | |||
| <reportElement x="125" y="60" width="25" height="18" uuid="89ccad73-0571-4291-ae26-7804925d47eb"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||
| <font size="10"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression> | |||
| </textField> | |||
| <staticText> | |||
| <reportElement x="105" y="60" width="20" height="18" uuid="1cdd7507-299b-406b-baab-d2c23e44eeb0"> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Center" verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="10"/> | |||
| </textElement> | |||
| <text><![CDATA[/]]></text> | |||
| </staticText> | |||
| </band> | |||
| </detail> | |||
| </jasperReport> | |||
| @@ -18,6 +18,11 @@ | |||
| <parameter name="deliveryDate" class="java.lang.String"/> | |||
| <parameter name="FGPickOrderNo" class="java.lang.String"/> | |||
| <parameter name="ShopPurchaseOrderNo" class="java.lang.String"/> | |||
| <parameter name="truckNo" class="java.lang.String"/> | |||
| <parameter name="numOfCarton" class="java.lang.String"/> | |||
| <parameter name="dnTitle" class="java.lang.String"/> | |||
| <parameter name="colQty" class="java.lang.String"/> | |||
| <parameter name="totalCartonTitle" class="java.lang.String"/> | |||
| <queryString> | |||
| <![CDATA[]]> | |||
| </queryString> | |||
| @@ -28,21 +33,12 @@ | |||
| <field name="qty" class="java.lang.String"/> | |||
| <field name="shortName" class="java.lang.String"/> | |||
| <field name="route" class="java.lang.String"/> | |||
| <field name="lotNo" class="java.lang.String"/> | |||
| <background> | |||
| <band height="41" splitType="Stretch"/> | |||
| </background> | |||
| <title> | |||
| <band height="28"> | |||
| <staticText> | |||
| <reportElement x="223" y="2" width="108" height="23" uuid="d88b3126-393b-4444-9a75-a73af8ae0797"> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Center" verticalAlignment="Bottom"> | |||
| <font fontName="微軟正黑體" size="16"/> | |||
| </textElement> | |||
| <text><![CDATA[送貨單]]></text> | |||
| </staticText> | |||
| <band height="50"> | |||
| <staticText> | |||
| <reportElement x="430" y="10" width="40" height="18" uuid="ddea10c9-9e96-484b-b76b-bfff59950a98"> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| @@ -88,10 +84,22 @@ | |||
| </textElement> | |||
| <text><![CDATA[/]]></text> | |||
| </staticText> | |||
| <textField> | |||
| <reportElement x="223" y="2" width="108" height="23" uuid="17f9fd50-da7c-43b2-93ea-7306e59aea90"> | |||
| <property name="com.jaspersoft.studio.unit.x" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Center"> | |||
| <font fontName="微軟正黑體" size="16"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{dnTitle}]]></textFieldExpression> | |||
| </textField> | |||
| </band> | |||
| </title> | |||
| <pageHeader> | |||
| <band height="117"> | |||
| <band height="118"> | |||
| <staticText> | |||
| <reportElement x="0" y="10" width="80" height="18" uuid="7f991bbe-caf4-43c1-b8e1-d85b1f2d3815"> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| @@ -152,16 +160,6 @@ | |||
| </textElement> | |||
| <text><![CDATA[店鋪採購單編號:]]></text> | |||
| </staticText> | |||
| <staticText> | |||
| <reportElement x="0" y="90" width="80" height="18" uuid="3e5f2bc4-03d7-4d7c-9a93-ca4fa8f5ed33"> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Left" verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體" size="12"/> | |||
| </textElement> | |||
| <text><![CDATA[總箱數:]]></text> | |||
| </staticText> | |||
| <staticText> | |||
| <reportElement x="275" y="70" width="110" height="18" uuid="6b810312-71e2-4749-bc8b-0b7a705377f8"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| @@ -207,7 +205,7 @@ | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA["Text Field"]]></textFieldExpression> | |||
| <textFieldExpression><![CDATA[$P{truckNo}]]></textFieldExpression> | |||
| </textField> | |||
| <textField> | |||
| <reportElement x="385" y="30" width="150" height="18" uuid="24a1331c-e50f-4a72-9a41-3e05b85f4c21"> | |||
| @@ -243,7 +241,16 @@ | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA["Text Field"]]></textFieldExpression> | |||
| <textFieldExpression><![CDATA[$P{numOfCarton}]]></textFieldExpression> | |||
| </textField> | |||
| <textField> | |||
| <reportElement x="0" y="90" width="80" height="18" uuid="25254ea4-e2b2-4ae0-975b-99c8f9390a64"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Middle"> | |||
| <font fontName="微軟正黑體"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{totalCartonTitle}]]></textFieldExpression> | |||
| </textField> | |||
| </band> | |||
| </pageHeader> | |||
| @@ -291,16 +298,6 @@ | |||
| </textElement> | |||
| <text><![CDATA[貨品名稱]]></text> | |||
| </staticText> | |||
| <staticText> | |||
| <reportElement x="470" y="5" width="84" height="18" uuid="c0485433-8212-4b0a-90ed-c69885ad6d74"> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement textAlignment="Left"> | |||
| <font fontName="微軟正黑體" size="12"/> | |||
| </textElement> | |||
| <text><![CDATA[數量]]></text> | |||
| </staticText> | |||
| <line> | |||
| <reportElement x="0" y="28" width="554" height="1" uuid="76648c53-0490-4e52-b737-a8075d9c654f"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| @@ -311,10 +308,22 @@ | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| </line> | |||
| <textField> | |||
| <reportElement x="470" y="5" width="84" height="18" uuid="c7debdbf-fb80-4e4a-92d0-1bff85b60d0e"> | |||
| <property name="com.jaspersoft.studio.unit.x" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.y" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.width" value="px"/> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement> | |||
| <font fontName="微軟正黑體" size="12"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$P{colQty}]]></textFieldExpression> | |||
| </textField> | |||
| </band> | |||
| </columnHeader> | |||
| <detail> | |||
| <band height="25"> | |||
| <band height="37"> | |||
| <textField> | |||
| <reportElement x="0" y="1" width="50" height="18" uuid="ae87b739-dadf-452a-bc35-8c2da1a6a9a8"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| @@ -361,10 +370,19 @@ | |||
| <textFieldExpression><![CDATA[$F{itemName} + "(" + $F{uom} + ")"]]></textFieldExpression> | |||
| </textField> | |||
| <line> | |||
| <reportElement x="0" y="21" width="554" height="1" uuid="00d1c4c2-fcb0-4282-90c6-5443b260007c"> | |||
| <reportElement x="0" y="36" width="554" height="1" uuid="00d1c4c2-fcb0-4282-90c6-5443b260007c"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| </line> | |||
| <textField> | |||
| <reportElement x="240" y="18" width="230" height="18" uuid="af701932-2e78-47d4-a131-b668200dc376"> | |||
| <property name="com.jaspersoft.studio.unit.height" value="px"/> | |||
| </reportElement> | |||
| <textElement verticalAlignment="Top"> | |||
| <font fontName="微軟正黑體"/> | |||
| </textElement> | |||
| <textFieldExpression><![CDATA[$F{lotNo}]]></textFieldExpression> | |||
| </textField> | |||
| </band> | |||
| </detail> | |||
| <pageFooter> | |||