Merge branch 'feature/优化加工质检' into develop

This commit is contained in:
jinling.yang
2024-10-17 10:12:20 +08:00
7 changed files with 77 additions and 63 deletions

View File

@@ -16,6 +16,8 @@
<field name='is_bfm' invisible="1"/>
<field name='categ_type' invisible="1"/>
<field name='part_number' attrs="{'invisible': [('categ_type', '!=', '成品')]}"/>
<field name='machining_drawings' attrs="{'invisible': [('categ_type', '!=', '成品')]}" widget="image"/>
<field name='quality_standard' attrs="{'invisible': [('categ_type', '!=', '成品')]}"/>
<field name='manual_quotation' attrs="{'invisible':[('upload_model_file', '=', [])]}"/>
<field name="upload_model_file"
widget="many2many_binary"

View File

@@ -774,6 +774,8 @@ class ResProductMo(models.Model):
# bfm下单
manual_quotation = fields.Boolean('人工编程', default=False, readonly=True)
part_number = fields.Char(string='零件图号', readonly=True)
# machining_drawings = fields.Binary('2D加工图纸', readonly=True)
# quality_standard = fields.Binary('质检标准', readonly=True)
@api.constrains('tool_length')
def _check_tool_length_size(self):
@@ -873,6 +875,8 @@ class ResProductMo(models.Model):
'manual_quotation': item['manual_quotation'] or False,
'part_number': item.get('part_number') or '',
'active': True,
# 'machining_drawings': '' if not item['machining_drawings'] else base64.b64decode(item['machining_drawings']),
# 'quality_standard': '' if not item['quality_standard'] else base64.b64decode(item['quality_standard']),
}
tax_id = self.env['account.tax'].sudo().search(
[('type_tax_use', '=', 'sale'), ('amount', '=', item.get('tax')), ('price_include', '=', 'True')])

View File

@@ -58,17 +58,8 @@
<field name="name">订单发货提醒</field>
<field name="model">stock.picking</field>
</record>
<!-- <record id="bussiness_mrp_workorder_pre_overdue_warning" model="jikimo.message.bussiness.node">-->
<!-- <field name="name">装夹预调工单逾期预警</field>-->
<!-- <field name="model">mrp.workorder</field>-->
<!-- </record>-->
<!-- <record id="bussiness_mrp_workorder_pre_overdue" model="jikimo.message.bussiness.node">-->
<!-- <field name="name">装夹预调工单已逾期</field>-->
<!-- <field name="model">mrp.workorder</field>-->
<!-- </record>-->
<record id="bussiness_mrp_workorder_pre_overdue_warning" model="jikimo.message.bussiness.node">
<record id="bussiness_mrp_workorder_pre_overdue_warning" model="jikimo.message.bussiness.node">
<field name="name">装夹预调工单逾期预警</field>
<field name="model">mrp.workorder</field>
</record>
@@ -77,12 +68,12 @@
<field name="model">mrp.workorder</field>
</record>
<record id="bussiness_mrp_workorder_cnc_overdue_warning" model="jikimo.message.bussiness.node">
<record id="bussiness_mrp_workorder_cnc_overdue_warning" model="jikimo.message.bussiness.node">
<field name="name">CNC加工工单逾期预警</field>
<field name="model">mrp.workorder</field>
</record>
<record id="bussiness_mrp_workorder_cnc_overdue" model="jikimo.message.bussiness.node">
<field name="name">CNC工单已逾期</field>
<field name="name">CNC加工工单已逾期</field>
<field name="model">mrp.workorder</field>
</record>
@@ -96,7 +87,7 @@
<field name="model">mrp.workorder</field>
</record>
<record id="bussiness_mrp_workorder_surface_overdue_warning" model="jikimo.message.bussiness.node">
<record id="bussiness_mrp_workorder_surface_overdue_warning" model="jikimo.message.bussiness.node">
<field name="name">表面工艺工单逾期预警</field>
<field name="model">mrp.workorder</field>
</record>

View File

@@ -31,19 +31,31 @@ class SfQualityCncTest(models.Model):
("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")
detailed_reason = fields.Text('详细原因')
# machining_drawings = fields.Binary(related='workorder_id.machining_drawings', string='2D加工图纸', readonly=True)
# quality_standard = fields.Binary(related='workorder_id.quality_standard', string='质检标准', readonly=True)
def submit_pass(self):
self.write({'result': 'pass', 'test_results': self.test_results, 'state': 'done'})
if self.test_results in ['返工', '报废']:
raise UserError(_('请重新选择【判定结果】-【检测结果】'))
self.write({'result': 'pass', 'test_results': '合格', 'state': 'done'})
self.workorder_id.write({'test_results': self.test_results})
self.workorder_id.button_finish()
def submit_fail(self):
if not self.reason and not self.detailed_reason and not self.test_results:
if not self.test_results:
raise UserError(_('请填写【判定结果】里的信息'))
else:
self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'})
self.workorder_id.write(
{'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason})
self.workorder_id.button_finish()
if self.test_results == '合格':
raise UserError(_('请重新选择【判定结果】-【检测结果】'))
self.write({'result': 'fail', 'test_results': self.test_results, 'state': 'done'})
self.workorder_id.write(
{'test_results': self.test_results, 'reason': self.reason, 'detailed_reason': self.detailed_reason})
self.workorder_id.button_finish()
@api.onchange('test_results')
def _onchange_test_results(self):
if self.test_results == '合格':
self.reason = False
self.detailed_reason = False
class SfQualityWorkOrder(models.Model):

View File

@@ -5,7 +5,7 @@
<field name="name">加工质检单编码规则</field>
<field name="code">quality.cnc.test</field>
<field name="prefix">QCT</field>
<field name="padding">4</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>
@@ -20,8 +20,12 @@
<field name="product_id"/>
<field name="part_number"/>
<field name="number"/>
<field name="state"/>
<field name="result"/>
<field name="state" widget="badge"
decoration-success="state == 'done'"
decoration-warning="state == 'waiting'"/>
<field name="result" widget="badge"
decoration-success="result == 'pass'"
decoration-danger="result == 'fail'"/>
<field name="write_uid" widget='many2one_avatar_user' string="判定人" optional="hide"/>
<field name="write_date" string="判定时间" optional="hide"/>
</tree>
@@ -89,7 +93,6 @@
<group>
<field name="part_number"/>
<field name="processing_panel"/>
<field name="detection_report"/>
</group>
</group>
<notebook>
@@ -99,17 +102,19 @@
<page string="判定结果">
<group>
<field name="test_results" attrs="{'readonly': [('state','=', 'done')]}"/>
<field name="reason" attrs="{'readonly': [('state','=', 'done')]}"/>
<field name="detailed_reason" attrs="{'readonly': [('state','=', 'done')]}"/>
<field name="reason"
attrs="{'readonly': [('state','=', 'done')],'required': [('test_results','in', ['返工','报废'])],'invisible': [('test_results','in', ['合格',False])]}"/>
<field name="detailed_reason"
attrs="{'readonly': [('state','=', 'done')],'required': [('reason','!=', False)],'invisible': [('test_results','in', ['合格',False])]}"/>
</group>
</page>
<page string="2D图纸">
<!-- <field name="detection_report" string="" widget="pdf_viewer"/>-->
<!-- <field name="machining_drawings" string="" widget="pdf_viewer"/>-->
</page>
<page string="客户质量标准">
<!-- <field name="detection_report" string="" widget="pdf_viewer"/>-->
<!-- <field name="quality_standard" string=""/>-->
</page>
<page string="其他" attrs="{'readonly': [('state','=', 'done')]}">
<page string="其他" attrs="{'invisible': [('state','=', 'waiting')]}">
<group>
<field name="write_uid" widget='many2one_avatar_user' string="判定人" readonly="1"/>
<field name="write_date" string="判定时间" readonly="1"/>
@@ -171,7 +176,7 @@
<field name="name">驾驶舱</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">quality.cnc.test</field>
<field name="view_mode">kanban,form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="view_id" ref="quality_cnc_test_view_kanban"/>
<field name="search_view_id" ref="quality_cnc_test_search"/>
<field name="domain">[]</field>

View File

@@ -34,36 +34,36 @@
</field>
</record>
<record model="ir.ui.view" id="quality_point_view_form_inherit_sf">
<field name="name">quality.point.form.inherit.sf</field>
<field name="model">quality.point</field>
<field name="inherit_id" ref="quality.quality_point_view_form"/>
<field name="arch" type="xml">
<!-- <xpath expr="//sheet//group//group//field[@name='title']" position="replace"> -->
<!-- <field name="title" class="custom_required" required="1"/> -->
<!-- </xpath> -->
<xpath expr="//sheet//group//group//field[@name='title']" position="attributes">
<attribute name="class">custom_required</attribute>
<attribute name="required">1</attribute>
</xpath>
<xpath expr="//sheet//group//group//field[@name='picking_type_ids']" position="attributes">
<attribute name="class">custom_required</attribute>
<attribute name="required">1</attribute>
</xpath>
</field>
</record>
<!-- <record model="ir.ui.view" id="quality_point_view_form_inherit_sf">-->
<!-- <field name="name">quality.point.form.inherit.sf</field>-->
<!-- <field name="model">quality.point</field>-->
<!-- <field name="inherit_id" ref="quality.quality_point_view_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- &lt;!&ndash; <xpath expr="//sheet//group//group//field[@name='title']" position="replace"> &ndash;&gt;-->
<!-- &lt;!&ndash; <field name="title" class="custom_required" required="1"/> &ndash;&gt;-->
<!-- &lt;!&ndash; </xpath> &ndash;&gt;-->
<!-- <xpath expr="//sheet//group//group//field[@name='title']" position="attributes">-->
<!-- <attribute name="class">custom_required</attribute>-->
<!-- <attribute name="required">1</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//sheet//group//group//field[@name='picking_type_ids']" position="attributes">-->
<!-- <attribute name="class">custom_required</attribute>-->
<!-- <attribute name="required">1</attribute>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
<record model="ir.ui.view" id="sf_quality_point_view_form_inherit_quality_control">
<field name="name">sf.quality.point.form.inherit.sf</field>
<field name="model">quality.point</field>
<field name="inherit_id" ref="quality_control.quality_point_view_form_inherit_quality_control"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='measure_on']" position="attributes">
<attribute name="class">custom_required</attribute>
</xpath>
<xpath expr="//field[@name='measure_frequency_type']" position="attributes">
<attribute name="class">custom_required</attribute>
</xpath>
</field>
</record>
<!-- <record model="ir.ui.view" id="sf_quality_point_view_form_inherit_quality_control">-->
<!-- <field name="name">sf.quality.point.form.inherit.sf</field>-->
<!-- <field name="model">quality.point</field>-->
<!-- <field name="inherit_id" ref="quality_control.quality_point_view_form_inherit_quality_control"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='measure_on']" position="attributes">-->
<!-- <attribute name="class">custom_required</attribute>-->
<!-- </xpath>-->
<!-- <xpath expr="//field[@name='measure_frequency_type']" position="attributes">-->
<!-- <attribute name="class">custom_required</attribute>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
</odoo>

View File

@@ -80,8 +80,8 @@
<field name="unit_price"/>
<field name="price" options="{'format': false}"/>
<field name="part_drawing_number"/>
<field name="machining_drawings" filename="machining_drawings_name" widget="pdf_viewer"/>
<field name="machining_drawings_name" invisible="1"/>
<!-- <field name="machining_drawings" filename="machining_drawings_name" widget="pdf_viewer"/>-->
<!-- <field name="machining_drawings_name" invisible="1"/>-->
<field name="sale_order_id"
attrs='{"invisible": [("sale_order_id","=",False)],"readonly": [("sale_order_id","!=",False)]}'/>
</group>