From 6c879e4af39882354d8e4cb16a88d9c1be13f8c9 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 20 Mar 2025 15:20:05 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E7=94=B1=E9=94=80?= =?UTF-8?q?=E5=94=AE=E5=8D=95=E7=94=9F=E6=88=90=E7=9A=84=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E8=87=AA=E5=8A=A8=E7=A1=AE=E8=AE=A4=EF=BC=9B?= =?UTF-8?q?2=E3=80=81=E9=94=80=E5=94=AE=E5=8D=95=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E3=80=90=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E3=80=91=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_purchase_request/__manifest__.py | 2 +- jikimo_purchase_request/models/__init__.py | 3 +- jikimo_purchase_request/models/sale_order.py | 50 +++++++++++++++++++ .../views/sale_order_view.xml | 19 +++++++ sf_sale/models/sale_order.py | 7 +-- 5 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 jikimo_purchase_request/models/sale_order.py create mode 100644 jikimo_purchase_request/views/sale_order_view.xml diff --git a/jikimo_purchase_request/__manifest__.py b/jikimo_purchase_request/__manifest__.py index f2054556..683c4311 100644 --- a/jikimo_purchase_request/__manifest__.py +++ b/jikimo_purchase_request/__manifest__.py @@ -8,7 +8,7 @@ 'category': 'purchase', 'depends': ['sf_manufacturing', 'purchase_request'], 'data': [ - + 'views/sale_order_view.xml', ], # 'assets': { # 'web.assets_backend': [ diff --git a/jikimo_purchase_request/models/__init__.py b/jikimo_purchase_request/models/__init__.py index ce8d8227..284002d0 100644 --- a/jikimo_purchase_request/models/__init__.py +++ b/jikimo_purchase_request/models/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- from . import product_template -from . import purchase_request \ No newline at end of file +from . import purchase_request +from . import sale_order diff --git a/jikimo_purchase_request/models/sale_order.py b/jikimo_purchase_request/models/sale_order.py new file mode 100644 index 00000000..8755c2c9 --- /dev/null +++ b/jikimo_purchase_request/models/sale_order.py @@ -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 diff --git a/jikimo_purchase_request/views/sale_order_view.xml b/jikimo_purchase_request/views/sale_order_view.xml new file mode 100644 index 00000000..625fcc56 --- /dev/null +++ b/jikimo_purchase_request/views/sale_order_view.xml @@ -0,0 +1,19 @@ + + + sale.order.inherited.form.purchase.request + sale.order + + + + + + + + \ No newline at end of file diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index b3c058ae..b4aca0dc 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -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'