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

Odoo11:Cron任务触发库存预警弹窗失效问题排查

解决Odoo 11 Cron任务无法弹出库存预警窗口的问题

嘿,我一眼就瞅出你这问题的核心了——Cron任务是后台运行的,根本没法直接弹出前端窗口!这不是你代码写得有问题,是对Odoo的Cron运行机制理解错了。

咱们先拆解下你原代码的问题,再给你改出能用的方案:

原代码的几个坑

  1. 后台进程没法触发前端弹窗:Cron是在服务器端默默跑的,没有绑定任何用户的浏览器会话,你返回的ir.actions.act_window在这种场景下完全没用,因为没人的浏览器来响应这个动作。
  2. 循环逻辑有漏洞:你在循环里只要找到第一个库存不足的产品就直接return了,后面的产品根本不会检查,等于只处理第一个符合条件的条目。
  3. 库存计算不准确:你取了quants[0]的数量,但一个产品在同一个库位可能有多个stock.quant记录,应该用求和来算总库存才对。

修正后的实现方案

既然Cron没法直接弹窗口,咱们换个思路:给用户发系统消息通知,或者创建预警记录让用户能看到。下面是调整后的代码,我改成了给当前用户发送库存预警消息:

@api.model
def to_do(self):
    # 收集所有需要预警的库存信息
    alert_list = []
    # 遍历所有库存规则
    for orderpoint in self.env['stock.warehouse.orderpoint'].search([]):
        # 查找对应产品和库位的库存记录
        quants = self.env['stock.quant'].search([
            ('product_id', '=', orderpoint.product_id.id),
            ('location_id', '=', orderpoint.location_id.id),
        ])
        # 计算当前总库存
        current_stock = sum(quant.quantity for quant in quants)
        # 判断是否低于最低库存
        if current_stock <= orderpoint.product_min_qty:
            alert_msg = f"⚠️ 产品【{orderpoint.product_id.name}】在库位【{orderpoint.location_id.name}】的当前库存{current_stock},已低于设定的最低库存{orderpoint.product_min_qty}"
            alert_list.append(alert_msg)
    
    # 如果有预警信息,给用户发送系统消息
    if alert_list:
        # 这里可以指定接收消息的用户,比如用管理员或者当前Cron执行对应的用户
        target_user = self.env.user
        target_user.message_post(
            body='<br>'.join(alert_list),
            subject='库存预警通知',
            message_type='notification',
            subtype='mail.mt_comment'
        )
    # Cron任务必须返回True或者有效结果,不然可能被标记为失败
    return True

额外优化建议

如果你还是想在用户登录时看到弹窗提醒,可以这么做:

  1. 创建一个专门的预警模型(比如stock.limit.alert),把库存不足的记录存进去。
  2. 在用户登录的前端事件里,检查这个模型有没有未读的预警记录,然后触发弹窗。
  3. 或者用Odoo的内置消息机制,用户登录后在顶部的消息图标里就能看到预警,体验也不差。

最后记得先手动测试这个方法(调试模式下找到模型执行方法),确认能生成消息后再配置Cron运行哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:17