Accept Merge Request #1895: (feature/调拨单优化 -> develop)
Merge Request: Merge branch 'feature/工单页签优化_1' into feature/调拨单优化 Created By: @禹翔辉 Reviewed By: @胡尧 Approved By: @胡尧 Accepted By: @禹翔辉 URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1895
This commit is contained in:
@@ -81,8 +81,29 @@ class StockPicking(models.Model):
|
||||
return quality_pickings
|
||||
|
||||
def action_cancel(self):
|
||||
"""
|
||||
调拨单取消后,关联取消质量检查单
|
||||
"""
|
||||
context = self.env.context
|
||||
if not context.get('cancel_check_picking') and self.sudo().mapped('check_ids').filtered(
|
||||
lambda x: x.quality_state in ['pass', 'fail']):
|
||||
self.env.cr.rollback()
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'picking.check.cancel.wizard',
|
||||
'name': '取消质检单',
|
||||
'view_mode': 'form',
|
||||
'target': 'new',
|
||||
'context': {
|
||||
'default_picking_id': self.id,
|
||||
'cancel_check_picking': True}
|
||||
}
|
||||
elif self.check_ids.filtered(lambda x: x.quality_state != 'cancel'):
|
||||
self.sudo().mapped('check_ids').filtered(lambda x: x.quality_state != 'cancel').write({
|
||||
'quality_state': 'cancel'
|
||||
})
|
||||
res = super(StockPicking, self).action_cancel()
|
||||
self.sudo().mapped('check_ids').filtered(lambda x: x.quality_state == 'none').unlink()
|
||||
# self.sudo().mapped('check_ids').filtered(lambda x: x.quality_state == 'none').unlink()
|
||||
return res
|
||||
|
||||
def action_open_quality_check_picking(self):
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
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_picking_check_cancel_wizard,access.picking_check_cancel_wizard,model_picking_check_cancel_wizard,quality.group_quality_user,1,1,1,0
|
||||
|
||||
|
@@ -112,3 +112,18 @@ class QualityCheckWizard(models.TransientModel):
|
||||
default_current_check_id=self.current_check_id.id,
|
||||
)
|
||||
return action
|
||||
|
||||
|
||||
class PickingCheckCancelWizard(models.TransientModel):
|
||||
_name = 'picking.check.cancel.wizard'
|
||||
_description = 'picking check cancel wizard'
|
||||
|
||||
picking_id = fields.Many2one('stock.picking', 'stock picking')
|
||||
|
||||
def confirm_picking_check(self):
|
||||
self.picking_id.action_cancel()
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
def cancel_picking_check(self):
|
||||
# 这里是取消后的逻辑
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
@@ -118,4 +118,21 @@
|
||||
<field name="context">{}</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- ================================================================================================== -->
|
||||
<record id="picking_check_cancel_wizard_form" model="ir.ui.view">
|
||||
<field name="name">picking.check.cancel.wizard</field>
|
||||
<field name="model">picking.check.cancel.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Quality Check Failed">
|
||||
<div>质量检查单已完成,继续取消吗?</div>
|
||||
<div class="'color': 'red'">注意:关联质量检查单也将被取消。</div>
|
||||
<footer>
|
||||
<button name="confirm_picking_check" type="object" class="btn-primary" string="确认"/>
|
||||
<button name="cancel_picking_check" type="object" string="取消"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
'views/view.xml',
|
||||
'views/quality_cnc_test_view.xml',
|
||||
'views/mrp_workorder.xml',
|
||||
'views/quality_check_view.xml'
|
||||
'views/quality_check_view.xml',
|
||||
'wizard/check_picking_wizard_view.xml',
|
||||
],
|
||||
|
||||
'assets': {
|
||||
|
||||
@@ -5,4 +5,4 @@ from . import custom_quality
|
||||
from . import quality
|
||||
from . import quality_cnc_test
|
||||
from . import mrp_workorder
|
||||
# from . import stock
|
||||
from . import stock
|
||||
|
||||
@@ -9,13 +9,31 @@ class StockPicking(models.Model):
|
||||
调拨单若关联了质量检查单,验证调拨单时,应校验是否有不合格品,若存在,应弹窗提示:
|
||||
“警告:存在不合格产品XXXX n 件、YYYYY m件,继续调拨请点“确认”,否则请取消?”
|
||||
"""
|
||||
if self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail'):
|
||||
context = self.env.context
|
||||
if not context.get('again_validate') and self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail'):
|
||||
# 回滚事务,为二次确认/取消做准备
|
||||
self.env.cr.rollback()
|
||||
quality_check_ids = self.quality_check_ids.filtered(lambda qc: qc.quality_state == 'fail')
|
||||
product_list = list(set([quality_check_id.product_id for quality_check_id in quality_check_ids]))
|
||||
fail_check_text = ''
|
||||
for product_id in product_list:
|
||||
check_ids = quality_check_ids.filtered(lambda qc: qc.product_id == product_id)
|
||||
number = sum(check_ids.mapped('qty_line'))
|
||||
if number != 0:
|
||||
fail_check_text = (f'{fail_check_text}、{product_id.name} {number}件'
|
||||
if fail_check_text != '' else f'{product_id.name} {number}件')
|
||||
else:
|
||||
fail_check_text = (f'{fail_check_text}、{product_id.name}'
|
||||
if fail_check_text != '' else f'{product_id.name}')
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'sf.functional.tool.assembly.order',
|
||||
'name': ' ',
|
||||
'res_model': 'picking.validate.check.wizard',
|
||||
'name': '质检不合格提示',
|
||||
'view_mode': 'form',
|
||||
'target': 'new',
|
||||
'context': {'': True}
|
||||
'context': {
|
||||
'default_picking_id': self.id,
|
||||
'default_fail_check_text': f'警告:存在不合格产品{fail_check_text},继续调拨请点“确认”,否则请取消?',
|
||||
'again_validate': True}
|
||||
}
|
||||
return super(StockPicking, self).button_validate()
|
||||
|
||||
@@ -73,6 +73,6 @@ access_quality_cnc_test_group_quality_director,quality_cnc_test_group_quality_di
|
||||
|
||||
access_quality_cnc_test_group_sf_equipment_user,quality_cnc_test_group_sf_equipment_user,model_quality_cnc_test,sf_base.group_sf_equipment_user,1,1,0,0
|
||||
|
||||
|
||||
access_picking_validate_check_wizard,access.picking_validate_check_wizard,model_picking_validate_check_wizard,quality.group_quality_user,1,1,1,0
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1 @@
|
||||
from . import check_picking_wizard
|
||||
|
||||
17
sf_quality/wizard/check_picking_wizard.py
Normal file
17
sf_quality/wizard/check_picking_wizard.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from odoo import api, models,fields
|
||||
|
||||
|
||||
class PickingValidateCheckWizard(models.TransientModel):
|
||||
_name = 'picking.validate.check.wizard'
|
||||
_description = '调拨质检不合格二次验证'
|
||||
|
||||
picking_id = fields.Many2one('stock.picking', '调拨单')
|
||||
fail_check_text = fields.Text('提示信息')
|
||||
|
||||
def confirm_picking_validate_check(self):
|
||||
self.picking_id.button_validate()
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
def cancel_picking_validate_check(self):
|
||||
# 这里是取消后的逻辑
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
15
sf_quality/wizard/check_picking_wizard_view.xml
Normal file
15
sf_quality/wizard/check_picking_wizard_view.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<odoo>
|
||||
<record id="picking_validate_check_wizard_form" model="ir.ui.view">
|
||||
<field name="name">picking.validate.check.wizard</field>
|
||||
<field name="model">picking.validate.check.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<field name="fail_check_text" readonly="True"/>
|
||||
<footer>
|
||||
<button name="confirm_picking_validate_check" type="object" class="btn-primary" string="确认"/>
|
||||
<button name="cancel_picking_validate_check" type="object" string="取消"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user