From 7ca603ecce3bee8a4cbde0a080dfa11541dbea2f Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 17 Jun 2026 17:51:50 +0700 Subject: [PATCH] refactor: optimize POS startup performance by disabling default partner loading and clearing the customer list view --- models/res_partner.py | 14 ++------------ static/src/app/screens/partner_list_patch.js | 12 ++---------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/models/res_partner.py b/models/res_partner.py index 47ed8e0..4baee77 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -21,18 +21,8 @@ class ResPartner(models.Model): @api.model def _load_pos_data_domain(self, data, config): - domain = super()._load_pos_data_domain(data, config) - # Limit initial load of extra loyalty members to 30 to ensure fast POS startup (1-2 seconds) - loyalty_members = self.search( - [ - ('is_company', '=', False), - ('loyalty_card_ids.active', '=', True), - ('loyalty_card_ids.program_id.active', '=', True), - ], - limit=30, - order='write_date desc' - ) - return ['|'] + domain + [('id', 'in', loyalty_members.ids)] + # Override to load zero partners on startup, preventing caching of customer data on session start + return [('id', '=', False)] @api.model def _load_pos_data_fields(self, config): diff --git a/static/src/app/screens/partner_list_patch.js b/static/src/app/screens/partner_list_patch.js index fabdb1f..cebe8c1 100644 --- a/static/src/app/screens/partner_list_patch.js +++ b/static/src/app/screens/partner_list_patch.js @@ -70,16 +70,8 @@ patch(PartnerList.prototype, { let computedResult; if (!searchWord) { - // When query is empty, slice and sort following standard POS behavior - computedResult = filteredPartners - .slice(0, 1000) - .toSorted((a, b) => - this.props.partner?.id === a.id - ? -1 - : this.props.partner?.id === b.id - ? 1 - : (a.name || "").localeCompare(b.name || "") - ); + // When query is empty, keep list blank by default except for the currently selected customer (if any) + computedResult = filteredPartners.filter((p) => this.props.partner?.id === p.id); } else { // When query is present, optimize search filtering const exactMatches = filteredPartners.filter((partner) => partner.exactMatch(searchWord));