feat(SPG-1061): add bundling to queue
parent
9db5c4b326
commit
b4f141e628
|
@ -16,6 +16,7 @@ import { QueueService } from '../../data/services/queue.service';
|
|||
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
|
||||
import { QueueBucketReadService } from '../../data/services/queue-bucket';
|
||||
import { QueueTimeFormula } from '../../domain/usecases/formula/queue-time.formula';
|
||||
import { TransactionItemModel } from 'src/modules/transaction/transaction/data/models/transaction-item.model';
|
||||
|
||||
@EventsHandler(TransactionChangeStatusEvent, TransactionCreateQueueEvent)
|
||||
export class QueueTransactionHandler
|
||||
|
@ -41,7 +42,12 @@ export class QueueTransactionHandler
|
|||
where: {
|
||||
id: event.data.id,
|
||||
},
|
||||
relations: ['customer_category', 'items', 'items.item'],
|
||||
relations: [
|
||||
'customer_category',
|
||||
'items',
|
||||
'items.item',
|
||||
'items.item.bundling_items',
|
||||
],
|
||||
});
|
||||
|
||||
const date = transaction.booking_date ?? transaction.invoice_date;
|
||||
|
@ -57,15 +63,7 @@ export class QueueTransactionHandler
|
|||
transaction_id: id,
|
||||
};
|
||||
|
||||
const items = transaction.items
|
||||
.filter((item) => item.item.use_queue)
|
||||
.map<QueueItem>((item) => {
|
||||
return {
|
||||
item_queue_id: item.item.item_queue_id,
|
||||
item_id: item.item_id,
|
||||
qty: item.qty,
|
||||
};
|
||||
});
|
||||
const items = this.generateItems(transaction.items);
|
||||
|
||||
const existTicket = await this.ticketService.ticketByUser(
|
||||
customer_name,
|
||||
|
@ -117,6 +115,46 @@ export class QueueTransactionHandler
|
|||
}
|
||||
}
|
||||
|
||||
generateItems(items: TransactionItemModel[]): QueueItem[] {
|
||||
const transactionItems = [];
|
||||
|
||||
items.forEach((item) => {
|
||||
if (item.item.use_queue) {
|
||||
transactionItems.push({
|
||||
item_queue_id: item.item.item_queue_id,
|
||||
item_id: item.item_id,
|
||||
qty: item.qty,
|
||||
});
|
||||
}
|
||||
|
||||
if (item.item.bundling_items.length > 0) {
|
||||
item.item.bundling_items.forEach((bundling_item) => {
|
||||
if (bundling_item.use_queue) {
|
||||
transactionItems.push({
|
||||
item_queue_id: bundling_item.item_queue_id,
|
||||
item_id: bundling_item.id,
|
||||
qty: item.qty,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return this.mergeQueueItems(transactionItems);
|
||||
}
|
||||
|
||||
mergeQueueItems(arr) {
|
||||
const result = {};
|
||||
arr.forEach((item) => {
|
||||
if (result[item.item_id]) {
|
||||
result[item.item_id].qty += item.qty;
|
||||
} else {
|
||||
result[item.item_id] = { ...item };
|
||||
}
|
||||
});
|
||||
return Object.values<QueueItem>(result);
|
||||
}
|
||||
|
||||
async create(data: RegisterQueueDto): Promise<void> {
|
||||
const queue = await this.queueService.getTicketItems(
|
||||
data.ticket_id,
|
||||
|
|
Loading…
Reference in New Issue