0

0

Odoo 14 POS会话中准确读取现金支付总额的教程与调试指南

霞舞

霞舞

发布时间:2025-12-12 17:01:27

|

857人浏览过

|

来源于php中文网

原创

Odoo 14 POS会话中准确读取现金支付总额的教程与调试指南

本教程详细指导如何在odoo 14的pos会话中,通过javascript代码准确获取所有订单的现金支付总额。文章强调了利用浏览器开发者工具进行对象结构检查和调试的重要性,并提供了具体的代码示例和调试技巧,帮助开发者有效解决前端数据访问问题,确保准确地遍历订单及其支付行,识别并累加现金支付金额。

在Odoo 14的销售点(POS)模块中,开发者经常需要访问当前会话中的订单数据,例如获取特定支付方式(如现金)的总金额。这要求我们深入理解Odoo前端数据模型的结构,并掌握有效的调试方法。

理解Odoo POS会话数据结构

在Odoo POS前端,所有活动订单和其相关的支付信息都存储在 this.env.pos 对象中。要获取当前POS会话中的所有订单,我们通常会使用 this.env.pos.get_order_list() 方法。

每个订单对象内部,其支付行(payment lines)通常存储在一个集合中,在Odoo 14这类版本中,这通常是Backbone.js模型的集合,因此需要通过 .models 属性来访问实际的支付行数组。每个支付行对象又包含了支付方式(cashregister)和金额(amount)等关键信息。

为了准确识别现金支付,我们需要检查支付行关联的日记账类型。现金支付通常对应于类型为 'cash' 的日记账。

核心代码实现:计算现金支付总额

以下代码片段展示了如何正确遍历当前POS会话中的所有订单及其支付行,并计算现金支付的总额:

get totalCash() {
    // 在此处设置断点,以便在浏览器开发者工具中进行详细检查
    debugger; 

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

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

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

        // 遍历订单中的每个支付行。
        // 注意:order.paymentlines通常是一个集合对象,需要通过.models访问其内部数组。
        for (const paymentLine of order.paymentlines.models) {
            console.log("当前支付行: ", paymentLine);

            // 检查支付方式是否为现金
            // 支付方式的类型信息通常存储在 paymentLine.cashregister.journal.type 中
            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);
            }
        }
    }

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

代码解析:

晓象AI资讯阅读神器
晓象AI资讯阅读神器

晓象-AI时代的资讯阅读神器

下载
  1. const orders = this.env.pos.get_order_list();: 获取当前POS会话中的所有订单对象。
  2. for (const order of orders): 遍历 orders 数组中的每一个订单。
  3. for (const paymentLine of order.paymentlines.models): 这是关键一步。order.paymentlines 是一个集合(Collection)对象,其内部实际的模型数组需要通过 .models 属性来访问。遍历这个数组以获取每个支付行对象。
  4. if (paymentLine.cashregister && paymentLine.cashregister.journal && paymentLine.cashregister.journal.type === 'cash'): 这是一个健壮的检查,确保 cashregister 和 journal 属性存在,然后判断 journal.type 是否为 'cash'。
  5. totalCash += paymentLine.amount;: 如果是现金支付,则将支付行的金额累加到 totalCash 变量中。
  6. return totalCash.toFixed(2);: 返回计算出的总现金金额,并使用 toFixed(2) 方法将其格式化为两位小数的字符串,这对于货金额显示是常见的做法。

强大的调试利器:浏览器开发者工具

在Odoo前端开发中,理解和检查JavaScript对象的结构至关重要。当遇到“似乎找到了对象,但属性名称不对”的问题时,浏览器开发者工具是解决此类问题的最佳途径。

使用步骤:

  1. 插入 debugger; 语句: 在你想要检查代码执行流程和变量状态的位置,例如在 get totalCash() 方法的开头,添加 debugger; 语句。
    get totalCash() {
        debugger; // 在这里设置一个断点
        // ... 你的代码 ...
    }
  2. 打开开发者工具: 在浏览器中,右键点击Odoo页面,选择“检查”(Inspect)或按下 Ctrl+Shift+I(Mac上是 Cmd+Option+I)。
  3. 触发代码执行: 执行会调用你插入 debugger; 语句的代码逻辑(例如,在POS界面中执行一个操作,该操作会调用 totalCash 方法)。
  4. 在断点处暂停: 当代码执行到 debugger; 语句时,浏览器会自动暂停在“Sources”或“源”面板中。
  5. 检查变量和对象:
    • 在“Scope”或“作用域”面板中,你可以查看当前作用域内的所有变量及其值。
    • 在“Console”或“控制台”面板中,你可以手动输入变量名(例如 orders 或 paymentLine),然后按回车键来检查其完整的对象结构和所有可用属性。你可以展开这些对象来层层深入地查看其内容。
    • 通过这种方式,你可以准确地发现 paymentLine 对象中,金额属性是 amount,而支付类型信息位于 cashregister.journal.type。

这种交互式调试方法远比简单的 console.log 更强大和直观,它能让你实时地探索复杂的数据结构,从而快速定位并修正属性访问错误。

注意事项与最佳实践

  • 数据模型变动: Odoo的不同版本或自定义模块可能会对前端数据模型结构进行修改。因此,即使是看似正确的代码,在升级Odoo版本后也可能需要重新检查和调试。
  • 健壮性检查: 在访问嵌套属性(如 paymentLine.cashregister.journal.type)时,最好进行空值或 undefined 检查,例如 if (paymentLine.cashregister && paymentLine.cashregister.journal && ...),以避免运行时错误。
  • 异步操作: 如果你的数据获取涉及异步操作(例如通过RPC调用后端),请确保正确处理Promise,使用 async/await 或 .then() 方法来确保在数据可用时才进行处理。本教程中的 get_order_list() 通常是同步的。
  • 性能考量: 对于非常大量的订单和支付行,频繁的循环和复杂的逻辑可能会影响POS前端的性能。在设计时应考虑优化算法。

总结

在Odoo 14 POS会话中准确获取现金支付总额,需要对前端数据模型有清晰的理解,并熟练运用浏览器开发者工具进行调试。通过本文提供的代码示例和调试指南,开发者可以有效地遍历订单和支付行,准确识别并累加现金支付金额,同时也能掌握解决类似前端数据访问问题的通用方法。始终记住,当不确定对象结构时,debugger; 和控制台是你的最佳伙伴。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

775

2023.08.22

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

529

2023.09.20

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

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

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1498

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

623

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

592

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

587

2024.04.29

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

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

精品课程

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

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

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

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