refactor: move _code_activated_coupon_ids filter logic from PosOrder to a dynamic property wrapper in PosStore setup

This commit is contained in:
Suherdy Yacob 2026-05-29 17:11:02 +07:00
parent d308497945
commit c1735741a0

View File

@ -52,22 +52,6 @@ patch(PosOrderline.prototype, {
// ─── PosOrder patches ─────────────────────────────────────────────────────────
patch(PosOrder.prototype, {
get _code_activated_coupon_ids() {
const ids = this.raw._code_activated_coupon_ids || [];
const result = [];
for (const id of ids) {
const coupon = this.models["loyalty.card"].get(id);
if (coupon && coupon.program_id) {
result.push(coupon);
}
}
return result;
},
set _code_activated_coupon_ids(values) {
this.update({ _code_activated_coupon_ids: values });
},
/**
* getLoyaltyPoints reads coupon_id.id guard undefined coupon_id.
*/
@ -140,6 +124,24 @@ patch(OrderPaymentValidation.prototype, {
// ─── PosStore patches ─────────────────────────────────────────────────────────
patch(PosStore.prototype, {
async setup(env, deps) {
await super.setup(...arguments);
const desc = Object.getOwnPropertyDescriptor(PosOrder.prototype, "_code_activated_coupon_ids");
if (desc && desc.get) {
const originalGet = desc.get;
Object.defineProperty(PosOrder.prototype, "_code_activated_coupon_ids", {
get: function () {
const result = originalGet.call(this);
if (!result) return result;
return result.filter((coupon) => coupon && coupon.program_id);
},
set: desc.set,
configurable: true,
enumerable: true,
});
}
},
/**
* afterProcessServerData purge orphaned lines from ALL orders after load.
*/