[开发技巧]给odoo表单页面添加扫码功能

需求描述:

一个产品是一品一码的,并且通过“制造”的形式进行贴贴入库。当一次生产的产品过多时,系统在”一品一码“操作的时候,操作的时候需要频繁的创建”唯一编码”,确认”生产”.

需求场景:

  1. 提前将该产品的本次生产需要的条码先生成。打印出来。(其中一个目的是,可以打印一些特殊的的标签,比如防水镀膜)
  2. 改生产过程使用扫描枪进行扫码录入。默认进行生产操作。 

实现方案:

  1. 使用扫码枪,需要继承模型”barcodes.barcode_events_mixin”,xml文件使用”_barcode_scanned”字段。实现方法”on_barcode_scanned”.
  2. barcodes.barcode_events_mixin : 是扫码相关的抽象模型,继承后,可以实现扫码功能。
  3. “_barcode_scanned” 字段: 用于xml(页面)承接扫码功能的内容输入.
  4. “on_barcode_scanned” 方法: 用于处理扫码后的编码的处理。
  5. 扫码后,自动触发”继续”按钮,进入下一个贴码。

代码实现:


class MrpProductProduce (models.TransientModel):
   _name = 'mrp.product.produce'
   _inherit = ['mrp.product.produce', 'barcodes.barcode_events_mixin']

   def on_barcode_scanned(self, barcode):
   # 查询
    production_lot = self.env['stock.production.lot'].search([('name','=',barcode),('product_id','=',self.product_id.id),('mrp_production_id','=',self.production_id.id)])
    if production_lot:
       self.finished_lot_id = production_lot
       return {}
    return {
     'warning':{
        'title':'编码错误',
        'message':'编码有问题{0}'.format(barcode)
     }
    }

添加视图字段

 

您可能也喜欢...

发表评论

邮箱地址不会被公开。 必填项已用*标注