From 80e9085e292e4aa65b41092ce2772c429855fed0 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Fri, 21 Mar 2025 15:05:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_purchase_request/models/__init__.py | 1 + .../models/purchase_order.py | 16 ++++++ .../models/purchase_request.py | 34 +++++++++++++ .../views/purchase_request_view.xml | 49 +++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 jikimo_purchase_request/models/purchase_order.py diff --git a/jikimo_purchase_request/models/__init__.py b/jikimo_purchase_request/models/__init__.py index 6942c727..d27a3cd0 100644 --- a/jikimo_purchase_request/models/__init__.py +++ b/jikimo_purchase_request/models/__init__.py @@ -2,4 +2,5 @@ from . import product_template from . import purchase_request from . import sale_order +from . import purchase_order from . import stock_rule diff --git a/jikimo_purchase_request/models/purchase_order.py b/jikimo_purchase_request/models/purchase_order.py new file mode 100644 index 00000000..f22027fb --- /dev/null +++ b/jikimo_purchase_request/models/purchase_order.py @@ -0,0 +1,16 @@ +from odoo import api, fields, models, _ + + +class PurchaseOrder(models.Model): + _inherit = 'purchase.order' + + state = fields.Selection([ + ('draft', '询价'), + ('sent', '发送询价'), + ('to approve', '待批准'), + ("approved", "已批准"), + ('purchase', '采购订单'), + ('done', '完成'), + ('cancel', '取消'), + ('rejected', '已驳回') + ], string='Status', readonly=True, index=True, copy=False, default='draft', tracking=True) \ No newline at end of file diff --git a/jikimo_purchase_request/models/purchase_request.py b/jikimo_purchase_request/models/purchase_request.py index f2a78bda..52310269 100644 --- a/jikimo_purchase_request/models/purchase_request.py +++ b/jikimo_purchase_request/models/purchase_request.py @@ -1,3 +1,4 @@ +import re from odoo import models, fields, api @@ -25,6 +26,12 @@ class PurchaseRequestLine(models.Model): _description = '采购申请明细' origin = fields.Char(string="Source Document") + + part_number = fields.Char('零件图号', store=True, compute='_compute_part_number') + part_name = fields.Char('零件名称', store=True, compute='_compute_part_name') + related_product = fields.Many2one('product.product', string='关联产品', + help='经此产品工艺加工成的成品') + supply_method = fields.Selection([ ('automation', "自动化产线加工"), ('manual', "人工线下加工"), @@ -56,3 +63,30 @@ class PurchaseRequestLine(models.Model): prl.supply_method = order_line[0].supply_method else: prl.supply_method = None + + @api.depends('product_id') + def _compute_part_number(self): + for record in self: + if record.part_number and record.part_name: + continue + if record.product_id.categ_id.name == '坯料': + product_name = '' + match = re.search(r'(S\d{5}-\d)', record.product_id.name) + # 如果匹配成功,提取结果 + if match: + product_name = match.group(0) + sale_order_name = '' + match_sale = re.search(r'S(\d+)', record.product_id.name) + if match_sale: + sale_order_name = match_sale.group(0) + sale_order = self.env['sale.order'].sudo().search( + [('name', '=', sale_order_name)]) + if sale_order: + filtered_order_line = sale_order.order_line.filtered( + lambda order_line: re.search(f'{product_name}$', order_line.product_id.name) + ) + record.part_number = filtered_order_line.product_id.part_number + record.part_name = filtered_order_line.product_id.part_name + else: + record.part_number = record.product_id.part_number + record.part_name = record.product_id.part_name diff --git a/jikimo_purchase_request/views/purchase_request_view.xml b/jikimo_purchase_request/views/purchase_request_view.xml index 66a62bbf..385db699 100644 --- a/jikimo_purchase_request/views/purchase_request_view.xml +++ b/jikimo_purchase_request/views/purchase_request_view.xml @@ -10,6 +10,55 @@ + + + + + + + + + + purchase.request.line.sf.tree + purchase.request.line + + + + + + + + + True + + + + + + + 采购数量 + + + 订单状态 + + + + + + + + + + + purchase.request.line.sf.search + purchase.request.line + + + + + + + \ No newline at end of file