From d2058c39c21851cf0ac55352b9162973cdc4c5fd Mon Sep 17 00:00:00 2001 From: Martin Maes Date: Fri, 14 Apr 2023 07:22:08 +0000 Subject: [PATCH] [FIX] mrp: BoM overview context To reproduce this bug, you need to create a RFQ, add a product with variants and click on the button to view the quantity forecast. Then, click on Manufacturing forecast. The BoM overview does not have the correct variant selected in the Select. To fix this, simply added an active_product_id to the context, used it to get the correct BoM data ans then display it in the select. Task-3184663 X-original-commit: a4ab49d5e41debfe6b2d46840dfffe1008f0f1ec Part-of: odoo/odoo#121783 --- .../src/components/bom_overview/mrp_bom_overview.js | 7 +++++-- .../src/components/bom_overview/mrp_bom_overview.xml | 1 + .../mrp_bom_overview_control_panel.js | 8 ++++++++ .../mrp_bom_overview_control_panel.xml | 2 +- .../mrp/static/src/mrp_forecasted/forecasted_buttons.js | 1 + 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js index 792c98c6021..540fd966af5 100644 --- a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js +++ b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.js @@ -48,6 +48,9 @@ export class BomOverviewComponent extends Component { //---- Data ---- async initBomData() { + const variantId = this.props.action.context.active_product_id; + this.state.currentVariantId = variantId ? variantId : false; + const bomData = await this.getBomData(); this.state.bomQuantity = bomData["bom_qty"]; this.state.showOptions.uom = bomData["is_uom_applied"]; @@ -55,7 +58,7 @@ export class BomOverviewComponent extends Component { this.variants = bomData["variants"]; this.showVariants = bomData["is_variant_applied"]; if (this.showVariants) { - this.state.currentVariantId = Object.keys(this.variants)[0]; + this.state.currentVariantId ||= Object.keys(this.variants)[0]; } this.state.precision = bomData["precision"]; } @@ -105,7 +108,7 @@ export class BomOverviewComponent extends Component { await this.getBomData(); } } - + async onChangeVariant(variantId) { if (this.state.currentVariantId != variantId) { this.state.currentVariantId = variantId; diff --git a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.xml b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.xml index f3238974952..a96c9637d14 100644 --- a/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.xml +++ b/addons/mrp/static/src/components/bom_overview/mrp_bom_overview.xml @@ -6,6 +6,7 @@ bomQuantity="state.bomQuantity" uomName="uomName" variants="variants" + data="state.bomData" showOptions="state.showOptions" showVariants="showVariants" currentWarehouse="state.currentWarehouse" diff --git a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js index 9471c42be04..4ab5398f78b 100644 --- a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js +++ b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.js @@ -4,6 +4,7 @@ import { ControlPanel } from "@web/search/control_panel/control_panel"; import { BomOverviewDisplayFilter } from "../bom_overview_display_filter/mrp_bom_overview_display_filter"; import { Dropdown } from "@web/core/dropdown/dropdown"; import { DropdownItem } from "@web/core/dropdown/dropdown_item"; +import { Many2XAutocomplete } from "@web/views/fields/relational_utils"; const { Component } = owl; @@ -29,6 +30,11 @@ export class BomOverviewControlPanel extends Component { clickUnfold() { this.env.overviewBus.trigger("unfold-all"); } + + getDomain() { + const keys = Object.keys(this.props.variants); + return [['id', 'in', keys]]; + } } BomOverviewControlPanel.template = "mrp.BomOverviewControlPanel"; @@ -37,12 +43,14 @@ BomOverviewControlPanel.components = { DropdownItem, ControlPanel, BomOverviewDisplayFilter, + Many2XAutocomplete, }; BomOverviewControlPanel.props = { bomQuantity: Number, showOptions: Object, showVariants: { type: Boolean, optional: true }, variants: { type: Object, optional: true }, + data: { type: Object, optional: true }, showUom: { type: Boolean, optional: true }, uomName: { type: String, optional: true }, currentWarehouse: Object, diff --git a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml index 162f84d8a9d..bfbbc891e5a 100644 --- a/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml +++ b/addons/mrp/static/src/components/bom_overview_control_panel/mrp_bom_overview_control_panel.xml @@ -29,7 +29,7 @@
Variant
diff --git a/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js b/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js index ed563727962..6aecd3a799b 100644 --- a/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js +++ b/addons/mrp/static/src/mrp_forecasted/forecasted_buttons.js @@ -18,6 +18,7 @@ patch(ForecastedButtons.prototype, 'mrp.ForecastedButtons',{ return this.actionService.doAction("mrp.action_report_mrp_bom", { additionalContext: { active_id: this.bomId, + active_product_id: this.productId, }, }); }