From ce86a66e9213f414aa226ffb0e09add15fa8e9e5 Mon Sep 17 00:00:00 2001 From: "JIKIMO-YXH\\xianghui" <3437689193@qq.com> Date: Wed, 25 Oct 2023 17:35:12 +0800 Subject: [PATCH 01/13] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E4=BA=A7=E5=93=81=E7=B1=BB?= =?UTF-8?q?=E5=88=AB=E5=92=8C=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E6=A8=A1?= =?UTF-8?q?=E7=89=88=EF=BC=9B2=E3=80=81=E6=96=B0=E5=A2=9E=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=90=8E=E4=BD=8D=E7=BD=AE=E5=92=8C=E5=88=80?= =?UTF-8?q?=E5=85=B7=E7=BB=84=E8=A3=85=E5=85=A5=E5=BA=93=E7=9A=84=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E7=B1=BB=E5=9E=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_dlm/data/product_data.xml | 24 ++++++++++++++++++++++++ sf_manufacturing/data/stock_data.xml | 21 +++++++++++++++++++++ sf_manufacturing/models/model_type.py | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/sf_dlm/data/product_data.xml b/sf_dlm/data/product_data.xml index a31f97fc..15cfc8b5 100644 --- a/sf_dlm/data/product_data.xml +++ b/sf_dlm/data/product_data.xml @@ -30,6 +30,30 @@ 夹具 + + 功能刀具 + 功能刀具 + + + + + 功能刀具模板 + + + + delivery + product + false + true + + + + true + serial + false + + CNC加工产品模板 diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index 8efbdd55..15ad1a55 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -22,6 +22,15 @@ + + 组装后 + + internal + DJ-ZZ + true + + + 外协入库 internal @@ -46,6 +55,18 @@ + + 刀具组装入库 + internal + true + + + + ZR + + + diff --git a/sf_manufacturing/models/model_type.py b/sf_manufacturing/models/model_type.py index 672741e3..71161b59 100644 --- a/sf_manufacturing/models/model_type.py +++ b/sf_manufacturing/models/model_type.py @@ -6,7 +6,7 @@ class ResProductCategory(models.Model): type = fields.Selection( [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺"), ("刀具", "刀具"), - ("夹具", "夹具")], + ("夹具", "夹具"), ("功能刀具", "功能刀具")], default="", string="类型") From e3d58c2a9e2a0be6b89ca3f44202b73adab4a625 Mon Sep 17 00:00:00 2001 From: "JIKIMO-YXH\\xianghui" <3437689193@qq.com> Date: Thu, 26 Oct 2023 17:39:33 +0800 Subject: [PATCH 02/13] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E4=BA=A7?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=EF=BC=8C=E8=A7=A3=E5=86=B3=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=97=A0=E6=B3=95=E9=80=89=E6=8B=A9=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E4=BC=98=E5=8C=96=E5=8F=96=E6=B6=88=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9B3=E3=80=81=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E7=A1=AE=E5=AE=9A=E5=90=8E?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8F=B7=EF=BC=8C=E7=94=9F=E6=88=90=E5=88=80=E5=85=B7?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=85=A5=E5=BA=93=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_dlm/data/product_data.xml | 7 +-- sf_manufacturing/data/stock_data.xml | 2 - sf_tool_management/models/base.py | 12 ++-- sf_tool_management/views/tool_base_views.xml | 33 +---------- sf_tool_management/wizard/wizard.py | 62 ++++++++++++++++++++ 5 files changed, 72 insertions(+), 44 deletions(-) diff --git a/sf_dlm/data/product_data.xml b/sf_dlm/data/product_data.xml index 15cfc8b5..528c6ec2 100644 --- a/sf_dlm/data/product_data.xml +++ b/sf_dlm/data/product_data.xml @@ -35,10 +35,8 @@ 功能刀具 - - 功能刀具模板 - + 功能刀具 @@ -49,9 +47,8 @@ - true + false serial - false diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index 15ad1a55..4e1841e2 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -59,8 +59,6 @@ 刀具组装入库 internal true - - ZR diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index a55f4f17..ff3f1bed 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -895,27 +895,27 @@ class FunctionalToolAssembly(models.Model): ('assemble_status', '=', '1') ]).write({ 'cutting_tool_integral_model_id': None, - 'integral_code': None, + 'integral_code_id': None, 'integral_name': None, 'sf_tool_brand_id_1': None, 'cutting_tool_blade_model_id': None, - 'blade_code': None, + 'blade_code_id': None, 'blade_name': None, 'sf_tool_brand_id_2': None, 'cutting_tool_cutterbar_model_id': None, - 'bar_code': None, + 'bar_code_id': None, 'bar_name': None, 'sf_tool_brand_id_3': None, 'cutting_tool_cutterpad_model_id': None, - 'pad_code': None, + 'pad_code_id': None, 'pad_name': None, 'sf_tool_brand_id_4': None, 'cutting_tool_cutterhandle_model_id': None, - 'handle_code': None, + 'handle_code_id': None, 'handle_name': None, 'sf_tool_brand_id_5': None, 'cutting_tool_cutterhead_model_id': None, - 'chuck_code': None, + 'chuck_code_id': None, 'chuck_name': None, 'sf_tool_brand_id_6': None, 'coarse_middle_thin': None, diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 0e9f7386..077cb027 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -1127,7 +1127,7 @@ - +
@@ -1165,7 +1165,7 @@
- +
@@ -1208,35 +1208,6 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index c9dd4eb9..7218bd1f 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -392,9 +392,71 @@ class FunctionalToolAssemblyOrder(models.TransientModel): self.env['sf.functional.cutting.tool.entity'].search([('code', '=', self.code)]).write(desc_2) # 修改功能刀具组装信息 functional_tool_assembly.write(desc_1) + + # 创建组装入库单 + # 创建功能刀具批次/序列号记录 + stock_lot = self.create_assemble_warehouse_receipt() + # 创建刀具组装入库单 + self.create_stocking_picking(stock_lot) + # 关闭弹出窗口 return {'type': 'ir.actions.act_window_close'} + def create_stocking_picking(self, stock_lot): + """ + 创建刀具组装入库单 + """ + # 获取名称为刀具组装入库的作业类型 + picking_type_id = self.env['stock.picking.type'].sudo().search([('name', '=', '刀具组装入库')]) + # 创建刀具组装入库单 + picking_id = self.env['stock.picking'].create({ + 'picking_type_id': picking_type_id.id + }) + # 创建作业详情对象记录,并绑定到刀具组装入库单 + self.env['stock.move.line'].create({ + 'picking_id': picking_id.id, + 'product_id': stock_lot.product_id.id, + 'lot_id': stock_lot.id + }) + # 将刀具组装入库单的状态更改为就绪 + picking_id.action_confirm() + + def create_assemble_warehouse_receipt(self): + """ + 创建功能刀具批次/序列号记录 + """ + product_id = self.env['product.product'].search([('name', '=', '功能刀具')]) + + stock_lot = self.env['stock.lot'].create({ + 'name': self.get_stock_lot_name(), + 'product_id': product_id.id, + 'product_qty': 1.00, + 'company_id': self.env.company.id + }) + + return stock_lot + + def get_stock_lot_name(self): + """ + 生成功能刀具序列号 + """ + code = 'JKM-T-' + str(self.code) + '-' + str(self.functional_tool_diameter) + '-' + new_time = fields.Date.today() + code += str(new_time) + '-' + stock_lot_id = self.env['stock.lot'].sudo().search( + [('name', 'like', new_time), ('product_id.name', '=', '功能刀具')], + limit=1, + order="id desc" + ) + print(stock_lot_id) + if not stock_lot_id: + num = "%03d" % 1 + else: + m = int(stock_lot_id.name[-3:]) + 1 + num = "%03d" % m + print(num) + return code + str(num) + class DeliveryOfCargoFromStorage(models.TransientModel): _name = 'sf.delivery.of.cargo.from.storage' From 018b51e1e5fdd93d2e101b2fd0effc29392e3c2e Mon Sep 17 00:00:00 2001 From: "qihao.gong@jikimo.com" Date: Fri, 27 Oct 2023 15:06:49 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=87=87=E8=B4=AD=E5=8D=95=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_warehouse/models/model.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index eafdffac..65bdc0ea 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -237,4 +237,6 @@ class SfProcurementGroup(models.Model): for res1 in res_list: if product_id.categ_id in res1.location_dest_id.product_type: res = res1 + if not res: + res = Rule.search(expression.AND([[('route_id', 'in', warehouse_routes.ids)], domain]), order='route_sequence, sequence', limit=1) return res \ No newline at end of file From 5b9fcb2e53a30367b4278dd1f470a3089d2e4c2e Mon Sep 17 00:00:00 2001 From: "JIKIMO-YXH\\xianghui" <3437689193@qq.com> Date: Fri, 27 Oct 2023 17:46:19 +0800 Subject: [PATCH 04/13] =?UTF-8?q?1=E3=80=81=E5=88=9B=E5=BB=BA=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E8=AF=A5=E6=89=B9?= =?UTF-8?q?=E6=AC=A1/=E5=BA=8F=E5=88=97=E5=8F=B7=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_dlm/data/product_data.xml | 5 +++-- sf_manufacturing/data/stock_data.xml | 9 +++++++++ sf_tool_management/wizard/wizard.py | 28 +++++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/sf_dlm/data/product_data.xml b/sf_dlm/data/product_data.xml index 528c6ec2..4474a524 100644 --- a/sf_dlm/data/product_data.xml +++ b/sf_dlm/data/product_data.xml @@ -38,8 +38,9 @@ 功能刀具 - + + + false delivery product false diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index 4e1841e2..b65b2235 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -31,6 +31,15 @@ + + + + + + + + + 外协入库 internal diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 7218bd1f..a0fd7b95 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -430,12 +430,36 @@ class FunctionalToolAssemblyOrder(models.TransientModel): stock_lot = self.env['stock.lot'].create({ 'name': self.get_stock_lot_name(), 'product_id': product_id.id, - 'product_qty': 1.00, 'company_id': self.env.company.id }) + # 创建功能刀具该批次/序列号位置 + self.create_stock_quant(product_id, stock_lot) return stock_lot + def create_stock_quant(self, product_id, stock_lot): + """ + 创建功能刀具该批次/序列号位置 + """ + # 获取组装后位置对象 + stock_location = self.env['stock.location'].search([('name', '=', '组装后')]) + # + self.env['stock.move'].create({ + '': + }) + + # 创建功能刀具该批次/序列号位置 + # stock_quant = self.env['stock.quant'].create({ + # 'location_id': stock_location.id, + # 'product_id': product_id.id, + # 'lot_id': stock_lot.id, + # 'quantity': 1.0 + # }) + + # # 应用该位置 + # bool = stock_quant.action_apply_inventory() + # return stock_quant + def get_stock_lot_name(self): """ 生成功能刀具序列号 @@ -448,13 +472,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel): limit=1, order="id desc" ) - print(stock_lot_id) if not stock_lot_id: num = "%03d" % 1 else: m = int(stock_lot_id.name[-3:]) + 1 num = "%03d" % m - print(num) return code + str(num) From 4634393f6c66db857a0b2fb7aeb080d91c1f198c Mon Sep 17 00:00:00 2001 From: "qihao.gong@jikimo.com" Date: Mon, 30 Oct 2023 11:14:29 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9form=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_frontend/static/src/scss/custom_style.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index 3626cd08..00db5f3b 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -341,3 +341,15 @@ div:has(.o_required_modifier) > label::before { overflow: visible; } +.o_form_view { + .o_form_sheet_bg .o_form_sheet { + //max-width: none !important; + width: auto !important; + max-width: 98% !important; + } + .o_FormRenderer_chatterContainer { + max-width: none; + } +} + + From 76368398ba207ea4167b2da8cb444e849f2371ce Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Mon, 30 Oct 2023 15:44:45 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E8=A7=A3=E5=86=B3row=20number=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=AD=97=E6=AE=B5label=E5=8F=98=E5=BD=A2=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_frontend/__manifest__.py | 9 ++-- .../static/src/scss/rowno_in_tree.scss | 3 ++ .../src/views/list_nums/list_render.xml | 47 +++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 jikimo_frontend/static/src/scss/rowno_in_tree.scss create mode 100644 jikimo_frontend/static/src/views/list_nums/list_render.xml diff --git a/jikimo_frontend/__manifest__.py b/jikimo_frontend/__manifest__.py index 4165a503..ea28cb5f 100644 --- a/jikimo_frontend/__manifest__.py +++ b/jikimo_frontend/__manifest__.py @@ -24,10 +24,13 @@ 'jikimo_frontend/static/src/fields/custom_many2many_checkboxes/*', 'jikimo_frontend/static/src/scss/custom_style.scss', # 'jikimo_frontend/static/src/views/list_nums/list_nbCols.js', - 'jikimo_frontend/static/src/views/list_nums/list_nums.xml', - 'jikimo_frontend/static/src/views/list_nums/list_nums2.xml', - 'jikimo_frontend/static/src/views/list_nums/list_nums3.xml', + # 'jikimo_frontend/static/src/views/list_nums/list_nums.xml', + # 'jikimo_frontend/static/src/views/list_nums/list_nums2.xml', + # 'jikimo_frontend/static/src/views/list_nums/list_nums3.xml', 'jikimo_frontend/static/src/js/custom_form_status_indicator.js', + 'jikimo_frontend/static/src/scss/rowno_in_tree.scss', + 'jikimo_frontend/static/src/views/list_nums/list_render.xml', + ], }, diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss new file mode 100644 index 00000000..f5aa2914 --- /dev/null +++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss @@ -0,0 +1,3 @@ +.row_no { + width:4% !important; +} diff --git a/jikimo_frontend/static/src/views/list_nums/list_render.xml b/jikimo_frontend/static/src/views/list_nums/list_render.xml new file mode 100644 index 00000000..7ba46848 --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_render.xml @@ -0,0 +1,47 @@ + + From deccb6e3cdc2da85dc32ae4c6b631ef45431f6d2 Mon Sep 17 00:00:00 2001 From: "JIKIMO-YXH\\xianghui" <3437689193@qq.com> Date: Mon, 30 Oct 2023 17:43:28 +0800 Subject: [PATCH 07/13] =?UTF-8?q?1=E3=80=81=E5=88=A0=E9=99=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E7=9A=84=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E7=BB=84=E8=A3=85=E5=8A=9F=E8=83=BD=E5=92=8C=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E5=8A=9F=E8=83=BD=EF=BC=9B2=E3=80=81=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E5=8D=95=E6=8D=AE=E6=9D=A5=E6=BA=90=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E6=8C=89=E9=92=AE=EF=BC=9B3=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E7=BB=84=E8=A3=85=E5=8D=95=E7=BC=96=E7=A0=81=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=92=8C=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E6=96=B9=E6=B3=95=EF=BC=9B4=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8F=B7=EF=BC=8C=E7=BB=91=E5=AE=9A=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E4=BA=A7=E5=93=81=E5=BA=8F=E5=88=97=E5=8F=B7?= =?UTF-8?q?=EF=BC=9B5=E3=80=81=E5=AE=8C=E6=88=90=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85=E5=90=8E=E7=9A=84=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=85=A5=E5=BA=93=E5=88=B0=E4=BD=8D=E7=BD=AE=E3=80=90?= =?UTF-8?q?=E7=BB=84=E8=A3=85=E5=90=8E=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 231 +++++++------------ sf_tool_management/views/tool_base_views.xml | 29 +-- sf_tool_management/wizard/wizard.py | 81 +++---- 3 files changed, 119 insertions(+), 222 deletions(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index ff3f1bed..3a9f3264 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -733,10 +733,12 @@ class CAMWorkOrderProgramKnifePlan(models.Model): class FunctionalToolAssembly(models.Model): _name = 'sf.functional.tool.assembly' - _description = '功能刀具组装' + _description = '功能刀具组装单' _order = 'use_tool_time asc' - functional_tool_code = fields.Char(string='功能刀具编码', readonly=True) + assembly_order_code = fields.Char(string='编码', compute='_get_code', readonly=True) + functional_tool_code = fields.Char(string='功能刀具编码', invisible=True) + barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True) name = fields.Many2one('sf.functional.cutting.tool', string='功能刀具名称', readonly=True) functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True, group_expand='_read_group_functional_tool_type_ids') @@ -787,6 +789,58 @@ class FunctionalToolAssembly(models.Model): chuck_name = fields.Char('夹头名称', readonly=True) sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', readonly=True) + @api.depends('integral_code_id', 'blade_code_id', 'bar_code_id', 'pad_code_id', 'handle_code_id', 'chuck_code_id') + def _compute_auto_fill(self): + for record in self: + if record.integral_code_id: + record.cutting_tool_integral_model_id = record.integral_code_id.product_id.cutting_tool_material_id.id + record.integral_name = record.integral_code_id.product_id.name + record.sf_tool_brand_id_1 = record.integral_code_id.product_id.brand_id.id + else: + record.cutting_tool_integral_model_id = None + record.integral_name = None + record.sf_tool_brand_id_1 = None + if record.blade_code_id: + record.cutting_tool_blade_model_id = record.blade_code_id.product_id.cutting_tool_material_id.id + record.blade_name = record.blade_code_id.product_id.name + record.sf_tool_brand_id_2 = record.blade_code_id.product_id.brand_id.id + else: + record.cutting_tool_blade_model_id = None + record.blade_name = None + record.sf_tool_brand_id_2 = None + if record.bar_code_id: + record.cutting_tool_cutterbar_model_id = record.bar_code_id.product_id.cutting_tool_material_id.id + record.bar_name = record.bar_code_id.product_id.name + record.sf_tool_brand_id_3 = record.bar_code_id.product_id.brand_id.id + else: + record.cutting_tool_cutterbar_model_id = None + record.bar_name = None + record.sf_tool_brand_id_3 = None + if record.pad_code_id: + record.cutting_tool_cutterpad_model_id = record.pad_code_id.product_id.cutting_tool_material_id.id + record.pad_name = record.pad_code_id.product_id.name + record.sf_tool_brand_id_4 = record.pad_code_id.product_id.brand_id.id + else: + record.cutting_tool_cutterpad_model_id = None + record.pad_name = None + record.sf_tool_brand_id_4 = None + if record.handle_code_id: + record.cutting_tool_cutterhandle_model_id = record.handle_code_id.product_id.cutting_tool_material_id.id + record.handle_name = record.handle_code_id.product_id.name + record.sf_tool_brand_id_5 = record.handle_code_id.product_id.brand_id.id + else: + record.cutting_tool_cutterhandle_model_id = None + record.handle_name = None + record.sf_tool_brand_id_5 = None + if record.chuck_code_id: + record.cutting_tool_cutterhead_model_id = record.chuck_code_id.product_id.cutting_tool_material_id.id + record.chuck_name = record.chuck_code_id.product_id.name + record.sf_tool_brand_id_6 = record.chuck_code_id.product_id.brand_id.id + else: + record.cutting_tool_cutterhead_model_id = None + record.chuck_name = None + record.sf_tool_brand_id_6 = None + coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True) tool_loading_length = fields.Char(string='装刀长(mm)', readonly=True) new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True) @@ -795,11 +849,12 @@ class FunctionalToolAssembly(models.Model): cut_length = fields.Char(string='已切削长度(mm)', readonly=True) cut_number = fields.Char(string='已切削次数', readonly=True) - loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀')], string='装刀任务来源', readonly=True) + loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')], + string='装刀任务来源', readonly=True) applicant = fields.Char(string='申请人', readonly=True) reason_for_applying = fields.Char(string='申请原因', readonly=True) apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now(), readonly=True) - assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装'), ('2', '已出库')], string='组装状态', + assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装')], string='组装状态', default='0', readonly=True) use_tool_time = fields.Datetime(string='用刀时间', readonly=True) production_line_name_id = fields.Many2one('sf.production.line', string='产线名称', readonly=False) @@ -818,155 +873,29 @@ class FunctionalToolAssembly(models.Model): sf_cam_work_order_program_knife_plan_id = fields.Many2one('sf.cam.work.order.program.knife.plan', 'CAM工单程序用刀计划') - def open_sf_cam_work_order_program_knife_plan(self): + @api.depends('loading_task_source') + def _get_code(self): """ - 跳转到CAM工单程序用刀计划界面按钮功能 + 自动生成组装单编码 """ - action = self.env.ref('sf_tool_management.sf_cam_work_order_program_knife_plan_view_act') - result = action.read()[0] - result['domain'] = [('sf_functional_tool_assembly_id', '=', self.id)] - return result - - def open_sf_machine_table_tool_changing_apply(self): - """ - 跳转到机床换刀申请界面按钮功能 - """ - action = self.env.ref('sf_tool_management.sf_machine_table_tool_changing_apply_view_act') - result = action.read()[0] - result['domain'] = [('sf_functional_tool_assembly_id', '=', self.id)] - return result - - def cancel_functional_tool_assembly(self): - """ - 取消功能刀具组装 - :return: - """ - if self.new_former == '0': - # 如果是新刀,则删除功能刀具列表、功能刀具预警、功能刀具实时分布、功能刀具出入库记录的记录 - record = self.env['sf.functional.cutting.tool.entity'].search([ - ('code', '=', self.functional_tool_code)]) - self.env['sf.functional.tool.warning'].search( - [('functional_cutting_tool_id', '=', record.id)]).unlink() - self.env['sf.real.time.distribution.of.functional.tools'].search( - [('functional_cutting_tool_id', '=', record.id)]).unlink() - self.env['sf.inbound.and.outbound.records.of.functional.tools'].search( - [('functional_cutting_tool_id', '=', record.id)]).unlink() - record.unlink() - else: - # 获取功能刀具缓存信息 - record = self.env['sf.functional.cutting.tool.entity.cache'].search([ - ('code', '=', self.functional_tool_code)], limit=1) - # # 删除现有功能刀具列表记录 - # self.env['sf.functional.cutting.tool.entity'].search([ - # ('code', '=', self.functional_tool_code)]).unlink() - # 修改功能刀具列表信息 - self.env['sf.functional.cutting.tool.entity'].search([ - ('code', '=', self.functional_tool_code)]).sudo().write({ - 'code': record.code, - 'name': record.name, - 'mrs_cutting_tool_type_id': record.mrs_cutting_tool_type_id.id, - 'mrs_cutting_tool_model_id': record.mrs_cutting_tool_model_id.id, - 'cutting_tool_integral_model_id': record.cutting_tool_integral_model_id.id, - 'cutting_tool_blade_model_id': record.cutting_tool_blade_model_id.id, - 'cutting_tool_cutterbar_model_id': record.cutting_tool_cutterbar_model_id.id, - 'cutting_tool_cutterpad_model_id': record.cutting_tool_cutterpad_model_id.id, - 'cutting_tool_cutterhandle_model_id': record.cutting_tool_cutterhandle_model_id.id, - 'cutting_tool_cutterhead_model_id': record.cutting_tool_cutterhead_model_id.id, - 'diameter': record.diameter, - 'tool_grade': record.tool_grade, - 'machining_accuracy': record.machining_accuracy, - 'tool_length': record.tool_length, - 'blade_number': record.blade_number, - 'integral_blade_length': record.integral_blade_length, - 'effective_blade_length': record.effective_blade_length, - 'max_life': record.max_life, - 'is_standard': record.is_standard, - 'applicable_range': record.applicable_range, - 'image': record.image, - }) - # 删除功能刀具缓存信息 - self.env['sf.functional.cutting.tool.entity.cache'].search([ - ('code', '=', self.functional_tool_code)]).unlink() - - # 修改功能刀具组装的组装信息 - self.env['sf.functional.tool.assembly'].search([ - ('machine_tool_name_id', '=', self.machine_tool_name_id.id), - ('cutter_spacing_code', '=', self.cutter_spacing_code), - ('assemble_status', '=', '1') - ]).write({ - 'cutting_tool_integral_model_id': None, - 'integral_code_id': None, - 'integral_name': None, - 'sf_tool_brand_id_1': None, - 'cutting_tool_blade_model_id': None, - 'blade_code_id': None, - 'blade_name': None, - 'sf_tool_brand_id_2': None, - 'cutting_tool_cutterbar_model_id': None, - 'bar_code_id': None, - 'bar_name': None, - 'sf_tool_brand_id_3': None, - 'cutting_tool_cutterpad_model_id': None, - 'pad_code_id': None, - 'pad_name': None, - 'sf_tool_brand_id_4': None, - 'cutting_tool_cutterhandle_model_id': None, - 'handle_code_id': None, - 'handle_name': None, - 'sf_tool_brand_id_5': None, - 'cutting_tool_cutterhead_model_id': None, - 'chuck_code_id': None, - 'chuck_name': None, - 'sf_tool_brand_id_6': None, - 'coarse_middle_thin': None, - 'tool_loading_length': None, - 'new_former': None, - 'reference_length': None, - 'cut_time': None, - 'cut_length': None, - 'cut_number': None, - 'assemble_status': '0', - 'tool_loading_person': None, - 'tool_loading_time': None - }) - - def show_popup(self): - """ - 单个功能刀具出库 - :return: - """ - self.env['sf.delivery.of.cargo.from.storage'].search([]).unlink() - - vals = self.env['sf.functional.tool.assembly'].search( - [('check_box_1', '=', True), ('assemble_status', '=', '1')]) - if vals: - for val in vals: - self.env['sf.delivery.of.cargo.from.storage'].create({ - 'functional_tool_code': val.functional_tool_code, - 'name': val.name.id, - 'functional_tool_type_id': val.functional_tool_type_id.id, - 'production_line_name_id': val.production_line_name_id.id, - 'machine_tool_code': val.machine_tool_code, - 'receive_person': val.receive_person, - 'receive_time': val.receive_time}) - else: - self.env['sf.delivery.of.cargo.from.storage'].create({ - 'functional_tool_code': self.functional_tool_code, - 'name': self.name.id, - 'functional_tool_type_id': self.functional_tool_type_id.id, - 'production_line_name_id': self.production_line_name_id.id, - 'machine_tool_code': self.machine_tool_code, - 'receive_person': self.receive_person, - 'receive_time': self.receive_time}) - - return { - 'type': 'ir.actions.act_window', - 'name': '功能刀具出库', - 'res_model': 'sf.delivery.of.cargo.from.storage', - 'view_mode': 'tree', - 'view_type': 'tree', - 'target': 'new' - } + for record in self: + new_time = str(fields.Date.today()) + datetime = new_time[2:4] + new_time[5:7] + new_time[-2:] + functional_tool_assembly = record.env['sf.functional.tool.assembly'].sudo().search( + [('loading_task_source', '=', record.loading_task_source), + ('assembly_order_code', 'like', new_time)], limit=1, order="id desc") + print(functional_tool_assembly) + if not functional_tool_assembly: + num = "%03d" % 1 + else: + m = int(functional_tool_assembly.name[-3:]) + 1 + num = "%03d" % m + if record.loading_task_source == '0': + record.assembly_order_code = 'CAMZZD' + datetime + str(num) + if record.loading_task_source == '1': + record.assembly_order_code = 'JTZZD' + datetime + str(num) + if record.loading_task_source == '2': + record.assembly_order_code = 'MTSZZD' + datetime + str(num) def automated_assembly(self): """ diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 077cb027..6ed278af 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -997,10 +997,11 @@ sf.functional.tool.assembly + - + @@ -1034,13 +1035,8 @@ 'default_whether_standard_tool': None}" attrs="{'invisible': [('assemble_status', '!=', '0')]}" class="btn-primary"/> - + + + + + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss index f5aa2914..c244ad7d 100644 --- a/jikimo_frontend/static/src/scss/rowno_in_tree.scss +++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss @@ -1,3 +1,4 @@ .row_no { - width:4% !important; + width: 3.2% !important; + vertical-align: middle; } diff --git a/jikimo_frontend/static/src/views/list_nums/list_nums.xml b/jikimo_frontend/static/src/views/list_nums/list_nums.xml index 6424887a..d2ad6824 100644 --- a/jikimo_frontend/static/src/views/list_nums/list_nums.xml +++ b/jikimo_frontend/static/src/views/list_nums/list_nums.xml @@ -5,7 +5,7 @@ - + diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index 064a1e20..e80a7783 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -63,6 +63,14 @@ class sf_production_plan(models.Model): # picking_type_id = fields.Many2one('stock.picking.type', 'Operation Type', compute='_compute_orderpoint_id') # move_dest_ids = fields.One2many('stock.move', 'created_production_id', compute='_compute_orderpoint_id') + @api.model + def get_import_templates(self): + """returns the xlsx import template file""" + return [{ + 'label': _('导入计划数据'), + 'template': '/sf_plan/static/src/xlsx/sf_production_plan.xlsx' + }] + @api.model def _compute_orderpoint_id(self): pass diff --git a/sf_plan/static/src/xlsx/sf_production_plan.xlsx b/sf_plan/static/src/xlsx/sf_production_plan.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a82cab58a678156619c9d084e7dfeff554f08a9b GIT binary patch literal 10244 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 V&mQ9gU{%?35GbJB*2~9#{{tE27DfO7 literal 0 HcmV?d00001 From fc35ef687b7cad0e9a99094a438fad206eb46856 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 1 Nov 2023 12:15:26 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BA=8F=E5=8F=B7?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=AD=97=E6=AE=B5label=E5=8F=98=E5=BD=A2?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/src/list/custom_width.js | 122 ++---------------- 1 file changed, 13 insertions(+), 109 deletions(-) diff --git a/jikimo_frontend/static/src/list/custom_width.js b/jikimo_frontend/static/src/list/custom_width.js index e7cc7b68..3a1443a4 100644 --- a/jikimo_frontend/static/src/list/custom_width.js +++ b/jikimo_frontend/static/src/list/custom_width.js @@ -10,14 +10,13 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { // The following code manipulates the DOM directly to avoid having to wait for a // render + patch which would occur on the next frame and cause flickering. freezeColumnWidths() { + console.log('ccccccccccccccccccccccccccc') if (!this.keepColumnWidths) { this.columnWidths = null; } const table = this.tableRef.el; const headers = [...table.querySelectorAll("thead th:not(.o_list_actions_header)")]; - // 列数+1 - const columnsLength = headers.length + 1; if (!this.columnWidths || !this.columnWidths.length) { // no column widths to restore @@ -29,7 +28,7 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { th.style.maxWidth = null; }); - this.setDefaultColumnWidths(columnsLength); + this.setDefaultColumnWidths(); // Squeeze the table by applying a max-width on largest columns to // ensure that it doesn't overflow @@ -43,60 +42,25 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { }); }, - setDefaultColumnWidths(columnsLength) { + setDefaultColumnWidths() { const widths = this.state.columns.map((col) => this.calculateColumnWidth(col)); - const sumOfRelativeWidths = widths + const sumOfRelativeWidths = (widths .filter(({ type }) => type === "relative") - .reduce((sum, { value }) => sum + value, 0); + .reduce((sum, { value }) => sum + value, 0)) + 1; - // // 计算新增列的权重 - // const newColumnWeight = 0.1; - // - // // 新增列后的总权重 - // const totalWeights = sumOfRelativeWidths + newColumnWeight; + // 获取数组的最后一项 + const lastItem = widths[widths.length - 1]; + // 复制最后一项 + const newItem = { ...lastItem }; + + // 将新的对象添加到数组的末尾 + widths.push(newItem); // 1 because nth-child selectors are 1-indexed, 2 when the first column contains // the checkboxes to select records. const columnOffset = this.hasSelectors ? 2 : 1; - // widths.forEach(({ type, value }, i) => { - // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); - // if (type === "absolute") { - // if (this.isEmpty) { - // headerEl.style.width = value; - // } else { - // headerEl.style.minWidth = value; - // } - // } else if (type === "relative" && this.isEmpty) { - // // headerEl.style.width = `${((value / sumOfRelativeWidths) * 100).toFixed(2)}%`; - // headerEl.style.width = `${100 / columnsLength}%`; - // } - // }); - - // widths.forEach(({ type, value }, i) => { - // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); - // if (type === "absolute") { - // if (this.isEmpty) { - // headerEl.style.width = value; - // } else { - // headerEl.style.minWidth = value; - // } - // } else if (type === "relative" && this.isEmpty) { - // - // if (i === 0) { - // // 第一列 - // headerEl.style.width = `3.2%`; - // - // } else { - // headerEl.style.width = `${100 / columnsLength}%`; - // } - // - // } - // - // }); - widths.forEach(({ type, value }, i) => { const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); - const column = this.state.columns[i]; // 获取当前列的对象 if (type === "absolute") { if (this.isEmpty) { headerEl.style.width = value; @@ -104,69 +68,9 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { headerEl.style.minWidth = value; } } else if (type === "relative" && this.isEmpty) { - - if (i === 0) { - // 第一列 - headerEl.style.width = `${1}%`; - } else if (column.name === "sequence") { - // sequence列 - headerEl.style.width = `${1}%`; - } else if (column.name === "name") { - // name列 - headerEl.style.width = `${20}%`; - - } else { - headerEl.style.width = `${100 / columnsLength}%`; - } - - } else { - headerEl.style.width = `${100 / columnsLength}%`; + headerEl.style.width = `${((value / sumOfRelativeWidths) * 100).toFixed(2)}%`; } - }); - - - - - - - // widths.forEach(({type, value}, i) => { - // - // const headerEl = this.tableRef.el.querySelector(`th:nth-child(${i + columnOffset})`); - // - // if (type === 'absolute') { - // // 原有绝对宽度逻辑 - // } else if (type === 'relative' && this.isEmpty) { - // - // if (i === columnsLength - 1) { - // // 新增列按权重分配 - // headerEl.style.width = `${(newColumnWeight/totalWeights) * 100}%`; - // - // } else { - // // 原相对列按权重分配 - // headerEl.style.width = `${(value/totalWeights) * 100}%`; - // } - // - // } - // - // }); }, - // calculateColumnWidth(column) { - // if (column.options && column.rawAttrs.width) { - // return { type: "absolute", value: column.rawAttrs.width }; - // } - // - // if (column.type !== "field") { - // return { type: "relative", value: 1 }; - // } - // - // const type = column.widget || this.props.list.fields[column.name].type; - // if (type in FIXED_FIELD_COLUMN_WIDTHS) { - // return { type: "absolute", value: FIXED_FIELD_COLUMN_WIDTHS[type] }; - // } - // - // return { type: "relative", value: 1 }; - // } - } ); From 74523c710f1428712a1f0091efbe89473ebff987 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 1 Nov 2023 16:52:26 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=8C=E5=BA=8F=E5=8F=B7=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=87=86=E5=A4=87=E7=BA=BF=E4=B8=8A?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_frontend/__manifest__.py | 3 ++- jikimo_frontend/static/src/list/custom_width.js | 16 ++++++++++++---- .../src/views/list_nums/extent_purchase.xml | 7 +++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 jikimo_frontend/static/src/views/list_nums/extent_purchase.xml diff --git a/jikimo_frontend/__manifest__.py b/jikimo_frontend/__manifest__.py index 81eb73e0..a90a374e 100644 --- a/jikimo_frontend/__manifest__.py +++ b/jikimo_frontend/__manifest__.py @@ -10,7 +10,7 @@ """, 'category': 'sf', 'website': 'https://www.sf.jikimo.com', - 'depends': ['web'], + 'depends': ['web', 'purchase'], 'data': [ ], @@ -33,6 +33,7 @@ 'jikimo_frontend/static/src/list/list_up_down_button.xml', 'jikimo_frontend/static/src/list/custom_import.js', 'jikimo_frontend/static/src/list/custom_width.js', + 'jikimo_frontend/static/src/views/list_nums/extent_purchase.xml', ], diff --git a/jikimo_frontend/static/src/list/custom_width.js b/jikimo_frontend/static/src/list/custom_width.js index 3a1443a4..512abc44 100644 --- a/jikimo_frontend/static/src/list/custom_width.js +++ b/jikimo_frontend/static/src/list/custom_width.js @@ -17,6 +17,7 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { const table = this.tableRef.el; const headers = [...table.querySelectorAll("thead th:not(.o_list_actions_header)")]; + const column_num = headers.length if (!this.columnWidths || !this.columnWidths.length) { // no column widths to restore @@ -28,7 +29,7 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { th.style.maxWidth = null; }); - this.setDefaultColumnWidths(); + this.setDefaultColumnWidths(column_num); // Squeeze the table by applying a max-width on largest columns to // ensure that it doesn't overflow @@ -42,11 +43,12 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { }); }, - setDefaultColumnWidths() { + setDefaultColumnWidths(column_num) { + const bbb = this.state.columns[0].name const widths = this.state.columns.map((col) => this.calculateColumnWidth(col)); const sumOfRelativeWidths = (widths .filter(({ type }) => type === "relative") - .reduce((sum, { value }) => sum + value, 0)) + 1; + .reduce((sum, { value }) => sum + value, 0)); // 获取数组的最后一项 const lastItem = widths[widths.length - 1]; @@ -56,6 +58,12 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { // 将新的对象添加到数组的末尾 widths.push(newItem); + + // 判断销售的sequence + if (this.state.columns[0].name === "sequence") { + widths[1] = { type: "relative", value: 0.1 }; + } + // 1 because nth-child selectors are 1-indexed, 2 when the first column contains // the checkboxes to select records. const columnOffset = this.hasSelectors ? 2 : 1; @@ -68,7 +76,7 @@ patch(ListRenderer.prototype, 'jikimo_frontend.ListRenderer', { headerEl.style.minWidth = value; } } else if (type === "relative" && this.isEmpty) { - headerEl.style.width = `${((value / sumOfRelativeWidths) * 100).toFixed(2)}%`; + headerEl.style.width = `${((value / column_num) * 100).toFixed(2)}%`; } }); }, diff --git a/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml b/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml new file mode 100644 index 00000000..f9c25a3d --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From cbc9264b2c7957a807aca57855b006ea0609665a Mon Sep 17 00:00:00 2001 From: "JIKIMO-YXH\\xianghui" <3437689193@qq.com> Date: Wed, 1 Nov 2023 17:26:23 +0800 Subject: [PATCH 12/13] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96CAM=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E7=9A=84=E7=BB=84=E8=A3=85=E5=8D=95=E4=B8=AD=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=90=8D=E7=A7=B0=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=BB=84=E8=A3=85=E5=8D=95=E7=AD=89=E7=9A=84form?= =?UTF-8?q?=E8=A1=A8=E5=90=8D=E7=A7=B0=E9=97=AE=E9=A2=98=EF=BC=9B2?= =?UTF-8?q?=E3=80=81=E5=8E=BB=E9=99=A4=E7=BB=84=E8=A3=85=E5=8D=95=E5=BC=B9?= =?UTF-8?q?=E7=AA=97=E8=BE=93=E5=87=BA=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 7 +++---- sf_tool_management/wizard/wizard.py | 5 ----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index 11811657..b657184b 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -14,7 +14,7 @@ class FunctionalCuttingToolEntity(models.Model): # code = fields.Char('序列号') barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True) - name = fields.Char('名称', size=20) + name = fields.Char(related='barcode_id.name') functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True) mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', string='刀具型号') mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', @@ -623,7 +623,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model): """ record = self.env['sf.functional.tool.assembly'].create({ 'barcode_id': self.barcode_id.id, - 'name': self.functional_tool_name_id.id, + 'functional_tool_name_id': self.functional_tool_name_id.id, 'functional_tool_type_id': self.functional_tool_type_id.id, 'functional_tool_diameter': self.diameter, 'functional_tool_length': self.tool_loading_length, @@ -664,7 +664,6 @@ class CAMWorkOrderProgramKnifePlan(models.Model): }) - class FunctionalToolAssembly(models.Model): _name = 'sf.functional.tool.assembly' _description = '功能刀具组装单' @@ -673,7 +672,7 @@ class FunctionalToolAssembly(models.Model): assembly_order_code = fields.Char(string='编码', readonly=True) barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True) functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True) - name = fields.Char( string='功能刀具名称', readonly=True) + name = fields.Char(string='名称', readonly=True) functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True, group_expand='_read_group_functional_tool_type_ids') diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 2e2bc17f..0c554ca9 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -273,7 +273,6 @@ class FunctionalToolAssemblyOrder(models.TransientModel): stock_lot = self.create_assemble_warehouse_receipt() # 创建刀具组装入库单 self.create_stocking_picking(stock_lot) - print('已运行1') desc_1 = { 'barcode_id': stock_lot.id, 'integral_code_id': self.integral_code_id.id, @@ -293,13 +292,11 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 'tool_loading_person': self.env.user.name, 'tool_loading_time': fields.Datetime.now() } - print('已运行2') functional_tool_assembly = self.env['sf.functional.tool.assembly'].search([ ('machine_tool_name_id', '=', self.machine_tool_name_id.id), ('cutter_spacing_code', '=', self.cutter_spacing_code), ('assemble_status', '=', '0'), ]) - print('已运行3') # 封装功能刀具数据 desc_2 = { 'barcode_id': stock_lot.id, @@ -323,10 +320,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel): 'applicable_range': None, 'image': None, } - print('已运行4') # 创建功能刀具列表、功能刀具预警、功能刀具实时分布、功能刀具出入库记录 record_1 = self.env['sf.functional.cutting.tool.entity'].create(desc_2) - print('已运行5') self.env['sf.functional.tool.warning'].create({ 'functional_cutting_tool_id': record_1.id, 'functional_tool_assembly_id': functional_tool_assembly.id, From 0c788df2f225943a5bb0416b6452b1738adefa90 Mon Sep 17 00:00:00 2001 From: "qihao.gong@jikimo.com" Date: Wed, 1 Nov 2023 17:33:50 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=B4=E4=BF=9D?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=A4=9A=E5=9B=BE=E7=89=87=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../static/src/scss/custom_style.scss | 1 + .../sf_equipment_maintenance_standards.py | 5 +- sf_maintenance/models/sf_maintenance.py | 20 ++-- .../models/sf_maintenance_requests.py | 2 +- .../views/maintenance_request_views.xml | 106 +++++++++++------- 5 files changed, 79 insertions(+), 55 deletions(-) diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index 00db5f3b..c9b53c68 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -17,6 +17,7 @@ div:has(.o_required_modifier) > label::before { } .my-image div { + width: 110px !important; height: 110px !important; } diff --git a/sf_maintenance/models/sf_equipment_maintenance_standards.py b/sf_maintenance/models/sf_equipment_maintenance_standards.py index 55fea8b0..80ec2ba3 100644 --- a/sf_maintenance/models/sf_equipment_maintenance_standards.py +++ b/sf_maintenance/models/sf_equipment_maintenance_standards.py @@ -48,8 +48,8 @@ class SfEquipmentSaintenanceStandards(models.Model): string='适用设备', domain="[('category_id', '=', maintenance_equipment_category_id)]" ) - - maintenance_standards_ids = fields.One2many('maintenance.standards', 'equipment_maintenance_standards_id', string='维保项目') + maintenance_standards_ids = fields.One2many('maintenance.standards', 'equipment_maintenance_standards_id', + string='维保项目', widget='one2many_list') eq_maintenance_ids = fields.One2many('maintenance.equipment', 'eq_maintenance_id', string='保养设备') overhaul_ids = fields.One2many('maintenance.equipment', 'overhaul_id', string='检修设备') @@ -81,6 +81,7 @@ class SfSaintenanceStandards(models.Model): [('电气类', '电气类'), ('机械类', '机械类'), ('程序类', '程序类'), ('系统类', '系统类')], string='类别') equipment_maintenance_standards_id = fields.Many2one('equipment.maintenance.standards', string='设备维保标准') images = fields.One2many('maintenance.standard.image', 'standard_id', string='反馈图片') + maintenance_request_ids = fields.Many2many('maintenance.request', string='维保计划') Period = fields.Integer('周期/频次(天)') remark = fields.Char('备注说明') diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py index 5c916387..91688c35 100644 --- a/sf_maintenance/models/sf_maintenance.py +++ b/sf_maintenance/models/sf_maintenance.py @@ -237,9 +237,9 @@ class SfMaintenanceEquipment(models.Model): item.brand_id = item.type_id.brand_id.id # AGV小车设备参数 - AGV_L = fields.Char('设备尺寸(长)') - AGV_W = fields.Char('设备尺寸(宽)') - AGV_H = fields.Char('设备尺寸(高)') + AGV_L = fields.Char('AGV尺寸(长)') + AGV_W = fields.Char('AGV尺寸(宽)') + AGV_H = fields.Char('AGV尺寸(高)') AGV_goods_L = fields.Char('载货尺寸(长)') AGV_goods_W = fields.Char('载货尺寸(宽)') AGV_goods_H = fields.Char('载货尺寸(高)') @@ -276,9 +276,9 @@ class SfMaintenanceEquipment(models.Model): detect_L = fields.Char('设备尺寸(长)') detect_W = fields.Char('设备尺寸(宽)') detect_H = fields.Char('设备尺寸(高)') - detect_x_axis = fields.Char('X轴') - detect_y_axis = fields.Char('Y轴') - detect_z_axis = fields.Char('Z轴') + detect_x_axis = fields.Char('检测X轴') + detect_y_axis = fields.Char('检测Y轴') + detect_z_axis = fields.Char('检测Z轴') detect_precision = fields.Char('测量精度') detect_measurement_mode = fields.Selection([('光栅尺', '光栅尺'), ('容栅', '容栅'), ('磁栅', '磁栅'), ('激光干涉仪', '激光干涉仪')], string='测量方式') detect_resolution = fields.Char('分辨率') @@ -295,8 +295,8 @@ class SfMaintenanceEquipment(models.Model): detect_object_field_of_view_max = fields.Char('物方视场(最大)') detect_object_field_of_view_min = fields.Char('物方视场(最小)') detect_power_requirements = fields.Char('电源要求') - detect_operating_temperature = fields.Char('环境温度') - detect_operating_humidity = fields.Char('环境湿度') + detect_operating_temperature = fields.Char('检测设备环境温度') + detect_operating_humidity = fields.Char('检测设备环境湿度') # 机器人设备参数 robot_gripping_of_workpieces_L = fields.Char('可抓取工件(长)') @@ -313,8 +313,8 @@ class SfMaintenanceEquipment(models.Model): robot_track_dimensions_H = fields.Char('轨道尺寸(高)') robot_drive_mode = fields.Char('驱动方式') robot_installation_method = fields.Selection([('置地式', '置地式'), ('壁挂式', '壁挂式'), ('倒挂式', '倒挂式')], string='安装方式') - robot_operating_temperature = fields.Char('环境温度') - robot_operating_humidity = fields.Char('环境湿度') + robot_operating_temperature = fields.Char('机器人环境温度') + robot_operating_humidity = fields.Char('机器人环境湿度') # 其他参数(所有设备) date_of_purchase = fields.Date('采购日期') diff --git a/sf_maintenance/models/sf_maintenance_requests.py b/sf_maintenance/models/sf_maintenance_requests.py index fad9e55f..330c1ece 100644 --- a/sf_maintenance/models/sf_maintenance_requests.py +++ b/sf_maintenance/models/sf_maintenance_requests.py @@ -25,7 +25,7 @@ class SfMaintenanceEquipmentCategory(models.Model): if not record.equipment_maintenance_id: record.equipment_maintenance_id = False - maintenance_standards = fields.Many2many('maintenance.standards', string='维保标准') + maintenance_standards = fields.Many2many('maintenance.standards', string='维保项目') @api.constrains('equipment_maintenance_id') def _check_equipment_maintenance_id(self): diff --git a/sf_maintenance/views/maintenance_request_views.xml b/sf_maintenance/views/maintenance_request_views.xml index 83bd6e44..1ad030b8 100644 --- a/sf_maintenance/views/maintenance_request_views.xml +++ b/sf_maintenance/views/maintenance_request_views.xml @@ -1,5 +1,63 @@ + + + + + maintenance.standards.form + maintenance.standards + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+
+
+ + + + + + +
+
+ +
+
+ +
+
+ + + Maintenance Standards + maintenance.standards + tree,form + + @@ -21,17 +79,16 @@ - - - - - + + + + - + + - @@ -71,40 +128,5 @@ - - - - maintenance.standards.form - maintenance.standards - -
- - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
\ No newline at end of file