diff --git a/src/modules/queue/domain/queue.orchestrator.ts b/src/modules/queue/domain/queue.orchestrator.ts index 2f0d6b3..6cd07e1 100644 --- a/src/modules/queue/domain/queue.orchestrator.ts +++ b/src/modules/queue/domain/queue.orchestrator.ts @@ -21,7 +21,7 @@ import * as moment from 'moment'; import { CustomerQueueTicketSummaryManager } from './usecases/queue/customer-queue-ticket.manager'; import { TransactionDataService } from 'src/modules/transaction/transaction/data/services/transaction-data.service'; import { CustomerQueuePosItemManager } from './usecases/queue/customer-queue-pos-item.manager'; -import { QueueTicketModel } from '../data/models/queue.model'; +import { QueueOrderModel, QueueTicketModel } from '../data/models/queue.model'; @Injectable() export class QueueOrchestrator { @@ -85,6 +85,28 @@ export class QueueOrchestrator { const queueIds = data.items.map((i) => i.queue_item_id); const queue = await this.dataService.orderItems(data.order_id, queueIds); + const existTicket = await this.dataService.ticketByUser( + data.name, + data.phone, + ); + + if (existTicket) { + const itemTickets = this.itemsFromOrder(queue); + + const items = data.items.map((item) => { + const item_id = itemTickets[item.queue_item_id]; + return { + item_queue_id: item_id, + item_id: item_id, + qty: item.qty, + }; + }); + existTicket.items.push(...items); + await this.dataService.updateQueueTicket(existTicket); + + return queue; + } + this.splitQueueManager.setRequestData(data); this.splitQueueManager.setData(queue); this.splitQueueManager.setService( @@ -95,6 +117,17 @@ export class QueueOrchestrator { return this.splitQueueManager.getResult(); } + itemsFromOrder(order: QueueOrderModel) { + const itemTickets = {}; + order.tickets.forEach((ticket) => { + ticket.items.forEach((item) => { + itemTickets[item.id] = item.item_id; + }); + }); + + return itemTickets; + } + async queuePOSTickets(order_id: string): Promise { const tickets = await this.dataService.queuePosTickets(order_id); const manager = new CustomerQueuePosItemManager(tickets);