发布相关

This commit is contained in:
mgw
2025-03-13 16:12:48 +08:00
parent 04b255d5c6
commit f780d47562
6 changed files with 140 additions and 32 deletions

View File

@@ -128,7 +128,7 @@ class QualityPoint(models.Model):
class QualityCheck(models.Model): class QualityCheck(models.Model):
_inherit = "quality.check" _inherit = "quality.check"
part_name = fields.Char('零件名称', related='product_id.part_name') 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') material_name = fields.Char('材料名称', compute='_compute_material_name')
# # 总数量值为调拨单_产品明细_数量 # # 总数量值为调拨单_产品明细_数量
@@ -187,10 +187,21 @@ class QualityCheck(models.Model):
('OK', 'OK'), ('OK', 'OK'),
('NG', 'NG') ('NG', 'NG')
], string='出厂检验报告结果', default='OK') ], string='出厂检验报告结果', default='OK')
measure_operator = fields.Char('测量员', readonly=True) measure_operator = fields.Many2one('res.users', string='操机员')
quality_manager = fields.Char('质量管理人员', readonly=True) 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): def add_measure_line(self):
""" """
@@ -229,46 +240,91 @@ class QualityCheck(models.Model):
res_ids=self.ids res_ids=self.ids
) )
# 获取默认的文档文件夹 attachment = self.env['ir.attachment'].create({
workspace = self.env['documents.folder'].search([('name', '=', '出厂检验报告')], limit=1) '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. 创建文档记录 # 3. 创建文档记录
doc_vals = { doc_vals = {
'name': f'FQC-{self.name}', 'name': f'FQC{str_part_number}{str_serial_number}',
'raw': pdf_content, # 'raw': pdf_content,
'mimetype': 'application/pdf', 'attachment_id': attachment.id,
# 'mimetype': 'application/pdf',
'res_id': self.id, 'res_id': self.id,
'folder_id': workspace.id, 'folder_id': workspace.id,
'res_model': self._name, 'res_model': self._name,
} }
# 如果已经有报告,则更新 doc = self.env['documents.document'].create(doc_vals)
if self.report_number_id: # 关联到当前质检记录
self.report_number_id.write(doc_vals) self.write({
else: 'report_number_id': doc.id,
# 创建新的document记录 'publish_status': 'published'
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, # 记录质检人
})
# 记录发布历史
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 return True
def do_cancel_publish(self): 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): def do_re_publish(self):
""" """
重新发布出厂检验报告 重新发布出厂检验报告,参考发布规则
""" """
pass self.do_publish()
def generate_qr_code(self): def generate_qr_code(self):
"""生成二维码URL""" """生成二维码URL"""
@@ -725,3 +781,30 @@ class QualityCheckMeasureLine(models.Model):
def del_measure_value(self): def del_measure_value(self):
self.ensure_one() self.ensure_one()
self.sudo().unlink() 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='操作后文档状态')

View File

@@ -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_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_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_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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_quality_check_wizard access.quality_check_wizard model_quality_check_wizard quality.group_quality_user 1 1 1 0
3 access_quality_check_measure_line quality.check.measure.line model_quality_check_measure_line base.group_user 1 1 1 0
4 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
5 access_quality_check_report_history quality.check.report.history model_quality_check_report_history quality.group_quality_user 1 1 1 0

View File

@@ -4,7 +4,7 @@
<field name="name">quality.check.measure.line.tree</field> <field name="name">quality.check.measure.line.tree</field>
<field name="model">quality.check.measure.line</field> <field name="model">quality.check.measure.line</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree create="false" editable="bottom"> <tree editable="bottom">
<field name="sequence"/> <field name="sequence"/>
<field name="measure_item"/> <field name="measure_item"/>
<field name="measure_value1"/> <field name="measure_value1"/>
@@ -14,7 +14,7 @@
<field name="measure_value5"/> <field name="measure_value5"/>
<field name="measure_result"/> <field name="measure_result"/>
<field name="remark"/> <field name="remark"/>
<!-- <button name="del_measure_value" type="object" string="删除测量值" class="btn-danger"/> --> <button name="del_measure_value" type="object" string="删除" class="btn-danger"/>
</tree> </tree>
</field> </field>
</record> </record>

View File

@@ -318,6 +318,7 @@
<field name="team_id"/> <field name="team_id"/>
<field name="company_id" groups="base.group_multi_company"/> <field name="company_id" groups="base.group_multi_company"/>
<field name="user_id" string="Control Person" invisible="1"/> <field name="user_id" string="Control Person" invisible="1"/>
<field name="measure_operator" string="操机员"/>
</group> </group>
</group> </group>
@@ -356,7 +357,16 @@
</group> </group>
</page> </page>
<page string="发布历史" name="release_history" attrs="{'invisible': [('is_out_check', '=', False)]}"> <page string="发布历史" name="release_history" attrs="{'invisible': [('is_out_check', '=', False)]}">
<!-- <field name="release_history"/> --> <field name="report_history_ids">
<tree>
<field name="sequence"/>
<field name="report_number_id"/>
<field name="action"/>
<field name="document_status"/>
<field name="operation_time"/>
<field name="operator"/>
</tree>
</field>
</page> </page>
</notebook> </notebook>
</sheet> </sheet>

View File

@@ -1,11 +1,24 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<data noupdate="1"> <data noupdate="1">
<!-- 创建采购合同文件夹 --> <!-- 创建出厂检验报告文件夹 -->
<record id="documents_purchase_contracts_folder" model="documents.folder"> <record id="documents_purchase_contracts_folder" model="documents.folder">
<field name="name">出厂检验报告</field> <field name="name">出厂检验报告</field>
<field name="description">存放出厂检验报告相关文件</field> <field name="description">存放出厂检验报告相关文件</field>
<field name="sequence">11</field> <field name="sequence">11</field>
</record> </record>
<!-- 创建出厂检验报告文件夹下的子文件夹-已发布 -->
<record id="documents_purchase_contracts_folder_published" model="documents.folder">
<field name="name">已发布</field>
<field name="parent_folder_id" ref="documents_purchase_contracts_folder"/>
<field name="sequence">1</field>
</record>
<!-- 创建出厂检验报告文件夹下的子文件夹-废弃 -->
<record id="documents_purchase_contracts_folder_canceled" model="documents.folder">
<field name="name">废弃</field>
<field name="parent_folder_id" ref="documents_purchase_contracts_folder"/>
<field name="sequence">2</field>
</record>
</data> </data>
</odoo> </odoo>

View File

@@ -70,6 +70,7 @@
<xpath expr="//header" position="inside"> <xpath expr="//header" position="inside">
<field name="is_out_check" invisible="1"/> <field name="is_out_check" invisible="1"/>
<field name="publish_status" invisible="1"/>
<button name="%(sf_quality.action_report_quality_inspection_preview)d" <button name="%(sf_quality.action_report_quality_inspection_preview)d"
string="预览报告" string="预览报告"
type="action" type="action"
@@ -79,9 +80,9 @@
string="打印报告" string="打印报告"
type="action"/> type="action"/>
<button name="do_preview" string="预览" type="object" class="btn-primary" attrs="{'invisible': [('is_out_check', '=', False)]}"/> <button name="do_preview" string="预览" type="object" class="btn-primary" attrs="{'invisible': [('is_out_check', '=', False)]}"/>
<button name="do_publish" string="发布" type="object" class="btn-primary" attrs="{'invisible': [('is_out_check', '=', False)]}"/> <button name="do_publish" string="发布" type="object" class="btn-primary" attrs="{'invisible': ['|', ('is_out_check', '=', False), ('publish_status', '!=', 'draft')]}"/>
<button name="do_cancel_publish" string="取消发布" type="object" class="btn-primary" attrs="{'invisible': [('is_out_check', '=', False)]}"/> <button name="do_cancel_publish" string="取消发布" type="object" class="btn-primary" attrs="{'invisible': ['|',('is_out_check', '=', False), ('publish_status', '!=', 'published')]}"/>
<button name="do_re_publish" string="重新发布" type="object" class="btn-primary" attrs="{'invisible': [('is_out_check', '=', False)]}"/> <button name="do_re_publish" string="重新发布" type="object" class="btn-primary" attrs="{'invisible': ['|', ('is_out_check', '=', False), ('publish_status', '!=', 'canceled')]}"/>
</xpath> </xpath>
</field> </field>
</record> </record>