首页 > 其他分享 >odoo使用扫码枪

odoo使用扫码枪

时间:2023-09-08 18:45:50浏览次数:33  
标签:扫码 code name barcode odoo sample 使用 id

odoo原生有一个扫码枪的模块叫做“barcodes”,这个模块中定义了一个类“'barcodes.barcode_events_mixin”,简单的处理扫码事件使用起来还是很方便的。

简单说一下使用过程:首先安装“barcodes”这个模块,在自己的模型中继承“'barcodes.barcode_events_mixin”,然后再扫码的form视图增加widget来进行监听,这个监听有点类似onchange,当监听到扫码事件就会触发模型中的方法

小编做的这个需求比较简单:就是在一个form视图上,扫码枪扫面产品的二维码,获取到产品关联的信息,在form上展示出来。

创建模型

class YiSampleCollectionEnterInfo(models.TransientModel):
    _name = 'sample.collection.enter.info'
    _description = '样本检测录入信息'
    # 这里继承原生barcodes中的一个类
    _inherit = ['barcodes.barcode_events_mixin']
 
    now_date = fields.Datetime(
        string='当前时间',
    )
    .......
    # 方法
    def on_barcode_scanned(self, barcode):
        sample_id = self.env['yi.sample.collection.data'].sudo().search([('QR_code', '=', barcode)])
        if sample_id:
            for rec in self:
                rec.with_context(barcode_flag=True).write({
                    'now_date': fields.Datetime.now(),
                    'project_name': sample_id.project_name.name,
                    'subject_id': sample_id.subject_id,
                    'sample_type_id': sample_id.sample_type_id.sample_type,
                    'inspection_platform_id': sample_id.inspection_platform_id.platform_name,
                    'project_type_id': sample_id.project_type_id.project_type,
                    'project_name_code_id': sample_id.project_name_code_id.code_container,
                    'sample_receive_date': sample_id.sample_receive_date,
                    'experiment_step_code': sample_id.experiment_step_code,
                    'original_sample_code': sample_id.original_sample_code,
                   
                })
                self.env.user.notify_success(message='查询成功!')
        else:
            raise ValidationError('不存在此样本信息,请重新核对!')

  

 

  1. 展示的form视图

action:
<record id="action_yi_sample_collection_enter_info" model="ir.actions.act_window">
        <field name="name">信息录入</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">sample.collection.enter.info</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
    </record>
view:
<record id="yi_sample_collection_enter_info_form_view" model="ir.ui.view">
        <field name="name">yi_sample_collection_enter_info_form_view</field>
        <field name="model">yi.sample.collection.enter.info</field>
        <field name="arch" type="xml">
            <form delete="0" edit="0" create="0">
                <sheet>
                    // 这里是重要的,类似给form增加一个onchage,就是按照原生这么写的
                    <field name="_barcode_scanned" widget="samplecollection_barcode_handler"/>
                    <group>
                        <field name="now_date" string="获取时间" readonly="1"/>
                    </group>
                    <group string="">
                        <group>
                            <field name="project_name" readonly="1"/>
                            <field name="sample_type_id" readonly="1"/>
                        </group>
                        <group>
                            <field name="subject_id" readonly="1"/>
                            <field name="inspection_platform_id" readonly="1"/>  
                        </group>
                    </group>
                    <group>
                        <group>
                            <field name="original_sample_code" readonly="1"/>
                            <field name="hospital_sources" readonly="1"/>  
                        </group>
                        <group>
                            <field name="regional_sources" readonly="1"/>
                            <field name="patient_name" readonly="1"/>
                            <field name="patient_age" readonly="1"/>
                        </group>
                    </group>
                    <group>
                        <group>
                            <field name="sample_collection_date" readonly="1"/>
                        </group>
                        <group>
                            <field name="sample_collection_container" readonly="1"/>
                        </group>
                    </group>
                    <footer>
                        <button string="Cancel" class="btn-secondary" special="cancel"/>
                        <button name="sample_data_empty" string="清理" type="button" />
                    </footer>
                </sheet>
            </form>
        </field>
    </record>

  

  1. 编写JS进行监听并调用方法

odoo.define('projectmanage.SampleCollectionBarcodeHandler', function (require) {
    "use strict";
 
    var field_registry = require('web.field_registry');
    var AbstractField = require('web.AbstractField');
    var FormController = require('web.FormController');
    var AbstractAction = require('web.AbstractAction');
 
 
    FormController.include({
        _barcodeSaleAddRecordId: function (barcode, activeBarcode) {
            if (!activeBarcode.handle) {
                return $.Deferred().reject();
            }
            // var record = this.model.get(activeBarcode.handle);
            // if (record.data.state != 'draft') {
            //     this.do_warn("销售订单", '只能对草稿状态的单据增加明细');
            //     return $.Deferred().reject();
            // }
            return this._barcodeAddX2MQuantity(barcode, activeBarcode);
        }
    })
 
    var SampleCollectionBarcodeHandler = AbstractField.extend({
        init: function () {
            this._super.apply(this, arguments);
 
            this.trigger_up('activeBarcode', {
                name: this.name,
                // fieldName: ['project_name', 'subject_id'],
                // quantity: 'product_uom_qty',
                setQuantityWithKeypress: true,
                commands: {
                    // 'O-CMD.MAIN-MENU': _.bind(this.do_action, this, 'stock_barcode.stock_barcode_action_main_menu', {clear_breadcrumbs: true}),
                    barcode: '_barcodeSaleAddRecordId',
                }
            });
        },
    });
 
 
 
    field_registry.add('samplecollection_barcode_handler', SampleCollectionBarcodeHandler);
 
});

  

因为没有往深了研究,但是按照原生的写法,这样是可以完成扫码枪的监听的,而且需求也比较简单,有兴趣的同学可以研究研究。企业版中也有一个扫码的模块,那个功能很多并且页面也很好看。

这篇文章仅供参考,因为扫码的这个需求不是很重要所以只是简单记录一下。

标签:扫码,code,name,barcode,odoo,sample,使用,id
From: https://www.cnblogs.com/pythonClub/p/17688323.html

相关文章

  • spdlog 使用学习笔记
    spdlog使用学习笔记部分内容参考了《spdlog使用_CSDN》这篇文章。1.spdlog简介github地址:https://github.com/gabime/spdlogspdlog是一个C++的日志管理工具库。2.spdlog的安装2.1.使用包管理器安装Debian:sudoaptinstalllibspdlog-devHomebrew:brewinstallspd......
  • Git基本使用
    一、git配置1、查看git本地的用户:gitconfiguser.name2、查看git本地邮箱:gitconfiguser.email3、修改git本地用户:gitconfig--globaluser.name"用户名"4、修改git本地用户邮箱:gitconfig--globaluser.email"邮箱地址"5、生成公钥:ssh-keygen-trsa-C"邮箱地址"(......
  • 达蒙数据库使用
    镜像下载链接docker run -d --name dm8_01 \--privileged=true \-p 5236:5236 \-e PAGE_SIZE=16 \-e LD_LIBRARY_PATH=/opt/dmdbms/bin \-e INSTANCE_NAME=dm8_01 \-m 2048m \-v $(pwd)/opt_dmdbms_data:/opt/dmdbms/data \dm8_single:dm8_20230808_r......
  • PHP 网页扫码登录 , 推送模板消息
    缘由:因为老板要做个PC端的微信扫码绑定登录,关注公众号,推送模板消息的功能框架:ThinkPHP5功能:实现扫码微信公众号授权登录绑定,推送模板消息1.正式配置准备:微信公众号(必须申请了服务号) Appid, AppSecret配置:微信公众平台修改: 授权回调地址域名......
  • 使用GlobeMapper下载谷歌影像
    1谷歌图源1.1有路网标注无偏移 http://gac-geo.googlecnapps.cn/maps/vt?lyrs=s,h&gl=CN&h1=zh-CN&x=%x&y=%y&z=%z1.2无标注无偏移  http://gac-geo.googlecnapps.cn/maps/vt?lyrs=s&x=%x&y=%y&z=%z2下载步骤2.1添加相应的数据源-点击连接到联机数据......
  • 如何高效使用ChatGPT(上)开胃菜
    1ChatGPT能做什么?产生潜在客户ChatGPT可以帮助您实现个性化沟通,减少在各种情况下创建和使用电子邮件模板的过程,让您接触到更多潜在客户,增加转化机会。提高在线知名度ChatGPT可以即时格式化您的内容,以便进行搜索引擎优化,让您以最小的投入创建有效的电子邮件和社交营销策略......
  • 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第3篇,主要总结和记录了如何使用cuda编程释放GPU的算力.在此之前尝试过使用python调用opencv直接处理视频数据,但使用......
  • Python 网页爬虫原理及代理 IP 使用
    一、Python网页爬虫原理Python是一种高效的编程语言,在Web开发和数据分析领域广受欢迎。Python的优秀模块使其更加适合大规模数据处理和Web服务的编程。网络爬虫是Python开发者最常用的工具之一。网络爬虫(WebCrawler)是一种自动化程序,可以模拟人类浏览器的行为,自动在互联网......
  • 【IIS】HTTP 错误 405.0 - Method Not Allowed,无法显示您正在查找的页面,因为使用了无
    转自:https://blog.csdn.net/weixin_38211198/article/details/103597330问题HTTP 错误 405.0 - Method Not Allowed无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)。 解决在IIS中,找到处理程序映射上面的报错已经指明是WebDAVModule模块,找到该模块  ......
  • 视频汇聚平台/视频管理平台EasyCVR开启后无法正常使用的原因排查
    EasyCVR视频汇聚平台能够在复杂的网络环境下,将各种分散的视频资源进行统一汇聚、整合和集中管理。在视频监控播放方面,EasyCVR支持多种播放协议,包括HLS、HTTP-FLV、WebSocket-FLV、WebRTC、RTSP和RTMP,并且支持对外分享。平台提供1、4、9、16个画面窗口播放的功能,可以同时播放多路视......