| @@ -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.common.CodeGenerator | |||
| 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.DoPickOrderLineRecordRepository | |||
| import com.ffii.fpsms.modules.deliveryOrder.entity.DoPickOrderLineRepository | |||
| @@ -130,6 +131,7 @@ open class DoWorkbenchMainService( | |||
| private val printerService: PrinterService, | |||
| private val itemsRepository: ItemsRepository, | |||
| private val transactionManager: PlatformTransactionManager, | |||
| private val doReplenishmentService: DoReplenishmentService, | |||
| ) { | |||
| @PersistenceContext | |||
| 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> { | |||
| val DELIVERYNOTE_PDF = "DeliveryNote/DeliveryNotePDF.jrxml" | |||
| val resource = ClassPathResource(DELIVERYNOTE_PDF) | |||
| @@ -2746,6 +2763,13 @@ return MessageResponse( | |||
| 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 -> | |||
| fields.add( | |||
| deliveryOrderService.buildDeliveryNotePdfLineField( | |||
| @@ -2757,24 +2781,51 @@ return MessageResponse( | |||
| stockOutLinesByPickOrderLineId = stockOutLinesByPickOrderLineId, | |||
| illById = illById, | |||
| 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["colQty"] = "已提數量" | |||
| params["totalCartonTitle"] = "總箱數:" | |||
| params["deliveryNoteCodeTitle"] = "送貨單編號:" | |||
| params["deliveryNoteCode"] = ctx.header.deliveryNoteCode ?: "" | |||
| 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["deliveryDate"] = ctx.header.requiredDeliveryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | |||
| ?: deliveryNoteInfo[0].estimatedArrivalDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) | |||
| ?: "" | |||
| 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"] = "" | |||
| return mapOf( | |||