企业 项目预算

Odoo 企业版项目预算为什么不是“项目上挂个总额”:分析账户、预算行与状态更新链路讲透

project_account_budget 真正做的是把预算对象接回项目主模型、更新面板和项目状态同步,而不是只做一个统计字段。

企业 项目
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 4 阅读

project_account_budget 真正做的是把预算对象接回项目主模型、更新面板和项目状态同步,而不是只做一个统计字段。

主要参考:

- `enterprise/project_account_budget/models/project_project.py`
  • enterprise/project_account_budget/models/project_update.py
  • enterprise/project_account_budget/tests/test_project.py


    一、这不是单模块按钮,而是一条跨模块链路

    很多人把这个功能理解成某个界面上的一个按钮、一个 smart button,或者一次自动创建。但从源码看,真正重要的是:上游对象先保留业务上下文,中间层做状态/域/权限判断,下游对象再接住这个上下文继续工作。只看最后一个界面动作,很容易把问题看窄。

    二、核心跨链路是怎么跑通的

    1. 项目先用自己的 analytic account 反向生成预算 domain,而不是手工选一堆预算行。
    2. 预算汇总时会按 expense / revenue 方向做 type factor 变换,因此“预算进度”不是简单的 spent ÷ allocated。
    3. project update 模板继续读取 _get_budget_items(),把预算数据放进 update 卡片,让项目经理在项目状态更新里看到预算健康度。

    这就是为什么我把它归类为“跨模块链路”题:这里至少同时牵涉了业务对象、会计/项目/销售对象,以及状态或权限判断,而不是单个模型内部的小机制。

    三、最容易踩错的边界

    • 只有用户具备 account readonly 或 analytic 权限时,预算 drill-down 才会给动作入口。
    • allowed_company_ids 会限制预算明细是否可见,避免多公司项目直接串看别家预算。
    • 没有 analytic account 的项目不会强行显示预算面板。

    这些边界决定了数据是否还能回到正确的模块继续流动。如果边界被自定义绕开,后面最常见的结果就是:报表看起来还能出, drill-down 却已经解释不通。

    四、落地时最值得先验的三件事

    1. 项目预算一定要绑 analytic account,不要靠项目名称模糊对应。
    2. 项目 update 里最好同时展示 allocated、spent 和 remaining percentage。
    3. 预算超支时要让 PM 能 drill down 到 budget item,而不是只看到红条。

    五、结论

    项目预算不是一个总额字段,它必须能解释项目 update 和预算 drill-down。 这也是企业版功能最容易被低估的地方:看上去只是一个入口,实质上是在多个子系统之间持续传递状态、上下文、数据或权限。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。