diff --git a/packages/medusa-plugin-brightpearl/src/services/brightpearl.js b/packages/medusa-plugin-brightpearl/src/services/brightpearl.js index 08d3572ff3..579a6f1d5b 100644 --- a/packages/medusa-plugin-brightpearl/src/services/brightpearl.js +++ b/packages/medusa-plugin-brightpearl/src/services/brightpearl.js @@ -546,7 +546,7 @@ class BrightpearlService extends BaseService { }, rows: await this.getBrightpearlRows({ region_id: fromOrder.region_id, - discounts: [], + discounts: fromOrder.discounts, tax_rate: fromOrder.tax_rate, items: fromSwap.additional_items, shipping_methods: fromSwap.shipping_methods, diff --git a/packages/medusa/src/models/schemas/line-item.js b/packages/medusa/src/models/schemas/line-item.js index 1f2e6a1f30..453373d0dd 100644 --- a/packages/medusa/src/models/schemas/line-item.js +++ b/packages/medusa/src/models/schemas/line-item.js @@ -15,6 +15,7 @@ export default new mongoose.Schema( is_giftcard: { type: Boolean, default: false }, should_merge: { type: Boolean, default: true }, has_shipping: { type: Boolean, default: false }, + no_discount: { type: Boolean, default: false }, // mongoose doesn't allow multi-type validation but this field allows both // an object containing: diff --git a/packages/medusa/src/services/swap.js b/packages/medusa/src/services/swap.js index 848fd38b8c..c909ae9148 100644 --- a/packages/medusa/src/services/swap.js +++ b/packages/medusa/src/services/swap.js @@ -300,6 +300,7 @@ class SwapService extends BaseService { title: "Return shipping", quantity: 1, has_shipping: true, + no_discount: true, content: { unit_price: swap.return_shipping.price, quantity: 1, diff --git a/packages/medusa/src/services/totals.js b/packages/medusa/src/services/totals.js index 8c655766df..c6a9a09fac 100644 --- a/packages/medusa/src/services/totals.js +++ b/packages/medusa/src/services/totals.js @@ -35,7 +35,7 @@ class TotalsService extends BaseService { * @param {Cart || Order} object - cart or order to calculate subtotal for * @return {int} the calculated subtotal */ - getSubtotal(object) { + getSubtotal(object, opts = {}) { let subtotal = 0 if (!object.items) { return subtotal @@ -46,8 +46,15 @@ class TotalsService extends BaseService { const temp = _.sumBy(item.content, c => c.unit_price * c.quantity) subtotal += temp * item.quantity } else { - subtotal += - item.content.unit_price * item.content.quantity * item.quantity + if (opts.excludeNonDiscounts) { + if (!item.no_discount) { + subtotal += + item.content.unit_price * item.content.quantity * item.quantity + } + } else { + subtotal += + item.content.unit_price * item.content.quantity * item.quantity + } } }) return this.rounded(subtotal) @@ -135,6 +142,13 @@ class TotalsService extends BaseService { * applied discount */ calculateDiscount_(lineItem, variant, variantPrice, value, discountType) { + if (lineItem.no_discount) { + return { + lineItem, + variant, + amount: 0, + } + } if (discountType === "percentage") { return { lineItem, @@ -240,7 +254,7 @@ class TotalsService extends BaseService { * @return {int} the total discounts amount */ async getDiscountTotal(cart) { - let subtotal = this.getSubtotal(cart) + let subtotal = this.getSubtotal(cart, { excludeNonDiscounts: true }) if (!cart.discounts || !cart.discounts.length) { return 0