Browse Source

update

master
kelvin.yau 2 months ago
parent
commit
d3510504ff
18 changed files with 457 additions and 56 deletions
  1. +1
    -0
      build.gradle
  2. +1
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt
  3. +2
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/models/DeliveryOrderLineInfo.kt
  4. +190
    -18
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt
  5. +5
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt
  6. +19
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt
  7. +6
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt
  8. +5
    -1
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt
  9. +8
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt
  10. +3
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt
  11. +3
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt
  12. +1
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/entity/RouterRepository.kt
  13. +1
    -1
      src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt
  14. +3
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotRepository.kt
  15. +4
    -0
      src/main/java/com/ffii/fpsms/modules/stock/service/InventoryLotService.kt
  16. +1
    -0
      src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt
  17. +150
    -0
      src/main/resources/DeliveryNote/DeliveryNoteCartonLabelsPDF.jrxml
  18. +54
    -36
      src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml

+ 1
- 0
build.gradle View File

@@ -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'


+ 1
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrderRepository.kt View File

@@ -19,4 +19,5 @@ interface DoPickOrderRepository : JpaRepository<DoPickOrder, Long> {
status: DoPickOrderStatus
): List<DoPickOrder>
fun findByPickOrderId(pickOrderId: Long): List<DoPickOrder>

}

+ 2
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/models/DeliveryOrderLineInfo.kt View File

@@ -15,4 +15,6 @@ interface DeliveryOrderLineInfo {
val price: BigDecimal?
val status: String?

@get:Value("#{target.item?.id}")
val itemId: Long?
}

+ 190
- 18
src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DeliveryOrderService.kt View File

@@ -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()
}

}


+ 5
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/service/DoPickOrderService.kt View File

@@ -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)
}
}

+ 19
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/DeliveryOrderController.kt View File

@@ -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)
}
}

+ 6
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDNLabelsRequest.kt View File

@@ -0,0 +1,6 @@
package com.ffii.fpsms.modules.deliveryOrder.web.models

data class ExportDNLabelsRequest (
val deliveryOrderIds: Long,
val numOfCarton: Int,
)

+ 5
- 1
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/ExportDeliveryNoteRequest.kt View File

@@ -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,
)

+ 8
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDNLabelsRequest.kt View File

@@ -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,
)

+ 3
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/web/models/PrintDeliveryNoteRequest.kt View File

@@ -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,
)

+ 3
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/entity/PickOrderRepository.kt View File

@@ -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>
}

+ 1
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/entity/RouterRepository.kt View File

@@ -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>


}

+ 1
- 1
src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt View File

@@ -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>

}

+ 3
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotRepository.kt View File

@@ -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>

}

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/stock/service/InventoryLotService.kt View File

@@ -47,4 +47,8 @@ open class InventoryLotService(
entity = savedInventoryLot,
)
}

open fun findByItemId(itemId: Long): List<InventoryLot>{
return inventoryLotRepository.findByItemIdAndDeletedFalse(itemId)
}
}

+ 1
- 0
src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt View File

@@ -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


+ 150
- 0
src/main/resources/DeliveryNote/DeliveryNoteCartonLabelsPDF.jrxml View File

@@ -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>

+ 54
- 36
src/main/resources/DeliveryNote/DeliveryNotePDF.jrxml View File

@@ -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>


Loading…
Cancel
Save