@unchainedshop/plugins
Version:
Because of a Typescript issue with upstream "postfinancecheckout", the Postfinance plugin has been disabled from transpilation, import the source ts files from src and enable node_module tsc or copy over the src/payment/postfinance-checkout to your projec
70 lines • 3.17 kB
JavaScript
import { calculation as calcUtils } from '@unchainedshop/utils';
import { ProductPricingDirector, ProductPricingAdapter, ProductPricingRowCategory, } from '@unchainedshop/core';
const ProductDiscount = {
...ProductPricingAdapter,
key: 'shop.unchained.pricing.product-discount',
version: '1.0.0',
label: 'Apply Discounts on Product Price',
orderIndex: 30,
isActivatedFor: () => {
return true;
},
actions: (params) => {
const pricingAdapter = ProductPricingAdapter.actions(params);
const addDiscounts = (discount, total, resolvedConfiguration) => {
const { discountId } = discount;
const { isNetPrice = false, taxRate, ...meta } = resolvedConfiguration;
const amount = calcUtils.applyRate(resolvedConfiguration, total);
const isTaxable = taxRate === undefined || taxRate === null;
pricingAdapter.resultSheet().addDiscount({
amount: amount * -1,
discountId,
isNetPrice,
isTaxable,
meta: { adapter: ProductDiscount.key, ...meta },
});
if (!isTaxable && taxRate) {
const taxAmount = calcUtils.getTaxAmount(amount, taxRate, isNetPrice);
pricingAdapter.resultSheet().addTax({
amount: taxAmount * -1,
rate: taxRate,
discountId,
baseCategory: ProductPricingRowCategory.Discount,
meta: { adapter: ProductDiscount.key, discountId, ...meta },
});
if (!isNetPrice) {
pricingAdapter.resultSheet().addDiscount({
amount: taxAmount,
discountId,
isNetPrice: false,
isTaxable: false,
meta: { adapter: ProductDiscount.key, discountId, ...meta },
});
}
}
};
return {
...pricingAdapter,
calculate: async () => {
params.discounts.forEach((discount) => {
if (!discount)
return;
const { configuration } = discount;
const resolvedConfiguration = configuration.customPriceConfigurationResolver
? configuration.customPriceConfigurationResolver(params.context.product, params.context.quantity, params.context.configuration)
: configuration;
if (!resolvedConfiguration)
return;
const total = params.calculationSheet.total({
category: ProductPricingRowCategory.Item,
useNetPrice: resolvedConfiguration.isNetPrice,
});
addDiscounts(discount, total.amount, resolvedConfiguration);
});
return pricingAdapter.calculate();
},
};
},
};
ProductPricingDirector.registerAdapter(ProductDiscount);
//# sourceMappingURL=product-discount.js.map