可以再次下载 :Odoo 销售扫码
很多人都说从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 部分,
purchase.order.form
purchase.order
{'barcode_events': True}
field_float_scannable
validate
这样,就可以在界面上直接用扫描枪扫码增加订单明细了。
转帖请注明一下内容:
山西清水欧度信息技术有限公司
专业Odoo服务技术支持
QQ:54773801
微信:linjun186349