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

金额为零时如何绕过Register Payment弹窗自动生成发票并标记已付

绕过100%折扣场景下的Register Payment弹窗方案

针对100%折扣后应付总额为0时仍弹出付款弹窗的问题,有三种可行方案实现自动生成发票并标记已付:

1. 前端JS逻辑修改

找到销售订单确认对应的前端JS文件(如sale_order.js),在触发弹窗的代码段中添加总额判断,当amount_total为0时直接执行发票生成与已付标记逻辑,跳过弹窗:

// 改写确认销售订单的触发逻辑
const confirmSale = async function () {
    if (this.amount_total === 0) {
        // 自动创建发票
        const invoiceId = await this.action_invoice_create();
        // 过账发票并标记已付
        await this.env['account.move'].browse(invoiceId).action_post();
        // 更新订单状态
        this.write({state: 'sale'});
    } else {
        // 原有弹窗逻辑保留
        this.do_action('account.action_register_payment');
    }
};

2. 后端Python逻辑扩展

通过继承sale.order模型,在订单确认方法中添加总额判断逻辑,自动完成发票创建与已付标记:

from odoo import api, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    def action_confirm(self):
        res = super().action_confirm()
        for order in self:
            if order.amount_total == 0:
                # 生成对应发票
                invoices = order._create_invoices()
                if invoices:
                    # 过账发票
                    invoices.action_post()
                    # 标记发票为已付状态
                    invoices.write({'payment_state': 'paid'})
        return res

3. 无代码自动化配置

利用Odoo内置的自动化动作功能,无需编写代码即可实现:

  • 进入设置 > 自动化 > 自动化动作,新建动作
  • 模型选择「销售订单」,触发条件设为:状态 = 已确认 且 应付总额 = 0
  • 动作类型选择「执行Python代码」,填入类似后端逻辑的代码片段,实现自动创建发票并标记已付

注意事项

  • 修改核心代码时务必使用继承方式,避免直接修改原文件导致升级兼容问题
  • 测试时需覆盖多种100%折扣场景(如含税费、多产品组合等),确保逻辑稳定
  • 无代码方案适合非技术人员,配置灵活但功能复杂度有限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:22