[开发技巧]给odoo表单页面添加扫码功能
需求描述:
一个产品是一品一码的,并且通过“制造”的形式进行贴贴入库。当一次生产的产品过多时,系统在”一品一码“操作的时候,操作的时候需要频繁的创建”唯一编码”,确认”生产”.
需求场景:
- 提前将该产品的本次生产需要的条码先生成。打印出来。(其中一个目的是,可以打印一些特殊的的标签,比如防水镀膜)
- 改生产过程使用扫描枪进行扫码录入。默认进行生产操作。
实现方案:
- 使用扫码枪,需要继承模型”barcodes.barcode_events_mixin”,xml文件使用”_barcode_scanned”字段。实现方法”on_barcode_scanned”.
- barcodes.barcode_events_mixin : 是扫码相关的抽象模型,继承后,可以实现扫码功能。
- “_barcode_scanned” 字段: 用于xml(页面)承接扫码功能的内容输入.
- “on_barcode_scanned” 方法: 用于处理扫码后的编码的处理。
- 扫码后,自动触发”继续”按钮,进入下一个贴码。
代码实现:
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)
}
}
添加视图字段
近期评论