Merge branch refs/heads/develop into refs/heads/feature/质量检查弹出框优化
This commit is contained in:
@@ -16,10 +16,15 @@
|
||||
'depends': ['quality_control', 'web_widget_model_viewer', 'sf_manufacturing','jikimo_attachment_viewer'],
|
||||
'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_company.xml',
|
||||
'wizard/check_picking_wizard_view.xml',
|
||||
],
|
||||
|
||||
|
||||
9
sf_quality/data/check_standards.xml
Normal file
9
sf_quality/data/check_standards.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<record id="test_type_factory_inspection" model="quality.point.test_type">
|
||||
<field name="name">出厂检验报告</field>
|
||||
<field name="technical_name">factory_inspection</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
24
sf_quality/data/documents_data.xml
Normal file
24
sf_quality/data/documents_data.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data noupdate="1">
|
||||
<!-- 创建出厂检验报告文件夹 -->
|
||||
<record id="documents_purchase_contracts_folder" model="documents.folder">
|
||||
<field name="name">出厂检验报告</field>
|
||||
<field name="description">存放出厂检验报告相关文件</field>
|
||||
<field name="sequence">11</field>
|
||||
</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>
|
||||
</odoo>
|
||||
156
sf_quality/data/insepection_report_template.xml
Normal file
156
sf_quality/data/insepection_report_template.xml
Normal file
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<!-- 定义页眉模板 -->
|
||||
<template id="report_quality_header">
|
||||
<div class="header">
|
||||
<div class="pdf-viewer-toolbar" style="display:flex;justify-content:space-between;align-items:center;">
|
||||
<img t-if="o.company_id.favicon" t-att-src="image_data_uri(o.company_id.favicon)" style="max-height: 70px;" alt="Logo"/>
|
||||
|
||||
<div class="text-center">
|
||||
<h2>出厂检验报告</h2>
|
||||
</div>
|
||||
<div class="float-right" style="text-align: right;">
|
||||
<!-- 使用公开访问URL的二维码 -->
|
||||
<img t-att-src="'/report/barcode/QR/%s' % o.get_report_url()" style="width:80px;height:80px"/>
|
||||
<div style="font-size: 20px;">
|
||||
<strong>报告编号: </strong><span t-field="o.name"/>
|
||||
</div>
|
||||
<!-- 添加扫码提示 -->
|
||||
<div style="font-size: 12px; margin-top: 5px;">
|
||||
<strong>扫描二维码查看PDF报告</strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- 定义页脚模板 -->
|
||||
<template id="report_quality_footer">
|
||||
<div class="footer">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<p>售后服务: <span t-field="o.company_id.phone"/></p>
|
||||
<p>公司名称: <span t-field="o.company_id.name"/></p>
|
||||
<p>公司网址: <span t-field="o.company_id.website"/></p>
|
||||
<p>公司邮箱: <span t-field="o.company_id.email"/></p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<p>加工工厂: <span t-field="o.company_id.factory_name"/></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<span>第<span class="page"/> 页/共 <span class="topage"/>页</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template id="report_quality_inspection">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.basic_layout">
|
||||
<!-- 调用自定义页眉 -->
|
||||
<t t-call="sf_quality.report_quality_header"/>
|
||||
|
||||
|
||||
<div class="page">
|
||||
<!-- <div class="col-6">
|
||||
<div t-if="o.company_id.favicon" class="float-right">
|
||||
<img t-att-src="image_data_uri(o.company_id.favicon)" style="max-height: 45px;" alt="Logo"/>
|
||||
</div>
|
||||
</div> -->
|
||||
<!-- </div> -->
|
||||
|
||||
<table class="table table-sm o_main_table mt-4" style="border: 1px solid black;">
|
||||
<tr>
|
||||
<td style="width: 15%; border: 1px solid black;"><strong>产品名称:</strong></td>
|
||||
<td style="width: 35%; border: 1px solid black;"><span t-field="o.product_id.name"/></td>
|
||||
<td style="width: 15%; border: 1px solid black;"><strong>材料:</strong></td>
|
||||
<td style="width: 35%; border: 1px solid black;"><span t-field="o.material_name"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid black;"><strong>图号:</strong></td>
|
||||
<td style="border: 1px solid black;"><span t-field="o.part_number"/></td>
|
||||
<td style="border: 1px solid black;"><strong>日期:</strong></td>
|
||||
<td style="border: 1px solid black;"><span t-field="o.write_date"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="border: 1px solid black;"><strong>总数量:</strong></td>
|
||||
<td style="border: 1px solid black;"><span t-field="o.total_qty"/></td>
|
||||
<td style="border: 1px solid black;"><strong>检验数量:</strong></td>
|
||||
<td style="border: 1px solid black;"><span t-field="o.check_qty"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h4 class="text-center mt-4">检验结果</h4>
|
||||
<div class="" style="position: relative;">
|
||||
<table class="table table-sm mt-2" style="border: 1px solid black;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="border: 1px solid black;" class="text-center" rowspan="2">检测项目<br/>(图示尺寸)</th>
|
||||
<th style="border: 1px solid black;" t-att-colspan="o.column_nums" class="text-center">测量值</th>
|
||||
<th style="border: 1px solid black; vertical-align: middle;" class="text-center" rowspan="2">判定</th>
|
||||
<th style="border: 1px solid black; vertical-align: middle;" class="text-center" rowspan="2">备注</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<!-- <th style="border: 1px solid black;"></th> -->
|
||||
<th style="border: 1px solid black;" t-if="o.column_nums >= 1" class="text-center">1</th>
|
||||
<th style="border: 1px solid black;" t-if="o.column_nums >= 2" class="text-center">2</th>
|
||||
<th style="border: 1px solid black;" t-if="o.column_nums >= 3" class="text-center">3</th>
|
||||
<th style="border: 1px solid black;" t-if="o.column_nums >= 4" class="text-center">4</th>
|
||||
<th style="border: 1px solid black;" t-if="o.column_nums >= 5" class="text-center">5</th>
|
||||
<!-- <th style="border: 1px solid black;"></th>
|
||||
<th style="border: 1px solid black;"></th> -->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr t-foreach="o.measure_line_ids" t-as="line">
|
||||
<td style="border: 1px solid black;" class="text-center"><span t-field="line.measure_item"/></td>
|
||||
<td style="border: 1px solid black;" t-if="o.column_nums >= 1" class="text-center"><span t-field="line.measure_value1"/></td>
|
||||
<td style="border: 1px solid black;" t-if="o.column_nums >= 2" class="text-center"><span t-field="line.measure_value2"/></td>
|
||||
<td style="border: 1px solid black;" t-if="o.column_nums >= 3" class="text-center"><span t-field="line.measure_value3"/></td>
|
||||
<td style="border: 1px solid black;" t-if="o.column_nums >= 4" class="text-center"><span t-field="line.measure_value4"/></td>
|
||||
<td style="border: 1px solid black;" t-if="o.column_nums >= 5" class="text-center"><span t-field="line.measure_value5"/></td>
|
||||
<td style="border: 1px solid black;" class="text-center"><span t-field="line.measure_result"/></td>
|
||||
<td style="border: 1px solid black;" class="text-center"><span t-field="line.remark"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<img src="/sf_quality/static/img/pass.png" style="width: 200px; height: 200px;position: absolute; bottom: 20px; right: 20%;"/>
|
||||
|
||||
</div>
|
||||
<div class="row mt-4">
|
||||
<div class="col-12">
|
||||
<h5>检验结论:
|
||||
<span t-if="o.report_result == 'OK'" style="margin-left: 20px;">☑ 合格</span>
|
||||
<span t-else="" style="margin-left: 20px;">□ 合格</span>
|
||||
<span t-if="o.report_result == 'NG'" style="margin-left: 40px;">☑ 不合格</span>
|
||||
<span t-else="" style="margin-left: 40px;">□ 不合格</span>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-4">
|
||||
<div class="col-6">
|
||||
<p><strong>操作员: </strong> <span t-field="o.measure_operator"/></p>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<p><strong>质检员: </strong> <span t-field="o.quality_manager"/></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 添加合格标签 -->
|
||||
|
||||
<div class="row mt-5">
|
||||
<div class="col-12 text-center">
|
||||
<p>(以下空白)</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 调用自定义页脚 -->
|
||||
<t t-call="sf_quality.report_quality_footer"/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
24
sf_quality/data/report_actions.xml
Normal file
24
sf_quality/data/report_actions.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="action_report_quality_inspection" model="ir.actions.report">
|
||||
<field name="name">出厂检验报告</field>
|
||||
<field name="model">quality.check</field> <!-- 请替换为实际的模型名称 -->
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">sf_quality.report_quality_inspection</field>
|
||||
<field name="report_file">sf_quality.report_quality_inspection</field>
|
||||
<field name="print_report_name">'QC-' + object.name + '.pdf'</field>
|
||||
<field name="binding_model_id" ref="model_quality_check"/> <!-- 请替换为实际的模型ID引用 -->
|
||||
<field name="binding_type">report</field>
|
||||
<field name="attachment">'QC-'+object.name+'-'+str(object.write_date)+'.pdf'</field>
|
||||
<field name="attachment_use">True</field>
|
||||
</record>
|
||||
|
||||
<!-- 定义HTML预览报告动作 -->
|
||||
<record id="action_report_quality_inspection_preview" model="ir.actions.report">
|
||||
<field name="name">预览检验报告</field>
|
||||
<field name="model">quality.check</field>
|
||||
<field name="report_type">qweb-html</field>
|
||||
<field name="report_name">sf_quality.report_quality_inspection</field>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -6,3 +6,4 @@ from . import quality
|
||||
from . import quality_cnc_test
|
||||
from . import mrp_workorder
|
||||
from . import stock
|
||||
from . import quality_company
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import models, fields
|
||||
|
||||
from odoo import models, fields, api
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
class SfQualityPoint(models.Model):
|
||||
_inherit = 'quality.point'
|
||||
_rec_name = 'title'
|
||||
|
||||
product_ids = fields.Many2many(
|
||||
'product.product', string='适用产品',
|
||||
@@ -15,4 +16,14 @@ class SfQualityPoint(models.Model):
|
||||
operation_id = fields.Many2one(
|
||||
'mrp.routing.workcenter', 'Step', check_company=True,
|
||||
domain="[('is_outsource', '=', False),('company_id', 'in', (company_id, False))]")
|
||||
|
||||
@api.onchange('test_type_id')
|
||||
def _onchange_test_type_id(self):
|
||||
"""
|
||||
如果类型选择了出厂检验报告,检查measure_on的值是否为product,如果为product,则类型的值不变,如果
|
||||
不是,则提示错误
|
||||
"""
|
||||
if self.test_type_id.name == '出厂检验报告':
|
||||
if self.measure_on != 'product':
|
||||
raise ValidationError('出厂检验报告的测量对象必须为产品')
|
||||
|
||||
|
||||
8
sf_quality/models/quality_company.py
Normal file
8
sf_quality/models/quality_company.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from odoo import models, fields
|
||||
|
||||
|
||||
# 为公司增加字段
|
||||
class Company(models.Model):
|
||||
_inherit = 'res.company'
|
||||
|
||||
factory_name = fields.Char('加工工厂')
|
||||
@@ -6,6 +6,16 @@ class StockPicking(models.Model):
|
||||
|
||||
def button_validate(self):
|
||||
res = super(StockPicking, self).button_validate()
|
||||
"""
|
||||
出厂检验报告上传
|
||||
"""
|
||||
|
||||
out_quality_check = self.env['quality.check'].search(
|
||||
[('picking_id', '=', self.id), ('test_type_id.name', '=', '出厂检验报告')])
|
||||
if not out_quality_check.is_factory_report_uploaded:
|
||||
if out_quality_check and self.state == 'assigned':
|
||||
out_quality_check.upload_factory_report()
|
||||
|
||||
"""
|
||||
调拨单若关联了质量检查单,验证调拨单时,应校验是否有不合格品,若存在,应弹窗提示:
|
||||
“警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?”
|
||||
|
||||
BIN
sf_quality/static/img/pass.png
Normal file
BIN
sf_quality/static/img/pass.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -37,11 +37,11 @@
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="2D图纸" attrs="{'invisible': [('production_id', '=', False)]}">
|
||||
<field name="machining_drawings" string="" widget="adaptive_viewer"/>
|
||||
<page string="2D加工图纸" attrs="{'invisible': [('categ_type', 'not in', ['成品', '坯料'])]}">
|
||||
<field name='machining_drawings' widget="adaptive_viewer"/>
|
||||
</page>
|
||||
<page string="客户质量标准" attrs="{'invisible': [('production_id', '=', False)]}">
|
||||
<field name="quality_standard" string="" widget="adaptive_viewer"/>
|
||||
<page string="质检标准" attrs="{'invisible': [('categ_type', 'not in', ['成品', '坯料'])]}">
|
||||
<field name='quality_standard' widget="adaptive_viewer"/>
|
||||
</page>
|
||||
<page string="其他"
|
||||
attrs="{'invisible': ['|',('quality_state', 'not in', ['pass', 'fail']), ('production_id', '=', False)]}">
|
||||
@@ -52,6 +52,7 @@
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//header//button[@name='do_pass'][1]" position="attributes">
|
||||
<attribute name="attrs">{'invisible': [('is_out_check', '=', True)]}</attribute>
|
||||
<attribute name="string">合格</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//header//button[@name='do_pass'][2]" position="attributes">
|
||||
@@ -59,12 +60,32 @@
|
||||
<attribute name="string">合格</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//header//button[@name='do_fail'][1]" position="attributes">
|
||||
<attribute name="attrs">{'invisible': [('is_out_check', '=', True)]}</attribute>
|
||||
<attribute name="string">不合格</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//header//button[@name='do_fail'][2]" position="attributes">
|
||||
<attribute name="attrs">{'invisible': ['|',('quality_state', '!=', 'pass'),('work_state','in', ('done', 'rework'))]}</attribute>
|
||||
<attribute name="string">不合格</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//header" position="inside">
|
||||
<field name="is_out_check" invisible="1"/>
|
||||
<field name="publish_status" invisible="1"/>
|
||||
<button name="%(sf_quality.action_report_quality_inspection_preview)d"
|
||||
string="预览"
|
||||
type="action"
|
||||
class="oe_highlight" attrs="{'invisible': [('is_out_check', '=', False)]}"/>
|
||||
<!-- --><!-- 如果还需要打印按钮 -->
|
||||
<!-- <button name="%(sf_quality.action_report_quality_inspection)d" -->
|
||||
<!-- string="打印报告" -->
|
||||
<!-- type="action"/> -->
|
||||
<!-- <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), ('publish_status', '!=', 'draft')]}"/>
|
||||
<!-- <button name="get_report_url" string="ceshi" type="object" class="btn-primary"/> -->
|
||||
<!-- <button name="upload_factory_report" string="upload_factory_report" type="object" class="btn-primary"/> -->
|
||||
<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), ('publish_status', '!=', 'canceled')]}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
13
sf_quality/views/quality_company.xml
Normal file
13
sf_quality/views/quality_company.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
<odoo>
|
||||
<record id="sf_quality_company_view" model="ir.ui.view">
|
||||
<field name="name">sf.quality.company.view</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="inherit_id" ref="base.view_company_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='partner_id']" position="after">
|
||||
<field name="factory_name"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user