Próbuję dodać skaner kodów kreskowych na górze modułu Inventory (w górnej części kompletacji, aby być bardziej szczegółowym). Za każdym razem, gdy kod kreskowy jest skanowany w widoku kompletacji, należy dodać jeden gotowy produkt, jeśli można znaleźć jego kod kreskowy. Napisałem rozszerzenie dla 'web.AbstractAction' (jako przykład wziąłem moduł Attendance), ale nie można do niego dotrzeć z wnętrza widoku pobierania. Wyraźnie brakuje mi punktu, w którym muszę określić jakieś ustawienie, ale nie wiem, gdzie i oficjalna dokumentacja nie może zadać mojego pytania.
Oto cały mój kod dotyczący tego zadania:
static/js/barcode_scanner.js
odoo.define('stock.barcode_scanner', function(require) {
'use sctrict';
var AbstractAction = require('web.AbstractAction');
var core = require('web.core');
var BarcodeAction = AbstractAction.extend({
start: function() {
var self = this;
core.bus.on('barcode_scanned', this, this._onBarcodeScanned);
return this._super();
// .then(function() {
// if (self.message_demo_barcodes) {
// self.setup_message_demo_barcodes();
// }
// });
},
destroy: function () {
core.bus.off('barcode_scanned', this, this._onBarcodeScanned);
this._super();
},
_onBarcodeScanned: function(barcode) {
var self = this;
core.bus.off('barcode_scanned', this, this._onBarcodeScanned);
this._rpc({
model: 'stock.picking',
method: 'product_scan',
args: [barcode, ],
})
.then(function (result) {
if (result.action) {
self.do_action(result.action);
} else if (result.warning) {
self.do_warn(result.warning);
core.bus.on('barcode_scanned', self, self._onBarcodeScanned);
}
}, function () {
core.bus.on('barcode_scanned', self, self._onBarcodeScanned);
});
},
});
core.action_registry.add('stock_barcode_scanner', BarcodeAction);
return {
BarcodeAction: BarcodeAction,
};
});
models/stock_picking.py
import logging
from odoo import models, api, _
_logger = logging.getLogger(__name__)
class Picking(models.Model):
_inherit = "stock.picking"
_description = "Extended Picking"
@api.model
def product_scan(self, barcode):
_logger.info("i'm trying {}".format(barcode))
return {'warning': _('%(barcode)s scanned') % {'barcode': barcode}}
views/stock_picking_views.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="stock_barcode_scanner_action" model="ir.actions.client">
<field name="name">Pickings</field>
<field name="tag">stock_barcode_scanner</field>
<field name="target">fullscreen</field>
</record>
</data>
</odoo>
views/web_asset_backend_template.xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend" name="nickel_inventory assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/nickel_inventory/static/js/barcode_scanner.js"></script>
</xpath>
</template>
</odoo>
__manifest__.py
# -*- coding: utf-8 -*-
{
'name': "nickel_inventory",
'summary': """
""",
'description': """
""",
'author': "",
'website': "",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/13.0/odoo/addons/base/data/ir_module_category_data.xml
# for the full list
'category': 'Sales/Sales',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base', 'product', 'stock'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'views/product_views.xml',
'views/stock_picking_views.xml',
'views/web_asset_backend_template.xml',
],
# only loaded in demonstration mode
'demo': [],
'installable': True,
}
Czego mi brakuje? Czy to naprawdę działa na widokach odoo, czy mogę go używać tylko w widokach struktury js?
1 odpowiedź
Jeśli ktoś jest ciekawy, jak to rozwiązałem - dodałem wiązanie do pozycji menu. W moim przypadku odoo otwiera czystą białą stronę i nasłuchuje klawiatury.
views/stock_picking_views.xml
:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="stock_barcode_scanner_action" model="ir.actions.client">
<field name="name">Pickings</field>
<field name="tag">stock_barcode_scanner</field>
<field name="target">fullscreen</field>
</record>
<menuitem id="menu_stock_barcode_scanner" name="Barcode scanner" sequence="20" action="stock_barcode_scanner_action"/>
</data>
</odoo>
Następnym krokiem jest wypełnienie tej pustej strony przydatnymi formularzami i logiką.
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.