You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何继承Odoo15 Payment screen并在_finalizeValidation()中加发票验证

继承Odoo15 POS支付界面的_finalizeValidation()方法实现发票验证

要实现你需要的逻辑,需通过前端组件继承的方式扩展POS的PaymentScreen,具体步骤如下:

1. 创建自定义模块结构

先搭建基础的模块目录:

your_module_name/
├── __manifest__.py
├── static/
│   └── src/
│       └── js/
│           └── payment_screen_extension.js
└── views/
    └── assets.xml

2. 编写模块配置文件(manifest.py)

声明模块依赖与基础信息:

{
    'name': 'POS支付发票验证',
    'version': '1.0',
    'category': 'Point of Sale',
    'summary': '支付界面添加发票必填验证',
    'depends': ['point_of_sale'],
    'data': [
        'views/assets.xml',
    ],
    'installable': True,
    'auto_install': False,
}

3. 编写JS扩展代码(payment_screen_extension.js)

继承PaymentScreen组件,重写_finalizeValidation方法添加验证逻辑:

odoo.define('your_module_name.payment_screen_extension', function(require) {
    "use strict";

    const PaymentScreen = require('point_of_sale.PaymentScreen');
    const Registries = require('point_of_sale.Registries');
    const { ErrorDialog } = require('point_of_sale.ErrorDialog');

    const PaymentScreenExtension = PaymentScreen => class extends PaymentScreen {
        async _finalizeValidation() {
            // 获取当前订单关联的发票
            const selectedInvoice = this.currentOrder.invoice_id;
            
            // 未选择发票时抛出错误
            if (!selectedInvoice) {
                await this.showPopup(ErrorDialog, {
                    title: '验证失败',
                    body: '请先选择发票再完成支付!',
                });
                return; // 终止后续流程
            }
            
            // 已选择发票,执行原方法逻辑
            await super._finalizeValidation(...arguments);
        }
    };

    Registries.Component.extend(PaymentScreen, PaymentScreenExtension);

    return PaymentScreenExtension;
});

4. 加载JS资产(assets.xml)

将自定义JS注入POS的前端资源中:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <template id="assets_pos_extension" inherit_id="point_of_sale.assets">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/your_module_name/static/src/js/payment_screen_extension.js"></script>
        </xpath>
    </template>
</odoo>

5. 模块部署与测试

  1. 将模块放入Odoo的addons目录
  2. 开启开发者模式,更新模块列表
  3. 安装该模块,重启Odoo并刷新POS界面
  4. 测试场景:
    • 未选择发票点击支付验证:弹出错误提示,无法跳转
    • 选择发票后点击验证:正常执行原逻辑,跳转至收据界面

内容的提问来源于stack exchange,提问作者Sidharth Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:15:27