76 lines
2.9 KiB
JavaScript
76 lines
2.9 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import * as BarcodeScanner from '@web/webclient/barcode/barcode_scanner';
|
|
import { bus } from 'web.core';
|
|
import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
|
|
import { registry } from "@web/core/registry";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
|
|
const { Component, onMounted, onWillUnmount, onWillStart, useState } = owl;
|
|
|
|
export class MainMenu extends Component {
|
|
setup() {
|
|
const displayDemoMessage = this.props.action.params.message_demo_barcodes;
|
|
const user = useService('user');
|
|
this.actionService = useService('action');
|
|
this.dialogService = useService('dialog');
|
|
this.home = useService("home_menu");
|
|
this.notificationService = useService("notification");
|
|
this.rpc = useService('rpc');
|
|
this.state = useState({ displayDemoMessage });
|
|
|
|
this.mobileScanner = BarcodeScanner.isBarcodeScannerSupported();
|
|
|
|
onWillStart(async () => {
|
|
this.locationsEnabled = await user.hasGroup('stock.group_stock_multi_locations');
|
|
this.packagesEnabled = await user.hasGroup('stock.group_tracking_lot');
|
|
});
|
|
onMounted(() => {
|
|
bus.on('barcode_scanned', this, this._onBarcodeScanned);
|
|
});
|
|
onWillUnmount(() => {
|
|
bus.off('barcode_scanned', this, this._onBarcodeScanned);
|
|
});
|
|
}
|
|
|
|
async openMobileScanner() {
|
|
const barcode = await BarcodeScanner.scanBarcode();
|
|
if (barcode){
|
|
this._onBarcodeScanned(barcode);
|
|
if ('vibrate' in window.navigator) {
|
|
window.navigator.vibrate(100);
|
|
}
|
|
} else {
|
|
this.notificationService.add(this.env._t("Please, Scan again !"), { type: 'warning' });
|
|
}
|
|
}
|
|
|
|
removeDemoMessage() {
|
|
this.state.displayDemoMessage = false;
|
|
const params = {
|
|
title: this.env._t("Don't show this message again"),
|
|
body: this.env._t("Do you want to permanently remove this message ?\
|
|
It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy."),
|
|
confirm: () => {
|
|
this.rpc('/stock_barcode/rid_of_message_demo_barcodes');
|
|
location.reload();
|
|
},
|
|
cancel: () => {},
|
|
confirmLabel: this.env._t("Remove it"),
|
|
cancelLabel: this.env._t("Leave it"),
|
|
};
|
|
this.dialogService.add(ConfirmationDialog, params);
|
|
}
|
|
|
|
async _onBarcodeScanned(barcode) {
|
|
const res = await this.rpc('/stock_barcode/scan_from_main_menu', { barcode });
|
|
if (res.action) {
|
|
return this.actionService.doAction(res.action);
|
|
}
|
|
this.notificationService.add(res.warning, { type: 'danger' });
|
|
}
|
|
}
|
|
MainMenu.template = 'stock_barcode.MainMenu';
|
|
|
|
registry.category('actions').add('stock_barcode_main_menu', MainMenu);
|