* chore: tax_rate is added to giftcards * chore: minor * chore: update gift card tax calculations to look at giftCard.tax_rate * chore: gift card transactions use tax rate from gift card for legacy * fix: gift cart total check for transaction should check the length * chore: use tax exclusive cost + use giftcard tax rate for gctransactions + refactor * chore: fix integration test * chore: address issues brought up in comments * chore: move gift card creation as a part of order service on order placed * chore: add type handling for gift card creation * chore: fix specs * chore: use taxLines to calculate tax of a gift card * chore: specs for line items containing gift cards and without * chore: add integration specs + fix tax rate bug * chore: round totaling + add GC application specs * chore: cleanup trialables * chore: write migration script to backfill gift cards with null tax_rate * chore: update legacy totals service for gift cards * chore: add changeset * chore: address PR review changes * chore: fix tests based on new totals calc * chore: address review comments Co-authored-by: adrien2p <adrien.deperetti@gmail.com> Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
class OrderSubscriber {
|
|
constructor({
|
|
manager,
|
|
eventBusService,
|
|
discountService,
|
|
giftCardService,
|
|
totalsService,
|
|
orderService,
|
|
draftOrderService,
|
|
regionService,
|
|
}) {
|
|
this.manager_ = manager
|
|
this.totalsService_ = totalsService
|
|
|
|
this.discountService_ = discountService
|
|
|
|
this.giftCardService_ = giftCardService
|
|
|
|
this.orderService_ = orderService
|
|
|
|
this.draftOrderService_ = draftOrderService
|
|
|
|
this.regionService_ = regionService
|
|
|
|
this.eventBus_ = eventBusService
|
|
|
|
this.eventBus_.subscribe("order.placed", this.handleOrderPlaced)
|
|
|
|
this.eventBus_.subscribe("order.placed", this.updateDraftOrder)
|
|
}
|
|
|
|
handleOrderPlaced = async (data) => {
|
|
const order = await this.orderService_.retrieveWithTotals(data.id, {
|
|
relations: ["discounts", "discounts.rule"],
|
|
})
|
|
|
|
await Promise.all(
|
|
order.discounts.map(async (d) => {
|
|
const usageCount = d?.usage_count || 0
|
|
return this.discountService_.update(d.id, {
|
|
usage_count: usageCount + 1,
|
|
})
|
|
})
|
|
)
|
|
}
|
|
|
|
updateDraftOrder = async (data) => {
|
|
const order = await this.orderService_.retrieve(data.id)
|
|
const draftOrder = await this.draftOrderService_
|
|
.retrieveByCartId(order.cart_id)
|
|
.catch((_) => null)
|
|
|
|
if (draftOrder) {
|
|
await this.draftOrderService_.registerCartCompletion(
|
|
draftOrder.id,
|
|
order.id
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default OrderSubscriber
|