From cca5776a3816f8c69c3338a1e25cce48b7754c2a Mon Sep 17 00:00:00 2001 From: Pascal Kaufmann Date: Mon, 11 Sep 2023 21:45:42 +0200 Subject: [PATCH] Move to net --- .../core/src/directors/BasePricingSheet.ts | 14 ++++++++------ .../core/src/directors/OrderPricingSheet.ts | 12 +++++------- packages/plugins/src/pricing/order-delivery.ts | 2 +- packages/plugins/src/pricing/order-discount.ts | 7 ++++++- packages/plugins/src/pricing/order-items.ts | 2 +- packages/plugins/src/pricing/order-payment.ts | 2 +- tests/seeds/orders.js | 18 +++++++++++++++++- 7 files changed, 39 insertions(+), 18 deletions(-) diff --git a/packages/core/src/directors/BasePricingSheet.ts b/packages/core/src/directors/BasePricingSheet.ts index 268b8f4918..c48e27ba03 100644 --- a/packages/core/src/directors/BasePricingSheet.ts +++ b/packages/core/src/directors/BasePricingSheet.ts @@ -42,17 +42,19 @@ export interface PricingSheetParams { export const BasePricingSheet = ( params: PricingSheetParams, ): IBasePricingSheet => { + const calculation = params.calculation || []; + const pricingSheet: IBasePricingSheet = { - calculation: params.calculation || [], + calculation, currencyCode: params.currencyCode, quantity: params.quantity, getRawPricingSheet() { - return this.calculation; + return calculation; }, isValid() { - return this.calculation.length > 0; + return calculation.length > 0; }, sum(filter) { @@ -95,7 +97,7 @@ export const BasePricingSheet = ( (row: Calculation) => !!row && (filter![filterKey] === undefined || row[filterKey] === filter![filterKey]), ), - this.calculation, + calculation, ); return filteredCalculation; @@ -103,12 +105,12 @@ export const BasePricingSheet = ( resetCalculation(calculationSheet) { calculationSheet.filterBy().forEach(({ amount, ...row }: Calculation) => { - this.calculation.push({ + pricingSheet.calculation.push({ ...row, amount: amount * -1, } as Calculation); }); - return this.calculation; + return pricingSheet.calculation; }, }; diff --git a/packages/core/src/directors/OrderPricingSheet.ts b/packages/core/src/directors/OrderPricingSheet.ts index 8142faa33a..ade9191d65 100644 --- a/packages/core/src/directors/OrderPricingSheet.ts +++ b/packages/core/src/directors/OrderPricingSheet.ts @@ -94,13 +94,11 @@ export const OrderPricingSheet = ( }); }, - gross() { - // tax is included 2 times, this is only true for Order Pricing! - return basePricingSheet.sum() - this.taxSum(); - }, - - net() { - return basePricingSheet.sum() - this.taxSum() - this.taxSum(); + discountSum(discountId) { + return basePricingSheet.sum({ + category: OrderPricingRowCategory.Discounts, + discountId, + }); }, total({ category, useNetPrice, discountId } = { useNetPrice: false }) { diff --git a/packages/plugins/src/pricing/order-delivery.ts b/packages/plugins/src/pricing/order-delivery.ts index ed1561047a..def32eef22 100644 --- a/packages/plugins/src/pricing/order-delivery.ts +++ b/packages/plugins/src/pricing/order-delivery.ts @@ -32,7 +32,7 @@ export const OrderDelivery: IOrderPricingAdapter = { currencyCode: order.currencyCode, }); const tax = pricing.taxSum(); - const shipping = pricing.gross(); + const shipping = pricing.net(); pricingAdapter .resultSheet() diff --git a/packages/plugins/src/pricing/order-discount.ts b/packages/plugins/src/pricing/order-discount.ts index 4cb5025b04..23cad17019 100644 --- a/packages/plugins/src/pricing/order-discount.ts +++ b/packages/plugins/src/pricing/order-discount.ts @@ -101,7 +101,12 @@ export const OrderDiscount: IOrderPricingAdapter = { Math.max(0, Math.min(amountLeft, leftInFeesToSplit)), ); amountLeft -= deliveryAndPaymentDiscountAmount; - const discountAmount = (itemsDiscountAmount + deliveryAndPaymentDiscountAmount) * -1; + const discountAmount = + (itemsDiscountAmount + + deliveryAndPaymentDiscountAmount - + itemsTaxAmount - + deliveryAndPaymentTaxAmount) * + -1; const taxAmount = (itemsTaxAmount + deliveryAndPaymentTaxAmount) * -1; if (discountAmount) { pricingAdapter.resultSheet().addDiscount({ diff --git a/packages/plugins/src/pricing/order-items.ts b/packages/plugins/src/pricing/order-items.ts index f1eb9987b1..359e3853de 100644 --- a/packages/plugins/src/pricing/order-items.ts +++ b/packages/plugins/src/pricing/order-items.ts @@ -34,7 +34,7 @@ const OrderItems: IOrderPricingAdapter = { quantity: orderPosition.quantity, }); const tax = pricing.taxSum(); - const items = pricing.gross(); + const items = pricing.net(); return { taxes: current.taxes + tax, items: current.items + items, diff --git a/packages/plugins/src/pricing/order-payment.ts b/packages/plugins/src/pricing/order-payment.ts index 8e63e0437a..c9b04a9463 100644 --- a/packages/plugins/src/pricing/order-payment.ts +++ b/packages/plugins/src/pricing/order-payment.ts @@ -33,7 +33,7 @@ const OrderPayment: IOrderPricingAdapter = { currencyCode: order.currencyCode, }); const tax = pricing.taxSum(); - const paymentFees = pricing.gross(); + const paymentFees = pricing.net(); pricingAdapter .resultSheet() diff --git a/tests/seeds/orders.js b/tests/seeds/orders.js index bd5a6ade63..c1e96d2052 100644 --- a/tests/seeds/orders.js +++ b/tests/seeds/orders.js @@ -22,7 +22,8 @@ export const SimpleOrder = { category: 'ITEMS', amount: 30000, }, - { category: 'TAXES', amount: 2144.8467966573808 }, + { category: 'ITEMS', amount: -2144.8467966573808 }, + { category: 'TAXES', amount: 2144.8467966573808, baseCategory: 'ITEMS' }, { category: 'PAYMENT', amount: 0, @@ -117,6 +118,7 @@ export const SimplePosition = { isTaxable: false, isNetPrice: false, rate: 0.077, + baseCategory: 'ITEM', meta: { adapter: 'shop.unchained.pricing.product-swiss-tax', }, @@ -216,9 +218,14 @@ export const DiscountedOrder = { category: 'ITEMS', amount: 100000, }, + { + category: 'ITEMS', + amount: -7149.489322191272, + }, { category: 'TAXES', amount: 7149.489322191272, + baseCategory: 'ITEMS', }, { category: 'PAYMENT', @@ -233,9 +240,16 @@ export const DiscountedOrder = { amount: -10000, discountId: 'discounted-order-discount', }, + { + category: 'DISCOUNTS', + amount: 714.9489322191266, + discountId: 'discounted-order-discount', + }, { category: 'TAXES', amount: -714.9489322191266, + baseCategory: 'DISCOUNTS', + discountId: 'discounted-order-discount', }, ], }; @@ -306,6 +320,7 @@ export const DiscountedPosition = { category: 'TAX', amount: 8579.387186629523, rate: 0.077, + baseCategory: 'ITEM', meta: { adapter: 'shop.unchained.pricing.product-swiss-tax', }, @@ -323,6 +338,7 @@ export const DiscountedPosition = { category: 'TAX', amount: -4289.6935933147615, rate: 0.077, + baseCategory: 'DISCOUNT', meta: { adapter: 'shop.unchained.pricing.product-swiss-tax', },