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 @@
-
+
diff --git a/quality_control/views/quality_views.xml b/quality_control/views/quality_views.xml
index c55a6f53..1f7cbbd2 100644
--- a/quality_control/views/quality_views.xml
+++ b/quality_control/views/quality_views.xml
@@ -318,6 +318,7 @@
+
@@ -356,7 +357,16 @@
-
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_quality/data/documents_data.xml b/sf_quality/data/documents_data.xml
index 69fdbe8c..3e18668a 100644
--- a/sf_quality/data/documents_data.xml
+++ b/sf_quality/data/documents_data.xml
@@ -1,11 +1,24 @@
-
+
出厂检验报告
存放出厂检验报告相关文件
11
+
+
+ 已发布
+
+ 1
+
+
+
+ 废弃
+
+ 2
+
+
\ No newline at end of file
diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml
index d288324e..e8c024a6 100644
--- a/sf_quality/views/quality_check_view.xml
+++ b/sf_quality/views/quality_check_view.xml
@@ -70,6 +70,7 @@
+
-
-
-
+
+
+