Odoo v15 POS销售订单时间显示异常问题求助
问题解决:Odoo 15 POS结算界面订单时间显示错误
问题根源
POS前端加载待结算的销售订单时,未将后台存储的UTC时间转换为系统/用户设置的时区,直接以UTC时间展示,导致出现时间差(如示例中的09:00变成08:00)。而结算完成后pos.order的date_order字段正确,说明后台数据存储没问题,仅前端展示逻辑存在缺陷。
解决方案:自定义模块修正前端时间转换
通过创建自定义模块覆盖POS的订单加载逻辑,确保日期从UTC转换为本地时区后再显示:
1. 创建自定义模块(示例名称:pos_fix_order_time)
在Odoo的模块目录下新建该模块,核心文件如下:
__manifest__.py
{ 'name': 'POS 订单时间显示修复', 'version': '15.0.1.0.0', 'category': 'Point of Sale', 'summary': '修复POS结算界面订单时间显示错误问题', 'depends': ['point_of_sale'], 'data': [], 'qweb': [], 'assets': { 'point_of_sale.assets': [ 'pos_fix_order_time/static/src/js/models.js', ], }, 'installable': True, 'auto_install': False, 'license': 'LGPL-3', }
static/src/js/models.js
odoo.define('pos_fix_order_time.models', function (require) { "use strict"; var models = require('point_of_sale.models'); var _super_posmodel = models.PosModel.prototype; // 覆盖POS加载订单的方法,修正日期时区转换 models.PosModel = models.PosModel.extend({ load_orders: function(ids) { return _super_posmodel.load_orders.apply(this, arguments).then(function(orders) { // 遍历所有加载的订单,将UTC时间转为本地时区 orders.forEach(function(order) { if (order.date_order) { const utcDate = moment.utc(order.date_order); order.date_order = utcDate.local().format('YYYY-MM-DD HH:mm:ss'); } }); return orders; }); }, }); });
2. 安装并启用模块
- 将模块目录放入Odoo的
addons文件夹 - 在Odoo后台更新应用列表,找到该模块并安装
- 重启POS应用(刷新POS页面)
额外排查步骤
若问题仍存在,可检查:
- Odoo后台系统时区设置:进入
设置 > 常规设置 > 时区,确认时区配置正确 - POS设备的系统时区:确保POS运行设备的时区与Odoo后台一致
内容的提问来源于stack exchange,提问作者DZEUF
相关产品推荐
相关产品推荐

