Files
medusa-store/packages/medusa/src/subscribers/order.js
Riqwan Thamir 8a60a73389 fix(medusa): gift card values & taxes are calculated correctly (#2777)
* 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>
2022-12-20 22:24:25 +01:00

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