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; 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() diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index 76f3fcb7..7d66e8d2 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -26,5 +26,13 @@ 坯料采购提醒 purchase.order + + 坯料发料提醒 + stock.picking + + + 工单已下发通知 + mrp.workorder + \ No newline at end of file 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..9a1a01f4 100644 --- a/sf_message/models/sf_message_functional_tool_dismantle.py +++ b/sf_message/models/sf_message_functional_tool_dismantle.py @@ -9,10 +9,7 @@ class SFMessagefunctionalToolDismantle(models.Model): @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 diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py index d66008f9..a1611652 100644 --- a/sf_message/models/sf_message_stock_picking.py +++ b/sf_message/models/sf_message_stock_picking.py @@ -1,13 +1,49 @@ +import re 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() - 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 + + @api.depends('move_type', 'immediate_transfer', 'move_ids.state', 'move_ids.picking_id') + def _compute_state(self): + super(SFMessageStockPicking, self)._compute_state() + for record in self: + if record.state == 'assigned' and record.check_in == 'PC': + record.add_queue('坯料发料提醒') + + def _get_message(self, message_queue_ids): + 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))]) + 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: + 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)).replace('{{request_url}}', url) + product_id.append(mrp_production_info.product_id.id) + contents.append(content) + else: + res = super(SFMessageStockPicking, self)._get_message(message_queue_id) + contents.append(res) + return contents 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..2462b3f1 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -3,4 +3,31 @@ 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: + 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 "").replace( + '{{request_url}}', url) + product_id.append(mrp_workorder_line.product_id.id) + contents.append(content) + return contents 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}) 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 @@ 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),