From f780d475621b7dd30cf4f842bf6fecb8adf67081 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 13 Mar 2025 16:12:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quality_control/models/quality.py | 133 ++++++++++++++---- quality_control/security/ir.model.access.csv | 1 + .../views/quality.check.measures.line.xml | 4 +- quality_control/views/quality_views.xml | 12 +- sf_quality/data/documents_data.xml | 15 +- sf_quality/views/quality_check_view.xml | 7 +- 6 files changed, 140 insertions(+), 32 deletions(-) diff --git a/quality_control/models/quality.py b/quality_control/models/quality.py index f67741a0..17acf218 100644 --- a/quality_control/models/quality.py +++ b/quality_control/models/quality.py @@ -128,7 +128,7 @@ class QualityPoint(models.Model): class QualityCheck(models.Model): _inherit = "quality.check" part_name = fields.Char('零件名称', related='product_id.part_name') - part_number = fields.Char('零件图号', related='product_id.part_number') + part_number = fields.Char('零件图号', related='product_id.part_number', readonly=False, store=True) material_name = fields.Char('材料名称', compute='_compute_material_name') # # 总数量,值为调拨单_产品明细_数量 @@ -187,10 +187,21 @@ class QualityCheck(models.Model): ('OK', 'OK'), ('NG', 'NG') ], string='出厂检验报告结果', default='OK') - measure_operator = fields.Char('测量员', readonly=True) - quality_manager = fields.Char('质量管理人员', readonly=True) + measure_operator = fields.Many2one('res.users', string='操机员') + quality_manager = fields.Many2one('res.users', string='质检员') + # 流水号(从1开始,最大99) + serial_number = fields.Integer('流水号', default=1, readonly=True) + # 发布历史 + report_history_ids = fields.One2many('quality.check.report.history', 'check_id', string='发布历史') + + # 发布状态 + publish_status = fields.Selection([ + ('draft', '草稿'), + ('published', '已发布'), + ('canceled', '已撤销') + ], string='发布状态', default='draft') def add_measure_line(self): """ @@ -229,46 +240,91 @@ class QualityCheck(models.Model): res_ids=self.ids ) - # 获取默认的文档文件夹 - workspace = self.env['documents.folder'].search([('name', '=', '出厂检验报告')], limit=1) - + attachment = self.env['ir.attachment'].create({ + 'name': self.name, + 'type': 'binary', + 'datas': pdf_content, + 'res_model': self._name, + 'res_id': self.id, + 'mimetype': 'application/pdf', + }) + + # 获取已发布的文档文件夹 + workspace = self.env['documents.folder'].search([('parent_folder_id', '=', self.env.ref('sf_quality.documents_purchase_contracts_folder').id), ('name', '=', '已发布')], limit=1) + + if self.serial_number > 99: + raise UserError(_('流水号不能大于99')) + + str_serial_number = '0' + str(self.serial_number) if self.serial_number < 10 else str(self.serial_number) + str_part_number = self.part_number if self.part_number else '' # 3. 创建文档记录 doc_vals = { - 'name': f'FQC-{self.name}', - 'raw': pdf_content, - 'mimetype': 'application/pdf', + 'name': f'FQC{str_part_number}{str_serial_number}', + # 'raw': pdf_content, + 'attachment_id': attachment.id, + # 'mimetype': 'application/pdf', 'res_id': self.id, 'folder_id': workspace.id, 'res_model': self._name, } - # 如果已经有报告,则更新 - if self.report_number_id: - self.report_number_id.write(doc_vals) - else: - # 创建新的document记录 - doc = self.env['documents.document'].create(doc_vals) - # 关联到当前质检记录 - self.write({ - 'report_number_id': doc.id, - 'measure_operator': self.env.user.name, # 记录操作人 - 'quality_manager': self.env.user.name, # 记录质检人 - }) + doc = self.env['documents.document'].create(doc_vals) + # 关联到当前质检记录 + self.write({ + 'report_number_id': doc.id, + 'publish_status': 'published' + }) + # 记录发布历史 + self.env['quality.check.report.history'].create({ + 'check_id': self.id, + 'report_number_id': doc.id, + 'action': 'publish', + 'operator': self.env.user.name, + 'operation_time': datetime.now(), + 'document_status': 'published', + 'sequence': len(self.report_history_ids) + 1 + }) + + # 更新流水号 + self.serial_number += 1 + + # 返回成功消息 return True def do_cancel_publish(self): """ - 取消发布出厂检验报告 + 取消发布出厂检验报告(将当前质检单关联的出厂检验报告文档位置移动到废弃文件夹), 并记录发布历史 """ - pass + self.ensure_one() + # 1. 获取已发布的文档文件夹 + workspace = self.env['documents.folder'].search([('parent_folder_id', '=', self.env.ref('sf_quality.documents_purchase_contracts_folder').id), ('name', '=', '已发布')], limit=1) + # 2. 将当前质检单关联的出厂检验报告文档位置移动到废弃文件夹 + self.report_number_id.write({ + 'folder_id': self.env.ref('sf_quality.documents_purchase_contracts_folder_canceled').id, + }) + # 3. 更新发布状态 + self.publish_status = 'canceled' + # 3. 记录发布历史 + self.env['quality.check.report.history'].create({ + 'check_id': self.id, + 'report_number_id': self.report_number_id.id, + 'action': 'cancel_publish', + 'operator': self.env.user.name, + 'operation_time': datetime.now(), + 'document_status': 'canceled', + 'sequence': len(self.report_history_ids) + 1 + }) + return True + def do_re_publish(self): """ - 重新发布出厂检验报告 + 重新发布出厂检验报告,参考发布规则 """ - pass + self.do_publish() + def generate_qr_code(self): """生成二维码URL""" @@ -725,3 +781,30 @@ class QualityCheckMeasureLine(models.Model): def del_measure_value(self): self.ensure_one() self.sudo().unlink() + + +# 增加出厂检验报告发布历史 +class QualityCheckReportHistory(models.Model): + _name = 'quality.check.report.history' + _description = '出厂检验报告发布历史' + + check_id = fields.Many2one('quality.check', string='质检单', required=True, ondelete='cascade') + report_number_id = fields.Many2one('documents.document', string='报告编号', readonly=True) + + sequence = fields.Integer('序号') + # 操作(发布、撤销发布、重新发布) + action = fields.Selection([ + ('publish', '发布'), + ('cancel_publish', '撤销发布'), + ('re_publish', '重新发布') + ], string='操作') + # 操作人 + operator = fields.Char('操作人') + # 操作时间 + operation_time = fields.Datetime('操作时间') + # 文档状态(已发布、废弃) + document_status = fields.Selection([ + ('published', '已发布'), + ('canceled', '废弃') + ], string='操作后文档状态') + diff --git a/quality_control/security/ir.model.access.csv b/quality_control/security/ir.model.access.csv index c0c409a6..d06537b6 100644 --- a/quality_control/security/ir.model.access.csv +++ b/quality_control/security/ir.model.access.csv @@ -2,3 +2,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_quality_check_wizard,access.quality_check_wizard,model_quality_check_wizard,quality.group_quality_user,1,1,1,0 access_quality_check_measure_line,quality.check.measure.line,model_quality_check_measure_line,base.group_user,1,1,1,0 access_quality_check_import_complex_model_wizard,quality.check.import.complex.model.wizard,model_quality_check_import_complex_model_wizard,quality.group_quality_user,1,1,1,0 +access_quality_check_report_history,quality.check.report.history,model_quality_check_report_history,quality.group_quality_user,1,1,1,0 \ No newline at end of file diff --git a/quality_control/views/quality.check.measures.line.xml b/quality_control/views/quality.check.measures.line.xml index c0e3be04..9000fbd3 100644 --- a/quality_control/views/quality.check.measures.line.xml +++ b/quality_control/views/quality.check.measures.line.xml @@ -4,7 +4,7 @@ quality.check.measure.line.tree quality.check.measure.line - + @@ -14,7 +14,7 @@ - +