You need to enable JavaScript to run this app. Odoo 12 POS前端部分订单退货时可退数量未正常扣减问题求解
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 12 POS前端部分订单退货时可退数量未正常扣减问题求解

问题修复方案

你当前代码的问题出在分支逻辑不一致、字段判断顺序错误两个核心点,按以下方案修改即可解决:

核心问题梳理

  • 仅enable_print_valid_days关闭的else分支做了return_qty字段补全,开启有效期的if分支完全没有处理该逻辑,导致这部分订单行返回的字典缺少return_qty字段,前端只能默认读取原始数量
  • else分支的字段判断顺序错误:先判断值大小再判断字段是否存在,字段不存在时rec.get('return_qty')返回None,和数值比较会触发异常导致赋值逻辑失效
  • 开启有效期分支的搜索条件直接过滤return_qty > 0,如果订单行本身没有return_qty字段,会直接被过滤掉,无法进入后续处理逻辑

修正后代码

def load_return_order_lines(self, pos_order_id):
    valid_return_lines = []
    current_date = datetime.today().strftime('%Y-%m-%d')
    if pos_order_id:
        order_id = self.env['pos.order'].browse(pos_order_id)
        if order_id and order_id.config_id.enable_print_valid_days:
            # 移除return_qty过滤条件,先拉取所有有效订单行
            order_lines = self.search([('order_id', '=', pos_order_id), ('price_subtotal', '>', 0)])
            for line in order_lines:
                if line.return_valid_days > 0 and not line.product_id.is_dummy_product:
                    date_N_days_after = (order_id.date_order + timedelta(days=line.return_valid_days)).strftime('%Y-%m-%d')
                    if current_date <= date_N_days_after:
                        line_dict = line.read()[0]
                        # 统一补全return_qty字段:不存在则取qty,值<=0也重置为qty
                        if 'return_qty' not in line_dict or line_dict.get('return_qty') <= 0:
                            line_dict['return_qty'] = line_dict.get('qty')
                        valid_return_lines.append(line_dict)
        else:
            order_line_dicts = self.search_read([('order_id', '=', pos_order_id),  ('price_subtotal', '>', 0)])
            for rec in order_line_dicts:
                # 调整判断顺序:先判断字段是否存在,再判断值大小
                if 'return_qty' not in rec or rec.get('return_qty') <= 0:
                    rec['return_qty'] = rec.get('qty')
            return order_line_dicts
    return valid_return_lines

改动说明

  1. 统一两个分支的return_qty补全逻辑:不管是否开启退货有效期,所有返回给前端的订单行字典都会自动检查return_qty字段,不存在则取qty的值
  2. 调整判断顺序:先检查字段是否存在,再判断值是否小于等于0,避免None和数值比较的异常
  3. 移除开启有效期分支搜索条件里的return_qty > 0过滤,避免无return_qty字段的正常订单行被误过滤
  4. 移除无用的调试打印代码,避免日志冗余

修改后所有订单的可退数量都会优先取return_qty的值,字段不存在时自动用原始购买数量qty填充,不会再出现退货后可退数量不更新的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:36:00