Odoo 14 POS:深入理解订单与现金支付明细并高效调试


Odoo 14 POS:深入理解订单与现金支付明细并高效调试

本教程旨在指导odoo 14 pos开发者如何准确读取销售会话中的订单及其现金支付明细,并计算总现金支付金额。文章将详细介绍odoo前端数据模型的访问方法,并着重强调利用浏览器开发者工具和`debugger`关键字进行运行时对象结构检查与调试的最佳实践,帮助开发者高效解决数据访问中的常见问题。

Odoo POS前端数据模型概述

在Odoo 14的销售点 (POS) 模块前端,所有活动会话中的订单数据都通过J*aScript对象进行管理。this.env.pos对象是访问当前POS环境和数据模型的核心入口。要获取当前会话中的所有订单,我们通常使用this.env.pos.get_order_list()方法。这个方法返回一个包含所有订单模型的数组。

每个订单模型 (order) 都包含其相关的支付信息,这些信息存储在order.paymentlines中。order.paymentlines是一个集合对象,其具体的支付行模型可以通过order.paymentlines.models属性访问。每一条支付行 (paymentLine) 模型则包含了支付金额、支付方式(如现金、银行卡等)的详细信息。

计算POS会话中的现金支付总额

我们的目标是遍历所有订单,找出其中的现金支付行,并累加其金额。以下是一个基本的实现思路:

  1. 获取所有订单列表:使用this.env.pos.get_order_list()。
  2. 遍历每个订单:对获取到的订单列表进行迭代。
  3. 遍历订单的支付行:对于每个订单,访问其paymentlines.models属性,并遍历其中的每一条支付行。
  4. 识别现金支付:检查支付行的支付方式是否为现金。在Odoo POS中,支付方式的类型通常通过paymentLine.cashregister.journal.type来判断。当其值为'cash'时,表示这是一笔现金支付。
  5. 累加金额:将符合条件的支付行的amount属性累加到总金额中。

以下是实现上述逻辑的J*aScript代码示例:

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

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

    // 遍历每个订单
    for (const order of orders) {
        console.log("当前订单: ", 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);
}

高效调试:深入理解对象结构

在开发过程中,尤其是在处理复杂的J*aScript对象模型时,我们可能会遇到无法正确访问对象属性的情况,或者console.log的输出未能完全展示对象的所有嵌套结构,导致对数据路径产生疑问。例如,console.log一个Backbone模型对象时,可能只会显示其顶层属性和内部的attributes对象,而非所有可直接访问的属性。

解决这类问题的最有效方法是使用浏览器开发者工具进行运行时调试。

芦笋演示 芦笋演示

一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。

芦笋演示 227 查看详情 芦笋演示

使用 debugger; 关键字

在你的J*aScript代码中,可以在任何你想要暂停执行并检查变量状态的位置插入debugger;关键字。当代码执行到这一行时,如果你的浏览器开发者工具是打开的,它会自动暂停,并进入调试模式。

get totalCash() {
    debugger; // 在此处设置断点,代码执行到此将暂停

    const orders = this.env.pos.get_order_list();
    let totalCash = 0;

    // ... 后续代码 ...
}

利用浏览器开发者工具进行检查

  1. 打开开发者工具:在浏览器中,右键点击网页并选择“检查”(Inspect),或使用快捷键 Ctrl+Shift+I (Windows/Linux) / Cmd+Option+I (Mac)。
  2. 导航到“Sources”(源代码)标签页:在这里你可以看到你的J*aScript文件。
  3. 触发代码执行:执行POS操作,使totalCash方法被调用。
  4. 检查作用域和变量:当代码因debugger;暂停时,在开发者工具的右侧面板中,你会看到“Scope”(作用域)或“Variables”(变量)区域。这里会列出当前作用域内的所有变量及其值。
    • 你可以展开orders、order、paymentLine等变量,层层深入地查看它们的内部结构和属性。
    • 例如,对于paymentLine对象,你可以观察它是否有一个cashregister属性,cashregister下是否有journal,以及journal下是否有type。这能帮助你确认paymentLine.cashregister.journal.type这样的访问路径是否正确。
    • 在“Console”(控制台)标签页中,你也可以直接输入变量名(例如paymentLine)并按回车,来交互式地检查其属性。

通过这种方式,你可以清晰地看到每个对象的真实结构,包括其嵌套属性,从而准确地确定正确的属性访问路径。在确认了paymentLine.cashregister.journal.type和paymentLine.amount是正确的访问路径后,上述代码即可正常工作。

注意事项与最佳实践

  • 数据可用性检查:在访问嵌套属性时,最好进行空值或未定义检查,以防止运行时错误。例如,if (paymentLine.cashregister && paymentLine.cashregister.journal && paymentLine.cashregister.journal.type === 'cash') 比 if (paymentLine.cashregister.journal.type === 'cash') 更健壮。
  • 性能考量:对于大型POS会话,订单和支付行数量可能很多。虽然上述遍历方法通常足够高效,但在极端情况下,考虑是否有更优化的数据查询或聚合方式。
  • Odoo版本兼容性:Odoo前端的数据模型和API在不同版本之间可能存在细微差异。本教程基于Odoo 14,在升级或降级时请注意验证相关API。
  • 代码可读性:使用有意义的变量名和适当的注释,提高代码的可读性和可维护性。

总结

在Odoo 14 POS中读取订单和支付明细,特别是计算现金支付总额,是常见的开发需求。通过this.env.pos.get_order_list()获取订单,并迭代order.paymentlines.models来访问支付行,结合paymentLine.cashregister.journal.type判断支付方式,可以有效地实现这一功能。

更重要的是,当遇到数据模型访问问题时,应充分利用浏览器开发者工具的debugger;功能。它能提供运行时对象结构的清晰视图,帮助开发者快速定位并解决属性访问路径不准确的问题,从而提高开发效率和代码质量。掌握这些调试技巧是Odoo前端开发不可或缺的一部分。

以上就是Odoo 14 POS:深入理解订单与现金支付明细并高效调试的详细内容,更多请关注其它相关文章!


# 这一  # 菏泽扫黑网站建设平台  # 亿视搜seo  # 海伦网站关键词排名优化  # 巴彦网站推广  # 烟台网站建设nanfengnet  # 贞丰关键词排名推荐  # 全网霸屏推广营销效果  # 精准营销推广工具有哪些  # 湛江企业网站建设价格  # 关键词排名优化方案 s  # 构建一个  # 这是  # 的是  # 执行情况  # 用在  # linux  # 是一个  # 你可以  # 支付方式  # 遍历  # 数据  # 常见问题  # win  # 前端开发  # mac  # 工具  # 浏览器  # windows  # 前端  # java  # javascript 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 抖音评论无法发送如何修复 抖音评论功能操作指南  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  mysql如何回滚事务_mysql ROLLBACK事务回滚方法  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  Python项目中的条件导入:解决跨模块依赖问题  优化2xN网格最大路径和的动态规划算法实践  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  《新三国志曹操传》游历事件袁尚突围攻略  《火影忍者:木叶高手》快速升级攻略  追剧达人如何发弹幕  《领英》查看屏蔽名单方法  Final Cut Pro视频加EQ教程  《米姆米姆哈》米姆获取及技能攻略  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  Linux如何优化系统启动流程_Linux启动项优化方案  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  《律学法考》查看学习数据方法  J*aScript类型数组_TypedArray使用  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  如何在vscode中关闭it环境  电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】  鸣潮历史学家灯塔位置一览  Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】  b站怎么查看视频的码率_b站视频码率查看方法  C#解析并修改XML后保存 如何确保格式与编码的正确性  《360浏览器》设置摄像头权限方法  Google Cloud Functions 时区处理指南:理解与最佳实践  51漫画网实时入口 51漫画网页版官方免费漫画入口  有道AI翻译入口 智能写作官方网站入口  小米倒班助手添加日历提醒  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  Golang如何初始化module项目_Golang module init使用说明  《虎扑》取消评分记录方法  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  优化Google Charts Gauge:在数据库无数据时显示默认值  CSS如何控制元素外边距_margin实现布局间隔  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  吃完饭就犯困是什么原因 餐后嗜睡如何缓解  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  使用CSS :has() 选择器实现父元素样式控制:从子元素反向应用样式  使用Python和GBGB API高效抓取指定日期范围和赛道比赛结果教程  性能与资源监视器快捷打开  键盘测试软件哪个好_键盘故障检测工具推荐  Golang如何使用log记录日志信息_Golang log日志记录方法总结  PHP页面重载时变量值不重置的实现方法  微博网页版入口链接 微博网页版在线互动平台  纯CSS实现滚动时动态时间轴线条颜色填充效果 

 2025-12-05

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.