diff --git a/addons/website/__manifest__.py b/addons/website/__manifest__.py index a709f2ac51c..ee278e6daf6 100644 --- a/addons/website/__manifest__.py +++ b/addons/website/__manifest__.py @@ -5,7 +5,7 @@ 'name': 'Website', 'category': 'Website/Website', 'sequence': 20, - 'summary': 'Enterprise website builder', + 'summary': 'Website builder', 'website': 'https://www.odoo.com/page/website-builder', 'version': '1.0', 'description': "", diff --git a/addons/website/data/website_data.xml b/addons/website/data/website_data.xml index 737f7d26557..843fc2702a6 100644 --- a/addons/website/data/website_data.xml +++ b/addons/website/data/website_data.xml @@ -308,7 +308,7 @@ Career - Publish jobs offer and let people apply + Publish job offers and let people apply 8 fa-address-card diff --git a/addons/website/i18n/website.pot b/addons/website/i18n/website.pot index 9a95ece68d3..d98f3b866b2 100644 --- a/addons/website/i18n/website.pot +++ b/addons/website/i18n/website.pot @@ -1354,6 +1354,13 @@ msgstr "" msgid "Allow to specify for one page of the website to be trackable or not" msgstr "" +#. module: website +#. openerp-web +#: code:addons/website/static/src/components/configurator/configurator.xml:0 +#, python-format +msgid "Already installed" +msgstr "" + #. module: website #: model_terms:ir.ui.view,arch_db:website.s_faq_collapse msgid "" @@ -5899,7 +5906,7 @@ msgstr "" #. module: website #: model:website.configurator.feature,description:website.feature_module_career -msgid "Publish jobs offer and let people apply" +msgid "Publish job offers and let people apply" msgstr "" #. module: website diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 4430a37f30d..1a948b398cc 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -291,7 +291,16 @@ class Website(models.Model): def configurator_init(self): r = dict() company_id = self.get_current_website().company_id - r['features'] = self.env['website.configurator.feature'].search_read([], ['name', 'description', 'type', 'icon', 'website_types_preselection']) + configurator_features = self.env['website.configurator.feature'].search([]) + r['features'] = [{ + 'id': feature.id, + 'name': feature.name, + 'description': feature.description, + 'type': feature.type, + 'icon': feature.icon, + 'website_types_preselection': feature.website_types_preselection, + 'module_state': feature.module_id.state, + } for feature in configurator_features] r['logo'] = False if company_id.logo and company_id.logo != company_id._get_logo(): r['logo'] = company_id.logo.decode('utf-8') diff --git a/addons/website/static/src/components/configurator/configurator.js b/addons/website/static/src/components/configurator/configurator.js index 85b2fc49db9..79bed367c81 100644 --- a/addons/website/static/src/components/configurator/configurator.js +++ b/addons/website/static/src/components/configurator/configurator.js @@ -348,7 +348,7 @@ const getters = { const actions = { selectWebsiteType({state}, id) { - Object.values(state.features).forEach((feature) => { + Object.values(state.features).filter((feature) => feature.module_state !== 'installed').forEach((feature) => { feature.selected = feature.website_types_preselection.includes(WEBSITE_TYPES[id].name); }); state.selectedType = id; @@ -371,9 +371,8 @@ const actions = { }, toggleFeature({state}, featureId) { const feature = state.features[featureId]; - const websiteType = WEBSITE_TYPES[state.selectedType]; - const forceFeatureActive = websiteType && feature.website_types_preselection.includes(websiteType.name); - feature.selected = !feature.selected || forceFeatureActive; + const isModuleInstalled = feature.module_state === 'installed'; + feature.selected = !feature.selected || isModuleInstalled; }, setRecommendedPalette({state}, color1, color2) { if (color1 && color2) { @@ -409,7 +408,7 @@ async function getInitialState() { logo: results.logo ? 'data:image/png;base64,' + results.logo : false, }; results.features.forEach(feature => { - r.features[feature.id] = Object.assign({}, feature, {selected: false}); + r.features[feature.id] = Object.assign({}, feature, {selected: feature.module_state === 'installed'}); const wtp = r.features[feature.id].website_types_preselection; r.features[feature.id].website_types_preselection = wtp ? wtp.split(',') : []; }); diff --git a/addons/website/static/src/components/configurator/configurator.xml b/addons/website/static/src/components/configurator/configurator.xml index 2890139538b..2c4257e7ec4 100644 --- a/addons/website/static/src/components/configurator/configurator.xml +++ b/addons/website/static/src/components/configurator/configurator.xml @@ -165,12 +165,18 @@
+
-
+
- -
- + + + + + + +
+

diff --git a/addons/website/static/src/scss/configurator.scss b/addons/website/static/src/scss/configurator.scss index 2a2e89257c7..b3f6ddff7c8 100644 --- a/addons/website/static/src/scss/configurator.scss +++ b/addons/website/static/src/scss/configurator.scss @@ -229,6 +229,11 @@ &.o_feature_selection_screen { .card { cursor: pointer; + + &.card_installed { + cursor: default; + opacity: 0.75; + } } .o_configurator_feature_status { @include o-position-absolute($card-spacer-y * 0.5 , $card-spacer-x * 0.5);