Accept Merge Request #1773: (feature/质检单优化_1 -> develop)
Merge Request: Merge branch 'feature/制造订单状态优化' into feature/质检单优化_1 Created By: @禹翔辉 Reviewed By: @马广威 Approved By: @马广威 Accepted By: @禹翔辉 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1773
This commit is contained in:
@@ -1503,7 +1503,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
store=True)
|
store=True)
|
||||||
individuation_page_ids = fields.Many2many('sf.work.individuation.page', string='个性化记录', store=True,
|
individuation_page_ids = fields.Many2many('sf.work.individuation.page', string='个性化记录', store=True,
|
||||||
compute='_compute_individuation_page_ids')
|
compute='_compute_individuation_page_ids')
|
||||||
individuation_page_PTD = fields.Boolean('个性化记录(后置三元检测PTD)', default=False)
|
individuation_page_PTD = fields.Boolean('个性化记录(是否显示后置三元检测[PTD]页签)', default=False)
|
||||||
|
|
||||||
@api.depends('name')
|
@api.depends('name')
|
||||||
def _compute_routing_workcenter_id(self):
|
def _compute_routing_workcenter_id(self):
|
||||||
|
|||||||
@@ -538,9 +538,9 @@
|
|||||||
<!-- <field name="is_fetchcnc"-->
|
<!-- <field name="is_fetchcnc"-->
|
||||||
<!-- attrs='{"invisible":["|",("test_results","=","合格"),("is_remanufacture","=",False)]}'/>-->
|
<!-- attrs='{"invisible":["|",("test_results","=","合格"),("is_remanufacture","=",False)]}'/>-->
|
||||||
<field name="reason"
|
<field name="reason"
|
||||||
attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")]}'/>
|
attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")],"readonly":[("state","in",("done", "rework"))]}'/>
|
||||||
<field name="detailed_reason"
|
<field name="detailed_reason"
|
||||||
attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")]}'/>
|
attrs='{"required":[("test_results","!=","合格")],"invisible":[("test_results","=","合格")],"readonly":[("state","in",("done", "rework"))]}'/>
|
||||||
<!-- <field name="results" readonly="1" attrs='{"invisible":[("results","!=","合格")]}'/>-->
|
<!-- <field name="results" readonly="1" attrs='{"invisible":[("results","!=","合格")]}'/>-->
|
||||||
<field name="detection_report" attrs='{"invisible":[("results","!=",False)]}'
|
<field name="detection_report" attrs='{"invisible":[("results","!=",False)]}'
|
||||||
widget="pdf_viewer" readonly="1"/>
|
widget="pdf_viewer" readonly="1"/>
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'views/view.xml',
|
'views/view.xml',
|
||||||
'views/quality_cnc_test_view.xml',
|
'views/quality_cnc_test_view.xml',
|
||||||
|
'views/mrp_workorder.xml',
|
||||||
'views/quality_check_view.xml'
|
'views/quality_check_view.xml'
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -4,3 +4,4 @@
|
|||||||
from . import custom_quality
|
from . import custom_quality
|
||||||
from . import quality
|
from . import quality
|
||||||
from . import quality_cnc_test
|
from . import quality_cnc_test
|
||||||
|
from . import mrp_workorder
|
||||||
|
|||||||
25
sf_quality/models/mrp_workorder.py
Normal file
25
sf_quality/models/mrp_workorder.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ResMrpWorkOrder(models.Model):
|
||||||
|
_inherit = 'mrp.workorder'
|
||||||
|
|
||||||
|
check_ids_state = fields.Selection([('none', '待处理'), ('pass', '通过的'), ('fail', '失败的')], store=True,
|
||||||
|
compute='_compute_check_ids_state')
|
||||||
|
|
||||||
|
@api.depends('check_ids.quality_state')
|
||||||
|
def _compute_check_ids_state(self):
|
||||||
|
for mw in self:
|
||||||
|
if mw.check_ids:
|
||||||
|
if all(check_id.quality_state == 'pass' for check_id in mw.check_ids):
|
||||||
|
mw.check_ids_state = 'pass'
|
||||||
|
elif any(check_id.quality_state == 'fail' for check_id in mw.check_ids):
|
||||||
|
mw.check_ids_state = 'fail'
|
||||||
|
else:
|
||||||
|
mw.check_ids_state = 'none'
|
||||||
|
|
||||||
|
def action_open_quality_check_work_sf(self):
|
||||||
|
action = self.env["ir.actions.actions"]._for_xml_id("quality_control.quality_check_action_picking")
|
||||||
|
action['context'] = self.env.context.copy()
|
||||||
|
action['domain'] = [('workorder_id', '=', self.id)]
|
||||||
|
return action
|
||||||
@@ -17,6 +17,7 @@ class QualityCheck(models.Model):
|
|||||||
('fail', '失败的')], string='状态', tracking=True, store=True,
|
('fail', '失败的')], string='状态', tracking=True, store=True,
|
||||||
default='none', copy=False, compute='_compute_quality_state')
|
default='none', copy=False, compute='_compute_quality_state')
|
||||||
|
|
||||||
|
individuation_page_PTD = fields.Boolean('个性化记录(是否显示后置三元检测[PTD]页签)', related='workorder_id.individuation_page_PTD')
|
||||||
work_state = fields.Selection(related='workorder_id.state', string='工单状态')
|
work_state = fields.Selection(related='workorder_id.state', string='工单状态')
|
||||||
processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面')
|
processing_panel = fields.Char(related='workorder_id.processing_panel', string='加工面')
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ class QualityCheck(models.Model):
|
|||||||
model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型')
|
model_file = fields.Binary(related='workorder_id.glb_file', string='加工模型')
|
||||||
|
|
||||||
detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告')
|
detection_report = fields.Binary(related='workorder_id.detection_report', readonly=True, string='检测报告')
|
||||||
test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果",
|
test_results = fields.Selection([("合格", "合格"), ("返工", "返工")], string="检测结果",
|
||||||
default='合格')
|
default='合格')
|
||||||
reason = fields.Selection(
|
reason = fields.Selection(
|
||||||
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"),
|
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"),
|
||||||
@@ -61,7 +62,7 @@ class QualityCheck(models.Model):
|
|||||||
def do_pass(self):
|
def do_pass(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
super().do_pass()
|
super().do_pass()
|
||||||
if self.workorder_id:
|
if self.workorder_id and self.individuation_page_PTD is True:
|
||||||
# 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
|
# 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
|
||||||
if self.test_results in ['返工', '报废']:
|
if self.test_results in ['返工', '报废']:
|
||||||
raise ValidationError('请重新选择【判定结果】-【检测结果】')
|
raise ValidationError('请重新选择【判定结果】-【检测结果】')
|
||||||
@@ -73,7 +74,7 @@ class QualityCheck(models.Model):
|
|||||||
def do_fail(self):
|
def do_fail(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
super().do_fail()
|
super().do_fail()
|
||||||
if self.workorder_id:
|
if self.workorder_id and self.individuation_page_PTD is True:
|
||||||
# 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
|
# 1)将页签“判定结果”的检测结果值同步到【工单_后置三元检测_检测结果】
|
||||||
if not self.test_results:
|
if not self.test_results:
|
||||||
raise ValidationError('请填写【判定结果】里的信息')
|
raise ValidationError('请填写【判定结果】里的信息')
|
||||||
|
|||||||
22
sf_quality/views/mrp_workorder.xml
Normal file
22
sf_quality/views/mrp_workorder.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="mrp_workorder_quality_form_view_inherit" model="ir.ui.view">
|
||||||
|
<field name="name">mrp.workorder.view.form.inherit.quality</field>
|
||||||
|
<field name="model">mrp.workorder</field>
|
||||||
|
<field name="inherit_id" ref="mrp.mrp_production_workorder_form_view_inherit"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<div name="button_box" position="inside">
|
||||||
|
<field name="check_ids_state" invisible="1"/>
|
||||||
|
<button name="action_open_quality_check_work_sf" groups="quality.group_quality_user" attrs="{'invisible': ['|',('check_ids_state', '!=', 'none'), ('check_ids', '=', [])]}" type="object" class="oe_stat_button" icon="fa-check">
|
||||||
|
<span class="o_stat_text">质量检查</span>
|
||||||
|
</button>
|
||||||
|
<button name="action_open_quality_check_work_sf" groups="quality.group_quality_user" attrs="{'invisible': ['|',('check_ids_state', '!=', 'pass'), ('check_ids', '=', [])]}" type="object" class="oe_stat_button text-success" icon="fa-check">
|
||||||
|
<span class="o_stat_text text-success">质量检查</span>
|
||||||
|
</button>
|
||||||
|
<button name="action_open_quality_check_work_sf" groups="quality.group_quality_user" attrs="{'invisible': ['|',('check_ids_state', '!=', 'fail'), ('check_ids', '=', [])]}" type="object" class="oe_stat_button text-danger" icon="fa-check">
|
||||||
|
<span class="o_stat_text text-danger">质量检查</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@@ -8,22 +8,23 @@
|
|||||||
<xpath expr="//field[@name='alert_ids']" position="after">
|
<xpath expr="//field[@name='alert_ids']" position="after">
|
||||||
<field name="production_id" invisible="1"/>
|
<field name="production_id" invisible="1"/>
|
||||||
<field name="work_state" invisible="1"/>
|
<field name="work_state" invisible="1"/>
|
||||||
<field name="production_line_id" attrs="{'invisible': [('production_id', '=', False)]}"/>
|
<field name="individuation_page_PTD" invisible="1"/>
|
||||||
<field name="equipment_id" attrs="{'invisible': [('production_id', '=', False)]}"/>
|
<field name="production_line_id" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
|
<field name="equipment_id" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
<field name="model_file" widget="Viewer3D" string="模型" readonly="1" force_save="1"
|
<field name="model_file" widget="Viewer3D" string="模型" readonly="1" force_save="1"
|
||||||
attrs="{'invisible': ['|', ('model_file', '=', False), ('production_id', '=', False)]}"/>
|
attrs="{'invisible': ['|', '|',('model_file', '=', False), ('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//field[@name='partner_id']" position="after">
|
<xpath expr="//field[@name='partner_id']" position="after">
|
||||||
<field name="processing_panel" attrs="{'invisible': [('production_id', '=', False)]}"/>
|
<field name="processing_panel" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
<field name="workorder_id" string="工单号" readonly="1"
|
<field name="workorder_id" string="工单号" readonly="1"
|
||||||
attrs="{'invisible': [('production_id', '=', False)]}"/>
|
attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
<field name="is_inspect" attrs="{'invisible': [('production_id', '=', False)]}"/>
|
<field name="is_inspect" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
<xpath expr="//page[@name='notes']" position="before">
|
<xpath expr="//page[@name='notes']" position="before">
|
||||||
<page string="检测报告" attrs="{'invisible': [('production_id', '=', False)]}">
|
<page string="检测报告" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}">
|
||||||
<field name="detection_report" string="" widget="pdf_viewer"/>
|
<field name="detection_report" string="" widget="pdf_viewer"/>
|
||||||
</page>
|
</page>
|
||||||
<page string="判定结果" attrs="{'invisible': [('production_id', '=', False)]}">
|
<page string="判定结果" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}">
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="test_results" attrs="{'readonly': [('quality_state','in', ['pass', 'fail'])]}"/>
|
<field name="test_results" attrs="{'readonly': [('quality_state','in', ['pass', 'fail'])]}"/>
|
||||||
@@ -34,14 +35,14 @@
|
|||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
<page string="2D图纸" attrs="{'invisible': [('production_id', '=', False)]}">
|
<page string="2D图纸" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}">
|
||||||
<field name="machining_drawings" string="" widget="adaptive_viewer"/>
|
<field name="machining_drawings" string="" widget="adaptive_viewer"/>
|
||||||
</page>
|
</page>
|
||||||
<page string="客户质量标准" attrs="{'invisible': [('production_id', '=', False)]}">
|
<page string="客户质量标准" attrs="{'invisible': ['|',('production_id', '=', False), ('individuation_page_PTD', '=', False)]}">
|
||||||
<field name="quality_standard" string="" widget="adaptive_viewer"/>
|
<field name="quality_standard" string="" widget="adaptive_viewer"/>
|
||||||
</page>
|
</page>
|
||||||
<page string="其他"
|
<page string="其他"
|
||||||
attrs="{'invisible': ['|', ('quality_state', 'not in', ['pass', 'fail']), ('production_id', '=', False)]}">
|
attrs="{'invisible': ['|','|', ('quality_state', 'not in', ['pass', 'fail']), ('production_id', '=', False),('individuation_page_PTD', '=', False)]}">
|
||||||
<group>
|
<group>
|
||||||
<field name="write_uid" widget='many2one_avatar_user' string="判定人" readonly="1"/>
|
<field name="write_uid" widget='many2one_avatar_user' string="判定人" readonly="1"/>
|
||||||
<field name="write_date" string="判定时间" readonly="1"/>
|
<field name="write_date" string="判定时间" readonly="1"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user