1.采购去掉审核2.装夹预调工单验证优化

This commit is contained in:
jinling.yang
2024-05-06 16:29:54 +08:00
parent ca3cdd9132
commit ed41667477
4 changed files with 24 additions and 73 deletions

View File

@@ -735,7 +735,15 @@ class ResMrpWorkOrder(models.Model):
def button_start(self): def button_start(self):
if self.routing_type == '装夹预调' and self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name: if self.routing_type == '装夹预调' and self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name:
self.pro_code = self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name self.pro_code = self.production_id.move_raw_ids[0].move_line_ids[0].lot_id.name
if self.routing_type == '装夹预调':
if not self.cnc_ids:
raise UserError(_('该制造订单还未下发CNC程序请稍后再试'))
else:
for item in self.cnc_ids:
functional_cutting_tool = self.env['sf.functional.cutting.tool.entity'].search(
[('tool_name_id.name', '=', item.cutting_tool_name)])
if not functional_cutting_tool:
raise UserError(_('该制造订单的CNC程序为%s没有对应的功能刀具%s' % item.cutting_tool_name))
if self.routing_type == '解除装夹': if self.routing_type == '解除装夹':
''' '''
记录开始时间 记录开始时间

View File

@@ -125,7 +125,7 @@
attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')), ('is_user_working', '!=', False)]}"/> attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')), ('is_user_working', '!=', False)]}"/>
<button name="button_pending" type="object" string="暂停" class="btn-warning" <button name="button_pending" type="object" string="暂停" class="btn-warning"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/> attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
<button name="button_finish" type="object" string="完成" class="btn-success" <button name="button_finish" type="object" string="完成" class="btn-success" confirm="是否确认完工"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/> attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"/>
<button name="%(mrp.act_mrp_block_workcenter_wo)d" type="action" string="阻塞" <button name="%(mrp.act_mrp_block_workcenter_wo)d" type="action" string="阻塞"

View File

@@ -151,23 +151,18 @@ class ProductTemplate(models.Model):
class RePurchaseOrder(models.Model): class RePurchaseOrder(models.Model):
_inherit = 'purchase.order' _inherit = 'purchase.order'
check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态')
remark = fields.Text('备注') remark = fields.Text('备注')
user_id = fields.Many2one( user_id = fields.Many2one(
'res.users', string='买家', index=True, tracking=True, 'res.users', string='买家', index=True, tracking=True,
compute='_compute_user_id', compute='_compute_user_id',
store=True) store=True)
def button_confirming(self):
self.write({'state': 'purchase', 'check_status': 'pending'})
@api.depends('partner_id') @api.depends('partner_id')
def _compute_user_id(self): def _compute_user_id(self):
if not self.user_id: if not self.user_id:
if self.partner_id: if self.partner_id:
self.user_id = self.partner_id.purchase_user_id.id self.user_id = self.partner_id.purchase_user_id.id
self.check_status = 'pending' # self.state = 'purchase'
self.state = 'purchase'
else: else:
self.user_id = self.env.user.id self.user_id = self.env.user.id
@@ -190,28 +185,6 @@ class RePurchaseOrder(models.Model):
if not line.taxes_id: if not line.taxes_id:
raise UserError('请对【产品】中的【税】进行选择') raise UserError('请对【产品】中的【税】进行选择')
def write(self, vals):
if self.env.user.has_group('sf_base.group_purchase_director'):
if vals.get('check_status'):
if vals['check_status'] in ('pending', False):
vals['check_status'] = 'approved'
return super().write(vals)
def button_confirm(self):
for order in self:
if order.state not in ['draft', 'sent', 'purchase']:
continue
order.order_line._validate_analytic_distribution()
order._add_supplier_to_product()
# Deal with double validation process
if order._approval_allowed():
order.button_approve()
else:
order.write({'state': 'to approve'})
if order.partner_id not in order.message_partner_ids:
order.message_subscribe([order.partner_id.id])
return True
@api.onchange('order_line') @api.onchange('order_line')
def _onchange_order_line(self): def _onchange_order_line(self):
for order in self: for order in self:

View File

@@ -8,28 +8,15 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="partner_id" position="replace"> <field name="partner_id" position="replace">
<field name="partner_id" widget="res_partner_many2one" context="{'is_supplier': True }"/> <field name="partner_id" widget="res_partner_many2one" context="{'is_supplier': True }"/>
<field name="check_status" invisible="1"/>
</field> </field>
<field name="currency_id" position="after"> <field name="currency_id" position="after">
<field name="remark" attrs="{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <field name="remark" attrs="{'readonly': [('state', 'in', ['purchase'])]}"/>
['pending','approved'])]}"/>
</field> </field>
<xpath expr="//form/header/button[@name='action_rfq_send'][1]" position="after">
<button name="sf_sale.action_purchase_order_check_wizard" string="审核" type="action"
context="{'default_order_id':active_id}" groups="sf_base.group_purchase_director"
attrs="{'invisible': ['&amp;',('check_status','in', ['approved','fail']),('state', 'in', ['purchase','draft'])]}"
class="oe_highlight"/>
</xpath>
<xpath expr="//form/header/button[@name='button_confirm'][2]" position="replace"> <xpath expr="//form/header/button[@name='button_confirm'][2]" position="replace">
<button name="button_confirm" type="object" context="{'validate_analytic': True}" <button name="button_confirm" type="object" context="{'validate_analytic': True}"
string="确认订单" id="draft_confirm" string="确认订单" id="draft_confirm"
groups="sf_base.group_purchase,sf_base.group_purchase_director" groups="sf_base.group_purchase,sf_base.group_purchase_director"
attrs="{'invisible': ['|','&amp;','&amp;', ('state', 'in', ['purchase','draft']), ('check_status', 'in', ['approved']), ('date_approve', '!=', False),'&amp;', '&amp;',('state', 'in', ['purchase', 'draft']),('check_status', 'in', [False, 'pending', 'fail']),('date_approve', '=', False)]}" attrs="{'invisible': [('state', 'in', ['purchase'])]}"
/>
<button name="button_confirming" type="object"
string="确认订单" groups="sf_base.group_purchase,sf_base.group_purchase_director"
attrs="{'invisible': ['&amp;',('check_status','!=', False),('state', 'not in', ['draft','send'])]}"
/> />
</xpath> </xpath>
<xpath expr="//form/header/button[@name='action_rfq_send'][1]" position="replace"> <xpath expr="//form/header/button[@name='action_rfq_send'][1]" position="replace">
@@ -93,43 +80,35 @@
<attribute name="groups">sf_base.group_purchase,sf_base.group_purchase_director</attribute> <attribute name="groups">sf_base.group_purchase,sf_base.group_purchase_director</attribute>
</xpath> </xpath>
<xpath expr="//field[@name='order_line']" position="attributes"> <xpath expr="//field[@name='order_line']" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['approved'])]}
</attribute> </attribute>
</xpath> </xpath>
<field name="partner_ref" position="attributes"> <field name="partner_ref" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="date_planned" position="attributes"> <field name="date_planned" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="receipt_reminder_email" position="attributes"> <field name="receipt_reminder_email" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="user_id" position="attributes"> <field name="user_id" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="origin" position="attributes"> <field name="origin" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="payment_term_id" position="attributes"> <field name="payment_term_id" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
<field name="fiscal_position_id" position="attributes"> <field name="fiscal_position_id" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
</field> </field>
@@ -153,13 +132,10 @@
<field name="inherit_id" ref="purchase_stock.purchase_order_view_form_inherit"/> <field name="inherit_id" ref="purchase_stock.purchase_order_view_form_inherit"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="incoterm_id" position="attributes"> <field name="incoterm_id" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}</attribute>
['pending','approved'])]}
</attribute>
</field> </field>
<field name="incoterm_location" position="attributes"> <field name="incoterm_location" position="attributes">
<attribute name="attrs">{'readonly': ['&amp;',('state', 'in', ['purchase']),('check_status','in', <attribute name="attrs">{'readonly': [('state', 'in', ['purchase'])]}
['pending','approved'])]}
</attribute> </attribute>
</field> </field>
</field> </field>
@@ -171,14 +147,8 @@
<field name="inherit_id" ref="purchase.purchase_order_view_tree"/> <field name="inherit_id" ref="purchase.purchase_order_view_tree"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree position="attributes"> <tree position="attributes">
<attribute name="default_order">check_status desc,date_approve asc</attribute> <attribute name="default_order">date_approve asc</attribute>
</tree> </tree>
<field name="amount_total" position="after">
<field name="check_status" widget="badge"
decoration-success="check_status == 'approved'"
decoration-warning="check_status == 'pending'"
decoration-danger="check_status == 'fail'"/>
</field>
</field> </field>
</record> </record>