odoo.define('sale.product_configurator', function (require) { var relationalFields = require('web.relational_fields'); var FieldsRegistry = require('web.field_registry'); var core = require('web.core'); var _t = core._t; /** * The sale.product_configurator widget is a simple widget extending FieldMany2One * It allows the development of configuration strategies in other modules through * widget extensions. * * * !!! WARNING !!! * * This widget is only designed for sale_order_line creation/updates. * !!! It should only be used on a product_product or product_template field !!! */ var ProductConfiguratorWidget = relationalFields.FieldMany2One.extend({ events: _.extend({}, relationalFields.FieldMany2One.prototype.events, { 'click .o_edit_product_configuration': '_onEditConfiguration' }), /** * @override */ _render: function () { this._super.apply(this, arguments); if (this.mode === 'edit' && this.value && (this._isConfigurableProduct() || this._isConfigurableLine())) { this._addProductLinkButton(); this._addConfigurationEditButton(); } else if (this.mode === 'edit' && this.value) { this._addProductLinkButton(); this.$('.o_edit_product_configuration').hide(); } else { this.$('.o_external_button').hide(); this.$('.o_edit_product_configuration').hide(); } }, /** * Add button linking to product_id/product_template_id form. */ _addProductLinkButton: function () { if (this.$('.o_external_button').length === 0) { var $productLinkButton = $('