From 21d052e222637669328ed2e73e9f1116b5986dea Mon Sep 17 00:00:00 2001 From: guanhuan Date: Tue, 29 Apr 2025 10:40:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E7=94=B3=E8=AF=B7=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jikimo_purchase_request/__manifest__.py | 11 ++--- .../models/purchase_request.py | 43 +++++++++++++++++++ .../static/src/change.scss | 3 ++ .../views/purchase_request_line_view.xml | 22 ++++++++++ ...rchase_request_line_make_purchase_order.py | 11 ++++- 5 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 jikimo_purchase_request/static/src/change.scss create mode 100644 jikimo_purchase_request/views/purchase_request_line_view.xml diff --git a/jikimo_purchase_request/__manifest__.py b/jikimo_purchase_request/__manifest__.py index dad34ddc..3221a54e 100644 --- a/jikimo_purchase_request/__manifest__.py +++ b/jikimo_purchase_request/__manifest__.py @@ -12,12 +12,13 @@ 'views/mrp_production.xml', 'views/purchase_request_view.xml', 'wizard/purchase_request_line_make_purchase_order_view.xml', + 'views/purchase_request_line_view.xml', ], - # 'assets': { - # 'web.assets_backend': [ - # 'jikimo_purchase_request/static/src/**/*' - # ], - # }, + 'assets': { + 'web.assets_backend': [ + 'jikimo_purchase_request/static/src/**/*' + ], + }, 'application': True, 'installable': True, 'auto_install': False, diff --git a/jikimo_purchase_request/models/purchase_request.py b/jikimo_purchase_request/models/purchase_request.py index 9e610612..3ecd2161 100644 --- a/jikimo_purchase_request/models/purchase_request.py +++ b/jikimo_purchase_request/models/purchase_request.py @@ -47,6 +47,19 @@ class PurchaseRequestLine(models.Model): ('outsourcing', "委外加工"), ], string='供货方式', compute='_compute_supply_method', store=True) + purchase_request_count = fields.Integer(string='采购申请数量', compute='_compute_purchase_request_count', readonly=True) + purchase_count = fields.Integer(string="采购订单数量", compute="_compute_purchase_count", readonly=True) + + @api.depends("purchase_lines") + def _compute_purchase_count(self): + for rec in self: + rec.purchase_count = len(rec.mapped("purchase_lines.order_id")) + + @api.depends('request_id') + def _compute_purchase_request_count(self): + for order in self: + order.purchase_request_count = len(order.request_id) + @api.depends('origin') def _compute_supply_method(self): for prl in self: @@ -98,3 +111,33 @@ class PurchaseRequestLine(models.Model): else: record.part_number = record.product_id.part_number record.part_name = record.product_id.part_name + + def _compute_qty_to_buy(self): + for pr in self: + qty_to_buy = sum(pr.mapped("product_qty")) - sum(pr.mapped("qty_done")) - sum(pr.mapped("qty_in_progress")) + pr.qty_to_buy = qty_to_buy > 0.0 + pr.pending_qty_to_receive = qty_to_buy + + def action_view_purchase_request(self): + action = self.env["ir.actions.actions"]._for_xml_id("purchase_request.purchase_request_form_action") + action.update({ + 'res_id': self.request_id.id, + 'views': [[False, 'form']], + }) + return action + + def action_view_purchase_order(self): + action = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq") + lines = self.mapped("purchase_lines.order_id") + if len(lines) > 1: + action["domain"] = [("id", "in", lines.ids)] + elif lines: + action["views"] = [ + (self.env.ref("purchase.purchase_order_form").id, "form") + ] + action["res_id"] = lines.id + origin_context = ast.literal_eval(action['context']) + if 'search_default_draft' in origin_context: + origin_context.pop('search_default_draft') + action['context'] = origin_context + return action diff --git a/jikimo_purchase_request/static/src/change.scss b/jikimo_purchase_request/static/src/change.scss new file mode 100644 index 00000000..be14ac07 --- /dev/null +++ b/jikimo_purchase_request/static/src/change.scss @@ -0,0 +1,3 @@ +th[data-name=keep_description] { + min-width: 220px; +} \ No newline at end of file diff --git a/jikimo_purchase_request/views/purchase_request_line_view.xml b/jikimo_purchase_request/views/purchase_request_line_view.xml new file mode 100644 index 00000000..51b9e09e --- /dev/null +++ b/jikimo_purchase_request/views/purchase_request_line_view.xml @@ -0,0 +1,22 @@ + + + purchase.request.line.sf.form + purchase.request.line + + + +
+ + +
+
+ +
+
+
diff --git a/jikimo_purchase_request/wizard/purchase_request_line_make_purchase_order.py b/jikimo_purchase_request/wizard/purchase_request_line_make_purchase_order.py index 16248b7b..81722ec5 100644 --- a/jikimo_purchase_request/wizard/purchase_request_line_make_purchase_order.py +++ b/jikimo_purchase_request/wizard/purchase_request_line_make_purchase_order.py @@ -104,7 +104,16 @@ class PurchaseRequestLineMakePurchaseOrder(models.TransientModel): # 去掉合并必须同一采购组的限制 pass - + def get_items(self, request_line_ids): + request_line_obj = self.env["purchase.request.line"] + items = [] + request_lines = request_line_obj.browse(request_line_ids).filtered(lambda line: line.pending_qty_to_receive > 0) + self._check_valid_request_line(request_line_ids) + self.check_group(request_lines) + for line in request_lines: + items.append([0, 0, self._prepare_item(line)]) + return items + class PurchaseRequestLineMakePurchaseOrderItem(models.TransientModel): _inherit = "purchase.request.line.make.purchase.order.item"