fix(SPG-1035): grouping queue information
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
ac3fde14e3
commit
99d0fc8560
|
@ -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,
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
};
|
|
||||||
}),
|
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue