diff --git a/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts b/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts index 849eea6..ae449f6 100644 --- a/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts +++ b/src/modules/queue/domain/usecases/queue/customer-queue-list.manager.ts @@ -1,7 +1,22 @@ -import { QueueItemModel } from 'src/modules/queue/data/models/queue.model'; +import { + QueueModel, + QueueTicketModel, +} from 'src/modules/queue/data/models/queue.model'; import { CustomerQueueManager } from './customer-queue.manager'; export class CustomerQueueListManager extends CustomerQueueManager { + private ticketToQueues(tickets: QueueTicketModel[]): QueueModel[] { + const ticket = tickets.map((ticket) => { + const queue = ticket.items.map((item) => { + return item.queue; + }); + + return queue.flat(); + }); + + return ticket.flat(); + } + get data() { const tickets = this.tickets; const ticketItems = {}; @@ -10,36 +25,49 @@ export class CustomerQueueListManager extends CustomerQueueManager { ticket.items.forEach((item) => { const item_id = item.item.item_queue?.id ?? item.item.id; const currentItem = ticketItems[item_id]; - item.ticket = ticket; - ticketItems[item_id] = currentItem ? [...currentItem, item] : [item]; + const ticketQueue = { ...ticket, items: [item] }; + + ticketItems[item_id] = currentItem + ? [...currentItem, ticketQueue] + : [ticketQueue]; }); }); - return Object.values(ticketItems).map((items) => { - const item = items[0]; - const item_qty = items.reduce((acc, item) => acc + item.qty, 0); + return Object.keys(ticketItems).map((item_id) => { + const tickets: QueueTicketModel[] = ticketItems[item_id]; + const item = tickets[0].items[0]; + const uniqueTicket = tickets.filter( + (obj1, i, arr) => arr.findIndex((obj2) => obj2.id === obj1.id) === i, + ); + let totalQueue = 0; + + const currentTickets = uniqueTicket.map((ticket) => { + const currentTicket = tickets.filter((t) => t.id === ticket.id); + const queues = this.ticketToQueues(currentTicket); + const currentQueues = queues.map((q) => { + return { + code: q.code, + qty: q.qty, + time: this.toTime(q.time), + status: q.status, + }; + }); + totalQueue += currentQueues.length; + return { + code: ticket.code, + customer: ticket.customer, + phone: ticket.phone, + id: ticket.id, + queue: currentQueues, + }; + }); + return { id: item.item_id, title: item.item.item_queue?.name ?? item.item.name, image_url: item.item.image_url, - qty: item_qty, - - items: items.map((item) => { - return { - code: item.ticket.code, - customer: item.ticket.customer, - phone: item.ticket.phone, - id: item.ticket.id, - queue: item.queue.map((q) => { - return { - code: q.code, - qty: q.qty, - time: this.toTime(q.time), - status: q.status, - }; - }), - }; - }), + qty: totalQueue, + items: currentTickets, }; }); }