diff --git a/sh_global_search/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml similarity index 100% rename from sh_global_search/.idea/inspectionProfiles/profiles_settings.xml rename to .idea/inspectionProfiles/profiles_settings.xml diff --git a/sh_global_search/.idea/inspectionProfiles/Project_Default.xml b/sf_global_search/.idea/inspectionProfiles/Project_Default.xml similarity index 100% rename from sh_global_search/.idea/inspectionProfiles/Project_Default.xml rename to sf_global_search/.idea/inspectionProfiles/Project_Default.xml diff --git a/sf_global_search/.idea/inspectionProfiles/profiles_settings.xml b/sf_global_search/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/sf_global_search/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/sh_global_search/.idea/modules.xml b/sf_global_search/.idea/modules.xml similarity index 100% rename from sh_global_search/.idea/modules.xml rename to sf_global_search/.idea/modules.xml diff --git a/sh_global_search/.idea/sh_global_search.iml b/sf_global_search/.idea/sh_global_search.iml similarity index 100% rename from sh_global_search/.idea/sh_global_search.iml rename to sf_global_search/.idea/sh_global_search.iml diff --git a/sh_global_search/README.md b/sf_global_search/README.md similarity index 100% rename from sh_global_search/README.md rename to sf_global_search/README.md diff --git a/sh_global_search/__init__.py b/sf_global_search/__init__.py similarity index 100% rename from sh_global_search/__init__.py rename to sf_global_search/__init__.py diff --git a/sh_global_search/__manifest__.py b/sf_global_search/__manifest__.py similarity index 78% rename from sh_global_search/__manifest__.py rename to sf_global_search/__manifest__.py index 54f88288..9943484c 100644 --- a/sh_global_search/__manifest__.py +++ b/sf_global_search/__manifest__.py @@ -2,7 +2,7 @@ { "name": "机企猫 全局扫码搜索", - "author": "Softhealer Technologies", + "author": "jikimo", "website": "https://www.softhealer.com", @@ -14,7 +14,7 @@ "category": "Extra Tools", - "summary": "any data search,Easy Object Search,Quick Object Find Module, advance search,Object Using Attributes,Overall Odoo Object Search,Global Model Search,advance records search,google search,Feeds search,all in one search,search option Odoo", + "summary": "sf_global_search", "description": """ A global search used to search any object based on the configuration. You can search all object's data easily. You can also configure one to many fields. The "Global Search" is visible to all odoo users. The search box is available at the top of the menu. Search results on click redirect to that record on the new tab. You can easily perform a search on multi-company objects also we have beautifully show company name before so you can see search results related to that company, we have show object (model) nicely whenever you have search query found in multiple objects, you can very easily see the difference of different objects. It also takes care of access rights of users, if a user doesn't have any object access than it will not show that record in search results. if the user has multi-company enabled than it shows multi-company results. We have made this looks fully configurable you can easily configure what is an important object(model) and related fields of that object(model), We have made security groups for this configurations so only who have right that user only can configure this global search objects and fields, All internal users can use this global search feature. Cheers!""", @@ -29,14 +29,13 @@ A global search used to search any object based on the configuration. You can se 'assets': { 'web.assets_backend': [ - 'sh_global_search/static/src/scss/GlobalSearch.scss', - 'sh_global_search/static/src/xml/*.xml', - 'sh_global_search/static/src/js/*', + 'sf_global_search/static/src/scss/GlobalSearch.scss', + 'sf_global_search/static/src/xml/*.xml', + 'sf_global_search/static/src/js/*', ] }, "images": ["static/description/background.png", ], - "live_test_url": "https://youtu.be/rbkWI9j0XN0", "installable": True, "auto_install": False, "application": True, diff --git a/sh_global_search/doc/changelog.rst b/sf_global_search/doc/changelog.rst similarity index 100% rename from sh_global_search/doc/changelog.rst rename to sf_global_search/doc/changelog.rst diff --git a/sh_global_search/i18n/ar.po b/sf_global_search/i18n/ar.po similarity index 100% rename from sh_global_search/i18n/ar.po rename to sf_global_search/i18n/ar.po diff --git a/sh_global_search/i18n/de.po b/sf_global_search/i18n/de.po similarity index 100% rename from sh_global_search/i18n/de.po rename to sf_global_search/i18n/de.po diff --git a/sh_global_search/i18n/es.po b/sf_global_search/i18n/es.po similarity index 100% rename from sh_global_search/i18n/es.po rename to sf_global_search/i18n/es.po diff --git a/sh_global_search/i18n/fr.po b/sf_global_search/i18n/fr.po similarity index 100% rename from sh_global_search/i18n/fr.po rename to sf_global_search/i18n/fr.po diff --git a/sh_global_search/i18n/zh_HK.po b/sf_global_search/i18n/zh_HK.po similarity index 100% rename from sh_global_search/i18n/zh_HK.po rename to sf_global_search/i18n/zh_HK.po diff --git a/sh_global_search/models/__init__.py b/sf_global_search/models/__init__.py similarity index 100% rename from sh_global_search/models/__init__.py rename to sf_global_search/models/__init__.py diff --git a/sh_global_search/models/global_search.py b/sf_global_search/models/global_search.py similarity index 99% rename from sh_global_search/models/global_search.py rename to sf_global_search/models/global_search.py index 39337b7f..1f28586d 100644 --- a/sh_global_search/models/global_search.py +++ b/sf_global_search/models/global_search.py @@ -404,7 +404,7 @@ class GlobalSearchFields(models.Model): def sh_o2m_dynamic_action_action(self): if self.ttype == 'one2many': - view = self.env.ref('sh_global_search.sh_o2m_global_search_form') + view = self.env.ref('sf_global_search.sh_o2m_global_search_form') return { 'name': _('O2M Object Fields'), 'type': 'ir.actions.act_window', @@ -417,7 +417,7 @@ class GlobalSearchFields(models.Model): } else: - view = self.env.ref('sh_global_search.sh_m2o_global_search_form') + view = self.env.ref('sf_global_search.sh_m2o_global_search_form') return { 'name': _('M2O Object Fields'), 'type': 'ir.actions.act_window', diff --git a/sh_global_search/security/base_security.xml b/sf_global_search/security/base_security.xml similarity index 100% rename from sh_global_search/security/base_security.xml rename to sf_global_search/security/base_security.xml diff --git a/sh_global_search/security/ir.model.access.csv b/sf_global_search/security/ir.model.access.csv similarity index 100% rename from sh_global_search/security/ir.model.access.csv rename to sf_global_search/security/ir.model.access.csv diff --git a/sh_global_search/static/description/1.png b/sf_global_search/static/description/1.png similarity index 100% rename from sh_global_search/static/description/1.png rename to sf_global_search/static/description/1.png diff --git a/sh_global_search/static/description/10.png b/sf_global_search/static/description/10.png similarity index 100% rename from sh_global_search/static/description/10.png rename to sf_global_search/static/description/10.png diff --git a/sh_global_search/static/description/2.png b/sf_global_search/static/description/2.png similarity index 100% rename from sh_global_search/static/description/2.png rename to sf_global_search/static/description/2.png diff --git a/sh_global_search/static/description/3.png b/sf_global_search/static/description/3.png similarity index 100% rename from sh_global_search/static/description/3.png rename to sf_global_search/static/description/3.png diff --git a/sh_global_search/static/description/4.png b/sf_global_search/static/description/4.png similarity index 100% rename from sh_global_search/static/description/4.png rename to sf_global_search/static/description/4.png diff --git a/sh_global_search/static/description/5.png b/sf_global_search/static/description/5.png similarity index 100% rename from sh_global_search/static/description/5.png rename to sf_global_search/static/description/5.png diff --git a/sh_global_search/static/description/6.png b/sf_global_search/static/description/6.png similarity index 100% rename from sh_global_search/static/description/6.png rename to sf_global_search/static/description/6.png diff --git a/sh_global_search/static/description/7.png b/sf_global_search/static/description/7.png similarity index 100% rename from sh_global_search/static/description/7.png rename to sf_global_search/static/description/7.png diff --git a/sh_global_search/static/description/8.png b/sf_global_search/static/description/8.png similarity index 100% rename from sh_global_search/static/description/8.png rename to sf_global_search/static/description/8.png diff --git a/sh_global_search/static/description/9.png b/sf_global_search/static/description/9.png similarity index 100% rename from sh_global_search/static/description/9.png rename to sf_global_search/static/description/9.png diff --git a/sh_global_search/static/description/aarab.png b/sf_global_search/static/description/aarab.png similarity index 100% rename from sh_global_search/static/description/aarab.png rename to sf_global_search/static/description/aarab.png diff --git a/sh_global_search/static/description/advance.png b/sf_global_search/static/description/advance.png similarity index 100% rename from sh_global_search/static/description/advance.png rename to sf_global_search/static/description/advance.png diff --git a/sh_global_search/static/description/background.png b/sf_global_search/static/description/background.png similarity index 100% rename from sh_global_search/static/description/background.png rename to sf_global_search/static/description/background.png diff --git a/sh_global_search/static/description/bom.png b/sf_global_search/static/description/bom.png similarity index 100% rename from sh_global_search/static/description/bom.png rename to sf_global_search/static/description/bom.png diff --git a/sh_global_search/static/description/chinese.png b/sf_global_search/static/description/chinese.png similarity index 100% rename from sh_global_search/static/description/chinese.png rename to sf_global_search/static/description/chinese.png diff --git a/sh_global_search/static/description/d1.png b/sf_global_search/static/description/d1.png similarity index 100% rename from sh_global_search/static/description/d1.png rename to sf_global_search/static/description/d1.png diff --git a/sh_global_search/static/description/d2.png b/sf_global_search/static/description/d2.png similarity index 100% rename from sh_global_search/static/description/d2.png rename to sf_global_search/static/description/d2.png diff --git a/sh_global_search/static/description/d3.png b/sf_global_search/static/description/d3.png similarity index 100% rename from sh_global_search/static/description/d3.png rename to sf_global_search/static/description/d3.png diff --git a/sh_global_search/static/description/d4.png b/sf_global_search/static/description/d4.png similarity index 100% rename from sh_global_search/static/description/d4.png rename to sf_global_search/static/description/d4.png diff --git a/sh_global_search/static/description/d5.png b/sf_global_search/static/description/d5.png similarity index 100% rename from sh_global_search/static/description/d5.png rename to sf_global_search/static/description/d5.png diff --git a/sh_global_search/static/description/d6.png b/sf_global_search/static/description/d6.png similarity index 100% rename from sh_global_search/static/description/d6.png rename to sf_global_search/static/description/d6.png diff --git a/sh_global_search/static/description/email notification.png b/sf_global_search/static/description/email notification.png similarity index 100% rename from sh_global_search/static/description/email notification.png rename to sf_global_search/static/description/email notification.png diff --git a/sh_global_search/static/description/eng.png b/sf_global_search/static/description/eng.png similarity index 100% rename from sh_global_search/static/description/eng.png rename to sf_global_search/static/description/eng.png diff --git a/sh_global_search/static/description/french.png b/sf_global_search/static/description/french.png similarity index 100% rename from sh_global_search/static/description/french.png rename to sf_global_search/static/description/french.png diff --git a/sh_global_search/static/description/german.png b/sf_global_search/static/description/german.png similarity index 100% rename from sh_global_search/static/description/german.png rename to sf_global_search/static/description/german.png diff --git a/sh_global_search/static/description/heading.png b/sf_global_search/static/description/heading.png similarity index 100% rename from sh_global_search/static/description/heading.png rename to sf_global_search/static/description/heading.png diff --git a/sh_global_search/static/description/icon.png b/sf_global_search/static/description/icon.png similarity index 100% rename from sh_global_search/static/description/icon.png rename to sf_global_search/static/description/icon.png diff --git a/sh_global_search/static/description/image1.png b/sf_global_search/static/description/image1.png similarity index 100% rename from sh_global_search/static/description/image1.png rename to sf_global_search/static/description/image1.png diff --git a/sh_global_search/static/description/index.html b/sf_global_search/static/description/index.html similarity index 100% rename from sh_global_search/static/description/index.html rename to sf_global_search/static/description/index.html diff --git a/sh_global_search/static/description/info.png b/sf_global_search/static/description/info.png similarity index 100% rename from sh_global_search/static/description/info.png rename to sf_global_search/static/description/info.png diff --git a/sh_global_search/static/description/mobileapp.png b/sf_global_search/static/description/mobileapp.png similarity index 100% rename from sh_global_search/static/description/mobileapp.png rename to sf_global_search/static/description/mobileapp.png diff --git a/sh_global_search/static/description/motor.png b/sf_global_search/static/description/motor.png similarity index 100% rename from sh_global_search/static/description/motor.png rename to sf_global_search/static/description/motor.png diff --git a/sh_global_search/static/description/n1.png b/sf_global_search/static/description/n1.png similarity index 100% rename from sh_global_search/static/description/n1.png rename to sf_global_search/static/description/n1.png diff --git a/sh_global_search/static/description/n2.png b/sf_global_search/static/description/n2.png similarity index 100% rename from sh_global_search/static/description/n2.png rename to sf_global_search/static/description/n2.png diff --git a/sh_global_search/static/description/n3.png b/sf_global_search/static/description/n3.png similarity index 100% rename from sh_global_search/static/description/n3.png rename to sf_global_search/static/description/n3.png diff --git a/sh_global_search/static/description/n4.png b/sf_global_search/static/description/n4.png similarity index 100% rename from sh_global_search/static/description/n4.png rename to sf_global_search/static/description/n4.png diff --git a/sh_global_search/static/description/new email notify.png b/sf_global_search/static/description/new email notify.png similarity index 100% rename from sh_global_search/static/description/new email notify.png rename to sf_global_search/static/description/new email notify.png diff --git a/sh_global_search/static/description/overdue.png b/sf_global_search/static/description/overdue.png similarity index 100% rename from sh_global_search/static/description/overdue.png rename to sf_global_search/static/description/overdue.png diff --git a/sh_global_search/static/description/pos order email.jpg b/sf_global_search/static/description/pos order email.jpg similarity index 100% rename from sh_global_search/static/description/pos order email.jpg rename to sf_global_search/static/description/pos order email.jpg diff --git a/sh_global_search/static/description/purchase.png b/sf_global_search/static/description/purchase.png similarity index 100% rename from sh_global_search/static/description/purchase.png rename to sf_global_search/static/description/purchase.png diff --git a/sh_global_search/static/description/s1.png b/sf_global_search/static/description/s1.png similarity index 100% rename from sh_global_search/static/description/s1.png rename to sf_global_search/static/description/s1.png diff --git a/sh_global_search/static/description/s2.png b/sf_global_search/static/description/s2.png similarity index 100% rename from sh_global_search/static/description/s2.png rename to sf_global_search/static/description/s2.png diff --git a/sh_global_search/static/description/sale.png b/sf_global_search/static/description/sale.png similarity index 100% rename from sh_global_search/static/description/sale.png rename to sf_global_search/static/description/sale.png diff --git a/sh_global_search/static/description/setting.png b/sf_global_search/static/description/setting.png similarity index 100% rename from sh_global_search/static/description/setting.png rename to sf_global_search/static/description/setting.png diff --git a/sh_global_search/static/description/sh_helpdesk.png b/sf_global_search/static/description/sh_helpdesk.png similarity index 100% rename from sh_global_search/static/description/sh_helpdesk.png rename to sf_global_search/static/description/sh_helpdesk.png diff --git a/sh_global_search/static/description/softhealer.png b/sf_global_search/static/description/softhealer.png similarity index 100% rename from sh_global_search/static/description/softhealer.png rename to sf_global_search/static/description/softhealer.png diff --git a/sh_global_search/static/description/spanish.jpg b/sf_global_search/static/description/spanish.jpg similarity index 100% rename from sh_global_search/static/description/spanish.jpg rename to sf_global_search/static/description/spanish.jpg diff --git a/sh_global_search/static/description/ssss.png b/sf_global_search/static/description/ssss.png similarity index 100% rename from sh_global_search/static/description/ssss.png rename to sf_global_search/static/description/ssss.png diff --git a/sh_global_search/static/description/stock.png b/sf_global_search/static/description/stock.png similarity index 100% rename from sh_global_search/static/description/stock.png rename to sf_global_search/static/description/stock.png diff --git a/sh_global_search/static/description/user.png b/sf_global_search/static/description/user.png similarity index 100% rename from sh_global_search/static/description/user.png rename to sf_global_search/static/description/user.png diff --git a/sh_global_search/static/description/vd_btn.png b/sf_global_search/static/description/vd_btn.png similarity index 100% rename from sh_global_search/static/description/vd_btn.png rename to sf_global_search/static/description/vd_btn.png diff --git a/sh_global_search/static/src/img/barcode.png b/sf_global_search/static/src/img/barcode.png similarity index 100% rename from sh_global_search/static/src/img/barcode.png rename to sf_global_search/static/src/img/barcode.png diff --git a/sh_global_search/static/src/js/GlobalSearch.js b/sf_global_search/static/src/js/GlobalSearch.js similarity index 100% rename from sh_global_search/static/src/js/GlobalSearch.js rename to sf_global_search/static/src/js/GlobalSearch.js diff --git a/sh_global_search/static/src/scss/GlobalSearch.scss b/sf_global_search/static/src/scss/GlobalSearch.scss similarity index 100% rename from sh_global_search/static/src/scss/GlobalSearch.scss rename to sf_global_search/static/src/scss/GlobalSearch.scss diff --git a/sh_global_search/static/src/xml/GlobalSearch.xml b/sf_global_search/static/src/xml/GlobalSearch.xml similarity index 98% rename from sh_global_search/static/src/xml/GlobalSearch.xml rename to sf_global_search/static/src/xml/GlobalSearch.xml index d86413ce..9d8e867d 100644 --- a/sh_global_search/static/src/xml/GlobalSearch.xml +++ b/sf_global_search/static/src/xml/GlobalSearch.xml @@ -13,7 +13,7 @@ +
diff --git a/sh_global_search/views/global_search_view.xml b/sf_global_search/views/global_search_view.xml similarity index 98% rename from sh_global_search/views/global_search_view.xml rename to sf_global_search/views/global_search_view.xml index 2c5cc29a..dc69ace7 100644 --- a/sh_global_search/views/global_search_view.xml +++ b/sf_global_search/views/global_search_view.xml @@ -143,6 +143,6 @@ tree,form - + diff --git a/sf_machine_connect/__manifest__.py b/sf_machine_connect/__manifest__.py index f63a1fd5..98fdb394 100644 --- a/sf_machine_connect/__manifest__.py +++ b/sf_machine_connect/__manifest__.py @@ -12,7 +12,7 @@ 'category': 'sf', 'author': 'jikimo', 'website': 'https://sf.cs.jikimo.com', - 'depends': ['sf_manufacturing', 'barcodes', ], + 'depends': ['web', 'mail', 'sf_base', 'sf_manufacturing', 'barcodes', ], 'data': [ # 定义权限组放在最上面 # 权限组 @@ -31,13 +31,15 @@ 'views/delivery_record.xml', ], - 'assets': { - 'web.assets_backend': [ - 'sf_machine_connect/static/src/js/*' + 'web.assets_backend': [ + 'sf_machine_connect/static/src/xml/barcode_button.xml', + 'sf_machine_connect/static/src/js/barcode_button.js', + 'sf_machine_connect/static/src/css/barcode_button.css', ], + }, - 'license': 'LGPL-3', + 'installable': True, 'application': True, # 'auto_install': False, diff --git a/sf_machine_connect/models/ftp_client.py b/sf_machine_connect/models/ftp_client.py index 9236f86e..ca1fc42e 100644 --- a/sf_machine_connect/models/ftp_client.py +++ b/sf_machine_connect/models/ftp_client.py @@ -180,7 +180,6 @@ class Machine_ftp(models.Model): machine_system_time = fields.Char('机床系统时间') machine_alarm_msg = fields.Char('机床系统报警') - # 刀位配置 tool_num1 = fields.Char('刀位1') tool_num2 = fields.Char('刀位2') @@ -511,7 +510,9 @@ class WorkCenterBarcode(models.Model): workorder_obj_target = self.env['mrp.workorder'].sudo().search([('tray_code', '=', barcode)]) workorder_obj_current = self.env['mrp.workorder'].sudo().search([('id', '=', kwargs['current_id'])]) # workorder_cnc = self.env['mrp.workorder'].sudo().search(['&', ('production_id', '=', workorder_obj.production_id.id), ('name', '=', 'CNC加工')]) - workorder_cnc = self.env['mrp.workorder'].sudo().search(['&', ('production_id', '=', workorder_obj_target.production_id.id), ('name', '=', workorder_obj_current.name)]) + workorder_cnc = self.env['mrp.workorder'].sudo().search( + ['&', ('production_id', '=', workorder_obj_target.production_id.id), + ('name', '=', workorder_obj_current.name)]) print('222222222222222222222222') if workorder_obj_target: print(workorder_obj_target) @@ -526,7 +527,8 @@ class WorkCenterBarcode(models.Model): 'view_id': request.env.ref('mrp.mrp_production_workorder_form_view_inherit').id, 'res_id': workorder_cnc.id, 'target': 'current', - 'context': {'id': workorder_obj_target.id}, + 'context': {'id': workorder_obj_target.id, + 'clear_breadcrumbs': True, }, # 'flags': {'initial_mode': 'edit'}, } action = {'result': action, 'error': '返回错误'} @@ -577,3 +579,4 @@ class DeliveryRecord(models.Model): # return super().create(values) # except: # raise Exception('b_purchase_order.py:create()') + diff --git a/sf_machine_connect/static/src/css/barcode_button.css b/sf_machine_connect/static/src/css/barcode_button.css new file mode 100644 index 00000000..c5bdad35 --- /dev/null +++ b/sf_machine_connect/static/src/css/barcode_button.css @@ -0,0 +1,4 @@ + +.barcode_button { + outline: none; +} diff --git a/sf_machine_connect/static/src/js/barcode_button.js b/sf_machine_connect/static/src/js/barcode_button.js new file mode 100644 index 00000000..8bd48d65 --- /dev/null +++ b/sf_machine_connect/static/src/js/barcode_button.js @@ -0,0 +1,126 @@ +/** @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 { useRef } = owl; +const {xml, Component} = owl; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; +import {registry} from "@web/core/registry"; +import {useInputField} from "@web/views/fields/input_field_hook"; + +export class CodeField extends Component { + setup() { + console.log('CodeField created') + console.log('this',this) + console.log('this.props',this.props) + console.log('this.props.record',this.props.value) + useInputField({ + getValue: () => this.props.value, + refName: "scan_code", + }); + console.log('我是setup1') + super.setup(); + this.orm = this.env.services.orm; + this.record = this.props.record; + } + + 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) { + // alert('我是search') + const domain = [["code", "=", barcode]]; + console.log(domain) + const fields = ["id", "code", "name", "state"]; + console.log(fields) + const results = await this.orm.call("sf.tray", "search_read", [domain, fields]); + const values = await this.orm.call("sf.tray", "search_read", [domain]); + console.log(results) + return results.map((result) => { + return { + id: result.id, + code: result.code, + name: result.name, + state: result.state, + values: values, + }; + }); + } + async onBarcodeScanned(barcode) { + const results = await this.search(barcode); + console.log(results) + const records = results.filter((r) => !!r.id); + console.log(records) + if (records.length === 1) { + if (records[0].state === '空闲') { + console.log('currentModel',this) + console.log('this.record.data',this.record.data) + console.log('this.record.data.id', this.record.data.id) + const workorder = await this.orm.call('mrp.workorder', 'read', [this.record.data.id]); + console.log('workorder', workorder[0]) + const updatedRecord = await this.orm.call("sf.tray", "write", [ + [records[0].id], + { + state: "占用", + workorder_id: workorder[0].id, + production_id: workorder[0].product_id[0], + // workorder_id: workorder.id, + }]); + console.log(workorder[0].routing_type); + console.log(workorder[0].production_id); + // const productionIDS = await this.orm.call('mrp.production', 'search', [[['id', '=', workorder[0].production_id[0]]]]); + const productionIDS = await this.orm.call('mrp.workorder', 'search', [[["production_id", "=", workorder[0].production_id[0]]]]); + console.log('prooooooo', productionIDS); + console.log('values', records[0].values[0]); + productionIDS.forEach(async (data) => { + // 处理每一个数据 + console.log(data); + const updatetrayRecord = await this.orm.call("mrp.workorder", "write", [ + [data], + { + tray_id: records[0].values[0].id, + // tray_id: false, + }]); + console.log(updatetrayRecord) + }); + this.props.update(records[0].code, records[0].tray_id); + location.replace(location.href) + // location.reload() + } else { + if (records[0].state === '占用') { + console.log('此托盘已占用,请检查') + alert('此托盘已占用,请检查') + } else { + console.log('此托盘已损坏,请登记') + } + } + + } else { + const searchInput = this.autocompleteContainerRef.el.querySelector("input"); + searchInput.value = barcode; + searchInput.dispatchEvent(new Event("input")); + if (this.env.isSmall) { + searchInput.click(); + } + } + } +} +CodeField.template = 'sf_machine_connect.CodeField' +// Register the field in the registry +CodeField.props = standardFieldProps; +registry.category("fields").add("code", CodeField); diff --git a/sf_machine_connect/static/src/js/barcode_form.js b/sf_machine_connect/static/src/js/barcode_form.js new file mode 100644 index 00000000..d8c898ae --- /dev/null +++ b/sf_machine_connect/static/src/js/barcode_form.js @@ -0,0 +1,51 @@ +odoo.define('my_module.barcode_handler', function (require) { + "use strict"; + + var core = require('web.core'); + var registry = require('web.field_registry'); + var session = require('web.session'); + var FieldChar = require('web.basic_fields').FieldChar; + + var _t = core._t; + + var BarcodeHandlerField = FieldChar.extend({ + init: function () { + this._super.apply(this, arguments); + this.scanInProgress = false; + }, + willStart: function () { + return this._super.apply(this, arguments).then(() => { + var barcode = this.call('barcode', 'get_barcode'); + if (barcode) { + this._onBarcodeScanned(barcode); + } + this.call('barcode', 'start_listening'); + }); + }, + destroy: function () { + this.call('barcode', 'stop_listening'); + this._super.apply(this, arguments); + }, + _onBarcodeScanned: function (barcode) { + if (this.scanInProgress) { + return; + } + this.scanInProgress = true; + var self = this; + session.rpc('/mrp_barcode/scan_to_open_report_from_form', { barcode: barcode }).then(function (result) { + self.scanInProgress = false; + self.$el.val(result); + self.trigger_up('field_changed', { + dataPointID: self.dataPointID, + changes: { value: result }, + }); + }); + }, + }); + + registry.add('barcode_handlerr', BarcodeHandlerField); + + return { + BarcodeHandlerField: BarcodeHandlerField, + }; +}); \ No newline at end of file diff --git a/sf_machine_connect/static/src/js/barcode_handler_field.js b/sf_machine_connect/static/src/js/barcode_handler_field.js new file mode 100644 index 00000000..020cc5d4 --- /dev/null +++ b/sf_machine_connect/static/src/js/barcode_handler_field.js @@ -0,0 +1,77 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; +import { useBus, useService } from "@web/core/utils/hooks"; +const { Component, xml } = owl; + + +export class BarcodeHandlerField extends Component { + setup() { + console.log('99999999111'); + this.actionService = useService("action") + console.log(this.actionService) + + const barcode = useService("barcode"); + // this.rpc = useService("rpc"); + // useBus(barcode.bus, "barcode_scanned", this.onBarcodeScanned.bind(this)); + useBus(barcode.bus, "barcode_scanned", this.onBarcodeScanned.bind(this)); + } + async _rpc(params) { + // const { data } = await this.env.services.rpc('/web/dataset/call_kw', params); + const response = await this.env.services.rpc('/web/dataset/call_kw', params); + console.log('response', response); + console.log('response.result', response.result); + + // return response + const responseObject = JSON.parse(response) + return responseObject; + } + + async onBarcodeScanned(event) { + const { barcode } = event.detail; + this.props.update(barcode); + // const actionService = useService("action"); + // const productId = 12345 + console.log('111222222222211111'); + + // 根据条形码获取相关数据,例如产品ID + const response = await this._rpc({ + model: 'mrp.workorder', + method: 'get_product_id_by_barcode', + args: [barcode], + kwargs:{}, + }); + // console.log(productId.result) + if (response.result) { + const action = response.result; + console.log(action) + console.log('11111111111111111111111111111111111'); + // 通过产品ID执行操作并跳转到表单视图 + // await this.actionService.doAction({ + // // type: 'ir.actions.act_window', + // // res_model: 'product.product', + // // res_id: productId, + // // views: [[false, 'form']], + // // target: 'current', + // 'name': '工单', + // 'type': 'ir.actions.act_window', + // 'views': [[false, 'form']], + // 'view_mode': 'form', + // 'res_model': 'mrp.workorder', + // 'view_id': 918, + // 'res_id': 1023, + // 'target': 'current', + // }); + await this.actionService.doAction(response.result); + } else { + console.error("Barcode not found or RPC call failed."); + } + } + +} + +BarcodeHandlerField.template = xml``; +BarcodeHandlerField.props = { ...standardFieldProps }; + +registry.category("fields").add("barcode_handlerrr", BarcodeHandlerField); diff --git a/sf_machine_connect/static/src/js/test.js b/sf_machine_connect/static/src/js/test.js deleted file mode 100644 index 1e160c60..00000000 --- a/sf_machine_connect/static/src/js/test.js +++ /dev/null @@ -1,254 +0,0 @@ -// /** @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` -//
-`; -// CodeField.template = 'sf_machine_connect.CodeField'; -CodeField.props = standardFieldProps; - -// Add the field to the correct category -registry.category("fields").add("code", CodeField); - -// style="position: relative; left: 200px;" \ No newline at end of file diff --git a/sf_machine_connect/static/src/xml/barcode_button.xml b/sf_machine_connect/static/src/xml/barcode_button.xml new file mode 100644 index 00000000..215f4cd0 --- /dev/null +++ b/sf_machine_connect/static/src/xml/barcode_button.xml @@ -0,0 +1,19 @@ + + + +
+ +
+ +
diff --git a/sf_machine_connect/views/SfWorkOrderBarcodes.xml b/sf_machine_connect/views/SfWorkOrderBarcodes.xml index fbdbc43c..7c40593b 100644 --- a/sf_machine_connect/views/SfWorkOrderBarcodes.xml +++ b/sf_machine_connect/views/SfWorkOrderBarcodes.xml @@ -15,6 +15,10 @@ + + + + \ No newline at end of file