From 4c9fbab4712704498dc75e9bcd00d663a575c502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E7=84=B1?= Date: Mon, 8 Apr 2024 17:17:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=B6=E9=80=A0?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=AD=90=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/js/custom_form_status_indicator.js | 57 ++++++++----------- .../static/src/scss/custom_style.scss | 12 ++++ sf_base/static/src/scss/test.scss | 3 + sf_base/views/common_view.xml | 2 +- 4 files changed, 40 insertions(+), 34 deletions(-) diff --git a/jikimo_frontend/static/src/js/custom_form_status_indicator.js b/jikimo_frontend/static/src/js/custom_form_status_indicator.js index 7db13b4b..100542b8 100644 --- a/jikimo_frontend/static/src/js/custom_form_status_indicator.js +++ b/jikimo_frontend/static/src/js/custom_form_status_indicator.js @@ -4,6 +4,7 @@ import {patch} from '@web/core/utils/patch'; // import { Dialog } from "@web/core/dialog/dialog"; import {_t} from "@web/core/l10n/translation"; import {FormStatusIndicator} from "@web/views/form/form_status_indicator/form_status_indicator"; +import {ListRenderer} from "@web/views/list/list_renderer"; import {Field} from "@web/views/fields/field"; @@ -45,6 +46,11 @@ const filedRequiredList = { 'date_planned_start': { multiple: false, noLabel: false }, 'date_planned_finished': { multiple: false, noLabel: false }, } +const tableRequiredList = [ + 'product_template_id', 'product_uom_qty', 'price_unit','product_id','product_qty', + 'name', 'fault_type', 'maintenance_standards', 'Period' +] + patch(FormStatusIndicator.prototype, 'jikimo_frontend.FormStatusIndicator', { // 你可以重写或者添加一些方法和属性 async _onDiscardChanges() { @@ -110,7 +116,24 @@ patch(Field.prototype, 'jikimo_frontend.Field', { } } }) - +patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { + setup(){ + owl.onMounted(() => { + this.activeElement = this.uiService.activeElement; + this.setRequired() + }) + return this._super(...arguments); + }, + setRequired() { + this.allColumns.forEach(_ => { + if( tableRequiredList.indexOf(_.name) >= 0 ) { + const dom = $(`th[data-name=${_.name}]`) + let t = dom.html() + dom.html('*' + t) + } + }) + } +}) $(function () { document.addEventListener('click', function () { @@ -160,45 +183,13 @@ $(function () { }, 500) } - function setRequired(dom = {label: [], table: []}) { - let domTimer = null - let timer_count = 0 - clearInterval(domTimer) - domTimer = setInterval(() => { - timer_count++ - const lint = $('.o_form_view_container') - if (lint.length) { - clearInterval(domTimer) - const { table} = dom - - if (table.length) { - table.forEach(_ => { - const th = $(`th[data-name=${_}]`) - const t = th.find('span').eq(0).text().replace('*','') - th.find('span').eq(0).html('*' + t) - - }) - - } - } - if (timer_count == 20) { - clearInterval(domTimer) - } - }, 500) - } - var currentUrl = location.href - const customRequiredDom = { - table: ['product_template_id', 'product_uom_qty', 'price_unit','product_id','product_qty', 'name', 'fault_type', 'maintenance_standards', 'Period'] - } const listenerUrl = setInterval(() => { const isChange = currentUrl != location.href if (isChange) { currentUrl = location.href customRequired() - setRequired(customRequiredDom) } }, 500) customRequired() - setRequired(customRequiredDom) }) diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index bc1be730..f7195534 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -467,3 +467,15 @@ div:has(.o_required_modifier) > label::before { background: #71639e; color: #fff } + +// 修改时间输入框宽度 +.o_datepicker_input.o_input.datetimepicker-input { + width: 200px; +} + + +.o_form_view .o_form_editable .o_row > .o_field_widget, .o_form_view .o_form_editable .o_row > .o_field_widget.o_field_float_time { + width: auto !important; + flex: unset; +} + diff --git a/sf_base/static/src/scss/test.scss b/sf_base/static/src/scss/test.scss index fdc5821e..c91a8a77 100644 --- a/sf_base/static/src/scss/test.scss +++ b/sf_base/static/src/scss/test.scss @@ -189,3 +189,6 @@ td.o_required_modifier { flex-direction: row !important; } +.supplier_ids_set_css thead th[data-name=partner_id]{ + width: 500px!important; +} \ No newline at end of file diff --git a/sf_base/views/common_view.xml b/sf_base/views/common_view.xml index 0826b51c..e829274a 100644 --- a/sf_base/views/common_view.xml +++ b/sf_base/views/common_view.xml @@ -269,7 +269,7 @@ - + From 34ea140941e19fd84eaa4fcf7f6bf871f9973cf9 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Tue, 9 Apr 2024 10:46:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E6=B8=85=E5=8D=95=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E5=8F=8A=E5=85=B6tree=E8=A7=86=E5=9B=BE=E3=80=81?= =?UTF-8?q?=E6=9D=83=E9=99=90=EF=BC=9B2=E3=80=81=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=92=8C=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84?= =?UTF-8?q?=E8=A3=85=E5=8D=95=E6=A8=A1=E5=9E=8B=E6=96=B0=E5=A2=9E=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=90=8D=E7=A7=B0=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E6=B8=85=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84?= =?UTF-8?q?=E8=A3=85=E6=B5=81=E7=A8=8B=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base_new.py | 20 ++++++ sf_base/security/ir.model.access.csv | 9 ++- sf_base/views/tool_menu.xml | 10 +-- sf_base/views/tool_views.xml | 65 +++++++++++++++++++- sf_tool_management/models/base.py | 12 ++-- sf_tool_management/views/tool_base_views.xml | 7 ++- sf_tool_management/wizard/wizard.py | 15 +++-- sf_tool_management/wizard/wizard_view.xml | 3 +- 8 files changed, 117 insertions(+), 24 deletions(-) diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index a3a9e172..e3b737f0 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -308,3 +308,23 @@ class ToolGroups(models.Model): # records = super(ToolGroups, self).create(vals_list) # self._register_tool_groups(records) # return records + + +class ToolInventory(models.Model): + _name = 'sf.tool.inventory' + _description = '功能刀具清单' + + name = fields.Char('功能刀具名称', required=True) + type = fields.Char('类型') + prefix = fields.Char('前缀') + postfix = fields.Char('后缀') + diameter = fields.Float('直径(mm)') + angle = fields.Float('R角(mm)') + tool_length = fields.Float('刀具总长(mm)') + blade_length = fields.Float('避空长/刃长(mm)') + knife_head_name = fields.Char('刀头名称') + cutter_number = fields.Char('刀号') + blade_number = fields.Integer('刃数(个)') + extension = fields.Float('伸出长度(mm)') + + active = fields.Boolean('已归档', default=True) diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index 2a3cd471..9d027bdb 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -192,4 +192,11 @@ access_sf_machine_brand_tags_group_purchase_director,sf_machine_brand_tags_group access_printer,printer,model_printer,base.group_user,1,1,1,1 -access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1 \ No newline at end of file +access_printer_configuration,printer.configuration,model_printer_configuration,base.group_user,1,1,1,1 + +access_group_sf_mrp_user,sf_tool_inventory,model_sf_tool_inventory,base.group_user,1,1,1,0 +access_group_sf_mrp_user_admin,sf_tool_inventory_admin,model_sf_tool_inventory,base.group_system,1,1,1,0 +access_group_sf_mrp_user_group_purchase_director,sf_tool_inventory_group_purchase_director,model_sf_tool_inventory,sf_base.group_purchase_director,1,0,1,0 +access_group_sf_mrp_user_group_sale_director,sf_tool_inventory_group_sale_director,model_sf_tool_inventory,sf_base.group_sale_director,1,0,1,0 +access_sf_cutting_tool_material_group_plan_director,sf_tool_inventory_group_plan_director,model_sf_tool_inventory,sf_base.group_plan_director,1,0,1,0 +access_group_sf_mrp_user_group_sf_mrp_user,sf_tool_inventory_group_sf_mrp_user,model_sf_tool_inventory,sf_base.group_sf_mrp_user,1,1,0,0 \ No newline at end of file diff --git a/sf_base/views/tool_menu.xml b/sf_base/views/tool_menu.xml index 506a73df..bad606d6 100644 --- a/sf_base/views/tool_menu.xml +++ b/sf_base/views/tool_menu.xml @@ -59,14 +59,14 @@ id="menu_sf_cutting_tool_type" parent="menu_sf_cutting_tool" name="刀具类型" - sequence="2" + sequence="10" action="action_sf_cutting_tool_type" /> @@ -82,7 +82,7 @@ id="menu_sf_functional_cutting_tool_model_type" parent="menu_sf_cutting_tool" name="功能刀具类型" - sequence="4" + sequence="30" action="action_sf_functional_cutting_tool_model_type" /> @@ -91,14 +91,14 @@ name="能力特征库" parent="menu_sf_cutting_tool" action="action_maintenance_equipment_image" - sequence="5"/> + sequence="40"/> + sequence="50"/> diff --git a/sf_base/views/tool_views.xml b/sf_base/views/tool_views.xml index 34b87a41..25d1824f 100644 --- a/sf_base/views/tool_views.xml +++ b/sf_base/views/tool_views.xml @@ -123,7 +123,7 @@
+ required="1"/>

@@ -547,7 +547,68 @@ - + ' + + + + sf.tool.inventory.tree + sf.tool.inventory + + + + + + + + + + + + + + + + + + + + + + sf.tool.inventory.search + sf.tool.inventory + + + + + + + + + + + + + + + + + + + + + 功能刀具清单 + ir.actions.act_window + sf.tool.inventory + tree + + + diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 766bb8a9..d90c65bd 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -309,7 +309,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model): _name = 'sf.real.time.distribution.of.functional.tools' _description = '功能刀具安全库存' - name = fields.Char('功能刀具名称', readonly=True, compute='_compute_name') + name = fields.Char('名称', readonly=True, compute='_compute_name', store=True) + functional_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', required=True) tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=False, required=True) sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False, group_expand='_read_mrs_cutting_tool_type_ids', store=True) @@ -355,13 +356,13 @@ class RealTimeDistributionOfFunctionalTools(models.Model): active = fields.Boolean(string='已归档', default=True) - @api.depends('tool_groups_id', 'diameter', 'knife_tip_r_angle') + @api.depends('functional_name_id') def _compute_name(self): for obj in self: if obj.tool_groups_id: - obj.sudo().name = '%s-D%sR%s' % (obj.tool_groups_id.name, obj.diameter, obj.knife_tip_r_angle) + obj.name = obj.functional_name_id.name else: - obj.sudo().name = None + obj.sudo().name = '' @api.constrains('min_stock_num', 'max_stock_num') def _check_stock_num(self): @@ -452,7 +453,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model): """ # 根据功能刀具名称、刀具组、直径或尖刀R角、粗/中/精查询该功能刀具是否已经存在 record = self.env['sf.real.time.distribution.of.functional.tools'].search( - [('name', '=', vals['name']), ('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']), + [('functional_name_id', '=', vals['functional_name_id']), + ('sf_cutting_tool_type_id', '=', vals['sf_cutting_tool_type_id']), ('diameter', '=', vals['diameter']), ('knife_tip_r_angle', '=', vals['knife_tip_r_angle']), ('coarse_middle_thin', '=', vals['coarse_middle_thin']), ('tool_groups_id', '=', vals['tool_groups_id'])]) if len(record) > 0: diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index b210ff29..4dd23a4e 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -299,7 +299,8 @@ sf.real.time.distribution.of.functional.tools - + + @@ -329,9 +330,11 @@

- +

+ diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 90b8da63..36bb310d 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -358,10 +358,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel): item.rfid = None # 组装功能刀具参数信息 + after_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', required=True) barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号') rfid = fields.Char('Rfid', readonly=True, store=True, compute='_compute_rfid') tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_tool_code') - after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name') + after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name', store=True) after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='组装后功能刀具类型', compute='_compute_after_assembly_functional_tool_type_id') @@ -428,15 +429,13 @@ class FunctionalToolAssemblyOrder(models.TransientModel): num = "%03d" % m return num - @api.depends('after_assembly_functional_tool_diameter', 'after_assembly_knife_tip_r_angle', 'tool_groups_id') + @api.depends('after_name_id') def _compute_name(self): for obj in self: - if obj.tool_groups_id: - obj.after_assembly_functional_tool_name = '%s-D%sR%s' % ( - obj.tool_groups_id.name, obj.after_assembly_functional_tool_diameter, - obj.after_assembly_knife_tip_r_angle) + if obj.after_name_id: + obj.after_assembly_functional_tool_name = obj.after_name_id.name else: - obj.after_assembly_functional_tool_name = None + obj.after_assembly_functional_tool_name = '' @api.onchange('integral_code_id') def _onchange_after_assembly_functional_tool_diameter(self): @@ -530,7 +529,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel): record_1 = self.env['sf.functional.cutting.tool.entity'].create(desc_2) # 创建安全库存信息 self.env['sf.real.time.distribution.of.functional.tools'].create_or_edit_safety_stock({ - 'name': self.after_assembly_functional_tool_name, + 'functional_name_id': self.after_name_id.id, 'sf_cutting_tool_type_id': self.after_assembly_functional_tool_type_id.id, 'tool_groups_id': self.tool_groups_id.id, 'diameter': self.after_assembly_functional_tool_diameter, diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml index f055ffba..a1b35664 100644 --- a/sf_tool_management/wizard/wizard_view.xml +++ b/sf_tool_management/wizard/wizard_view.xml @@ -342,7 +342,8 @@ - + +