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 ac7a8f1d1f7..516a50f3549 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 @@ -5,7 +5,7 @@ import { useService } from "@web/core/utils/hooks"; import { BomOverviewControlPanel } from "../bom_overview_control_panel/mrp_bom_overview_control_panel"; import { BomOverviewTable } from "../bom_overview_table/mrp_bom_overview_table"; -const { Component, EventBus, onMounted, onWillStart, onWillUnmount, useState } = owl; +const { Component, EventBus, onWillStart, useSubEnv, useState } = owl; export class BomOverviewComponent extends Component { setup() { @@ -35,28 +35,14 @@ export class BomOverviewComponent extends Component { bomQuantity: null, }); + useSubEnv({ + overviewBus: new EventBus(), + }); + onWillStart(async () => { await this.getWarehouses(); await this.initBomData(); }); - - onMounted(() => { - this.bus.addEventListener("change-fold", (ev) => this._onChangeFolded(ev.detail)); - this.bus.addEventListener("change-display", (ev) => this._onChangeDisplay(ev.detail)); - this.bus.addEventListener("change-quantity", (ev) => this._onChangeBomQuantity(ev.detail)); - this.bus.addEventListener("change-variant", (ev) => this._onChangeVariant(ev.detail)); - this.bus.addEventListener("change-warehouse", (ev) => this._onChangeWarehouse(ev.detail)); - this.bus.addEventListener("print", (ev) => this._onClickPrint(ev.detail)); - }); - - onWillUnmount(() => { - this.bus.removeEventListener("change-fold", (ev) => this._onChangeFolded(ev.detail)); - this.bus.removeEventListener("change-display", (ev) => this._onChangeDisplay(ev.detail)); - this.bus.removeEventListener("change-quantity", (ev) => this._onChangeBomQuantity(ev.detail)); - this.bus.removeEventListener("change-variant", (ev) => this._onChangeVariant(ev.detail)); - this.bus.removeEventListener("change-warehouse", (ev) => this._onChangeWarehouse(ev.detail)); - this.bus.removeEventListener("print", (ev) => this._onClickPrint(ev.detail)); - }); } //---- Data ---- @@ -102,39 +88,38 @@ export class BomOverviewComponent extends Component { //---- Handlers ---- - _onChangeFolded(foldInfo) { + onChangeFolded(foldInfo) { const { ids, isFolded } = foldInfo; const operation = isFolded ? "delete" : "add"; ids.forEach(id => this.unfoldedIds[operation](id)); } - _onChangeDisplay(displayInfo) { - const { type, value } = displayInfo; - this.state.showOptions[type] = value; + onChangeDisplay(displayInfo) { + this.state.showOptions[displayInfo] = !this.state.showOptions[displayInfo]; } - async _onChangeBomQuantity(newQuantity) { + async onChangeBomQuantity(newQuantity) { if (this.state.bomQuantity != newQuantity) { this.state.bomQuantity = newQuantity; await this.getBomData(); } } - async _onChangeVariant(variantId) { + async onChangeVariant(variantId) { if (this.state.currentVariantId != variantId) { this.state.currentVariantId = variantId; await this.getBomData(); } } - async _onChangeWarehouse(warehouseId) { + async onChangeWarehouse(warehouseId) { if (this.state.currentWarehouse.id != warehouseId) { this.state.currentWarehouse = this.warehouses.find(wh => wh.id == warehouseId); await this.getBomData(); } } - async _onClickPrint(printAll) { + async onClickPrint(printAll) { return this.actionService.doAction({ type: "ir.actions.report", report_type: "qweb-pdf", 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 79f43b6f84b..fd49c00b2ba 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 @@ -3,21 +3,25 @@
+ warehouses="warehouses" + print.bind="onClickPrint" + changeWarehouse.bind="onChangeWarehouse" + changeVariant.bind="onChangeVariant" + changeBomQuantity.bind="onChangeBomQuantity" + changeDisplay.bind="onChangeDisplay"/> + data="state.bomData" + changeFolded.bind="onChangeFolded"/>
diff --git a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js index cf12f953a6e..d704b637984 100644 --- a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js +++ b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.js @@ -1,9 +1,10 @@ /** @odoo-module **/ +import { useBus } from "@web/core/utils/hooks"; import { BomOverviewLine } from "../bom_overview_line/mrp_bom_overview_line"; import { BomOverviewExtraBlock } from "../bom_overview_extra_block/mrp_bom_overview_extra_block"; -const { Component, onMounted, onWillUnmount, onWillUpdateProps, useState } = owl; +const { Component, onWillUnmount, onWillUpdateProps, useState } = owl; export class BomOverviewComponentsBlock extends Component { setup() { @@ -13,15 +14,12 @@ export class BomOverviewComponentsBlock extends Component { unfoldAll: this.props.unfoldAll || false, }); if (this.props.unfoldAll) { - this.props.bus.trigger("change-fold", { ids: this.childIds, isFolded: false }); + this.props.changeFolded({ ids: this.childIds, isFolded: false }); } - onMounted(() => { - if (this.hasComponents) { - this.props.bus.addEventListener(`toggle-fold-${this.identifier}`, (ev) => this._onToggleFolded(ev.detail)); - this.props.bus.addEventListener("unfold-all", () => this._unfoldAll()); - } - }); + if (this.hasComponents) { + useBus(this.env.overviewBus, "unfold-all", () => this._unfoldAll()); + } onWillUpdateProps(newProps => { if (this.data.product_id != newProps.data.product_id) { @@ -34,26 +32,24 @@ export class BomOverviewComponentsBlock extends Component { onWillUnmount(() => { if (this.hasComponents) { - this.props.bus.trigger("change-fold", { ids: this.childIds, isFolded: true }); - this.props.bus.removeEventListener(`toggle-fold-${this.identifier}`, (ev) => this._onToggleFolded(ev.detail)); - this.props.bus.removeEventListener("unfold-all", () => this._unfoldAll()); + this.props.changeFolded({ ids: this.childIds, isFolded: true }); } }); } //---- Handlers ---- - _onToggleFolded(foldId) { + onToggleFolded(foldId) { const newState = !this.state[foldId]; this.state[foldId] = newState; this.state.unfoldAll = false; - this.props.bus.trigger("change-fold", { ids: [foldId], isFolded: newState }); + this.props.changeFolded({ ids: [foldId], isFolded: newState }); } _unfoldAll() { const allChildIds = this.childIds; this.state.unfoldAll = true; allChildIds.forEach(id => this.state[id] = false); - this.props.bus.trigger("change-fold", { ids: allChildIds, isFolded: false }); + this.props.changeFolded({ ids: allChildIds, isFolded: false }); } //---- Getters ---- @@ -74,14 +70,6 @@ export class BomOverviewComponentsBlock extends Component { return this.getIdentifier(this.data); } - get operationsId() { - return this.getIdentifier(this.data, "operations"); - } - - get byproductsId() { - return this.getIdentifier(this.data, "byproducts"); - } - get showOperations() { return this.props.showOptions.operations; } @@ -104,11 +92,11 @@ BomOverviewComponentsBlock.components = { BomOverviewExtraBlock, }; BomOverviewComponentsBlock.props = { - bus: Object, unfoldAll: { type: Boolean, optional: true }, showOptions: Object, currentWarehouseId: { type: Number, optional: true }, data: Object, + changeFolded: Function, }; BomOverviewComponentsBlock.defaultProps = { unfoldAll: false, diff --git a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.xml b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.xml index ebe3a4280ae..024134b77bb 100644 --- a/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.xml +++ b/addons/mrp/static/src/components/bom_overview_components_block/mrp_bom_overview_components_block.xml @@ -5,37 +5,36 @@ + data="line" + toggleFolded.bind="onToggleFolded"/> + data="line" + changeFolded.bind="props.changeFolded"/> + data="data" + changeFolded.bind="props.changeFolded"/> + data="data" + changeFolded.bind="props.changeFolded"/> 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 c5220923e1d..f375225274f 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 @@ -18,7 +18,7 @@ export class BomOverviewControlPanel extends Component { updateQuantity(ev) { const newVal = isNaN(ev.target.value) ? 1 : parseInt(ev.target.value); - this.props.bus.trigger("change-quantity", newVal); + this.props.changeBomQuantity(newVal); } onKeyPress(ev) { @@ -28,20 +28,8 @@ export class BomOverviewControlPanel extends Component { } } - changeVariant(ev) { - this.props.bus.trigger("change-variant", ev.target.value); - } - - changeWarehouse(warehouseId) { - this.props.bus.trigger("change-warehouse", warehouseId); - } - - clickPrint(printAll=false) { - this.props.bus.trigger("print", printAll); - } - clickUnfold() { - this.props.bus.trigger("unfold-all"); + this.env.overviewBus.trigger("unfold-all"); } } @@ -53,7 +41,6 @@ BomOverviewControlPanel.components = { BomOverviewDisplayFilter, }; BomOverviewControlPanel.props = { - bus: Object, bomQuantity: Number, showOptions: Object, showVariants: { type: Boolean, optional: true }, @@ -62,6 +49,11 @@ BomOverviewControlPanel.props = { uomName: { type: String, optional: true }, currentWarehouse: Object, warehouses: { type: Array, optional: true }, + print: Function, + changeWarehouse: Function, + changeVariant: Function, + changeBomQuantity: Function, + changeDisplay: Function, }; BomOverviewControlPanel.defaultProps = { variants: {}, 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 5f2c0f84c31..d4c1cbb6fcb 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 @@ -6,9 +6,9 @@
- + - +
@@ -30,7 +30,7 @@
- @@ -49,13 +49,13 @@ Warehouse: - + + showOptions="props.showOptions" + changeDisplay.bind="props.changeDisplay"/>
diff --git a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js index 387122f9a34..807632cac54 100644 --- a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js +++ b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.js @@ -13,11 +13,6 @@ export class BomOverviewDisplayFilter extends Component { operations: this.env._t('Operations'), }; } - //---- Handlers ---- - - onClickDisplay(optionKey) { - this.props.bus.trigger("change-display", { type: optionKey, value: !this.props.showOptions[optionKey] }); - } //---- Getters ---- @@ -36,7 +31,6 @@ BomOverviewDisplayFilter.components = { DropdownItem, } BomOverviewDisplayFilter.props = { - bus: Object, showOptions: { type: Object, shape: { @@ -48,4 +42,5 @@ BomOverviewDisplayFilter.props = { attachments: Boolean, }, }, + changeDisplay: Function, }; diff --git a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.xml b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.xml index b5b6bcb6fb8..0adf1c31b0c 100644 --- a/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.xml +++ b/addons/mrp/static/src/components/bom_overview_display_filter/mrp_bom_overview_display_filter.xml @@ -8,7 +8,7 @@ Display: - + diff --git a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js index 80aed88fab6..b67cb0aa54f 100644 --- a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js +++ b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.js @@ -1,9 +1,10 @@ /** @odoo-module **/ +import { useBus } from "@web/core/utils/hooks"; import { BomOverviewLine } from "../bom_overview_line/mrp_bom_overview_line"; import { BomOverviewSpecialLine } from "../bom_overview_special_line/mrp_bom_overview_special_line"; -const { Component, onMounted, onWillUnmount, onWillUpdateProps, useState } = owl; +const { Component, onWillUnmount, onWillUpdateProps, useState } = owl; export class BomOverviewExtraBlock extends Component { setup() { @@ -11,13 +12,10 @@ export class BomOverviewExtraBlock extends Component { isFolded: !this.props.unfoldAll, }); if (this.props.unfoldAll) { - this.props.bus.trigger("change-fold", { ids: [this.identifier], isFolded: false }); + this.props.changeFolded({ ids: [this.identifier], isFolded: false }); } - onMounted(() => { - this.props.bus.addEventListener(`toggle-fold-${this.identifier}`, () => this._onToggleFolded()); - this.props.bus.addEventListener("unfold-all", () => this._unfold()); - }); + useBus(this.env.overviewBus, "unfold-all", () => this._unfold()); onWillUpdateProps(newProps => { if (this.props.data.product_id != newProps.data.product_id) { @@ -26,23 +24,22 @@ export class BomOverviewExtraBlock extends Component { }); onWillUnmount(() => { - this.props.bus.trigger("change-fold", { ids: [this.identifier], isFolded: true }); - this.props.bus.removeEventListener(`toggle-fold-${this.identifier}`, () => this._onToggleFolded()); - this.props.bus.removeEventListener("unfold-all", () => this._unfold()); + // Need to notify main component that the block was folded so it doesn't appear on the PDF. + this.changeFolded({ ids: [this.identifier], isFolded: true }); }); } //---- Handlers ---- - _onToggleFolded() { + onToggleFolded() { const newState = !this.state.isFolded; this.state.isFolded = newState; - this.props.bus.trigger("change-fold", { ids: [this.identifier], isFolded: newState }); + this.props.changeFolded({ ids: [this.identifier], isFolded: newState }); } _unfold() { this.state.isFolded = false; - this.props.bus.trigger("change-fold", { ids: [this.identifier], isFolded: false }); + this.props.changeFolded({ ids: [this.identifier], isFolded: false }) } //---- Getters ---- @@ -58,7 +55,6 @@ BomOverviewExtraBlock.components = { BomOverviewSpecialLine, }; BomOverviewExtraBlock.props = { - bus: Object, unfoldAll: { type: Boolean, optional: true }, type: { type: String, @@ -66,6 +62,7 @@ BomOverviewExtraBlock.props = { }, showOptions: Object, data: Object, + changeFolded: Function, }; BomOverviewExtraBlock.defaultProps = { showAvailabilities: false, diff --git a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.xml b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.xml index a8db935964a..1af635bd255 100644 --- a/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.xml +++ b/addons/mrp/static/src/components/bom_overview_extra_block/mrp_bom_overview_extra_block.xml @@ -3,16 +3,14 @@ + data="props.data" + toggleFolded.bind="onToggleFolded"/> diff --git a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js index b5b763c1e43..db406be6950 100644 --- a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js +++ b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.js @@ -63,12 +63,6 @@ export class BomOverviewLine extends Component { }); } - onToggleFolded() { - if (this.props.parentId) { - this.props.bus.trigger(`toggle-fold-${this.props.parentId}`, this.identifier); - } - } - //---- Getters ---- get data() { @@ -152,9 +146,7 @@ export class BomOverviewLine extends Component { BomOverviewLine.template = "mrp.BomOverviewLine"; BomOverviewLine.props = { - bus: Object, isFolded: { type: Boolean, optional: true }, - parentId: { type: String, optional: true }, showOptions: { type: Object, shape: { @@ -168,7 +160,9 @@ BomOverviewLine.props = { }, currentWarehouseId: { type: Number, optional: true }, data: Object, + toggleFolded: { type: Function, optional: true }, }; BomOverviewLine.defaultProps = { isFolded: true, + toggleFolded: () => {}, }; diff --git a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml index 9e98ad11d83..9ff5b1cab74 100644 --- a/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml +++ b/addons/mrp/static/src/components/bom_overview_line/mrp_bom_overview_line.xml @@ -5,7 +5,7 @@
- diff --git a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js index 9b3547b6c09..69d4c10ef6a 100644 --- a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js +++ b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.js @@ -11,14 +11,6 @@ export class BomOverviewSpecialLine extends Component { this.formatMonetary = (val) => formatMonetary(val, { currencyId: this.data.currency_id }); } - //---- Handlers ---- - - onToggleFolded() { - if (this.props.parentId) { - this.props.bus.trigger(`toggle-fold-${this.props.parentId}`); - } - } - //---- Getters ---- get data() { @@ -52,9 +44,7 @@ export class BomOverviewSpecialLine extends Component { BomOverviewSpecialLine.template = "mrp.BomOverviewSpecialLine"; BomOverviewSpecialLine.props = { - bus: Object, type: String, - parentId: { type: String, optional: true }, isFolded: { type: Boolean, optional: true }, showOptions: { type: Object, diff --git a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml index 2693bee2ccd..a1c4aba7182 100644 --- a/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml +++ b/addons/mrp/static/src/components/bom_overview_special_line/mrp_bom_overview_special_line.xml @@ -4,7 +4,7 @@ -