diff --git a/sf_base/commons/Email.py b/sf_base/commons/Email.py new file mode 100644 index 00000000..d55fda9e --- /dev/null +++ b/sf_base/commons/Email.py @@ -0,0 +1,27 @@ +from odoo import api, models + + +class MailSender(models.Model): + _name = 'mail.sender' + _description = 'Mail Sender' + + def mail_sender(self, mail_server_name, subject_name, email_to, error_message): + mail_server = self.env['ir.mail_server'].sudo().search([('name', '=', mail_server_name)], limit=1) + if not mail_server: + _logger.info('管理员还未配置名称为 %s 的smtp服务器信息,请联系管理员配置!' % mail_server_name) + return + if not mail_server.smtp_user or not mail_server.smtp_pass: + _logger.info("邮件发送账号未正确设置,请联系管理员!") + return + mail_values = { + 'message_type': 'email', 'subject': subject_name, + 'mail_server_id': mail_server.id, 'email_from': mail_server.smtp_user, + 'email_to': email_to + } + temp_mail_html = """ + Hi,

这里是异常提醒通知:

+ """ + + temp_mail_html += """ %s """ % error_message + mail_values['body_html'] = temp_mail_html + self.env['mail.mail'].sudo().create(mail_values).send(auto_commit=True) diff --git a/sf_base/commons/__init__.py b/sf_base/commons/__init__.py index 63b820e7..da64fd48 100644 --- a/sf_base/commons/__init__.py +++ b/sf_base/commons/__init__.py @@ -1,2 +1,3 @@ from . import common from . import Printer +from . import Email diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 2039a35f..817e6421 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -817,54 +817,56 @@ class ResMrpWorkOrder(models.Model): raise UserError(_('请先完成上一步工单')) def button_finish(self): - if self.routing_type == '装夹预调': - if not self.material_center_point and self.X_deviation_angle > 0: - raise UserError("请对前置三元检测定位参数进行计算定位") - if not self.rfid_code: - raise UserError("请扫RFID码进行绑定") - if self.routing_type == '解除装夹': - ''' - 记录结束时间 - ''' - self.date_finished = datetime.now() - if self.picking_out_id: - picking_out = self.env['stock.picking'].search([('id', '=', self.picking_out_id.id)]) - if picking_out.workorder_out_id: - order_line_ids = [] - for item in picking_out.workorder_out_id: - server_product = self.env['product.template'].search( - [('server_product_process_parameters_id', '=', item.surface_technics_parameters_id.id), - ('detailed_type', '=', 'service')]) - if server_product: - order_line_ids.append((0, 0, { - 'product_id': server_product.product_variant_id.id, - 'product_qty': 1, - 'product_uom': server_product.uom_id.id - })) - else: - raise UserError( - '请先在产品中配置表面工艺为%s相关的外协服务产品' % item.surface_technics_parameters_id.name) - self.env['purchase.order'].create({ - 'partner_id': server_product.seller_ids.partner_id.id, - 'state': 'draft', - 'order_line': order_line_ids, - }) - super().button_finish() - is_production_id = True - for workorder in self.production_id.workorder_ids: - if workorder.state != 'done': - is_production_id = False - if is_production_id == True and self.name == '解除装夹': - for workorder in self.production_id.workorder_ids: - workorder.rfid_code_old = workorder.rfid_code - workorder.rfid_code = None - for move_raw_id in self.production_id.move_raw_ids: - move_raw_id.quantity_done = move_raw_id.product_uom_qty - self.process_state = '已完工' - self.production_id.button_mark_done1() - # self.production_id.state = 'done' - # if self.routing_type == '装夹预调': - # self.workpiece_delivery_ids.write({''}) + for record in self: + if record.routing_type == '装夹预调': + if not record.material_center_point and record.X_deviation_angle > 0: + raise UserError("请对前置三元检测定位参数进行计算定位") + if not record.rfid_code: + raise UserError("请扫RFID码进行绑定") + record.workpiece_delivery_ids[0].write({'status': '待下发'}) + + if record.routing_type == '解除装夹': + ''' + 记录结束时间 + ''' + record.date_finished = datetime.now() + + if record.picking_out_id: + picking_out = record.env['stock.picking'].search([('id', '=', record.picking_out_id.id)]) + if picking_out.workorder_out_id: + order_line_ids = [] + for item in picking_out.workorder_out_id: + server_product = record.env['product.template'].search( + [('server_product_process_parameters_id', '=', item.surface_technics_parameters_id.id), + ('detailed_type', '=', 'service')]) + if server_product: + order_line_ids.append((0, 0, { + 'product_id': server_product.product_variant_id.id, + 'product_qty': 1, + 'product_uom': server_product.uom_id.id + })) + else: + raise UserError( + '请先在产品中配置表面工艺为%s相关的外协服务产品' % item.surface_technics_parameters_id.name) + record.env['purchase.order'].create({ + 'partner_id': server_product.seller_ids.partner_id.id, + 'state': 'draft', + 'order_line': order_line_ids, + }) + super().button_finish() + is_production_id = True + for workorder in record.production_id.workorder_ids: + if workorder.state != 'done': + is_production_id = False + if is_production_id == True and record.name == '解除装夹': + for workorder in record.production_id.workorder_ids: + workorder.rfid_code_old = workorder.rfid_code + workorder.rfid_code = None + for move_raw_id in record.production_id.move_raw_ids: + move_raw_id.quantity_done = move_raw_id.product_uom_qty + record.process_state = '已完工' + record.production_id.button_mark_done1() + # self.production_id.state = 'done' # 将FTP的检测报告文件下载到临时目录 def download_reportfile_tmp(self, workorder, reportpath):