fix(SPG-1035): grouping queue information
continuous-integration/drone/push Build is passing Details

pull/115/head
shancheas 2024-11-20 11:38:23 +07:00
parent ac3fde14e3
commit 99d0fc8560
1 changed files with 52 additions and 24 deletions

View File

@ -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'; import { CustomerQueueManager } from './customer-queue.manager';
export class CustomerQueueListManager extends CustomerQueueManager { 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() { get data() {
const tickets = this.tickets; const tickets = this.tickets;
const ticketItems = {}; const ticketItems = {};
@ -10,36 +25,49 @@ export class CustomerQueueListManager extends CustomerQueueManager {
ticket.items.forEach((item) => { ticket.items.forEach((item) => {
const item_id = item.item.item_queue?.id ?? item.item.id; const item_id = item.item.item_queue?.id ?? item.item.id;
const currentItem = ticketItems[item_id]; const currentItem = ticketItems[item_id];
item.ticket = ticket; const ticketQueue = { ...ticket, items: [item] };
ticketItems[item_id] = currentItem ? [...currentItem, item] : [item];
ticketItems[item_id] = currentItem
? [...currentItem, ticketQueue]
: [ticketQueue];
}); });
}); });
return Object.values<QueueItemModel[]>(ticketItems).map((items) => { return Object.keys(ticketItems).map((item_id) => {
const item = items[0]; const tickets: QueueTicketModel[] = ticketItems[item_id];
const item_qty = items.reduce((acc, item) => acc + item.qty, 0); 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 { return {
id: item.item_id, id: item.item_id,
title: item.item.item_queue?.name ?? item.item.name, title: item.item.item_queue?.name ?? item.item.name,
image_url: item.item.image_url, image_url: item.item.image_url,
qty: item_qty, qty: totalQueue,
items: currentTickets,
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,
};
}),
};
}),
}; };
}); });
} }