| @@ -7,6 +7,7 @@ import com.ffii.fpsms.modules.bag.service.BagService | |||||
| import com.ffii.fpsms.modules.bag.web.model.CreateBagLotLineRequest | import com.ffii.fpsms.modules.bag.web.model.CreateBagLotLineRequest | ||||
| import com.ffii.fpsms.modules.common.CodeGenerator | import com.ffii.fpsms.modules.common.CodeGenerator | ||||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository | import com.ffii.fpsms.modules.deliveryOrder.entity.DeliveryOrderRepository | ||||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoReplenishment | |||||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecord | import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecord | ||||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecordRepository | import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRecordRepository | ||||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRepository | import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRepository | ||||
| @@ -130,6 +131,7 @@ open class DoWorkbenchMainService( | |||||
| private val printerService: PrinterService, | private val printerService: PrinterService, | ||||
| private val itemsRepository: ItemsRepository, | private val itemsRepository: ItemsRepository, | ||||
| private val transactionManager: PlatformTransactionManager, | private val transactionManager: PlatformTransactionManager, | ||||
| private val doReplenishmentService: DoReplenishmentService, | |||||
| ) { | ) { | ||||
| @PersistenceContext | @PersistenceContext | ||||
| private lateinit var entityManager: EntityManager | private lateinit var entityManager: EntityManager | ||||
| @@ -2681,6 +2683,21 @@ return MessageResponse( | |||||
| ) | ) | ||||
| } | } | ||||
| private fun buildDeliveryOrderCodeAll(deliveryNoteCode: String): String { | |||||
| val sql = """ | |||||
| SELECT DISTINCT do.code AS code | |||||
| FROM delivery_order_pick_order dop | |||||
| JOIN pick_order po ON po.deliveryOrderPickOrderId = dop.id AND po.deleted = 0 | |||||
| JOIN delivery_order do ON do.id = po.doId | |||||
| WHERE dop.deliveryNoteCode = :deliveryNoteCode | |||||
| AND dop.deleted = 0 | |||||
| ORDER BY do.code | |||||
| """.trimIndent() | |||||
| val codes = jdbcDao.queryForList(sql, mapOf("deliveryNoteCode" to deliveryNoteCode)) | |||||
| .mapNotNull { row -> row["code"]?.toString() } | |||||
| return deliveryOrderService.formatDoCodesPlain(codes) | |||||
| } | |||||
| open fun exportDeliveryNoteWorkbench(request: ExportDeliveryNoteRequest): Map<String, Any> { | open fun exportDeliveryNoteWorkbench(request: ExportDeliveryNoteRequest): Map<String, Any> { | ||||
| val DELIVERYNOTE_PDF = "DeliveryNote/DeliveryNotePDF.jrxml" | val DELIVERYNOTE_PDF = "DeliveryNote/DeliveryNotePDF.jrxml" | ||||
| val resource = ClassPathResource(DELIVERYNOTE_PDF) | val resource = ClassPathResource(DELIVERYNOTE_PDF) | ||||
| @@ -2746,6 +2763,13 @@ return MessageResponse( | |||||
| emptyMap() | emptyMap() | ||||
| } | } | ||||
| val deliveryOrders = deliveryOrderRepository.findAllById(ctx.deliveryOrderIds) | |||||
| val deliveryOrderCodeById = deliveryOrders.associate { it.id!! to (it.code ?: "") } | |||||
| val isExtraByDoId = deliveryOrders.associate { it.id!! to it.isExtra } | |||||
| val headerIsMerge = ctx.header.ticketNo?.startsWith("TI-M-") == true | |||||
| val headerTicketNo = ctx.header.ticketNo | |||||
| val replenishPdfIndex = doReplenishmentService.buildReplenishPdfIndex(ctx.deliveryOrderIds) | |||||
| sortedLines.forEach { row -> | sortedLines.forEach { row -> | ||||
| fields.add( | fields.add( | ||||
| deliveryOrderService.buildDeliveryNotePdfLineField( | deliveryOrderService.buildDeliveryNotePdfLineField( | ||||
| @@ -2757,24 +2781,51 @@ return MessageResponse( | |||||
| stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, | stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, | ||||
| illById = illById, | illById = illById, | ||||
| itemsById = itemsById, | itemsById = itemsById, | ||||
| deliveryOrderCodeById = deliveryOrderCodeById, | |||||
| isExtraByDoId = isExtraByDoId, | |||||
| headerTicketNo = headerTicketNo, | |||||
| headerIsMerge = headerIsMerge, | |||||
| replenishPdfIndex = replenishPdfIndex, | |||||
| ), | ), | ||||
| ) | ) | ||||
| } | } | ||||
| doReplenishmentService.replenishmentsWithoutDeliveryOrderLine(ctx.deliveryOrderIds, exportLines) | |||||
| .sortedWith(compareBy<DoReplenishment>({ it.targetDoId }, { it.itemNo }, { it.code })) | |||||
| .forEach { replenishment -> | |||||
| fields.add( | |||||
| deliveryOrderService.buildDeliveryNotePdfLineFieldForReplenishment( | |||||
| replenishment = replenishment, | |||||
| sequenceNumber = fields.size + 1, | |||||
| pickOrderLines = pickOrderLines, | |||||
| stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, | |||||
| illById = illById, | |||||
| itemsById = itemsById, | |||||
| deliveryOrderCodeById = deliveryOrderCodeById, | |||||
| isExtraByDoId = isExtraByDoId, | |||||
| headerTicketNo = headerTicketNo, | |||||
| headerIsMerge = headerIsMerge, | |||||
| ), | |||||
| ) | |||||
| } | |||||
| params["dnTitle"] = "送貨單" | params["dnTitle"] = "送貨單" | ||||
| params["colQty"] = "已提數量" | params["colQty"] = "已提數量" | ||||
| params["totalCartonTitle"] = "總箱數:" | params["totalCartonTitle"] = "總箱數:" | ||||
| params["deliveryNoteCodeTitle"] = "送貨單編號:" | params["deliveryNoteCodeTitle"] = "送貨單編號:" | ||||
| params["deliveryNoteCode"] = ctx.header.deliveryNoteCode ?: "" | params["deliveryNoteCode"] = ctx.header.deliveryNoteCode ?: "" | ||||
| params["numOfCarton"] = request.numOfCarton.toString().takeUnless { it == "0" } ?: "" | params["numOfCarton"] = request.numOfCarton.toString().takeUnless { it == "0" } ?: "" | ||||
| params["shopName"] = ctx.header.shopName ?: deliveryNoteInfo[0].shopName ?: "" | |||||
| params["shopName"] = deliveryOrderService.formatShopNameForDeliveryNote( | |||||
| ctx.header.shopName ?: deliveryNoteInfo[0].shopName ?: "", | |||||
| ) | |||||
| params["shopAddress"] = deliveryNoteInfo[0].shopAddress ?: "" | params["shopAddress"] = deliveryNoteInfo[0].shopAddress ?: "" | ||||
| params["deliveryDate"] = ctx.header.requiredDeliveryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | params["deliveryDate"] = ctx.header.requiredDeliveryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | ||||
| ?: deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | ?: deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | ||||
| ?: "" | ?: "" | ||||
| params["truckNo"] = ctx.header.truckLanceCode ?: "" | params["truckNo"] = ctx.header.truckLanceCode ?: "" | ||||
| params["ShopPurchaseOrderNo"] = deliveryNoteInfo.joinToString(", ") { it.code } | |||||
| params["FGPickOrderNo"] = ctx.pickOrderCodes.joinToString(", ") | |||||
| params["deliveryOrderCodeAll"] = ctx.header.deliveryNoteCode?.let(::buildDeliveryOrderCodeAll) | |||||
| ?.takeIf { it.isNotBlank() } | |||||
| ?: deliveryOrderService.formatDoCodesPlain(deliveryNoteInfo.map { it.code }) | |||||
| params["loadingSequence"] = "" | params["loadingSequence"] = "" | ||||
| return mapOf( | return mapOf( | ||||