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

本教程旨在指导开发者如何在odoo 14的pos会话中,通过j*ascript代码准确读取并计算所有现金支付的总额。文章将详细介绍如何遍历pos订单及其支付明细,识别现金交易,并着重强调利用浏览器开发者工具进行高效调试,以确保正确访问odoo前端对象属性,从而解决在数据结构复杂性中遇到的挑战。
在Odoo的销售点(POS)模块中,有时我们需要自定义功能来汇总特定类型的支付数据,例如计算一个活动POS会话中的现金支付总额。这通常涉及到访问Odoo前端的J*aScript模型层,遍历订单和其关联的支付明细。
理解Odoo POS会话数据结构
Odoo POS前端的数据模型组织清晰,主要通过this.env.pos对象提供当前POS会话的各种数据。
获取订单列表: 当前POS会话中的所有订单可以通过this.env.pos.get_order_list()方法获取。这个方法返回一个包含所有订单对象的数组。
遍历订单与支付明细: 每个订单对象内部都包含一个paymentlines集合,它存储了该订单的所有支付记录。paymentlines是一个Backbone.js集合,其具体的模型对象可以通过.models属性访问。每个支付明细对象都包含了支付方式、金额等信息。
实现现金支付总额计算
以下是一个J*aScript方法,用于获取当前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前端开发调试技巧
当遇到类似“找不到正确属性名”的问题时,有效的调试是解决问题的关键。
Writer
企业级AI内容创作工具
220
查看详情
-
设置断点 (debugger;): 在你的J*aScript代码中,可以在任何你希望暂停执行并检查变量状态的位置插入debugger;语句。当代码执行到这一行时,如果你的浏览器开发者工具是打开的,代码将自动暂停。
get totalCash() { debugger; // 在这里设置断点 // ... 其他代码 } -
利用浏览器开发者工具:
- 打开开发者工具: 在网页上右键点击,选择“检查”(Inspect),或者使用快捷键Ctrl+Shift+I(Windows/Linux)或Cmd+Option+I(Mac)。
- 切换到“Sources”或“源”面板: 在这里你可以看到你的J*aScript文件,并在代码行上点击设置/取消断点。当代码因debugger;语句或手动设置的断点而暂停时,此面板会高亮显示当前执行的行。
-
检查对象属性: 当代码暂停在断点处时,你可以利用开发者工具的以下功能:
- 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前端的定制化开发至关重要,能够帮助开发者准确、高效地解决数据访问问题。
以上就是Odoo 14 POS会话中读取订单与现金支付明细的教程的详细内容,更多请关注其它相关文章!
# 支付方式
# 上海高端网站建设工期
# 染发剂营销推广方案
# 宁夏可靠网站建设企业
# 昌平做网站建设
# seo老师专栏
# 鹤岗抖音营销推广团队
# 富利专用seo查询
# 晋城大连网站建设规划
# 东莞seo优化费用
# 霸王模板建设网站
# 解决问题
# 可以通过
# 在这里
# 这是
# 自定义
# linux
# 数据结构
# 是一个
# 遍历
# 你可以
# 性能瓶颈
# win
# 前端开发
# mac
# 工具
# 浏览器
# windows
# 前端
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
Win10双系统截图高效法 截屏快捷键速记【技巧】
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
提升Kafka消费者健壮性:会话超时处理与消息处理语义
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
QQ网页版官方账号入口 QQ网页版网页版登录指南
一加 Nord 5 隐私权限异常_一加 Nord 5 系统安全优化
Tabulator表格日期时间排序问题及自定义解决方案
Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】
使用Python高效删除Word宏并转换DOCM为DOCX格式
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
PHP中高效并行检查多链接状态的教程
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
支付宝如何管理隐私设置_支付宝隐私保护的配置技巧
高德地图沿途添加点失败如何解决 高德多点规划方法
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法
期待已久:小米17 Ultra、小米首款NAS本月登场
台积电1.4nm工艺A14瞄准2028:10年来性能提升80%
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
Django表单验证失败时保留用户输入数据的最佳实践
如何将HTML表格多行数据保存到Google Sheet
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
反效果?《战地6》免费试玩开启后玩家数不升反降
抖音网页版快捷访问 抖音网页版网页版入口操作教程
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
J*a递归快速排序中静态变量导致数据累积问题的解决方案
Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
黑猫投诉统一入口官网 消费者权益保护投诉平台
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
Python:递归比较文件夹内容并找出特定类型文件的差异
在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题
Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
新三国志曹操传110级星符试炼夏侯渊极难攻略
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
圆通快递查询实时追踪 圆通物流包裹状态快速查看
C++如何生成随机数_C++ random库使用方法与范围设置
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
ArrayList与LinkedList操作复杂度详解:遍历与修改


2025-12-05
浏览次数:次
返回列表
处理逻辑。