Accept Merge Request #1938: (feature/销售_采购申请优化 -> develop)

Merge Request: 1、新增由销售单生成的采购申请自动确认;2、销售单新增【采购申请】跳转按钮

Created By: @禹翔辉
Reviewed By: @马广威
Approved By: @马广威 
Accepted By: @禹翔辉
URL: https://jikimo-hn.coding.net/p/jikimo_sfs/d/jikimo_sf/git/merge/1938
This commit is contained in:
禹翔辉
2025-03-20 15:37:55 +08:00
committed by Coding
5 changed files with 76 additions and 5 deletions

View File

@@ -8,7 +8,7 @@
'category': 'purchase',
'depends': ['sf_manufacturing', 'purchase_request'],
'data': [
'views/sale_order_view.xml',
],
# 'assets': {
# 'web.assets_backend': [

View File

@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from . import product_template
from . import purchase_request
from . import purchase_request
from . import sale_order

View File

@@ -0,0 +1,50 @@
from odoo import fields, models, api, _
class StatusChange(models.Model):
_inherit = 'sale.order'
def action_confirm(self):
res = super(StatusChange, self).action_confirm()
# 采购申请自动确认
pr_ids = self.env["purchase.request"].sudo().search(
[('origin', 'like', self.name), ('rule_new_add', '=', True)])
if pr_ids:
pr_ids.write({'need_validation': False})
pr_ids.write({"state": "approved"})
return res
purchase_request_purchase_order_count = fields.Integer('采购申请单数量', compute='_compute_purchase_request_count',
store=True)
@api.depends('state')
def _compute_purchase_request_count(self):
for so in self:
pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', so.name)])
if pr_ids:
so.purchase_request_purchase_order_count = len(pr_ids)
else:
so.purchase_request_purchase_order_count = 0
def action_view_purchase_request_purchase_orders(self):
"""
采购请求
"""
self.ensure_one()
pr_ids = self.env['purchase.request'].sudo().search([('origin', 'like', self.name)])
action = {
'res_model': 'purchase.request',
'type': 'ir.actions.act_window',
}
if len(pr_ids) == 1:
action.update({
'view_mode': 'form',
'res_id': pr_ids[0].id,
})
else:
action.update({
'name': _("%s生成采购请求单", self.name),
'domain': [('id', 'in', pr_ids)],
'view_mode': 'tree,form',
})
return action

View File

@@ -0,0 +1,19 @@
<odoo>
<record id="sale_order_inherited_form_purchase_request_sf" model="ir.ui.view">
<field name="name">sale.order.inherited.form.purchase.request</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale_purchase.sale_order_inherited_form_purchase"/>
<field name="arch" type="xml">
<xpath expr="//button[@name='action_preview_sale_order']" position="before">
<button class="oe_stat_button" name="action_view_purchase_request_purchase_orders" type="object" icon="fa-credit-card"
groups='purchase.group_purchase_user'
attrs="{'invisible': [('purchase_request_purchase_order_count', '=', 0)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value"><field name="purchase_request_purchase_order_count"/></span>
<span class="o_stat_text">采购申请</span>
</div>
</button>
</xpath>
</field>
</record>
</odoo>

View File

@@ -313,10 +313,11 @@ class RePurchaseOrder(models.Model):
@api.depends('origin')
def _compute_purchase_type(self):
for purchase in self:
order_id = self.env['sale.order'].sudo().search([('name', '=', purchase.origin)])
if order_id:
origin = [origin.replace(' ', '') for origin in purchase.origin.split(',')]
order_ids = self.env['sale.order'].sudo().search([('name', 'in', origin)])
if order_ids:
product_list = [line.product_id.id for line in purchase.order_line]
for order_line in order_id.order_line:
for order_line in order_ids[0].order_line:
if order_line.supply_method == 'purchase':
if order_line.product_id.id in product_list:
purchase.purchase_type = 'outside'