0

0

Odoo 14 POS会话中读取订单与现金支付明细的教程

花韻仙語

花韻仙語

发布时间:2025-12-05 08:23:02

|

450人浏览过

|

来源于php中文网

原创

Odoo 14 POS会话中读取订单与现金支付明细的教程

本教程旨在指导开发者如何在odoo 14的pos会话中,通过javascript代码准确读取并计算所有现金支付的总额。文章将详细介绍如何遍历pos订单及其支付明细,识别现金交易,并着重强调利用浏览器开发者工具进行高效调试,以确保正确访问odoo前端对象属性,从而解决在数据结构复杂性中遇到的挑战。

在Odoo的销售点(POS)模块中,有时我们需要自定义功能来汇总特定类型的支付数据,例如计算一个活动POS会话中的现金支付总额。这通常涉及到访问Odoo前端的JavaScript模型层,遍历订单和其关联的支付明细。

理解Odoo POS会话数据结构

Odoo POS前端的数据模型组织清晰,主要通过this.env.pos对象提供当前POS会话的各种数据。

  1. 获取订单列表: 当前POS会话中的所有订单可以通过this.env.pos.get_order_list()方法获取。这个方法返回一个包含所有订单对象的数组。

  2. 遍历订单与支付明细: 每个订单对象内部都包含一个paymentlines集合,它存储了该订单的所有支付记录。paymentlines是一个Backbone.js集合,其具体的模型对象可以通过.models属性访问。每个支付明细对象都包含了支付方式、金额等信息。

实现现金支付总额计算

以下是一个JavaScript方法,用于获取当前POS会话中所有订单的现金支付总额。

get totalCash() {
    // 1. 设置断点:在浏览器开发者工具中暂停执行,以便检查对象结构。
    debugger; 

    // 2. 获取当前POS会话的所有订单列表
    const orders = this.env.pos.get_order_list();
    let totalCash = 0;

    console.log("订单列表: ", orders);

    // 3. 遍历每个订单
    for (const order of orders) {
        console.log("当前订单: ", order);

        // 4. 遍历订单中的每个支付明细
        // paymentlines是一个Backbone集合,通过.models访问实际的支付明细模型
        for (const paymentLine of order.paymentlines.models) {
            console.log("当前支付明细: ", paymentLine);

            // 5. 检查支付方式是否为现金
            // 注意:'cashregister.journal.type' 路径可能因Odoo版本或自定义而异。
            // 如果此路径不正确,请使用调试工具(见下文)查找正确路径。
            if (paymentLine.cashregister && paymentLine.cashregister.journal && paymentLine.cashregister.journal.type === 'cash') {
                console.log("现金支付类型: ", paymentLine.cashregister.journal.type);
                console.log("累计前金额: ", totalCash);
                totalCash += paymentLine.amount;
                console.log("累计后金额: ", totalCash);
            } 
            // 补充说明:在某些Odoo版本或配置中,支付方式信息可能在 paymentLine.payment_method 对象下
            // 例如:if (paymentLine.payment_method && paymentLine.payment_method.journal && paymentLine.payment_method.journal.type === 'cash')
            // 调试时应重点关注 paymentLine 对象的结构
        }
    }

    // 6. 返回总现金金额,保留两位小数
    return totalCash.toFixed(2);
}

代码解析:

  • this.env.pos.get_order_list():这是获取所有当前POS会话订单的关键方法。
  • order.paymentlines.models:paymentlines是一个Backbone集合,需要通过.models属性来访问集合中的实际模型(即支付明细对象)。
  • paymentLine.cashregister.journal.type === 'cash':这是识别现金支付的核心逻辑。请注意,cashregister.journal.type这个属性路径在不同的Odoo版本或自定义模块中可能有所不同。 如果代码无法正确识别现金支付,最常见的原因就是这里的属性路径不准确。

Odoo前端开发调试技巧

当遇到类似“找不到正确属性名”的问题时,有效的调试是解决问题的关键。

AITDK
AITDK

免费AI SEO工具,SEO的AI生成器

下载
  1. 设置断点 (debugger;): 在你的JavaScript代码中,可以在任何你希望暂停执行并检查变量状态的位置插入debugger;语句。当代码执行到这一行时,如果你的浏览器开发者工具是打开的,代码将自动暂停。

    get totalCash() {
        debugger; // 在这里设置断点
        // ... 其他代码
    }
  2. 利用浏览器开发者工具:

    • 打开开发者工具: 在网页上右键点击,选择“检查”(Inspect),或者使用快捷键Ctrl+Shift+I(Windows/Linux)或Cmd+Option+I(Mac)。
    • 切换到“Sources”或“源”面板: 在这里你可以看到你的JavaScript文件,并在代码行上点击设置/取消断点。当代码因debugger;语句或手动设置的断点而暂停时,此面板会高亮显示当前执行的行。
  3. 检查对象属性: 当代码暂停在断点处时,你可以利用开发者工具的以下功能:

    • Scope(作用域)面板: 这个面板会显示当前作用域内的所有变量及其值。你可以展开orders、order、paymentLine等对象,层层深入地查看它们的内部结构和可用属性。
    • Console(控制台)面板: 在代码暂停时,你可以在控制台中输入变量名(例如paymentLine),然后回车,即可打印出该对象的完整结构。你可以进一步输入paymentLine.payment_method或paymentLine.cashregister等来探索其子属性。通过这种方式,你可以准确地找到例如paymentLine.payment_method.journal.type或paymentLine.cashregister.journal.type等正确的属性路径。

    通过仔细检查paymentLine对象的结构,你就能确定哪一个属性(例如payment_method或cashregister)包含了支付方式的详细信息,进而找到journal.type。

注意事项与最佳实践

  • Odoo版本兼容性: Odoo的不同版本(例如Odoo 14、15、16等)在前端模型和API上可能存在细微差异。本教程的代码适用于Odoo 14,但在其他版本中可能需要根据实际情况进行调整。
  • 属性路径的动态性: 如前所述,对象属性的路径可能会因Odoo版本、模块定制或特定的POS配置而异。因此,掌握调试技巧比死记硬背属性路径更为重要。
  • 性能考量: 对于包含大量订单和支付明细的POS会话,上述循环操作可能会有轻微的性能开销。在大多数POS场景下,这通常不是问题,但如果遇到性能瓶颈,可能需要考虑优化数据获取或处理逻辑。
  • 错误处理: 在实际生产代码中,应考虑添加错误处理机制,例如检查paymentLine.cashregister或paymentLine.payment_method是否存在,以避免因属性不存在而导致的运行时错误。

总结

在Odoo 14的POS会话中读取订单和支付明细,尤其是为了计算特定类型的支付总额,是常见的开发需求。通过利用this.env.pos.get_order_list()方法遍历数据,并结合强大的浏览器开发者工具进行运行时调试,开发者可以有效地识别和访问Odoo前端模型的正确属性。掌握这些技能对于Odoo前端的定制化开发至关重要,能够帮助开发者准确、高效地解决数据访问问题。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

550

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

45

2026.01.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

6235

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

492

2023.09.01

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号