首页 > 其他分享 >Odoo 条码扫码功能 采购订单、销售订单通过扫码增加明细

Odoo 条码扫码功能 采购订单、销售订单通过扫码增加明细

时间:2023-09-08 18:46:25浏览次数:37  
标签:purchase 扫码 barcode product id 订单 Odoo line order

可以再次下载 :Odoo 销售扫码

https://apps.odoo.com/apps/modules/11.0/sale_barcodes/

很多人都说从9.0 之后,很多社区版功能被阉割了,比如大家常说的仓库条码扫码模块就没有了。 但是却为我们留下了bcarcode模块,方便我们进行扩展。
由于有需求,需要为采购模块增加条码扫码功能,代码如下:
1.需要在purchase.order.line 增加product_barcode字段,关联自产品资料的bcarcode:

class PurchaseOrderLine(models.Model):
    _inherit = 'purchase.order.line'
 
    product_barcode = fields.Char(related='product_id.barcode')

  

2.在purchase.order.line 增加一个方法on_barcode_scanned,获取扫描枪获取的条码,同时继承扩展barcodes.barcode_events_mixin,代码如下:

class PurchaseOrder(models.Model):
    _name = 'purchase.order'
    _inherit = ['purchase.order', 'barcodes.barcode_events_mixin']
 
    def _add_product(self, product, qty=1.0):
        order_line = self.order_line.filtered(lambda r: r.product_id.id == product.id)
        if order_line:
            order_line.product_qty = qty
        else:
            product_lang = product.with_context({
                'lang': self.partner_id.lang,
                'partner_id': self.partner_id.id,
            })
            name = product_lang.display_name
            if product_lang.description_purchase:
                name += '\n' + product_lang.description_purchase
 
            vals = {
                'product_id': product.id,
                'name': name,
                'date_planned': fields.Datetime.now(),
                'product_uom': product.uom_po_id.id,
                'product_qty': 1,
                'price_unit': product.standard_price,
                'state': 'draft',
            }
 
            self.order_line += self.order_line.new(vals)
 
    def on_barcode_scanned(self, barcode):
        product = self.env['product.product'].search([('barcode', '=', barcode)])
        if product:
            self._add_product(product)

  

3.增加js代码,使得前端获取条码:

odoo.define('purchase_barcode.PurchaseOrderBarcodeHandler', function (require) {
    "use strict";
 
    var field_registry = require('web.field_registry');
    var AbstractField = require('web.AbstractField');
    var FormController = require('web.FormController');
 
    FormController.include({
        _barcodePurchaseAddRecordId: 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 PurchaseOrderBarcodeHandler = AbstractField.extend({
        init: function () {
            this._super.apply(this, arguments);
 
            this.trigger_up('activeBarcode', {
                name: this.name,
                fieldName: 'order_line',
                quantity: 'product_qty',
                setQuantityWithKeypress: true,
                commands: {
                    // 'O-CMD.MAIN-MENU': _.bind(this.do_action, this, 'stock_barcode.stock_barcode_action_main_menu', {clear_breadcrumbs: true}),
                    barcode: '_barcodePurchaseAddRecordId',
                }
            });
        },
    });
 
    field_registry.add('purchaseorder_barcode_handler', PurchaseOrderBarcodeHandler);
 
});

  

4.扩展purchase order view 部分,

<record id="view_purchase_order_barcode_inherit_form" model="ir.ui.view">
    <field name="name">purchase.order.form</field>
    <field name="model">purchase.order</field>
    <field name="inherit_id" ref="purchase.purchase_order_form"/>
    <field name="priority" eval="8"/>
    <field name="arch" type="xml">
        <form position="inside">
            <field name="_barcode_scanned" widget="purchaseorder_barcode_handler"/>
        </form>
 
        <xpath expr="//field[@name='order_line']/tree" position="inside">
            <field name="product_barcode" invisible="1"/>
        </xpath>
        <xpath expr="//field[@name='order_line']/kanban" position="inside">
            <field name="product_barcode" invisible="1"/>
        </xpath>
        <xpath expr="//field[@name='order_line']//field[@name='product_qty']" position="attributes">
            <attribute name="options">{'barcode_events': True}</attribute>
            <attribute name="widget">field_float_scannable</attribute>
        </xpath>
        <xpath expr="//button[@name='button_confirm']" position="attributes">
            <attribute name="barcode_trigger">validate</attribute>
        </xpath>
    </field>
</record>

  

这样,就可以在界面上直接用扫描枪扫码增加订单明细了。

 

标签:purchase,扫码,barcode,product,id,订单,Odoo,line,order
From: https://www.cnblogs.com/pythonClub/p/17688318.html

相关文章

  • odoo16 实现扫码枪连续扫描功能
    其实要实现这个功能很简单,只要在前端js里监控扫码字段的change事件。当满足要求,调用保存按钮的click方法,自动保存。这样扫码工人就不需要操作电脑了,可是由于对odoo前段代码不熟悉,这么个小功能花了我一周左右的时间,虽然问题解决了,但是实现的方式很暴力。不管怎么样,先解决问题再说......
  • odoo使用扫码枪
    odoo原生有一个扫码枪的模块叫做“barcodes”,这个模块中定义了一个类“'barcodes.barcode_events_mixin”,简单的处理扫码事件使用起来还是很方便的。简单说一下使用过程:首先安装“barcodes”这个模块,在自己的模型中继承“'barcodes.barcode_events_mixin”,然后再扫码的form视图......
  • PHP 网页扫码登录 , 推送模板消息
    缘由:因为老板要做个PC端的微信扫码绑定登录,关注公众号,推送模板消息的功能框架:ThinkPHP5功能:实现扫码微信公众号授权登录绑定,推送模板消息1.正式配置准备:微信公众号(必须申请了服务号) Appid, AppSecret配置:微信公众平台修改: 授权回调地址域名......
  • odoo 如何传递context到name_get 方法
    xml需要按照如下写法:看move_id字段,要点是要在关键字前边加一个default_,这个本来是用来创建时指定默认值的,目前就这么用吧<treeeditable="top"create="0"><fieldname="product_id"options="{'no_create�......
  • 淘宝订单信息获取接口,淘宝订单信息获取API
    在日常电商软件开发的工作中,我们经常会遇到需要淘宝的订单信息的场景,比如:打单、发货,又比如做BI工具等。这就需要用到淘宝订单信息获取接口。只有获取到淘宝订单信息,才能进行下一步工作。获取淘宝订单信息,我们可以从淘宝开放平台上调用相关接口(相关接口当前可能不允许申请或者申请......
  • ODOO 科目配置4
    启用 斯托诺会计不启用 Anglo-SaxonAccounting常规作业能满足,另外需要下面三个二开: 1.报废科目的定义2.库存盘点科目的定义3.价值重估科目的定义.      ......
  • odoo科目配置3
    启用 斯托诺会计 不启用 Anglo-SaxonAccounting      ......
  • mybatis级联查询一对多(查询用户和多个订单)
    和一对一级联方法一样,在resultMap标签中添加<associattion>标签添加封装的属性字段,以及select方法和绑定的id。然后select语句添加查询id应该为对应的user_id,而不是本身的主键id否则任然是一对一的关系。思想和一对一级联是一样的,所以只需要注意接口中定义的返回类型使用List数......
  • 抖音订单推送设计思路-基于支付ID而不是订单号来推送
    抖音订单推送设计思路-基于支付ID而不是订单号来推送方案:不是基于订单号来核销和分账的,抖音是基于每一笔抖音支付来做订单推送,核销和分账现象:这样会在抖音的订单中心中会出现很多条订单推送的记录。抖音App订单列表状态如下:待支付,已取消,已支付,已核销抖音文档地址订单同步htt......
  • 怎么找到真实可用的淘宝拼多多京东API?(商品数据订单数据销量价格接口)
    要找到真实可用的淘宝、拼多多、京东API,可以采取以下步骤:打开相应电商平台的开放平台网站,例如淘宝开放平台、拼多多开放平台、京东开放平台等。在网站中注册并登录,找到API文档或开发者文档等页面。在文档中搜索与所需功能相关的API接口,了解接口的使用方法、请求参数、返回数据格......