feat(SPG-1061): add bundling to queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

pull/115/head 1.2.11-alpha.1
shancheas 2024-11-26 12:40:02 +07:00
parent 9db5c4b326
commit b4f141e628
1 changed files with 48 additions and 10 deletions

View File

@ -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,