From 34280fe24b59a66f1666cab0bc3ef1ecaf66af5b Mon Sep 17 00:00:00 2001 From: guanhuan Date: Mon, 23 Sep 2024 16:43:29 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=9D=AF=E6=96=99=E5=8F=91=E6=96=99?= =?UTF-8?q?=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/data/bussiness_node.xml | 4 +++ sf_message/models/sf_message_stock_picking.py | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 76f3fcb7..924b669e 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -26,5 +26,9 @@ 坯料采购提醒 purchase.order + + 坯料发料提醒 + stock.picking + \ No newline at end of file diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index d66008f9..cabc376e 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -1,3 +1,4 @@ +import re from odoo import models, fields, api, _ @@ -11,3 +12,28 @@ class SFMessageStockPicking(models.Model): if self.location_id.name == '进货' and self.location_dest_id.name == '刀具房': self.add_queue('调拨入库') return res + + @api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id') + def _compute_state(self): + super(SFMessageStockPicking, self)._compute_state() + if self.state == 'assigned' and self.check_in == 'PC': + self.add_queue('坯料发料提醒') + + def _get_message(self, message_queue_ids): + contents = [] + product_id = [] + for message_queue_id in message_queue_ids: + if message_queue_id.message_template_id.name == '坯料发料提醒': + content = message_queue_id.message_template_id.content + stock_picking_line = self.env['stock.picking'].search([('id', '=', int(message_queue_id.res_id))]) + stock_picking_info = self.env['stock.picking'].search( + [('product_id', '=', stock_picking_line.product_id.id), ('state', '=', 'assigned'), + ('check_in', '=', 'PC')]) + if stock_picking_info and stock_picking_info.product_id.id not in product_id: + content = content.replace('{{product_id}}', stock_picking_info.product_id.name) + content = content.replace('{{number}}', str(len(stock_picking_info))) + product_id.append(stock_picking_info.product_id.id) + contents.append(content) + res = super(SFMessageStockPicking, self)._get_message(message_queue_ids) + contents.append(res) + return contents From d197fc5b9eec5038d460463c0cafd64cd4301ca0 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 23 Sep 2024 16:58:58 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E4=BF=9D=E7=95=99=E5=B0=8F=E6=95=B0?= =?UTF-8?q?=E7=82=B9=E5=90=8E=E4=B8=A4=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_mrs_connect/models/res_config_setting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index 72b04e92..6ec49f74 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -175,7 +175,7 @@ class ResConfigSettings(models.TransientModel): new_price = res_order_lines_map.get(str(index)) if order_line: # 修改单价 - order_line.write({'remark': new_price*order_line.product_uom_qty}) + order_line.write({'remark': round(new_price*order_line.product_uom_qty,2)}) order_price = self.env['order.price'].sudo().search([('sale_order_id', '=',need_change_sale_order.id )]) if not order_price: self.env['order.price'].sudo().create({'sale_order_id':need_change_sale_order.id}) From d52f0aed6edae14e661d14ddd88d8198762f3586 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Mon, 23 Sep 2024 17:11:53 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E5=9D=AF=E6=96=99=E5=8F=91=E6=96=99?= =?UTF-8?q?=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_stock_picking.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index cabc376e..ca8d6bf4 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -5,7 +5,7 @@ from odoo import models, fields, api, _ class SFMessageStockPicking(models.Model): _name = 'stock.picking' _description = "库存调拨" - _inherit = ['stock.picking', 'jikimo.message.dispatch'] + _inherit = ['stock.picking', 'jikimo.message.dispatch'] def button_validate(self): res = super(SFMessageStockPicking, self).button_validate() @@ -34,6 +34,7 @@ class SFMessageStockPicking(models.Model): content = content.replace('{{number}}', str(len(stock_picking_info))) product_id.append(stock_picking_info.product_id.id) contents.append(content) - res = super(SFMessageStockPicking, self)._get_message(message_queue_ids) - contents.append(res) + else: + res = super(SFMessageStockPicking, self)._get_message(message_queue_id) + contents.append(res) return contents From 75b60c1ec8ca3354b1b30ba498b7962e6521515e Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 23 Sep 2024 17:47:03 +0800 Subject: [PATCH 04/11] =?UTF-8?q?bom=E6=B8=85=E5=8D=95=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E5=BC=8F=E5=88=80=E5=85=B7=E5=8C=B9=E9=85=8D=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/jikimo_bom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_tool_management/models/jikimo_bom.py b/sf_tool_management/models/jikimo_bom.py index b5caf495..e07f0bbc 100644 --- a/sf_tool_management/models/jikimo_bom.py +++ b/sf_tool_management/models/jikimo_bom.py @@ -84,7 +84,7 @@ class jikimo_bom(models.Model): if option.name == '整体式刀具': domain = ['&'] + domain + [ - '|', + '&', # 刀具直径 ('cutting_tool_blade_diameter', '=', self.tool_inventory_id.diameter), From 378850682d966ef9004204eb35ed5764256c1327 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Mon, 23 Sep 2024 17:50:25 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_bf_connect/models/process_status.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sf_bf_connect/models/process_status.py b/sf_bf_connect/models/process_status.py index 3bbdb5fc..1bfdd356 100644 --- a/sf_bf_connect/models/process_status.py +++ b/sf_bf_connect/models/process_status.py @@ -55,8 +55,7 @@ class StatusChange(models.Model): logging.info('接口已经执行=============') else: traceback_error = traceback.format_exc() - logging.error("bfm订单状态同步失败:%s request info %s" % traceback_error) - logging.error('/api/get/state/get_order 请求失败{}'.format(ret)) + logging.error("bfm订单状态同步失败:%s" % traceback_error) raise UserError('工厂加工同步订单状态到bfm失败') except UserError as e: traceback_error = traceback.format_exc() From 38d3a7901dea85970b9fe30bf17fc7b509d226c6 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 24 Sep 2024 10:23:09 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E4=B8=8E=E6=8B=86=E8=A7=A3=E4=BF=A1=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_functional_tool_assembly.py | 5 +---- sf_message/models/sf_message_functional_tool_dismantle.py | 6 +----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/sf_message/models/sf_message_functional_tool_assembly.py b/sf_message/models/sf_message_functional_tool_assembly.py index d4e05fc0..bf745b53 100644 --- a/sf_message/models/sf_message_functional_tool_assembly.py +++ b/sf_message/models/sf_message_functional_tool_assembly.py @@ -9,10 +9,7 @@ class SFMessagefunctionalToolAssembly(models.Model): @api.model_create_multi def create(self, vals): result = super(SFMessagefunctionalToolAssembly, self).create(vals) - is_cam = False for obj in result: if obj.loading_task_source == '0' and obj.assemble_status == '0': - is_cam = True - if is_cam: - self.add_queue('功能刀具组装') + obj.add_queue('功能刀具组装') return result diff --git a/sf_message/models/sf_message_functional_tool_dismantle.py b/sf_message/models/sf_message_functional_tool_dismantle.py index dac3db28..73197f55 100644 --- a/sf_message/models/sf_message_functional_tool_dismantle.py +++ b/sf_message/models/sf_message_functional_tool_dismantle.py @@ -6,13 +6,9 @@ class SFMessagefunctionalToolDismantle(models.Model): _description = "刀具拆解单" _inherit = ['sf.functional.tool.dismantle', 'jikimo.message.dispatch'] - @api.model def create(self, vals): result = super(SFMessagefunctionalToolDismantle, self).create(vals) - is_dismantle = False for obj in result: if obj.dismantle_cause in ['寿命到期报废', '崩刀报废']and obj.state=='待拆解': - is_dismantle = True - if is_dismantle: - self.add_queue('功能刀具寿命到期') + obj.add_queue('功能刀具寿命到期') return result From 36c1c7b1705c3b39c67718acaf5ed7f304ebfed7 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 24 Sep 2024 10:56:23 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E5=8D=95=E5=B7=B2=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/data/bussiness_node.xml | 4 +++ sf_message/models/sf_message_stock_picking.py | 21 ++++++++++----- sf_message/models/sf_message_template.py | 1 + sf_message/models/sf_message_workorder.py | 26 ++++++++++++++++++- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 924b669e..7d66e8d2 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -30,5 +30,9 @@ 坯料发料提醒 stock.picking + + 工单已下发通知 + mrp.workorder + \ No newline at end of file diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index ca8d6bf4..8bbe9db5 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -23,16 +23,23 @@ class SFMessageStockPicking(models.Model): contents = [] product_id = [] for message_queue_id in message_queue_ids: + i = 0 if message_queue_id.message_template_id.name == '坯料发料提醒': content = message_queue_id.message_template_id.content stock_picking_line = self.env['stock.picking'].search([('id', '=', int(message_queue_id.res_id))]) - stock_picking_info = self.env['stock.picking'].search( - [('product_id', '=', stock_picking_line.product_id.id), ('state', '=', 'assigned'), - ('check_in', '=', 'PC')]) - if stock_picking_info and stock_picking_info.product_id.id not in product_id: - content = content.replace('{{product_id}}', stock_picking_info.product_id.name) - content = content.replace('{{number}}', str(len(stock_picking_info))) - product_id.append(stock_picking_info.product_id.id) + mrp_production_info = self.env['mrp.production'].search( + [('name', '=', stock_picking_line.origin)]) + mrp_production_list = self.env['mrp.production'].search( + [('product_id', '=', mrp_production_info.product_id.id)]) + for mrp_production_line in mrp_production_list: + picking_ids = mrp_production_line.picking_ids + for picking_id in picking_ids: + if picking_id.state == 'assigned' and picking_id.check_in == 'PC': + i += 1 + if i > 0 and mrp_production_info.product_id.id not in product_id: + content = content.replace('{{product_id}}', mrp_production_info.product_id.name).replace( + '{{number}}', str(i)) + product_id.append(mrp_production_info.product_id.id) contents.append(content) else: res = super(SFMessageStockPicking, self)._get_message(message_queue_id) diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py index 957b0f58..56346c27 100644 --- a/sf_message/models/sf_message_template.py +++ b/sf_message/models/sf_message_template.py @@ -13,4 +13,5 @@ class SfMessageTemplate(models.Model): res.append('sf.functional.tool.assembly') res.append('sf.functional.tool.dismantle') res.append('purchase.order') + res.append('mrp.workorder') return res diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 626c092d..d74a663d 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -3,4 +3,28 @@ from odoo import models, fields, api, _ class SFMessageWork(models.Model): _name = 'mrp.workorder' - _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] + _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] + + @api.depends('production_availability', 'blocked_by_workorder_ids.state') + def _compute_state(self): + super(SFMessageWork, self)._compute_state() + if self.state == 'ready' and self.routing_type == '装夹预调': + self.add_queue('工单已下发通知') + + def _get_message(self, message_queue_ids): + contents = [] + product_id = [] + for message_queue_id in message_queue_ids: + if message_queue_id.message_template_id.name == '工单已下发通知': + content = message_queue_id.message_template_id.content + mrp_workorder_line = self.env['mrp.workorder'].search([('id', '=', int(message_queue_id.res_id))]) + mrp_workorder_list = self.env['mrp.workorder'].search( + [('product_id', '=', mrp_workorder_line.product_id.id), ('state', '=', 'ready'), + ('routing_type', '=', '装夹预调')]) + if len(mrp_workorder_list) > 0 and mrp_workorder_line.product_id.id not in product_id: + content = content.replace('{{product_id}}', mrp_workorder_line.product_id.name).replace( + '{{number}}', str(len(mrp_workorder_list))).replace( + '{{part_number}}', mrp_workorder_line.part_number if mrp_workorder_line.part_number else "") + product_id.append(mrp_workorder_line.product_id.id) + contents.append(content) + return contents From d6fdeafef613a2d910de587a4449d1d808ed29c9 Mon Sep 17 00:00:00 2001 From: hy <1298386937@qq.com> Date: Tue, 24 Sep 2024 11:14:08 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=88=B6=E9=80=A0-=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=BA=93=E7=95=8C=E9=9D=A2=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=9C=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/static/src/scss/test.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/sf_base/static/src/scss/test.scss b/sf_base/static/src/scss/test.scss index c91a8a77..565e7956 100644 --- a/sf_base/static/src/scss/test.scss +++ b/sf_base/static/src/scss/test.scss @@ -159,9 +159,6 @@ td.o_required_modifier { display:inline; } .diameter{ - display: flex !important; - justify-content: flex-start !important; - align-items: center !important; } .o_address_format { display: flex !important; From b986dd84733c4d0a05843ba12d44691bc2511d3a Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 24 Sep 2024 14:58:32 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E4=B8=8E=E6=8B=86=E8=A7=A3=E4=BF=A1=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_functional_tool_dismantle.py | 1 + sf_mrs_connect/security/ir.model.access.csv | 5 +---- sf_mrs_connect/views/order_price.xml | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/sf_message/models/sf_message_functional_tool_dismantle.py b/sf_message/models/sf_message_functional_tool_dismantle.py index 73197f55..9a1a01f4 100644 --- a/sf_message/models/sf_message_functional_tool_dismantle.py +++ b/sf_message/models/sf_message_functional_tool_dismantle.py @@ -6,6 +6,7 @@ class SFMessagefunctionalToolDismantle(models.Model): _description = "刀具拆解单" _inherit = ['sf.functional.tool.dismantle', 'jikimo.message.dispatch'] + @api.model def create(self, vals): result = super(SFMessagefunctionalToolDismantle, self).create(vals) for obj in result: diff --git a/sf_mrs_connect/security/ir.model.access.csv b/sf_mrs_connect/security/ir.model.access.csv index 60d5cea5..c2212eb1 100644 --- a/sf_mrs_connect/security/ir.model.access.csv +++ b/sf_mrs_connect/security/ir.model.access.csv @@ -1,7 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_sf_static_resource_datasync,sf_static_resource_datasync,model_sf_static_resource_datasync,base.group_user,1,1,1,1 -access_order_price,order.price,model_order_price,base.group_user,1,1,1,1 - - - +access_order_price,order.price,model_order_price,sf_base.group_sale_director,1,1,1,1 \ No newline at end of file diff --git a/sf_mrs_connect/views/order_price.xml b/sf_mrs_connect/views/order_price.xml index b5a9eb0f..9a44e045 100644 --- a/sf_mrs_connect/views/order_price.xml +++ b/sf_mrs_connect/views/order_price.xml @@ -8,7 +8,7 @@ From 7a8753408be9163f73de5577500717936110d783 Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 24 Sep 2024 16:23:45 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_stock_picking.py | 8 +++++--- sf_message/models/sf_message_workorder.py | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index 8bbe9db5..2eb7fe93 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -16,8 +16,9 @@ class SFMessageStockPicking(models.Model): @api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id') def _compute_state(self): super(SFMessageStockPicking, self)._compute_state() - if self.state == 'assigned' and self.check_in == 'PC': - self.add_queue('坯料发料提醒') + for record in self: + if record.state == 'assigned' and record.check_in == 'PC': + record.add_queue('坯料发料提醒') def _get_message(self, message_queue_ids): contents = [] @@ -37,8 +38,9 @@ class SFMessageStockPicking(models.Model): if picking_id.state == 'assigned' and picking_id.check_in == 'PC': i += 1 if i > 0 and mrp_production_info.product_id.id not in product_id: + url = message_queue_id.message_template_id.get_url(int(message_queue_id.res_id)) content = content.replace('{{product_id}}', mrp_production_info.product_id.name).replace( - '{{number}}', str(i)) + '{{number}}', str(i)).replace('{{request_url}}', url) product_id.append(mrp_production_info.product_id.id) contents.append(content) else: diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index d74a663d..2462b3f1 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -22,9 +22,12 @@ class SFMessageWork(models.Model): [('product_id', '=', mrp_workorder_line.product_id.id), ('state', '=', 'ready'), ('routing_type', '=', '装夹预调')]) if len(mrp_workorder_list) > 0 and mrp_workorder_line.product_id.id not in product_id: + url = message_queue_id.message_template_id.get_url(int(message_queue_id.res_id)) + "&active_id=1" content = content.replace('{{product_id}}', mrp_workorder_line.product_id.name).replace( '{{number}}', str(len(mrp_workorder_list))).replace( - '{{part_number}}', mrp_workorder_line.part_number if mrp_workorder_line.part_number else "") + '{{part_number}}', + mrp_workorder_line.part_number if mrp_workorder_line.part_number else "").replace( + '{{request_url}}', url) product_id.append(mrp_workorder_line.product_id.id) contents.append(content) return contents From 84a37a970f78752faff8d37319c793de2a800e30 Mon Sep 17 00:00:00 2001 From: liaodanlong Date: Tue, 24 Sep 2024 17:57:03 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E8=B0=83=E6=8B=A8=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_message/models/sf_message_stock_picking.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index 2eb7fe93..a1611652 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -9,7 +9,7 @@ class SFMessageStockPicking(models.Model): def button_validate(self): res = super(SFMessageStockPicking, self).button_validate() - if self.location_id.name == '进货' and self.location_dest_id.name == '刀具房': + if self.location_id.name == 'Vendors' and self.location_dest_id.name == '进货': self.add_queue('调拨入库') return res