From e2fd06fbd6617ce97c14cf9e55b8be7d5ec062d2 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Wed, 3 Jun 2026 14:48:05 +0700 Subject: [PATCH] feat: restrict POS paid order history to the last 48 hours to optimize UI performance --- models/__init__.py | 1 + models/pos_order.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 models/pos_order.py diff --git a/models/__init__.py b/models/__init__.py index 606b715..6242518 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- from . import pos_config from . import res_config_settings +from . import pos_order diff --git a/models/pos_order.py b/models/pos_order.py new file mode 100644 index 0000000..00725ea --- /dev/null +++ b/models/pos_order.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from odoo import fields, models, api +from odoo.osv import expression +from datetime import timedelta, datetime +import pytz + +class PosOrder(models.Model): + _inherit = 'pos.order' + + @api.model + def search_paid_order_ids(self, config_id, domain, limit, offset): + """Limit paid orders list loaded on POS frontend to today and the day before.""" + user_tz_name = self.env.context.get('tz') or self.env.user.tz or 'UTC' + try: + user_tz = pytz.timezone(user_tz_name) + except pytz.UnknownTimeZoneError: + user_tz = pytz.UTC + + today_local = fields.Date.to_date(fields.Date.context_today(self)) + yesterday_local = today_local - timedelta(days=1) + yesterday_start_local = datetime.combine(yesterday_local, datetime.min.time()) + yesterday_start_tz = user_tz.localize(yesterday_start_local) + yesterday_start_utc = yesterday_start_tz.astimezone(pytz.UTC).replace(tzinfo=None) + + # Restrict domain so only orders from today and yesterday (local timezone start) are returned + domain = expression.AND([domain, [('date_order', '>=', yesterday_start_utc)]]) + + return super(PosOrder, self).search_paid_order_ids(config_id, domain, limit, offset)