test-order-item-price-calculation-strategy.ts 941 B

123456789101112131415161718192021222324252627282930313233
  1. import {
  2. PriceCalculationResult,
  3. Order,
  4. OrderItemPriceCalculationStrategy,
  5. ProductVariant,
  6. RequestContext,
  7. roundMoney,
  8. } from '@vendure/core';
  9. /**
  10. * Adds $5 for items with gift wrapping, halves the price when buying 3 or more
  11. */
  12. export class TestOrderItemPriceCalculationStrategy implements OrderItemPriceCalculationStrategy {
  13. calculateUnitPrice(
  14. ctx: RequestContext,
  15. productVariant: ProductVariant,
  16. orderLineCustomFields: { [p: string]: any },
  17. order: Order,
  18. quantity: number,
  19. ): PriceCalculationResult | Promise<PriceCalculationResult> {
  20. let price = productVariant.price;
  21. if (orderLineCustomFields.giftWrap) {
  22. price += 500;
  23. }
  24. if (quantity > 3) {
  25. price = roundMoney(price / 2);
  26. }
  27. return {
  28. price,
  29. priceIncludesTax: productVariant.listPriceIncludesTax,
  30. };
  31. }
  32. }