如何在Odoo POS打印小票中添加客户参考号?
解决Odoo POS小票添加发票客户参考的问题
你之前的代码无效,核心原因是:POS前端的订单对象本身没有customer_ref字段——这个字段属于发票(account.move),而非POS订单(pos.order);widget.pos.get_client()获取的是当前选中的客户信息,和发票里的“客户参考”不是同一个数据,所以两种写法都取不到值。
下面是两种可行的实现方法,推荐用第一种(自定义模块继承,避免修改核心文件):
方法一:后端扩展POS订单,同步发票客户参考到前端
- 创建一个自定义模块,在模块的
models/pos_order.py中添加以下代码:
from odoo import models class PosOrder(models.Model): _inherit = 'pos.order' def _export_for_ui(self, order): # 继承POS订单导出到前端的方法,追加发票的客户参考字段 res = super()._export_for_ui(order) # 查找当前POS订单对应的发票 invoice = self.env['account.move'].search([('pos_order_ids', '=', order.id)], limit=1) # 将发票的客户参考写入前端订单数据 res['customer_ref'] = invoice.customer_ref if invoice else False return res
- 在模块的
static/src/xml/receipt.xml中继承修改小票模板:
<t t-extend="OrderReceipt"> <t t-jquery=".pos-receipt-order" t-operation="append"> <!-- 当存在客户参考时显示 --> <t t-if="order.customer_ref"> <div class="row"> <div class="col-xs-6">客户参考:</div> <div class="col-xs-6 text-right"><t t-esc="order.customer_ref"/></div> </div> </t> </t> </t>
- 安装并启用这个自定义模块,重启Odoo并刷新POS页面,之后打印的小票就会显示发票的客户参考了。
方法二:前端直接读取关联发票的客户参考(需确保数据已同步)
如果你的POS配置是订单完成后立即生成发票,且POS前端已加载发票数据,可以直接在小票模板中读取订单关联的发票字段:
<t t-extend="OrderReceipt"> <t t-jquery=".pos-receipt-order" t-operation="append"> <t t-if="order.account_move && order.account_move.customer_ref"> <div class="row"> <div class="col-xs-6">客户参考:</div> <div class="col-xs-6 text-right"><t t-esc="order.account_move.customer_ref"/></div> </div> </t> </t> </t>
注意:这种方法需要后端确保POS订单的前端数据中包含account_move对象及customer_ref字段,否则还是需要配合后端的字段同步代码。
重要提醒
不要直接修改Odoo核心模块的文件,否则后续升级Odoo时你的修改会被覆盖。通过自定义模块继承修改是标准的Odoo二次开发方式。
内容的提问来源于stack exchange,提问作者Ahmed Ragab
相关产品推荐
相关产品推荐

