From 04b255d5c6a5267387ce19810accc367b4c2ea20 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 13 Mar 2025 14:10:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=8A=A5=E5=91=8A=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quality_control/models/quality.py | 72 ++++++++- quality_control/views/quality_views.xml | 4 +- sf_quality/__manifest__.py | 6 +- sf_quality/data/documents_data.xml | 11 ++ .../data/insepection_report_template.xml | 146 ++++++++++++++++++ sf_quality/data/report_actions.xml | 22 +++ sf_quality/models/__init__.py | 1 + sf_quality/models/quality_company.py | 8 + sf_quality/views/quality_check_view.xml | 8 + sf_quality/views/quality_company.xml | 13 ++ 10 files changed, 283 insertions(+), 8 deletions(-) create mode 100644 sf_quality/data/documents_data.xml create mode 100644 sf_quality/data/insepection_report_template.xml create mode 100644 sf_quality/data/report_actions.xml create mode 100644 sf_quality/models/quality_company.py create mode 100644 sf_quality/views/quality_company.xml diff --git a/quality_control/models/quality.py b/quality_control/models/quality.py index be730d1c..f67741a0 100644 --- a/quality_control/models/quality.py +++ b/quality_control/models/quality.py @@ -11,6 +11,8 @@ from odoo.api import depends from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT, float_round from odoo.osv.expression import OR from odoo.exceptions import UserError +from odoo.tools import image_data_uri +from base64 import b64encode class QualityPoint(models.Model): @@ -170,13 +172,26 @@ class QualityCheck(models.Model): self.check_qty = '1' # 出厂检验报告编号 - report_number_id = fields.Many2one('document.document', string='出厂检验报告编号', readonly=True) + report_number_id = fields.Many2one('documents.document', string='出厂检验报告编号', readonly=True) + + # 出厂检验报告、关联文档的数据 + report_content = fields.Binary(string='出厂检验报告', related='report_number_id.datas') + is_out_check = fields.Boolean(string='是否出库检验', compute='_compute_is_out_check', readonly=True) measure_line_ids = fields.One2many('quality.check.measure.line', 'check_id', string='测量明细') categ_type = fields.Selection(string='产品的类别', related='product_id.categ_id.type', store=True) + report_result = fields.Selection([ + ('OK', 'OK'), + ('NG', 'NG') + ], string='出厂检验报告结果', default='OK') + measure_operator = fields.Char('测量员', readonly=True) + quality_manager = fields.Char('质量管理人员', readonly=True) + + + def add_measure_line(self): """ 新增测量值,如果测量值有5列了,则提示“最多只能有5列测量值” @@ -202,10 +217,46 @@ class QualityCheck(models.Model): pass def do_publish(self): - """ - 发布出厂检验报告 - """ - pass + """发布出厂检验报告""" + self.ensure_one() + + # 1. 获取报告动作 + report_action = self.env.ref('sf_quality.action_report_quality_inspection') + + # 2. 生成PDF报告 - 修改这里的调用方式 + pdf_content, _ = report_action._render_qweb_pdf( + report_ref=report_action.report_name, # 添加report_ref参数 + res_ids=self.ids + ) + + # 获取默认的文档文件夹 + workspace = self.env['documents.folder'].search([('name', '=', '出厂检验报告')], limit=1) + + # 3. 创建文档记录 + doc_vals = { + 'name': f'FQC-{self.name}', + 'raw': pdf_content, + '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, # 记录质检人 + }) + + return True + def do_cancel_publish(self): """ @@ -219,6 +270,17 @@ class QualityCheck(models.Model): """ pass + def generate_qr_code(self): + """生成二维码URL""" + self.ensure_one() + base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + return image_data_uri( + b64encode(self.env['ir.actions.report'].barcode( + 'QR', base_url + '/#/index/publicPay?order_id=' + str(self.id) + '&source=%2Findex%2Fmyorder', + width=140, height=140) + ) + ) + @depends('product_id') def _compute_material_name(self): for record in self: diff --git a/quality_control/views/quality_views.xml b/quality_control/views/quality_views.xml index b10295b8..c55a6f53 100644 --- a/quality_control/views/quality_views.xml +++ b/quality_control/views/quality_views.xml @@ -273,7 +273,7 @@ - + @@ -343,7 +343,7 @@ - + diff --git a/sf_quality/__manifest__.py b/sf_quality/__manifest__.py index 9ca7128a..560963b7 100644 --- a/sf_quality/__manifest__.py +++ b/sf_quality/__manifest__.py @@ -17,10 +17,14 @@ 'data': [ 'security/ir.model.access.csv', 'data/check_standards.xml', + 'data/documents_data.xml', + 'data/insepection_report_template.xml', + 'data/report_actions.xml', 'views/view.xml', 'views/quality_cnc_test_view.xml', 'views/mrp_workorder.xml', - 'views/quality_check_view.xml' + 'views/quality_check_view.xml', + 'views/quality_company.xml' ], 'assets': { diff --git a/sf_quality/data/documents_data.xml b/sf_quality/data/documents_data.xml new file mode 100644 index 00000000..69fdbe8c --- /dev/null +++ b/sf_quality/data/documents_data.xml @@ -0,0 +1,11 @@ + + + + + + 出厂检验报告 + 存放出厂检验报告相关文件 + 11 + + + \ No newline at end of file diff --git a/sf_quality/data/insepection_report_template.xml b/sf_quality/data/insepection_report_template.xml new file mode 100644 index 00000000..d8df704a --- /dev/null +++ b/sf_quality/data/insepection_report_template.xml @@ -0,0 +1,146 @@ + + + + + + + + + + \ No newline at end of file diff --git a/sf_quality/data/report_actions.xml b/sf_quality/data/report_actions.xml new file mode 100644 index 00000000..2d875d71 --- /dev/null +++ b/sf_quality/data/report_actions.xml @@ -0,0 +1,22 @@ + + + + 出厂检验报告 + quality.check + qweb-pdf + sf_quality.report_quality_inspection + sf_quality.report_quality_inspection + 'QC-' + object.name + '.pdf' + + report + + + + + 预览检验报告 + quality.inspection + qweb-html + sf_quality.report_quality_inspection + report + + \ No newline at end of file diff --git a/sf_quality/models/__init__.py b/sf_quality/models/__init__.py index 4fcdb16f..b547faa9 100644 --- a/sf_quality/models/__init__.py +++ b/sf_quality/models/__init__.py @@ -6,3 +6,4 @@ from . import quality from . import quality_cnc_test from . import mrp_workorder # from . import stock +from . import quality_company diff --git a/sf_quality/models/quality_company.py b/sf_quality/models/quality_company.py new file mode 100644 index 00000000..de80ad50 --- /dev/null +++ b/sf_quality/models/quality_company.py @@ -0,0 +1,8 @@ +from odoo import models, fields + + +# 为公司增加字段 +class Company(models.Model): + _inherit = 'res.company' + + factory_name = fields.Char('加工工厂') diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml index eaee2a84..d288324e 100644 --- a/sf_quality/views/quality_check_view.xml +++ b/sf_quality/views/quality_check_view.xml @@ -70,6 +70,14 @@ +