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 { TABLE_NAME } from 'src/core/strings/constants/table.constants';
|
||||||
import { QueueBucketReadService } from '../../data/services/queue-bucket';
|
import { QueueBucketReadService } from '../../data/services/queue-bucket';
|
||||||
import { QueueTimeFormula } from '../../domain/usecases/formula/queue-time.formula';
|
import { QueueTimeFormula } from '../../domain/usecases/formula/queue-time.formula';
|
||||||
|
import { TransactionItemModel } from 'src/modules/transaction/transaction/data/models/transaction-item.model';
|
||||||
|
|
||||||
@EventsHandler(TransactionChangeStatusEvent, TransactionCreateQueueEvent)
|
@EventsHandler(TransactionChangeStatusEvent, TransactionCreateQueueEvent)
|
||||||
export class QueueTransactionHandler
|
export class QueueTransactionHandler
|
||||||
|
@ -41,7 +42,12 @@ export class QueueTransactionHandler
|
||||||
where: {
|
where: {
|
||||||
id: event.data.id,
|
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;
|
const date = transaction.booking_date ?? transaction.invoice_date;
|
||||||
|
@ -57,15 +63,7 @@ export class QueueTransactionHandler
|
||||||
transaction_id: id,
|
transaction_id: id,
|
||||||
};
|
};
|
||||||
|
|
||||||
const items = transaction.items
|
const items = this.generateItems(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 existTicket = await this.ticketService.ticketByUser(
|
const existTicket = await this.ticketService.ticketByUser(
|
||||||
customer_name,
|
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> {
|
async create(data: RegisterQueueDto): Promise<void> {
|
||||||
const queue = await this.queueService.getTicketItems(
|
const queue = await this.queueService.getTicketItems(
|
||||||
data.ticket_id,
|
data.ticket_id,
|
||||||
|
|
Loading…
Reference in New Issue