Merge branch 'master' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into release/release1.0

# Conflicts:
#	sf_base/__init__.py
#	sf_base/__manifest__.py
#	sf_base/commons/__init__.py
#	sf_base/commons/common.py
#	sf_base/models/__init__.py
#	sf_base/models/base.py
#	sf_base/models/common.py
#	sf_base/security/group_security.xml
#	sf_base/security/ir.model.access.csv
#	sf_base/views/base_view.xml
#	sf_base/views/common_view.xml
#	sf_base/views/menu_view.xml
#	sf_bf_connect/__init__.py
#	sf_bf_connect/__manifest__.py
#	sf_bf_connect/controllers/__init__.py
#	sf_bf_connect/controllers/controllers.py
#	sf_bf_connect/models/__init__.py
#	sf_bf_connect/models/http.py
#	sf_bf_connect/models/models.py
#	sf_bf_connect/models/process_status.py
#	sf_bf_connect/views/res_partner_view.xml
#	sf_dlm/__manifest__.py
#	sf_dlm/data/product_data.xml
#	sf_dlm/models/__init__.py
#	sf_dlm/models/product_supplierinfo.py
#	sf_dlm/views/product_template_view.xml
#	sf_machine_connect/__init__.py
#	sf_machine_connect/__manifest__.py
#	sf_machine_connect/models/__init__.py
#	sf_machine_connect/models/ftp_client.py
#	sf_machine_connect/models/ftp_operate.py
#	sf_machine_connect/models/py2opcua.py
#	sf_machine_connect/security/ir.model.access.csv
#	sf_machine_connect/views/SfWorkOrderBarcodes.xml
#	sf_machine_connect/views/WorkCenterBarcodes.xml
#	sf_machine_connect/views/compensation.xml
#	sf_machine_connect/views/default_delivery.xml
#	sf_machine_connect/views/delivery_record.xml
#	sf_machine_connect/views/ftp_button.xml
#	sf_machine_connect/views/machine_info_present.xml
#	sf_machine_connect/views/machine_monitor.xml
#	sf_machine_connect/wizard/__init__.py
#	sf_machine_connect/wizard/action_up.py
#	sf_manufacturing/__init__.py
#	sf_manufacturing/__manifest__.py
#	sf_manufacturing/models/__init__.py
#	sf_manufacturing/models/model_type.py
#	sf_manufacturing/models/mrp_maintenance.py
#	sf_manufacturing/models/mrp_production.py
#	sf_manufacturing/models/mrp_routing_workcenter.py
#	sf_manufacturing/models/mrp_workcenter.py
#	sf_manufacturing/models/mrp_workorder.py
#	sf_manufacturing/models/res_user.py
#	sf_manufacturing/models/stock.py
#	sf_manufacturing/security/group_security.xml
#	sf_manufacturing/security/ir.model.access.csv
#	sf_manufacturing/views/model_type_view.xml
#	sf_manufacturing/views/mrp_routing_workcenter_view.xml
#	sf_manufacturing/views/mrp_workcenter_views.xml
#	sf_manufacturing/views/mrp_workorder_view.xml
#	sf_mrs_connect/__init__.py
#	sf_mrs_connect/__manifest__.py
#	sf_mrs_connect/controllers/controllers.py
#	sf_mrs_connect/data/ir_cron_data.xml
#	sf_mrs_connect/models/__init__.py
#	sf_mrs_connect/models/ftp_operate.py
#	sf_mrs_connect/models/res_config_setting.py
#	sf_mrs_connect/models/sync_common.py
#	sf_mrs_connect/views/res_config_settings_views.xml
#	sf_sale/__init__.py
#	sf_sale/__manifest__.py
#	sf_sale/models/__init__.py
#	sf_sale/models/sale_order.py
#	sf_sale/views/sale_order_view.xml
#	yizuo_login_background_and_styles/__manifest__.py
#	yizuo_login_background_and_styles/controllers/main.py
#	yizuo_login_background_and_styles/models/login_image.py
#	yizuo_login_background_and_styles/models/res_config_settings.py
This commit is contained in:
mgw
2024-05-18 22:39:05 +08:00
161 changed files with 6351 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
/** @odoo-module **/
import { browser } from "@web/core/browser/browser";
import { Dialog } from "@web/core/dialog/dialog";
import { _lt } from "@web/core/l10n/translation";
import { useChildRef, useOwnedDialogs, useService } from "@web/core/utils/hooks";
import { sprintf } from "@web/core/utils/strings";
import { isMobileOS } from "@web/core/browser/feature_detection";
import * as BarcodeScanner from "@web/webclient/barcode/barcode_scanner";
const {xml, Component} = owl;
import { standardFieldProps } from "@web/views/fields/standard_field_props";
// Import the registry
import {registry} from "@web/core/registry";
export class CodeField extends Component {
setup() {
super.setup();
}
async onBarcodeBtnClick() {
const barcode = await BarcodeScanner.scanBarcode();
if (barcode) {
await this.onBarcodeScanned(barcode);
if ("vibrate" in browser.navigator) {
browser.navigator.vibrate(100);
}
} else {
this.notification.add(this.env._t("Please, scan again !"), {
type: "warning",
});
}
}
async search(barcode) {
const results = await this.orm.call("sf.tray", "name_search", [code], {
name: barcode,
args: this.getDomain(),
operator: "ilike",
limit: 2, // If one result we set directly and if more than one we use normal flow so no need to search more
context: this.context,
});
return results.map((result) => {
const [id, displayName] = result;
return {
id,
name: displayName,
};
});
}
async onBarcodeScanned(barcode) {
const results = await this.search(barcode);
const records = results.filter((r) => !!r.id);
if (records.length === 1) {
this.update([{ id: records[0].id, name: records[0].name }]);
} else {
const searchInput = this.autocompleteContainerRef.el.querySelector("input");
searchInput.value = barcode;
searchInput.dispatchEvent(new Event("input"));
if (this.env.isSmall) {
searchInput.click();
}
}
}
}
CodeField.template = xml`
<button
t-on-click="onBarcodeBtnClick"
type="button"
class="btn ms-3 o_barcode"
tabindex="-1"
draggable="false"
aria-label="Scan barcode"
title="Scan barcode"
data-tooltip="Scan barcode"
/>
`;
// CodeField.template = 'sf_machine_connect.CodeField';
CodeField.props = standardFieldProps;
// Add the field to the correct category
registry.category("fields").add("code", CodeField);