pos_loyalty_safe_coupon/README.md

1.7 KiB

POS Loyalty Safe Coupon Patch

This custom Odoo module resolves critical Point of Sale (POS) Loyalty bugs in Odoo 19 that cause the POS UI to crash or render as a blank screen.

Unsafe Coupon Access Fix

When an order is restored (e.g., during table switching in a restaurant) and references a coupon that is not yet fully loaded in the local client registry, Odoo leaves coupon_id as undefined. Accessing .id on this undefined object crashes the POS UI.

How it works:

  • Dynamically patches PosOrder.getLoyaltyPoints(), OrderPaymentValidation.validateOrder(), and PosStore.postProcessLoyalty().
  • Temporarily mocks any missing coupon_id references with { id: 0 }.
  • Intercepts this.data.call during postProcessLoyalty to strip out dummy coupon records with ID 0 before communicating with the backend.

Invalid/Archived Rewards & program_id Fix

During startup or draft order restoration, if an existing order contains a reward line whose corresponding reward_id or reward_id.program_id is missing or archived (and therefore not loaded in the client registry), Odoo attempts to read program_type from it. This triggers a TypeError: Cannot read properties of undefined (reading 'program_id') or (reading 'program_type') and leaves a blank screen.

How it works:

  • Dynamically patches PosOrder._updateRewardLines() and PosStore.orderUpdateLoyaltyPrograms().
  • Automatically filters and deletes reward lines that are missing a valid reward_id or its associated program_id.
  • Restores non-corrupted order lines, safely healing the order state and allowing the POS session to load successfully.

This ensures zero side effects, maximum stability, and clean compatibility with standard/custom addons.