From 029513459428ed65a18264fb8bc1b08a3226ed4b Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Wed, 11 Sep 2019 14:04:03 +0200
Subject: [PATCH 01/69] [ADD] web_widget_dropdown_dynamic
[UPD] Update web_widget_dropdown_dynamic.pot
[UPD] Update web_widget_dropdown_dynamic_example.pot
[UPD] README.rst
[ADD] icon.png
[UPD] README.rst
---
web_widget_dropdown_dynamic/README.rst | 114 +++++
web_widget_dropdown_dynamic/__init__.py | 1 +
web_widget_dropdown_dynamic/__manifest__.py | 20 +
.../i18n/web_widget_dropdown_dynamic.pot | 22 +
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 9 +
.../readme/ROADMAP.rst | 1 +
web_widget_dropdown_dynamic/readme/USAGE.rst | 24 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 465 ++++++++++++++++++
.../static/src/js/basic_model.js | 47 ++
.../static/src/js/field_dynamic_dropdown.js | 140 ++++++
.../web_widget_dropdown_dynamic_tests.js | 177 +++++++
.../templates/assets.xml | 19 +
14 files changed, 1040 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/README.rst
create mode 100644 web_widget_dropdown_dynamic/__init__.py
create mode 100644 web_widget_dropdown_dynamic/__manifest__.py
create mode 100644 web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
create mode 100644 web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
create mode 100644 web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
create mode 100644 web_widget_dropdown_dynamic/readme/ROADMAP.rst
create mode 100644 web_widget_dropdown_dynamic/readme/USAGE.rst
create mode 100644 web_widget_dropdown_dynamic/static/description/icon.png
create mode 100644 web_widget_dropdown_dynamic/static/description/index.html
create mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.js
create mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
create mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
create mode 100644 web_widget_dropdown_dynamic/templates/assets.xml
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
new file mode 100644
index 000000000000..21d26639284f
--- /dev/null
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -0,0 +1,114 @@
+=======================
+Dynamic Dropdown Widget
+=======================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
+ :target: https://github.com/OCA/web/tree/12.0/web_widget_dropdown_dynamic
+ :alt: OCA/web
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_widget_dropdown_dynamic
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/162/12.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Dynamic dropdown widget that supports resolving options from backend of:
+
+ * ``fields.Char``
+ * ``fields.Integer``
+ * ``fields.Selection``
+
+**NOTE:** This widget is not intended to *extend* ``fields.Selection``, but to
+filter selection values. For fully-dynamic set of options, use ``fields.Char``
+instead.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+.. code-block:: python
+
+ @api.model
+ def method_name(self):
+ values = [
+ ('value_a', 'Title A'),
+ ]
+ if self.env.context.get('depending_on') == True:
+ values += [
+ ('value_b', 'Title B'),
+ ]
+ return values
+
+.. code-block:: xml
+
+
+
+
+Known issues / Roadmap
+======================
+
+ * In v13, ``$.when`` is going to become `Promise.resolve`
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Brainbean Apps OU
+
+Contributors
+~~~~~~~~~~~~
+
+* Alexey Pelykh
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/web `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__init__.py b/web_widget_dropdown_dynamic/__init__.py
new file mode 100644
index 000000000000..c71289ab17c7
--- /dev/null
+++ b/web_widget_dropdown_dynamic/__init__.py
@@ -0,0 +1 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
new file mode 100644
index 000000000000..8ede2ec51c88
--- /dev/null
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+{
+ 'name': 'Dynamic Dropdown Widget',
+ 'summary': 'This module adds support for dynamic dropdown widget',
+ 'category': 'Web',
+ 'version': '12.0.1.0.0',
+ 'license': 'AGPL-3',
+ 'author':
+ 'Brainbean Apps OU, '
+ 'Odoo Community Association (OCA)',
+ 'website': 'https://github.com/OCA/web/',
+ 'depends': [
+ 'web',
+ ],
+ 'data': [
+ 'templates/assets.xml',
+ ],
+ 'installable': True,
+}
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
new file mode 100644
index 000000000000..673c92c9958b
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: web_widget_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:15
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr ""
+
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000000..1c6a35a1e355
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Alexey Pelykh
diff --git a/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst b/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
new file mode 100644
index 000000000000..1ce39c5f7435
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
@@ -0,0 +1,9 @@
+Dynamic dropdown widget that supports resolving options from backend of:
+
+ * ``fields.Char``
+ * ``fields.Integer``
+ * ``fields.Selection``
+
+**NOTE:** This widget is not intended to *extend* ``fields.Selection``, but to
+filter selection values. For fully-dynamic set of options, use ``fields.Char``
+instead.
diff --git a/web_widget_dropdown_dynamic/readme/ROADMAP.rst b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
new file mode 100644
index 000000000000..7186b62cfda4
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
@@ -0,0 +1 @@
+ * In v13, ``$.when`` is going to become `Promise.resolve`
diff --git a/web_widget_dropdown_dynamic/readme/USAGE.rst b/web_widget_dropdown_dynamic/readme/USAGE.rst
new file mode 100644
index 000000000000..f30491bc4d49
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/USAGE.rst
@@ -0,0 +1,24 @@
+.. code-block:: python
+
+ @api.model
+ def method_name(self):
+ values = [
+ ('value_a', 'Title A'),
+ ]
+ if self.env.context.get('depending_on') == True:
+ values += [
+ ('value_b', 'Title B'),
+ ]
+ return values
+
+.. code-block:: xml
+
+
+
diff --git a/web_widget_dropdown_dynamic/static/description/icon.png b/web_widget_dropdown_dynamic/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
new file mode 100644
index 000000000000..d17e254a23d0
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -0,0 +1,465 @@
+
+
+
+
+
+
+Dynamic Dropdown Widget
+
+
+
+
+
+
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
new file mode 100644
index 000000000000..a059366baa2e
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+ */
+odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
+ "use strict";
+
+ var BasicModel = require('web.BasicModel');
+
+ BasicModel.include({
+ /**
+ * Fetches all the values associated to the given fieldName.
+ *
+ * @param {Object} record - an element from the localData
+ * @param {Object} fieldName - the name of the field
+ * @param {Object} fieldInfo
+ * @returns {Promise}
+ * The promise is resolved with the fetched special values.
+ * If this data is the same as the previously fetched one
+ * (for the given parameters), no RPC is done and the promise
+ * is resolved with the undefined value.
+ */
+ _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
+ var model = fieldInfo.options.model || record.model;
+ var method = fieldInfo.values || fieldInfo.options.values;
+ if (!method) {
+ return $.when();
+ }
+
+ var context = record.getContext({fieldName: fieldName});
+
+ // avoid rpc if not necessary
+ var hasChanged = this._saveSpecialDataCache(record, fieldName, {
+ context: context,
+ });
+ if (!hasChanged) {
+ return $.when();
+ }
+
+ return this._rpc({
+ model: model,
+ method: method,
+ context: context,
+ });
+ },
+ });
+});
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
new file mode 100644
index 000000000000..0a9443127186
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+ */
+odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (require) {
+ "use strict";
+
+ var core = require('web.core');
+ var AbstractField = require('web.AbstractField');
+ var field_registry = require('web.field_registry');
+
+ var _lt = core._lt;
+
+ var FieldDynamicDropdown = AbstractField.extend({
+ description: _lt('Dynamic Dropdown'),
+ template: 'FieldSelection',
+ specialData: '_fetchDynamicDropdownValues',
+ supportedFieldTypes: ['selection', 'char', 'integer'],
+ events: _.extend({}, AbstractField.prototype.events, {
+ 'change': '_onChange',
+ }),
+ /**
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ this._setValues();
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @returns {jQuery}
+ */
+ getFocusableElement: function () {
+ return this.$el.is('select') ? this.$el : $();
+ },
+ /**
+ * @override
+ */
+ isSet: function () {
+ return this.value !== false;
+ },
+ /**
+ * Listen to modifiers updates to hide/show the falsy value in the dropdown
+ * according to the required modifier.
+ *
+ * @override
+ */
+ updateModifiersValue: function () {
+ this._super.apply(this, arguments);
+ if (!this.attrs.modifiersValue.invisible && this.mode !== 'readonly') {
+ this._setValues();
+ this._renderEdit();
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @private
+ */
+ _formatValue: function (value) {
+ var options = _.extend({}, this.nodeOptions, { data: this.recordData }, this.formatOptions);
+ var formattedValue = _.find(this.values, function (option) {
+ return option[0] === value;
+ });
+ if (!formattedValue) {
+ return value;
+ }
+ formattedValue = formattedValue[1];
+ if (options && options.escape) {
+ formattedValue = _.escape(formattedValue);
+ }
+ return formattedValue;
+ },
+ /**
+ * @override
+ * @private
+ */
+ _renderEdit: function () {
+ this.$el.empty();
+ for (var i = 0 ; i < this.values.length ; i++) {
+ this.$el.append($(' ', {
+ value: JSON.stringify(this.values[i][0]),
+ text: this.values[i][1]
+ }));
+ }
+ this.$el.val(JSON.stringify(this.value));
+ },
+ /**
+ * @override
+ * @private
+ */
+ _renderReadonly: function () {
+ this.$el.empty().text(this._formatValue(this.value));
+ },
+ /**
+ * @override
+ */
+ _reset: function () {
+ this._super.apply(this, arguments);
+ this._setValues();
+ },
+ /**
+ * Sets the possible field values.
+ *
+ * @private
+ */
+ _setValues: function () {
+ this.values = _.reject(this.record.specialData[this.name], function (v) {
+ return v[0] === false && v[1] === '';
+ });
+ if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
+ this.values = [[false, this.attrs.placeholder || '']].concat(this.values);
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ _onChange: function () {
+ var value = JSON.parse(this.$el.val());
+ this._setValue(value.toString());
+ },
+ });
+ field_registry.add('dynamic_dropdown', FieldDynamicDropdown);
+
+ return FieldDynamicDropdown;
+});
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
new file mode 100644
index 000000000000..f25ac6581e8f
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -0,0 +1,177 @@
+odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', function (require) {
+ "use strict";
+
+ var FormView = require('web.FormView');
+ var testUtils = require('web.test_utils');
+
+ QUnit.module('web_widget_dropdown_dynamic', {}, function () {
+
+ QUnit.test('values are fetched w/o context (char)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'char'},
+ },
+ records: [{id: 1, test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched w/o context (integer)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'integer'},
+ },
+ records: [{id: 1, test_field: 0}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ [0, 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'0\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched w/o context (selection)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'selection'},
+ },
+ records: [{id: 1, test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched with changing context', async function (assert) {
+ assert.expect(6);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ other_field: {string: 'Other Field', type: 'char'},
+ test_field: {string: 'Test Field', type: 'char'},
+ },
+ records: [{id: 1, other_field: '', test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ if (args.kwargs.context.step === 'step-1') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ } else if (args.kwargs.context.step === 'step-2') {
+ return $.when([
+ ['value', 'Title'],
+ ['value_2', 'Title 2'],
+ ]);
+ } else {
+ return $.when([]);
+ }
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-1',
+ ['input']
+ );
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-2',
+ ['input']
+ );
+ assert.containsN(form, 'option', 3);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsOnce(form, 'option[value=\'"value_2"\']');
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-other',
+ ['input']
+ );
+ assert.containsN(form, 'option', 1);
+
+ form.destroy();
+ });
+ });
+});
diff --git a/web_widget_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
new file mode 100644
index 000000000000..70b958e968c8
--- /dev/null
+++ b/web_widget_dropdown_dynamic/templates/assets.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 9ba5d2bda23e23b3f1d58b3599b209163904b551 Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 12 Apr 2020 08:55:00 +0200
Subject: [PATCH 02/69] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
web_widget_dropdown_dynamic/__manifest__.py | 26 ++-
.../static/src/js/basic_model.js | 10 +-
.../static/src/js/field_dynamic_dropdown.js | 97 ++++++-----
.../web_widget_dropdown_dynamic_tests.js | 152 +++++++++---------
.../templates/assets.xml | 30 +++-
5 files changed, 165 insertions(+), 150 deletions(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 8ede2ec51c88..8a47e74b2528 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,20 +1,14 @@
# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
- 'name': 'Dynamic Dropdown Widget',
- 'summary': 'This module adds support for dynamic dropdown widget',
- 'category': 'Web',
- 'version': '12.0.1.0.0',
- 'license': 'AGPL-3',
- 'author':
- 'Brainbean Apps OU, '
- 'Odoo Community Association (OCA)',
- 'website': 'https://github.com/OCA/web/',
- 'depends': [
- 'web',
- ],
- 'data': [
- 'templates/assets.xml',
- ],
- 'installable': True,
+ "name": "Dynamic Dropdown Widget",
+ "summary": "This module adds support for dynamic dropdown widget",
+ "category": "Web",
+ "version": "12.0.1.0.0",
+ "license": "AGPL-3",
+ "author": "Brainbean Apps OU, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/web/",
+ "depends": ["web"],
+ "data": ["templates/assets.xml"],
+ "installable": True,
}
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index a059366baa2e..dbdfb4f23767 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -1,11 +1,11 @@
-/*
+/*
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
+odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
"use strict";
- var BasicModel = require('web.BasicModel');
+ var BasicModel = require("web.BasicModel");
BasicModel.include({
/**
@@ -20,7 +20,7 @@ odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
* (for the given parameters), no RPC is done and the promise
* is resolved with the undefined value.
*/
- _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
+ _fetchDynamicDropdownValues: function(record, fieldName, fieldInfo) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
@@ -29,7 +29,7 @@ odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
var context = record.getContext({fieldName: fieldName});
- // avoid rpc if not necessary
+ // Avoid rpc if not necessary
var hasChanged = this._saveSpecialDataCache(record, fieldName, {
context: context,
});
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
index 0a9443127186..987793ba54e1 100644
--- a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -1,47 +1,47 @@
-/*
+/*
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (require) {
+odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(require) {
"use strict";
- var core = require('web.core');
- var AbstractField = require('web.AbstractField');
- var field_registry = require('web.field_registry');
+ var core = require("web.core");
+ var AbstractField = require("web.AbstractField");
+ var field_registry = require("web.field_registry");
var _lt = core._lt;
var FieldDynamicDropdown = AbstractField.extend({
- description: _lt('Dynamic Dropdown'),
- template: 'FieldSelection',
- specialData: '_fetchDynamicDropdownValues',
- supportedFieldTypes: ['selection', 'char', 'integer'],
+ description: _lt("Dynamic Dropdown"),
+ template: "FieldSelection",
+ specialData: "_fetchDynamicDropdownValues",
+ supportedFieldTypes: ["selection", "char", "integer"],
events: _.extend({}, AbstractField.prototype.events, {
- 'change': '_onChange',
+ change: "_onChange",
}),
/**
* @override
*/
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
this._setValues();
},
-
- //--------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------
// Public
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @override
* @returns {jQuery}
*/
- getFocusableElement: function () {
- return this.$el.is('select') ? this.$el : $();
+ getFocusableElement: function() {
+ return this.$el.is("select") ? this.$el : $();
},
/**
* @override
*/
- isSet: function () {
+ isSet: function() {
return this.value !== false;
},
/**
@@ -50,25 +50,30 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
*
* @override
*/
- updateModifiersValue: function () {
+ updateModifiersValue: function() {
this._super.apply(this, arguments);
- if (!this.attrs.modifiersValue.invisible && this.mode !== 'readonly') {
+ if (!this.attrs.modifiersValue.invisible && this.mode !== "readonly") {
this._setValues();
this._renderEdit();
}
},
-
- //--------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------
// Private
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @override
* @private
*/
- _formatValue: function (value) {
- var options = _.extend({}, this.nodeOptions, { data: this.recordData }, this.formatOptions);
- var formattedValue = _.find(this.values, function (option) {
+ _formatValue: function(value) {
+ var options = _.extend(
+ {},
+ this.nodeOptions,
+ {data: this.recordData},
+ this.formatOptions
+ );
+ var formattedValue = _.find(this.values, function(option) {
return option[0] === value;
});
if (!formattedValue) {
@@ -84,13 +89,15 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
* @override
* @private
*/
- _renderEdit: function () {
+ _renderEdit: function() {
this.$el.empty();
- for (var i = 0 ; i < this.values.length ; i++) {
- this.$el.append($(' ', {
- value: JSON.stringify(this.values[i][0]),
- text: this.values[i][1]
- }));
+ for (var i = 0; i < this.values.length; i++) {
+ this.$el.append(
+ $(" ", {
+ value: JSON.stringify(this.values[i][0]),
+ text: this.values[i][1],
+ })
+ );
}
this.$el.val(JSON.stringify(this.value));
},
@@ -98,13 +105,13 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
* @override
* @private
*/
- _renderReadonly: function () {
+ _renderReadonly: function() {
this.$el.empty().text(this._formatValue(this.value));
},
/**
* @override
*/
- _reset: function () {
+ _reset: function() {
this._super.apply(this, arguments);
this._setValues();
},
@@ -113,28 +120,30 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
*
* @private
*/
- _setValues: function () {
- this.values = _.reject(this.record.specialData[this.name], function (v) {
- return v[0] === false && v[1] === '';
+ _setValues: function() {
+ this.values = _.reject(this.record.specialData[this.name], function(v) {
+ return v[0] === false && v[1] === "";
});
if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
- this.values = [[false, this.attrs.placeholder || '']].concat(this.values);
+ this.values = [[false, this.attrs.placeholder || ""]].concat(
+ this.values
+ );
}
},
- //--------------------------------------------------------------------------
+ // --------------------------------------------------------------------------
// Handlers
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @private
*/
- _onChange: function () {
+ _onChange: function() {
var value = JSON.parse(this.$el.val());
this._setValue(value.toString());
},
});
- field_registry.add('dynamic_dropdown', FieldDynamicDropdown);
+ field_registry.add("dynamic_dropdown", FieldDynamicDropdown);
return FieldDynamicDropdown;
});
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index f25ac6581e8f..615534d79085 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,147 +1,143 @@
-odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', function (require) {
+odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function(
+ require
+) {
"use strict";
-
- var FormView = require('web.FormView');
- var testUtils = require('web.test_utils');
- QUnit.module('web_widget_dropdown_dynamic', {}, function () {
+ /* global QUnit*/
- QUnit.test('values are fetched w/o context (char)', async function (assert) {
+ var FormView = require("web.FormView");
+ var testUtils = require("web.test_utils");
+
+ QUnit.module("web_widget_dropdown_dynamic", {}, function() {
+ QUnit.test("values are fetched w/o context (char)", async function(assert) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'char'},
+ test_field: {string: "Test Field", type: "char"},
},
- records: [{id: 1, test_field: ''}],
+ records: [{id: 1, test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- ['value', 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
form.destroy();
});
- QUnit.test('values are fetched w/o context (integer)', async function (assert) {
+ QUnit.test("values are fetched w/o context (integer)", async function(assert) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'integer'},
+ test_field: {string: "Test Field", type: "integer"},
},
records: [{id: 1, test_field: 0}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- [0, 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([[0, "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'0\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='0']");
form.destroy();
});
- QUnit.test('values are fetched w/o context (selection)', async function (assert) {
+ QUnit.test("values are fetched w/o context (selection)", async function(
+ assert
+ ) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'selection'},
+ test_field: {string: "Test Field", type: "selection"},
},
- records: [{id: 1, test_field: ''}],
+ records: [{id: 1, test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- ['value', 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
form.destroy();
});
- QUnit.test('values are fetched with changing context', async function (assert) {
+ QUnit.test("values are fetched with changing context", async function(assert) {
assert.expect(6);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- other_field: {string: 'Other Field', type: 'char'},
- test_field: {string: 'Test Field', type: 'char'},
+ other_field: {string: "Other Field", type: "char"},
+ test_field: {string: "Test Field", type: "char"},
},
- records: [{id: 1, other_field: '', test_field: ''}],
+ records: [{id: 1, other_field: "", test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- if (args.kwargs.context.step === 'step-1') {
- return $.when([
- ['value', 'Title'],
- ]);
- } else if (args.kwargs.context.step === 'step-2') {
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ if (args.kwargs.context.step === "step-1") {
+ return $.when([["value", "Title"]]);
+ } else if (args.kwargs.context.step === "step-2") {
return $.when([
- ['value', 'Title'],
- ['value_2', 'Title 2'],
+ ["value", "Title"],
+ ["value_2", "Title 2"],
]);
- } else {
- return $.when([]);
}
+ return $.when([]);
}
return this._super.apply(this, arguments);
},
@@ -149,27 +145,27 @@ odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', fun
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-1',
- ['input']
+ "step-1",
+ ["input"]
);
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-2',
- ['input']
+ "step-2",
+ ["input"]
);
- assert.containsN(form, 'option', 3);
- assert.containsOnce(form, 'option[value=\'"value"\']');
- assert.containsOnce(form, 'option[value=\'"value_2"\']');
+ assert.containsN(form, "option", 3);
+ assert.containsOnce(form, "option[value='\"value\"']");
+ assert.containsOnce(form, "option[value='\"value_2\"']");
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-other',
- ['input']
+ "step-other",
+ ["input"]
);
- assert.containsN(form, 'option', 1);
+ assert.containsN(form, "option", 1);
form.destroy();
});
diff --git a/web_widget_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
index 70b958e968c8..e8ed1dcad129 100644
--- a/web_widget_dropdown_dynamic/templates/assets.xml
+++ b/web_widget_dropdown_dynamic/templates/assets.xml
@@ -1,19 +1,35 @@
-
+
-
+
-
-
+
+
-
-
+
-
+
From d547858a622d6dff4490319e3e8b863ee49c395a Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 12 Apr 2020 08:59:14 +0200
Subject: [PATCH 03/69] [MIG] web_widget_dropdown_dynamic: Migration to 13.0
---
web_widget_dropdown_dynamic/README.rst | 15 +++-----
web_widget_dropdown_dynamic/__manifest__.py | 4 +--
.../i18n/web_widget_dropdown_dynamic.pot | 9 +++--
.../readme/ROADMAP.rst | 1 -
.../static/description/index.html | 35 +++++++------------
.../static/src/js/basic_model.js | 6 ++--
.../web_widget_dropdown_dynamic_tests.js | 12 +++----
7 files changed, 33 insertions(+), 49 deletions(-)
delete mode 100644 web_widget_dropdown_dynamic/readme/ROADMAP.rst
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 21d26639284f..dd1a738cab70 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/12.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/13.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_widget_dropdown_dynamic
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/12.0
+ :target: https://runbot.odoo-community.org/runbot/162/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -68,18 +68,13 @@ Usage
context="{'depending_on': other_field}"
/>
-Known issues / Roadmap
-======================
-
- * In v13, ``$.when`` is going to become `Promise.resolve`
-
Bug Tracker
===========
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -109,6 +104,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 8a47e74b2528..79edb4045c1c 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,10 +1,10 @@
-# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "Brainbean Apps OU, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web/",
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index 673c92c9958b..1472b629c707 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * web_widget_dropdown_dynamic
+# * web_widget_dropdown_dynamic
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -15,8 +15,7 @@ msgstr ""
#. module: web_widget_dropdown_dynamic
#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:15
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr ""
-
diff --git a/web_widget_dropdown_dynamic/readme/ROADMAP.rst b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
deleted file mode 100644
index 7186b62cfda4..000000000000
--- a/web_widget_dropdown_dynamic/readme/ROADMAP.rst
+++ /dev/null
@@ -1 +0,0 @@
- * In v13, ``$.when`` is going to become `Promise.resolve`
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index d17e254a23d0..88600c24526d 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -383,12 +383,11 @@ Dynamic Dropdown Widget
-
-
-
-
-In v13, $.when is going to become Promise.resolve
-
-
-
-
+
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
-
+
-
+
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index dbdfb4f23767..f5b211e2c454 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
@@ -24,7 +24,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
- return $.when();
+ return Promise.resolve();
}
var context = record.getContext({fieldName: fieldName});
@@ -34,7 +34,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
context: context,
});
if (!hasChanged) {
- return $.when();
+ return Promise.resolve();
}
return this._rpc({
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index 615534d79085..f51b619cdeaa 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -29,7 +29,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -61,7 +61,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([[0, "Title"]]);
+ return Promise.resolve([[0, "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -95,7 +95,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -130,14 +130,14 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
if (args.kwargs.context.step === "step-1") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
} else if (args.kwargs.context.step === "step-2") {
- return $.when([
+ return Promise.resolve([
["value", "Title"],
["value_2", "Title 2"],
]);
}
- return $.when([]);
+ return Promise.resolve([]);
}
return this._super.apply(this, arguments);
},
From fb45fcab3926f1560131d79fd72f40978fb29997 Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 8 Nov 2020 08:16:37 +0200
Subject: [PATCH 04/69] [UPD] Brainbean Apps => CorporateHub
---
web_widget_dropdown_dynamic/README.rst | 6 ++++--
web_widget_dropdown_dynamic/__manifest__.py | 3 ++-
web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst | 4 +++-
web_widget_dropdown_dynamic/static/description/index.html | 7 +++++--
4 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index dd1a738cab70..182360991e47 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -84,12 +84,14 @@ Credits
Authors
~~~~~~~
-* Brainbean Apps OU
+* CorporateHub
Contributors
~~~~~~~~~~~~
-* Alexey Pelykh
+* `CorporateHub `__
+
+ * Alexey Pelykh
Maintainers
~~~~~~~~~~~
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 79edb4045c1c..e556da8d1c67 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,4 +1,5 @@
# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
+# Copyright 2020 CorporateHub (https://corporatehub.eu)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Dynamic Dropdown Widget",
@@ -6,7 +7,7 @@
"category": "Web",
"version": "13.0.1.0.0",
"license": "AGPL-3",
- "author": "Brainbean Apps OU, Odoo Community Association (OCA)",
+ "author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web/",
"depends": ["web"],
"data": ["templates/assets.xml"],
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 1c6a35a1e355..724bc1d03a2b 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -1 +1,3 @@
-* Alexey Pelykh
+* `CorporateHub `__
+
+ * Alexey Pelykh
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 88600c24526d..8da1257d41ce 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -431,13 +431,16 @@
-Brainbean Apps OU
+CorporateHub
From ad8f6085a37a76b415ab4282b379c27c3e685015 Mon Sep 17 00:00:00 2001
From: claudiagn
Date: Wed, 17 Feb 2021 12:45:40 +0000
Subject: [PATCH 05/69] Added translation using Weblate (Spanish)
---
web_widget_dropdown_dynamic/i18n/es.po | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/es.po
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
new file mode 100644
index 000000000000..39577a6ef398
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-02-17 14:45+0000\n"
+"Last-Translator: claudiagn \n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: web_widget_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr "Menú desplegable dinámico"
From f258caabd7e77c2c72ef3050583b0645cf8b59a3 Mon Sep 17 00:00:00 2001
From: Ronald Portier
Date: Fri, 28 May 2021 16:14:32 +0200
Subject: [PATCH 06/69] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
.../static/src/js/basic_model.js | 4 +--
.../static/src/js/field_dynamic_dropdown.js | 26 +++++++++----------
.../web_widget_dropdown_dynamic_tests.js | 20 +++++++-------
4 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index e556da8d1c67..879079b5bc40 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -8,7 +8,7 @@
"version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
- "website": "https://github.com/OCA/web/",
+ "website": "https://github.com/OCA/web",
"depends": ["web"],
"data": ["templates/assets.xml"],
"installable": True,
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index f5b211e2c454..b535a57e7436 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -2,7 +2,7 @@
* Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
+odoo.define("web_widget_dropdown_dynamic.basic_model", function (require) {
"use strict";
var BasicModel = require("web.BasicModel");
@@ -20,7 +20,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
* (for the given parameters), no RPC is done and the promise
* is resolved with the undefined value.
*/
- _fetchDynamicDropdownValues: function(record, fieldName, fieldInfo) {
+ _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
index 987793ba54e1..18cc876bdae0 100644
--- a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -2,7 +2,7 @@
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(require) {
+odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function (require) {
"use strict";
var core = require("web.core");
@@ -22,7 +22,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
/**
* @override
*/
- init: function() {
+ init: function () {
this._super.apply(this, arguments);
this._setValues();
},
@@ -35,13 +35,13 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @returns {jQuery}
*/
- getFocusableElement: function() {
+ getFocusableElement: function () {
return this.$el.is("select") ? this.$el : $();
},
/**
* @override
*/
- isSet: function() {
+ isSet: function () {
return this.value !== false;
},
/**
@@ -50,7 +50,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
*
* @override
*/
- updateModifiersValue: function() {
+ updateModifiersValue: function () {
this._super.apply(this, arguments);
if (!this.attrs.modifiersValue.invisible && this.mode !== "readonly") {
this._setValues();
@@ -66,14 +66,14 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _formatValue: function(value) {
+ _formatValue: function (value) {
var options = _.extend(
{},
this.nodeOptions,
{data: this.recordData},
this.formatOptions
);
- var formattedValue = _.find(this.values, function(option) {
+ var formattedValue = _.find(this.values, function (option) {
return option[0] === value;
});
if (!formattedValue) {
@@ -89,7 +89,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _renderEdit: function() {
+ _renderEdit: function () {
this.$el.empty();
for (var i = 0; i < this.values.length; i++) {
this.$el.append(
@@ -105,13 +105,13 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _renderReadonly: function() {
+ _renderReadonly: function () {
this.$el.empty().text(this._formatValue(this.value));
},
/**
* @override
*/
- _reset: function() {
+ _reset: function () {
this._super.apply(this, arguments);
this._setValues();
},
@@ -120,8 +120,8 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
*
* @private
*/
- _setValues: function() {
- this.values = _.reject(this.record.specialData[this.name], function(v) {
+ _setValues: function () {
+ this.values = _.reject(this.record.specialData[this.name], function (v) {
return v[0] === false && v[1] === "";
});
if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
@@ -138,7 +138,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
/**
* @private
*/
- _onChange: function() {
+ _onChange: function () {
var value = JSON.parse(this.$el.val());
this._setValue(value.toString());
},
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index f51b619cdeaa..494e64e4ed3f 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,4 +1,4 @@
-odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function(
+odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function (
require
) {
"use strict";
@@ -8,8 +8,8 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
var FormView = require("web.FormView");
var testUtils = require("web.test_utils");
- QUnit.module("web_widget_dropdown_dynamic", {}, function() {
- QUnit.test("values are fetched w/o context (char)", async function(assert) {
+ QUnit.module("web_widget_dropdown_dynamic", {}, function () {
+ QUnit.test("values are fetched w/o context (char)", async function (assert) {
assert.expect(2);
var form = await testUtils.createView({
@@ -27,7 +27,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([["value", "Title"]]);
}
@@ -41,7 +41,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched w/o context (integer)", async function(assert) {
+ QUnit.test("values are fetched w/o context (integer)", async function (assert) {
assert.expect(2);
var form = await testUtils.createView({
@@ -59,7 +59,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([[0, "Title"]]);
}
@@ -73,7 +73,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched w/o context (selection)", async function(
+ QUnit.test("values are fetched w/o context (selection)", async function (
assert
) {
assert.expect(2);
@@ -93,7 +93,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([["value", "Title"]]);
}
@@ -107,7 +107,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched with changing context", async function(assert) {
+ QUnit.test("values are fetched with changing context", async function (assert) {
assert.expect(6);
var form = await testUtils.createView({
@@ -127,7 +127,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
' ' +
' ' +
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
if (args.kwargs.context.step === "step-1") {
return Promise.resolve([["value", "Title"]]);
From 95399a19e74ef04f924c927d4a87cbdf43f9d2bc Mon Sep 17 00:00:00 2001
From: Ronald Portier
Date: Fri, 28 May 2021 16:19:56 +0200
Subject: [PATCH 07/69] [MIG] web_widget_dropdown_dynamic: Migration to 14.0
---
web_widget_dropdown_dynamic/README.rst | 14 +++++++++-----
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
.../i18n/web_widget_dropdown_dynamic.pot | 2 +-
.../readme/CONTRIBUTORS.rst | 4 ++++
.../static/description/index.html | 10 +++++++---
5 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 182360991e47..5a7ee5b31e1e 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/13.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/14.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_widget_dropdown_dynamic
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/13.0
+ :target: https://runbot.odoo-community.org/runbot/162/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -74,7 +74,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -93,6 +93,10 @@ Contributors
* Alexey Pelykh
+* `Therp BV `__
+
+ * Ronald Portier
+
Maintainers
~~~~~~~~~~~
@@ -106,6 +110,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 879079b5bc40..56add7f08564 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,7 +5,7 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "13.0.1.0.0",
+ "version": "14.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index 1472b629c707..db119581c6c2 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 724bc1d03a2b..fc2a1a3c6d31 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -1,3 +1,7 @@
* `CorporateHub `__
* Alexey Pelykh
+
+* `Therp BV `__
+
+ * Ronald Portier
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 8da1257d41ce..983b6b168e76 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -423,7 +423,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -450,7 +454,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From e17fd4297906e255447bde665c320527bd9b25d5 Mon Sep 17 00:00:00 2001
From: Corneliuus
Date: Wed, 13 Oct 2021 20:37:25 +0000
Subject: [PATCH 08/69] Added translation using Weblate (German)
---
web_widget_dropdown_dynamic/i18n/de.po | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/de.po
diff --git a/web_widget_dropdown_dynamic/i18n/de.po b/web_widget_dropdown_dynamic/i18n/de.po
new file mode 100644
index 000000000000..e78a6411cc81
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/de.po
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-10-13 20:46+0000\n"
+"Last-Translator: Corneliuus \n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: web_widget_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr "Dynamisches Dropdown"
From 76e0a1f41a79109913876b69ae418a3645b56e07 Mon Sep 17 00:00:00 2001
From: Thanakrit Pintana
Date: Tue, 30 Nov 2021 16:13:18 +0700
Subject: [PATCH 09/69] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
.../web_widget_dropdown_dynamic_tests.js | 338 +++++++++---------
1 file changed, 176 insertions(+), 162 deletions(-)
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index 494e64e4ed3f..1529278958f9 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,173 +1,187 @@
-odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function (
- require
-) {
- "use strict";
-
- /* global QUnit*/
-
- var FormView = require("web.FormView");
- var testUtils = require("web.test_utils");
-
- QUnit.module("web_widget_dropdown_dynamic", {}, function () {
- QUnit.test("values are fetched w/o context (char)", async function (assert) {
- assert.expect(2);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "char"},
+odoo.define(
+ "web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests",
+ function (require) {
+ "use strict";
+
+ /* global QUnit*/
+
+ var FormView = require("web.FormView");
+ var testUtils = require("web.test_utils");
+
+ QUnit.module("web_widget_dropdown_dynamic", {}, function () {
+ QUnit.test(
+ "values are fetched w/o context (char)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: "Test Field", type: "char"},
+ },
+ records: [{id: 1, test_field: ""}],
+ },
},
- records: [{id: 1, test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([["value", "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
-
- form.destroy();
- });
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([["value", "Title"]]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
- QUnit.test("values are fetched w/o context (integer)", async function (assert) {
- assert.expect(2);
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "integer"},
- },
- records: [{id: 1, test_field: 0}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([[0, "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='0']");
-
- form.destroy();
- });
+ form.destroy();
+ }
+ );
- QUnit.test("values are fetched w/o context (selection)", async function (
- assert
- ) {
- assert.expect(2);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "selection"},
+ QUnit.test(
+ "values are fetched w/o context (integer)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: "Test Field", type: "integer"},
+ },
+ records: [{id: 1, test_field: 0}],
+ },
},
- records: [{id: 1, test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([["value", "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
-
- form.destroy();
- });
-
- QUnit.test("values are fetched with changing context", async function (assert) {
- assert.expect(6);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- other_field: {string: "Other Field", type: "char"},
- test_field: {string: "Test Field", type: "char"},
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([[0, "Title"]]);
+ }
+ return this._super.apply(this, arguments);
},
- records: [{id: 1, other_field: "", test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- if (args.kwargs.context.step === "step-1") {
- return Promise.resolve([["value", "Title"]]);
- } else if (args.kwargs.context.step === "step-2") {
- return Promise.resolve([
- ["value", "Title"],
- ["value_2", "Title 2"],
- ]);
- }
- return Promise.resolve([]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-1",
- ["input"]
- );
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
+ });
+
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='0']");
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-2",
- ["input"]
+ form.destroy();
+ }
);
- assert.containsN(form, "option", 3);
- assert.containsOnce(form, "option[value='\"value\"']");
- assert.containsOnce(form, "option[value='\"value_2\"']");
-
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-other",
- ["input"]
+
+ QUnit.test(
+ "values are fetched w/o context (selection)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {
+ string: "Test Field",
+ type: "selection",
+ },
+ },
+ records: [{id: 1, test_field: ""}],
+ },
+ },
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([["value", "Title"]]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
+
+ form.destroy();
+ }
);
- assert.containsN(form, "option", 1);
- form.destroy();
+ QUnit.test(
+ "values are fetched with changing context",
+ async function (assert) {
+ assert.expect(6);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ other_field: {string: "Other Field", type: "char"},
+ test_field: {string: "Test Field", type: "char"},
+ },
+ records: [{id: 1, other_field: "", test_field: ""}],
+ },
+ },
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ if (args.kwargs.context.step === "step-1") {
+ return Promise.resolve([["value", "Title"]]);
+ } else if (args.kwargs.context.step === "step-2") {
+ return Promise.resolve([
+ ["value", "Title"],
+ ["value_2", "Title 2"],
+ ]);
+ }
+ return Promise.resolve([]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-1",
+ ["input"]
+ );
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-2",
+ ["input"]
+ );
+ assert.containsN(form, "option", 3);
+ assert.containsOnce(form, "option[value='\"value\"']");
+ assert.containsOnce(form, "option[value='\"value_2\"']");
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-other",
+ ["input"]
+ );
+ assert.containsN(form, "option", 1);
+
+ form.destroy();
+ }
+ );
});
- });
-});
+ }
+);
From a3a2b8d99a48cbc24a12982f2c6309d1932da189 Mon Sep 17 00:00:00 2001
From: Thanakrit Pintana
Date: Wed, 1 Dec 2021 10:08:31 +0700
Subject: [PATCH 10/69] [MIG] web_widget_dropdown_dynamic: Migration to 15.0
---
web_widget_dropdown_dynamic/README.rst | 12 ++++---
web_widget_dropdown_dynamic/__manifest__.py | 12 +++++--
.../i18n/web_widget_dropdown_dynamic.pot | 2 +-
.../readme/CONTRIBUTORS.rst | 2 ++
.../static/description/index.html | 7 ++--
.../templates/assets.xml | 35 -------------------
6 files changed, 24 insertions(+), 46 deletions(-)
delete mode 100644 web_widget_dropdown_dynamic/templates/assets.xml
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 5a7ee5b31e1e..e202749a424c 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/14.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/15.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_widget_dropdown_dynamic
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/14.0
+ :target: https://runbot.odoo-community.org/runbot/162/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -74,7 +74,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -97,6 +97,8 @@ Contributors
* Ronald Portier
+* Thanakrit Pintana
+
Maintainers
~~~~~~~~~~~
@@ -110,6 +112,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 56add7f08564..6ac2723069a0 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,11 +5,19 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "14.0.1.0.0",
+ "version": "15.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web"],
- "data": ["templates/assets.xml"],
"installable": True,
+ "assets": {
+ "web.assets_backend": [
+ "web_widget_dropdown_dynamic/static/src/js/basic_model.js",
+ "web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js",
+ ],
+ "web.qunit_suite_tests": [
+ "web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js"
+ ],
+ },
}
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index db119581c6c2..decac64824ea 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index fc2a1a3c6d31..104571487607 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -5,3 +5,5 @@
* `Therp BV `__
* Ronald Portier
+
+* Thanakrit Pintana
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 983b6b168e76..a1ff838ed71a 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -423,7 +423,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -454,7 +455,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
diff --git a/web_widget_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
deleted file mode 100644
index e8ed1dcad129..000000000000
--- a/web_widget_dropdown_dynamic/templates/assets.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
From 2c88ebd25d50aac52008ccfee12b3c5be1831c16 Mon Sep 17 00:00:00 2001
From: Goncalo Brito
Date: Tue, 28 Mar 2023 10:51:04 +0200
Subject: [PATCH 11/69] [16.0][MIG] web_widget_dropdown_dynamic
---
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 6ac2723069a0..c918c28ef4ec 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,7 +5,7 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "15.0.1.0.0",
+ "version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
From 1cc9489e503896514af551ee1c2bf91fa8182bd0 Mon Sep 17 00:00:00 2001
From: sonhd91
Date: Thu, 6 Jul 2023 10:04:24 +0700
Subject: [PATCH 12/69] [16.0][MIG]web_widget_dropdown_dynamic: Migrate to
version 16.0
---
web_widget_dropdown_dynamic/README.rst | 33 ++--
web_widget_dropdown_dynamic/__manifest__.py | 6 +-
web_widget_dropdown_dynamic/i18n/de.po | 4 +-
web_widget_dropdown_dynamic/i18n/es.po | 4 +-
.../i18n/web_widget_dropdown_dynamic.pot | 6 +-
.../readme/CONTRIBUTORS.rst | 3 +
.../readme/CREDITS.rst | 1 +
web_widget_dropdown_dynamic/readme/USAGE.rst | 2 +-
.../static/description/index.html | 39 ++--
.../static/src/js/basic_model.esm.js | 50 +++++
.../static/src/js/basic_model.js | 47 -----
.../src/js/field_dynamic_dropdown.esm.js | 88 +++++++++
.../static/src/js/field_dynamic_dropdown.js | 149 --------------
.../web_widget_dropdown_dynamic_tests.esm.js | 182 +++++++++++++++++
.../web_widget_dropdown_dynamic_tests.js | 187 ------------------
15 files changed, 383 insertions(+), 418 deletions(-)
create mode 100644 web_widget_dropdown_dynamic/readme/CREDITS.rst
create mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.js
create mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
create mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index e202749a424c..6abcf43e0adb 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -2,10 +2,13 @@
Dynamic Dropdown Widget
=======================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:e2b8eb236b4dc206f3a4ab9b5932f86c2e46c33bdac31c385725384f3fe970e3
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -14,16 +17,16 @@ Dynamic Dropdown Widget
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/15.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/16.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_widget_dropdown_dynamic
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/15.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Dynamic dropdown widget that supports resolving options from backend of:
@@ -64,7 +67,7 @@ Usage
@@ -73,8 +76,8 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -98,6 +101,14 @@ Contributors
* Ronald Portier
* Thanakrit Pintana
+* `Trobz `_:
+
+ * Son Ho
+
+Other credits
+~~~~~~~~~~~~~
+
+The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp
Maintainers
~~~~~~~~~~~
@@ -112,6 +123,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index c918c28ef4ec..ad6fd5d2380d 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -13,11 +13,7 @@
"installable": True,
"assets": {
"web.assets_backend": [
- "web_widget_dropdown_dynamic/static/src/js/basic_model.js",
- "web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js",
- ],
- "web.qunit_suite_tests": [
- "web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js"
+ "web_widget_dropdown_dynamic/**/*",
],
},
}
diff --git a/web_widget_dropdown_dynamic/i18n/de.po b/web_widget_dropdown_dynamic/i18n/de.po
index e78a6411cc81..61dd9d6002eb 100644
--- a/web_widget_dropdown_dynamic/i18n/de.po
+++ b/web_widget_dropdown_dynamic/i18n/de.po
@@ -17,8 +17,8 @@ msgstr ""
"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr "Dynamisches Dropdown"
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
index 39577a6ef398..21f65c66a502 100644
--- a/web_widget_dropdown_dynamic/i18n/es.po
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -17,8 +17,8 @@ msgstr ""
"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr "Menú desplegable dinámico"
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index decac64824ea..9147b0b4f778 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -14,8 +14,8 @@ msgstr ""
"Plural-Forms: \n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr ""
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 104571487607..081566b1cdb1 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -7,3 +7,6 @@
* Ronald Portier
* Thanakrit Pintana
+* `Trobz `_:
+
+ * Son Ho
diff --git a/web_widget_dropdown_dynamic/readme/CREDITS.rst b/web_widget_dropdown_dynamic/readme/CREDITS.rst
new file mode 100644
index 000000000000..70bc307ad0b1
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/CREDITS.rst
@@ -0,0 +1 @@
+The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp
diff --git a/web_widget_dropdown_dynamic/readme/USAGE.rst b/web_widget_dropdown_dynamic/readme/USAGE.rst
index f30491bc4d49..0d74a1ece5dc 100644
--- a/web_widget_dropdown_dynamic/readme/USAGE.rst
+++ b/web_widget_dropdown_dynamic/readme/USAGE.rst
@@ -19,6 +19,6 @@
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index a1ff838ed71a..99d63ad65d7e 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -3,7 +3,7 @@
-
+
Dynamic Dropdown Widget
-
From 4305cba5bf71810751089d5b5730d47dc75a8787 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bet=C3=BCl=20=C3=96=C4=9Fmen?=
Date: Tue, 16 Sep 2025 06:15:37 +0000
Subject: [PATCH 20/69] Added translation using Weblate (Turkish)
---
web_widget_dropdown_dynamic/i18n/tr.po | 33 ++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/tr.po
diff --git a/web_widget_dropdown_dynamic/i18n/tr.po b/web_widget_dropdown_dynamic/i18n/tr.po
new file mode 100644
index 000000000000..2e5d9d7d6086
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/tr.po
@@ -0,0 +1,33 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 18.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2025-09-16 06:25+0000\n"
+"Last-Translator: Betül Öğmen \n"
+"Language-Team: none\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.10.4\n"
+
+#. module: web_widget_dropdown_dynamic
+#: model:ir.model.fields,field_description:web_widget_dropdown_dynamic.field_dynamic_dropdown_int
+msgid "Dropdown Integer"
+msgstr "Açılır Tamsayı"
+
+#. module: web_widget_dropdown_dynamic
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
+msgid "Dynamic Dropdown"
+msgstr "Dinamik Açılır Menü"
+
+#. module: web_widget_dropdown_dynamic
+#: model:ir.model,name:web_widget_dropdown_dynamic.model_ir_filters
+msgid "Filters"
+msgstr "Filtreler"
From d47000aa3f25ad19392708362bce27d877032918 Mon Sep 17 00:00:00 2001
From: Ed-Spain
Date: Mon, 13 Apr 2026 08:06:41 +0000
Subject: [PATCH 21/69] Translated using Weblate (Spanish)
Currently translated at 100.0% (3 of 3 strings)
Translation: web-18.0/web-18.0-web_widget_dropdown_dynamic
Translate-URL: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_widget_dropdown_dynamic/es/
---
web_widget_dropdown_dynamic/i18n/es.po | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
index 90a846aea2a7..ba5ab038cb9f 100644
--- a/web_widget_dropdown_dynamic/i18n/es.po
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -6,28 +6,28 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2021-02-17 14:45+0000\n"
-"Last-Translator: claudiagn \n"
+"PO-Revision-Date: 2026-05-07 17:46+0000\n"
+"Last-Translator: Ed-Spain \n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 5.15.2\n"
#. module: web_widget_dropdown_dynamic
#: model:ir.model.fields,field_description:web_widget_dropdown_dynamic.field_dynamic_dropdown_int
msgid "Dropdown Integer"
-msgstr ""
+msgstr "Entero desplegable"
#. module: web_widget_dropdown_dynamic
#. odoo-javascript
#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
msgid "Dynamic Dropdown"
-msgstr "Menú desplegable dinámico"
+msgstr "Menú desplegable Dinámico"
#. module: web_widget_dropdown_dynamic
#: model:ir.model,name:web_widget_dropdown_dynamic.model_ir_filters
msgid "Filters"
-msgstr ""
+msgstr "Filtros"
From 1574e683ad0eee57e695c40718e3f6505e375890 Mon Sep 17 00:00:00 2001
From: Matjaz Mozetic
Date: Sat, 6 Jun 2026 12:11:43 +0000
Subject: [PATCH 22/69] Added translation using Weblate (Slovenian)
---
web_widget_dropdown_dynamic/i18n/sl.po | 34 ++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/sl.po
diff --git a/web_widget_dropdown_dynamic/i18n/sl.po b/web_widget_dropdown_dynamic/i18n/sl.po
new file mode 100644
index 000000000000..52f9c16faf27
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/sl.po
@@ -0,0 +1,34 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 18.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2026-06-06 14:47+0000\n"
+"Last-Translator: Matjaz Mozetic \n"
+"Language-Team: none\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
+"n%100==4 ? 2 : 3;\n"
+"X-Generator: Weblate 5.15.2\n"
+
+#. module: web_widget_dropdown_dynamic
+#: model:ir.model.fields,field_description:web_widget_dropdown_dynamic.field_dynamic_dropdown_int
+msgid "Dropdown Integer"
+msgstr "Celo število spustni seznam"
+
+#. module: web_widget_dropdown_dynamic
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
+msgid "Dynamic Dropdown"
+msgstr "Dinamični spustni meni"
+
+#. module: web_widget_dropdown_dynamic
+#: model:ir.model,name:web_widget_dropdown_dynamic.model_ir_filters
+msgid "Filters"
+msgstr "Filtri"
From 7bee3d358fb4bacbda388dffdd4dbd2f8b0a506a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexandre=20D=C3=ADaz?=
Date: Thu, 23 May 2019 08:55:31 +0200
Subject: [PATCH 23/69] [12.0][ADD] web_company_color (#1253)
---
web_company_color/README.rst | 88 ++++
web_company_color/__init__.py | 5 +
web_company_color/__manifest__.py | 22 +
web_company_color/hooks.py | 14 +
web_company_color/i18n/web_company_color.pot | 62 +++
web_company_color/models/__init__.py | 3 +
web_company_color/models/res_company.py | 165 +++++++
web_company_color/readme/CONTRIBUTORS.rst | 4 +
web_company_color/readme/DESCRIPTION.rst | 1 +
web_company_color/readme/ROADMAP.rst | 1 +
web_company_color/readme/USAGE.rst | 3 +
web_company_color/static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 433 ++++++++++++++++++
web_company_color/tests/__init__.py | 1 +
web_company_color/tests/test_res_company.py | 35 ++
web_company_color/utils.py | 41 ++
web_company_color/view/assets.xml | 17 +
web_company_color/view/res_company.xml | 33 ++
18 files changed, 928 insertions(+)
create mode 100644 web_company_color/README.rst
create mode 100644 web_company_color/__init__.py
create mode 100644 web_company_color/__manifest__.py
create mode 100644 web_company_color/hooks.py
create mode 100644 web_company_color/i18n/web_company_color.pot
create mode 100644 web_company_color/models/__init__.py
create mode 100644 web_company_color/models/res_company.py
create mode 100644 web_company_color/readme/CONTRIBUTORS.rst
create mode 100644 web_company_color/readme/DESCRIPTION.rst
create mode 100644 web_company_color/readme/ROADMAP.rst
create mode 100644 web_company_color/readme/USAGE.rst
create mode 100644 web_company_color/static/description/icon.png
create mode 100644 web_company_color/static/description/index.html
create mode 100644 web_company_color/tests/__init__.py
create mode 100644 web_company_color/tests/test_res_company.py
create mode 100644 web_company_color/utils.py
create mode 100644 web_company_color/view/assets.xml
create mode 100644 web_company_color/view/res_company.xml
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
new file mode 100644
index 000000000000..f293d67e57c6
--- /dev/null
+++ b/web_company_color/README.rst
@@ -0,0 +1,88 @@
+=================
+Web Company Color
+=================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
+ :target: https://github.com/OCA/web/tree/12.0/web_company_color
+ :alt: OCA/web
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_company_color
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/162/12.0
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module change navbar colors based in the company logo colors.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+Go to company record and set a logo. Can see/modify applied colors on the "Navbar" section.
+
+For optimal results use images with alpha channel.
+
+Known issues / Roadmap
+======================
+
+White color is omitted in the addition operation to support images without alpha channel.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Alexandre Díaz
+
+Contributors
+~~~~~~~~~~~~
+
+* Jordi Ballester Alomar (Eficent)
+* Lois Rilo (Eficent)
+* Simone Orsi
+* Jairo Llopis
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/web `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__init__.py b/web_company_color/__init__.py
new file mode 100644
index 000000000000..62048b1dfa7b
--- /dev/null
+++ b/web_company_color/__init__.py
@@ -0,0 +1,5 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import models
+from .hooks import post_init_hook, uninstall_hook
+from . import utils
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
new file mode 100644
index 000000000000..62a5f55fabea
--- /dev/null
+++ b/web_company_color/__manifest__.py
@@ -0,0 +1,22 @@
+# Odoo, Open Source Web Company Color
+# Copyright (C) 2019 Alexandre Díaz
+#
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).#
+{
+ 'name': "Web Company Color",
+ 'category': "web",
+ 'version': "12.0.1.0.0",
+ "author": "Alexandre Díaz, "
+ "Odoo Community Association (OCA)",
+ 'website': 'https://github.com/OCA/web',
+ 'depends': ['web', 'base_sparse_field', 'web_widget_color'],
+ 'data': [
+ 'view/assets.xml',
+ 'view/res_company.xml'
+ ],
+ 'uninstall_hook': 'uninstall_hook',
+ 'post_init_hook': 'post_init_hook',
+ 'license': 'AGPL-3',
+ 'auto_install': False,
+ 'installable': True,
+}
diff --git a/web_company_color/hooks.py b/web_company_color/hooks.py
new file mode 100644
index 000000000000..a095f8e71ce4
--- /dev/null
+++ b/web_company_color/hooks.py
@@ -0,0 +1,14 @@
+# Copyright 2019 Alexandre Díaz
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import api, SUPERUSER_ID
+from .models.res_company import URL_BASE
+
+
+def uninstall_hook(cr, registry):
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ env["ir.attachment"].search([('url', 'like', '%s%%' % URL_BASE)]).unlink()
+
+
+def post_init_hook(cr, registry):
+ env = api.Environment(cr, SUPERUSER_ID, {})
+ env['res.company'].search([]).scss_create_or_update_attachment()
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
new file mode 100644
index 000000000000..bddcd9052090
--- /dev/null
+++ b/web_company_color/i18n/web_company_color.pot
@@ -0,0 +1,62 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid " \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr ""
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr ""
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
+msgid "SCSS Modif. Timestamp"
+msgstr ""
+
diff --git a/web_company_color/models/__init__.py b/web_company_color/models/__init__.py
new file mode 100644
index 000000000000..a12c1b8ee0e7
--- /dev/null
+++ b/web_company_color/models/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import res_company
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
new file mode 100644
index 000000000000..c1590080e1bf
--- /dev/null
+++ b/web_company_color/models/res_company.py
@@ -0,0 +1,165 @@
+# Copyright 2019 Alexandre Díaz
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import base64
+import time
+from colorsys import rgb_to_hls, hls_to_rgb
+from odoo import models, fields, api
+from ..utils import image_to_rgb, convert_to_image, n_rgb_to_hex
+
+
+URL_BASE = '/web_company_color/static/src/scss/'
+URL_SCSS_GEN_TEMPLATE = URL_BASE + 'custom_colors.%d.%s.gen.scss'
+
+
+class ResCompany(models.Model):
+ _inherit = 'res.company'
+
+ SCSS_TEMPLATE = """
+ .o_main_navbar {
+ background-color: %(color_navbar_bg)s !important;
+ color: %(color_navbar_text)s !important;
+
+ > .o_menu_brand {
+ color: %(color_navbar_text)s !important;
+ &:hover, &:focus, &:active, &:focus:active {
+ background-color: %(color_navbar_bg_hover)s !important;
+ }
+ }
+
+ .show {
+ .dropdown-toggle {
+ background-color: %(color_navbar_bg_hover)s !important;
+ }
+ }
+
+ > ul {
+ > li {
+ > a, > label {
+ color: %(color_navbar_text)s !important;
+
+ &:hover, &:focus, &:active, &:focus:active {
+ background-color: %(color_navbar_bg_hover)s !important;
+ }
+ }
+ }
+ }
+ }
+ """
+
+ company_colors = fields.Serialized()
+ color_navbar_bg = fields.Char('Navbar Background Color',
+ sparse='company_colors')
+ color_navbar_bg_hover = fields.Char(
+ 'Navbar Background Color Hover', sparse='company_colors')
+ color_navbar_text = fields.Char('Navbar Text Color',
+ sparse='company_colors')
+ scss_modif_timestamp = fields.Char('SCSS Modif. Timestamp')
+
+ @api.model
+ def create(self, values):
+ record = super().create(values)
+ record.scss_create_or_update_attachment()
+ return record
+
+ @api.multi
+ def unlink(self):
+ result = super().unlink()
+ IrAttachmentObj = self.env['ir.attachment']
+ for record in self:
+ IrAttachmentObj.sudo().search([
+ ('url', 'like', '%s%%' % record._scss_get_url_simplified()),
+ ]).sudo().unlink()
+ return result
+
+ @api.multi
+ def write(self, values):
+ if not self.env.context.get('ignore_company_color', False):
+ fields_to_check = ('color_navbar_bg',
+ 'color_navbar_bg_hover',
+ 'color_navbar_text')
+ if 'logo' in values:
+ if values['logo']:
+ _r, _g, _b = image_to_rgb(convert_to_image(values['logo']))
+ # Make color 10% darker
+ _h, _l, _s = rgb_to_hls(_r, _g, _b)
+ _l = max(0, _l - 0.1)
+ _rd, _gd, _bd = hls_to_rgb(_h, _l, _s)
+ # Calc. optimal text color (b/w)
+ # Grayscale human vision perception (Rec. 709 values)
+ _a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b)
+ values.update({
+ 'color_navbar_bg': n_rgb_to_hex(_r, _g, _b),
+ 'color_navbar_bg_hover': n_rgb_to_hex(_rd, _gd, _bd),
+ 'color_navbar_text': '#000' if _a < 0.5 else '#fff',
+ })
+ else:
+ values.update(self.default_get(fields_to_check))
+
+ result = super().write(values)
+
+ if any([field in values for field in fields_to_check]):
+ self.scss_create_or_update_attachment()
+ else:
+ result = super().write(values)
+ return result
+
+ @api.multi
+ def _scss_get_sanitized_values(self):
+ self.ensure_one()
+ values = dict(self.company_colors)
+ values.update({
+ 'color_navbar_bg': values['color_navbar_bg'] or '$o-brand-odoo',
+ 'color_navbar_bg_hover': values['color_navbar_bg_hover']
+ or '$o-navbar-inverse-link-hover-bg',
+ 'color_navbar_text': values['color_navbar_text'] or '#FFF',
+ })
+ return values
+
+ @api.multi
+ def _scss_generate_content(self):
+ self.ensure_one()
+ # ir.attachment need files with content to work
+ if not self.company_colors:
+ return "// No Web Company Color SCSS Content\n"
+ return self.SCSS_TEMPLATE % self._scss_get_sanitized_values()
+
+ # URL to scss related with this company, without timestamp
+ # /web_company_color/static/src/scss/custom_colors.
+ def _scss_get_url_simplified(self):
+ self.ensure_one()
+ NTEMPLATE = '.'.join(URL_SCSS_GEN_TEMPLATE.split('.')[:2])
+ return NTEMPLATE % self.id
+
+ @api.multi
+ def scss_get_url(self, timestamp=None):
+ self.ensure_one()
+ return URL_SCSS_GEN_TEMPLATE % (self.id,
+ timestamp or self.scss_modif_timestamp)
+
+ @api.multi
+ def scss_create_or_update_attachment(self):
+ IrAttachmentObj = self.env['ir.attachment']
+ modif_timestamp = str(int(time.time())) # One second resolution
+ for record in self:
+ datas = base64.b64encode(
+ record._scss_generate_content().encode('utf-8'))
+ custom_attachment = IrAttachmentObj.sudo().search([
+ ('url', 'like', '%s%%' % record._scss_get_url_simplified())
+ ])
+ custom_url = record.scss_get_url(timestamp=modif_timestamp)
+ values = {
+ 'datas': datas,
+ 'url': custom_url,
+ 'name': custom_url,
+ 'datas_fname': custom_url.split("/")[-1],
+ }
+ if custom_attachment:
+ custom_attachment.sudo().write(values)
+ else:
+ values.update({
+ 'type': 'binary',
+ 'mimetype': 'text/scss',
+ })
+ IrAttachmentObj.sudo().create(values)
+ self.write({'scss_modif_timestamp': modif_timestamp})
+ self.env['ir.qweb'].sudo().clear_caches()
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000000..1cb0a6535fb0
--- /dev/null
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -0,0 +1,4 @@
+* Jordi Ballester Alomar (Eficent)
+* Lois Rilo (Eficent)
+* Simone Orsi
+* Jairo Llopis
diff --git a/web_company_color/readme/DESCRIPTION.rst b/web_company_color/readme/DESCRIPTION.rst
new file mode 100644
index 000000000000..b164fc0f50b5
--- /dev/null
+++ b/web_company_color/readme/DESCRIPTION.rst
@@ -0,0 +1 @@
+This module change navbar colors based in the company logo colors.
diff --git a/web_company_color/readme/ROADMAP.rst b/web_company_color/readme/ROADMAP.rst
new file mode 100644
index 000000000000..2b669379ae70
--- /dev/null
+++ b/web_company_color/readme/ROADMAP.rst
@@ -0,0 +1 @@
+White color is omitted in the addition operation to support images without alpha channel.
diff --git a/web_company_color/readme/USAGE.rst b/web_company_color/readme/USAGE.rst
new file mode 100644
index 000000000000..0143fee7dbc9
--- /dev/null
+++ b/web_company_color/readme/USAGE.rst
@@ -0,0 +1,3 @@
+Go to company record and set a logo. Can see/modify applied colors on the "Navbar" section.
+
+For optimal results use images with alpha channel.
diff --git a/web_company_color/static/description/icon.png b/web_company_color/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
new file mode 100644
index 000000000000..114e240e9fad
--- /dev/null
+++ b/web_company_color/static/description/index.html
@@ -0,0 +1,433 @@
+
+
+
+
+
+
+Web Company Color
+
+
+
+
+
Web Company Color
+
+
+
+
This module change navbar colors based in the company logo colors.
+
Table of contents
+
+
+
+
Go to company record and set a logo. Can see/modify applied colors on the “Navbar” section.
+
For optimal results use images with alpha channel.
+
+
+
+
White color is omitted in the addition operation to support images without alpha channel.
+
+
+
+
Bugs are tracked on GitHub Issues .
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+feedback .
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
This module is part of the OCA/web project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
+
+
+
+
+
diff --git a/web_company_color/tests/__init__.py b/web_company_color/tests/__init__.py
new file mode 100644
index 000000000000..2c9568e64bcd
--- /dev/null
+++ b/web_company_color/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_res_company
diff --git a/web_company_color/tests/test_res_company.py b/web_company_color/tests/test_res_company.py
new file mode 100644
index 000000000000..54bf06f420fe
--- /dev/null
+++ b/web_company_color/tests/test_res_company.py
@@ -0,0 +1,35 @@
+# Copyright 2019 Alexandre Díaz
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.tests import common
+from ..models.res_company import URL_BASE
+
+
+class TestResCompany(common.TransactionCase):
+ IMG_GREEN = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUl' \
+ + 'EQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg=='
+
+ def test_scss_attachment(self):
+ num_scss = self.env['ir.attachment'].search_count([
+ ('url', 'ilike', '%s%%' % URL_BASE)
+ ])
+ num_companies = self.env['res.company'].search_count([])
+ self.assertEqual(num_scss, num_companies, "Invalid scss attachments")
+
+ def test_change_logo(self):
+ company_id = self.env['res.company'].search([], limit=1)
+ company_id.sudo().write({'logo': self.IMG_GREEN})
+ self.assertEqual(company_id.color_navbar_bg, '#00ff00',
+ "Invalid Navbar Background Color")
+
+ def test_create_unlink_company(self):
+ company_id = self.env['res.company'].create({
+ 'name': 'Company Test'
+ })
+ self.assertEqual(company_id.color_navbar_bg, False,
+ "Invalid Navbar Background Color")
+ self.test_scss_attachment()
+ company_id.sudo().write({'logo': self.IMG_GREEN})
+ self.assertEqual(company_id.color_navbar_bg, '#00ff00',
+ "Invalid Navbar Background Color")
+ company_id.sudo().unlink()
+ self.test_scss_attachment()
diff --git a/web_company_color/utils.py b/web_company_color/utils.py
new file mode 100644
index 000000000000..f2ac423b797b
--- /dev/null
+++ b/web_company_color/utils.py
@@ -0,0 +1,41 @@
+# Copyright 2019 Alexandre Díaz
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import base64
+import math
+from PIL import Image
+from io import BytesIO
+
+
+def n_rgb_to_hex(_r, _g, _b):
+ return '#%02x%02x%02x' % (int(255*_r), int(255*_g), int(255*_b))
+
+
+def convert_to_image(field_binary):
+ return Image.open(BytesIO(base64.b64decode(field_binary)))
+
+
+def image_to_rgb(img):
+ def normalize_vec3(vec3):
+ _l = 1.0 / math.sqrt(vec3[0]*vec3[0]
+ + vec3[1]*vec3[1]
+ + vec3[2]*vec3[2])
+ return (vec3[0]*_l, vec3[1]*_l, vec3[2]*_l)
+
+ # Force Alpha Channel
+ if img.mode != 'RGBA':
+ img = img.convert('RGBA')
+ width, height = img.size
+ # Reduce pixels
+ width, height = (max(1, int(width/4)), max(1, int(height/4)))
+ img = img.resize((width, height))
+ rgb_sum = [0, 0, 0]
+ # Mix. image colors using addition method
+ RGBA_WHITE = (255, 255, 255, 255)
+ for i in range(0, height*width):
+ rgba = img.getpixel((i % width, i / width))
+ if rgba[3] > 128 and rgba != RGBA_WHITE:
+ rgb_sum[0] += rgba[0]
+ rgb_sum[1] += rgba[1]
+ rgb_sum[2] += rgba[2]
+ _r, _g, _b = normalize_vec3(rgb_sum)
+ return (_r, _g, _b)
diff --git a/web_company_color/view/assets.xml b/web_company_color/view/assets.xml
new file mode 100644
index 000000000000..d84a3e0bd988
--- /dev/null
+++ b/web_company_color/view/assets.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web_company_color/view/res_company.xml b/web_company_color/view/res_company.xml
new file mode 100644
index 000000000000..4551d03c822d
--- /dev/null
+++ b/web_company_color/view/res_company.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+ res.company
+
+
+
+
+
+
+
+
+
+
+
+ In order for the changes to take effect, please refresh
+ the page.
+
+
+
+
+
+
+
From f59b13708049fd5d94fa2f8e0e10ee4052cbef1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=8E=E4=BC=9F=E6=9D=B0?= <674416404@qq.com>
Date: Sun, 1 Sep 2019 11:28:57 +0000
Subject: [PATCH 24/69] Added translation using Weblate (Chinese (Simplified))
---
web_company_color/i18n/zh_CN.po | 67 +++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100644 web_company_color/i18n/zh_CN.po
diff --git a/web_company_color/i18n/zh_CN.po b/web_company_color/i18n/zh_CN.po
new file mode 100644
index 000000000000..e72127bd79d5
--- /dev/null
+++ b/web_company_color/i18n/zh_CN.po
@@ -0,0 +1,67 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2019-09-01 12:52+0000\n"
+"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
+"Language-Team: none\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 3.8\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid " \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+" \n"
+" 为了使更改生效,请刷新\n"
+" 这个页面。"
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "公司"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "公司颜色"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "公司风格"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "导航栏背景颜色"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "导航栏鼠标悬停背景颜色"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "导航栏颜色"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "导航栏文字颜色"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
+msgid "SCSS Modif. Timestamp"
+msgstr "SCSS修改时间戳"
From e4c338048f4d3305ccb948f669ca092296c04ab2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexandre=20D=C3=ADaz?=
Date: Sat, 7 Sep 2019 17:16:30 +0200
Subject: [PATCH 25/69] [FIX] web_company_color: changed scss sanitized values
---
web_company_color/__manifest__.py | 2 +-
web_company_color/models/res_company.py | 30 ++++++++++-------
web_company_color/tests/test_res_company.py | 36 +++++++++++++++++----
3 files changed, 50 insertions(+), 18 deletions(-)
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 62a5f55fabea..dc902e7ed6f1 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
'name': "Web Company Color",
'category': "web",
- 'version': "12.0.1.0.0",
+ 'version': "12.0.1.1.0",
"author": "Alexandre Díaz, "
"Odoo Community Association (OCA)",
'website': 'https://github.com/OCA/web',
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index c1590080e1bf..4b339e4420ed 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -55,11 +55,11 @@ class ResCompany(models.Model):
sparse='company_colors')
scss_modif_timestamp = fields.Char('SCSS Modif. Timestamp')
- @api.model
- def create(self, values):
- record = super().create(values)
- record.scss_create_or_update_attachment()
- return record
+ @api.model_create_multi
+ def create(self, vals_list):
+ records = super().create(vals_list)
+ records.scss_create_or_update_attachment()
+ return records
@api.multi
def unlink(self):
@@ -106,12 +106,17 @@ def write(self, values):
@api.multi
def _scss_get_sanitized_values(self):
self.ensure_one()
- values = dict(self.company_colors)
+ # Clone company_color as dictionary to avoid ORM operations
+ # This allow extend company_colors and only sanitize selected fields
+ # or add custom values
+ values = dict(self.company_colors or {})
values.update({
- 'color_navbar_bg': values['color_navbar_bg'] or '$o-brand-odoo',
- 'color_navbar_bg_hover': values['color_navbar_bg_hover']
- or '$o-navbar-inverse-link-hover-bg',
- 'color_navbar_text': values['color_navbar_text'] or '#FFF',
+ 'color_navbar_bg': (values.get('color_navbar_bg')
+ or '$o-brand-odoo'),
+ 'color_navbar_bg_hover': (
+ values.get('color_navbar_bg_hover')
+ or '$o-navbar-inverse-link-hover-bg'),
+ 'color_navbar_text': (values.get('color_navbar_text') or '#FFF'),
})
return values
@@ -139,7 +144,10 @@ def scss_get_url(self, timestamp=None):
@api.multi
def scss_create_or_update_attachment(self):
IrAttachmentObj = self.env['ir.attachment']
- modif_timestamp = str(int(time.time())) # One second resolution
+ # The time window is 1 second
+ # This mean that all modifications realized in that second will
+ # have the same timestamp
+ modif_timestamp = str(int(time.time()))
for record in self:
datas = base64.b64encode(
record._scss_generate_content().encode('utf-8'))
diff --git a/web_company_color/tests/test_res_company.py b/web_company_color/tests/test_res_company.py
index 54bf06f420fe..ef3fcc238b36 100644
--- a/web_company_color/tests/test_res_company.py
+++ b/web_company_color/tests/test_res_company.py
@@ -15,12 +15,6 @@ def test_scss_attachment(self):
num_companies = self.env['res.company'].search_count([])
self.assertEqual(num_scss, num_companies, "Invalid scss attachments")
- def test_change_logo(self):
- company_id = self.env['res.company'].search([], limit=1)
- company_id.sudo().write({'logo': self.IMG_GREEN})
- self.assertEqual(company_id.color_navbar_bg, '#00ff00',
- "Invalid Navbar Background Color")
-
def test_create_unlink_company(self):
company_id = self.env['res.company'].create({
'name': 'Company Test'
@@ -33,3 +27,33 @@ def test_create_unlink_company(self):
"Invalid Navbar Background Color")
company_id.sudo().unlink()
self.test_scss_attachment()
+
+ def test_change_logo(self):
+ company_id = self.env['res.company'].search([], limit=1)
+ company_id.sudo().write({'logo': self.IMG_GREEN})
+ self.assertEqual(company_id.color_navbar_bg, '#00ff00',
+ "Invalid Navbar Background Color")
+
+ def test_scss_sanitized_values(self):
+ company_id = self.env['res.company'].search([], limit=1)
+ company_id.sudo().write({'color_navbar_bg': False})
+ values = company_id.sudo()._scss_get_sanitized_values()
+ self.assertEqual(values['color_navbar_bg'], '$o-brand-odoo',
+ "Invalid Navbar Background Color")
+ company_id.sudo().write({'color_navbar_bg': '#DEAD00'})
+ values = company_id.sudo()._scss_get_sanitized_values()
+ self.assertEqual(values['color_navbar_bg'], '#DEAD00',
+ "Invalid Navbar Background Color")
+
+ def test_change_color(self):
+ company_id = self.env['res.company'].search([], limit=1)
+ company_id.sudo().write({'color_navbar_bg': '#DEAD00'})
+ self.assertEqual(company_id.color_navbar_bg, '#DEAD00',
+ "Invalid Navbar Background Color")
+ self.assertEqual(company_id.company_colors['color_navbar_bg'],
+ '#DEAD00', "Invalid Navbar Background Color")
+ company_id.sudo().write({'color_navbar_bg': False})
+ self.assertFalse(company_id.color_navbar_bg,
+ "Invalid Navbar Background Color")
+ self.assertNotIn('color_navbar_bg', company_id.company_colors,
+ "Invalid Navbar Background Color")
From 343c5c82d3d96ea5993df6e66c25b307b483a8f0 Mon Sep 17 00:00:00 2001
From: Bole
Date: Mon, 18 Nov 2019 12:08:19 +0000
Subject: [PATCH 26/69] Added translation using Weblate (Croatian)
---
web_company_color/i18n/hr.po | 68 ++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
create mode 100644 web_company_color/i18n/hr.po
diff --git a/web_company_color/i18n/hr.po b/web_company_color/i18n/hr.po
new file mode 100644
index 000000000000..cfb3ac711c11
--- /dev/null
+++ b/web_company_color/i18n/hr.po
@@ -0,0 +1,68 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2019-11-18 14:34+0000\n"
+"Last-Translator: Bole \n"
+"Language-Team: none\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 3.8\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid " \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+" \n"
+" Kako bi promjene postale vidljive, molimo \n"
+" učitajte ponovo ovu stranicu."
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Tvrtke"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "Boje tvrtke"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "Stilovi tvrtke"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "Boja pozadine Navigacijske trake"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "Poja pozadine navigacijske trake (hoover)"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "Boje navigacijske trake"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "Boja teksta navigacijske trake"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
+msgid "SCSS Modif. Timestamp"
+msgstr "SCSS Modif. Vremenski žig"
From bddf46ae24118419609d4b7c1544de28f548ba53 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexandre=20D=C3=ADaz?=
Date: Thu, 19 Mar 2020 12:04:11 +0100
Subject: [PATCH 27/69] [IMP] web_company_color: black, isort, prettier
---
web_company_color/__manifest__.py | 28 +++--
web_company_color/hooks.py | 7 +-
web_company_color/models/res_company.py | 111 ++++++++++----------
web_company_color/tests/test_res_company.py | 86 ++++++++-------
web_company_color/utils.py | 19 ++--
web_company_color/view/assets.xml | 24 +++--
web_company_color/view/res_company.xml | 13 ++-
7 files changed, 153 insertions(+), 135 deletions(-)
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index dc902e7ed6f1..f5869b6eb209 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -3,20 +3,16 @@
#
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).#
{
- 'name': "Web Company Color",
- 'category': "web",
- 'version': "12.0.1.1.0",
- "author": "Alexandre Díaz, "
- "Odoo Community Association (OCA)",
- 'website': 'https://github.com/OCA/web',
- 'depends': ['web', 'base_sparse_field', 'web_widget_color'],
- 'data': [
- 'view/assets.xml',
- 'view/res_company.xml'
- ],
- 'uninstall_hook': 'uninstall_hook',
- 'post_init_hook': 'post_init_hook',
- 'license': 'AGPL-3',
- 'auto_install': False,
- 'installable': True,
+ "name": "Web Company Color",
+ "category": "web",
+ "version": "13.0.1.0.0",
+ "author": "Alexandre Díaz, " "Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/web",
+ "depends": ["web", "base_sparse_field", "web_widget_color"],
+ "data": ["view/assets.xml", "view/res_company.xml"],
+ "uninstall_hook": "uninstall_hook",
+ "post_init_hook": "post_init_hook",
+ "license": "AGPL-3",
+ "auto_install": False,
+ "installable": True,
}
diff --git a/web_company_color/hooks.py b/web_company_color/hooks.py
index a095f8e71ce4..a2d07f89f31d 100644
--- a/web_company_color/hooks.py
+++ b/web_company_color/hooks.py
@@ -1,14 +1,15 @@
# Copyright 2019 Alexandre Díaz
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from odoo import api, SUPERUSER_ID
+from odoo import SUPERUSER_ID, api
+
from .models.res_company import URL_BASE
def uninstall_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
- env["ir.attachment"].search([('url', 'like', '%s%%' % URL_BASE)]).unlink()
+ env["ir.attachment"].search([("url", "like", "%s%%" % URL_BASE)]).unlink()
def post_init_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
- env['res.company'].search([]).scss_create_or_update_attachment()
+ env["res.company"].search([]).scss_create_or_update_attachment()
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index 4b339e4420ed..622a73477d8b 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -2,17 +2,18 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import base64
import time
-from colorsys import rgb_to_hls, hls_to_rgb
-from odoo import models, fields, api
-from ..utils import image_to_rgb, convert_to_image, n_rgb_to_hex
+from colorsys import hls_to_rgb, rgb_to_hls
+from odoo import api, fields, models
-URL_BASE = '/web_company_color/static/src/scss/'
-URL_SCSS_GEN_TEMPLATE = URL_BASE + 'custom_colors.%d.%s.gen.scss'
+from ..utils import convert_to_image, image_to_rgb, n_rgb_to_hex
+
+URL_BASE = "/web_company_color/static/src/scss/"
+URL_SCSS_GEN_TEMPLATE = URL_BASE + "custom_colors.%d.%s.gen.scss"
class ResCompany(models.Model):
- _inherit = 'res.company'
+ _inherit = "res.company"
SCSS_TEMPLATE = """
.o_main_navbar {
@@ -47,13 +48,12 @@ class ResCompany(models.Model):
"""
company_colors = fields.Serialized()
- color_navbar_bg = fields.Char('Navbar Background Color',
- sparse='company_colors')
+ color_navbar_bg = fields.Char("Navbar Background Color", sparse="company_colors")
color_navbar_bg_hover = fields.Char(
- 'Navbar Background Color Hover', sparse='company_colors')
- color_navbar_text = fields.Char('Navbar Text Color',
- sparse='company_colors')
- scss_modif_timestamp = fields.Char('SCSS Modif. Timestamp')
+ "Navbar Background Color Hover", sparse="company_colors"
+ )
+ color_navbar_text = fields.Char("Navbar Text Color", sparse="company_colors")
+ scss_modif_timestamp = fields.Char("SCSS Modif. Timestamp")
@api.model_create_multi
def create(self, vals_list):
@@ -64,22 +64,24 @@ def create(self, vals_list):
@api.multi
def unlink(self):
result = super().unlink()
- IrAttachmentObj = self.env['ir.attachment']
+ IrAttachmentObj = self.env["ir.attachment"]
for record in self:
- IrAttachmentObj.sudo().search([
- ('url', 'like', '%s%%' % record._scss_get_url_simplified()),
- ]).sudo().unlink()
+ IrAttachmentObj.sudo().search(
+ [("url", "like", "%s%%" % record._scss_get_url_simplified())]
+ ).sudo().unlink()
return result
@api.multi
def write(self, values):
- if not self.env.context.get('ignore_company_color', False):
- fields_to_check = ('color_navbar_bg',
- 'color_navbar_bg_hover',
- 'color_navbar_text')
- if 'logo' in values:
- if values['logo']:
- _r, _g, _b = image_to_rgb(convert_to_image(values['logo']))
+ if not self.env.context.get("ignore_company_color", False):
+ fields_to_check = (
+ "color_navbar_bg",
+ "color_navbar_bg_hover",
+ "color_navbar_text",
+ )
+ if "logo" in values:
+ if values["logo"]:
+ _r, _g, _b = image_to_rgb(convert_to_image(values["logo"]))
# Make color 10% darker
_h, _l, _s = rgb_to_hls(_r, _g, _b)
_l = max(0, _l - 0.1)
@@ -87,11 +89,13 @@ def write(self, values):
# Calc. optimal text color (b/w)
# Grayscale human vision perception (Rec. 709 values)
_a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b)
- values.update({
- 'color_navbar_bg': n_rgb_to_hex(_r, _g, _b),
- 'color_navbar_bg_hover': n_rgb_to_hex(_rd, _gd, _bd),
- 'color_navbar_text': '#000' if _a < 0.5 else '#fff',
- })
+ values.update(
+ {
+ "color_navbar_bg": n_rgb_to_hex(_r, _g, _b),
+ "color_navbar_bg_hover": n_rgb_to_hex(_rd, _gd, _bd),
+ "color_navbar_text": "#000" if _a < 0.5 else "#fff",
+ }
+ )
else:
values.update(self.default_get(fields_to_check))
@@ -110,14 +114,16 @@ def _scss_get_sanitized_values(self):
# This allow extend company_colors and only sanitize selected fields
# or add custom values
values = dict(self.company_colors or {})
- values.update({
- 'color_navbar_bg': (values.get('color_navbar_bg')
- or '$o-brand-odoo'),
- 'color_navbar_bg_hover': (
- values.get('color_navbar_bg_hover')
- or '$o-navbar-inverse-link-hover-bg'),
- 'color_navbar_text': (values.get('color_navbar_text') or '#FFF'),
- })
+ values.update(
+ {
+ "color_navbar_bg": (values.get("color_navbar_bg") or "$o-brand-odoo"),
+ "color_navbar_bg_hover": (
+ values.get("color_navbar_bg_hover")
+ or "$o-navbar-inverse-link-hover-bg"
+ ),
+ "color_navbar_text": (values.get("color_navbar_text") or "#FFF"),
+ }
+ )
return values
@api.multi
@@ -132,42 +138,37 @@ def _scss_generate_content(self):
# /web_company_color/static/src/scss/custom_colors.
def _scss_get_url_simplified(self):
self.ensure_one()
- NTEMPLATE = '.'.join(URL_SCSS_GEN_TEMPLATE.split('.')[:2])
+ NTEMPLATE = ".".join(URL_SCSS_GEN_TEMPLATE.split(".")[:2])
return NTEMPLATE % self.id
@api.multi
def scss_get_url(self, timestamp=None):
self.ensure_one()
- return URL_SCSS_GEN_TEMPLATE % (self.id,
- timestamp or self.scss_modif_timestamp)
+ return URL_SCSS_GEN_TEMPLATE % (self.id, timestamp or self.scss_modif_timestamp)
@api.multi
def scss_create_or_update_attachment(self):
- IrAttachmentObj = self.env['ir.attachment']
+ IrAttachmentObj = self.env["ir.attachment"]
# The time window is 1 second
# This mean that all modifications realized in that second will
# have the same timestamp
modif_timestamp = str(int(time.time()))
for record in self:
- datas = base64.b64encode(
- record._scss_generate_content().encode('utf-8'))
- custom_attachment = IrAttachmentObj.sudo().search([
- ('url', 'like', '%s%%' % record._scss_get_url_simplified())
- ])
+ datas = base64.b64encode(record._scss_generate_content().encode("utf-8"))
+ custom_attachment = IrAttachmentObj.sudo().search(
+ [("url", "like", "%s%%" % record._scss_get_url_simplified())]
+ )
custom_url = record.scss_get_url(timestamp=modif_timestamp)
values = {
- 'datas': datas,
- 'url': custom_url,
- 'name': custom_url,
- 'datas_fname': custom_url.split("/")[-1],
+ "datas": datas,
+ "url": custom_url,
+ "name": custom_url,
+ "datas_fname": custom_url.split("/")[-1],
}
if custom_attachment:
custom_attachment.sudo().write(values)
else:
- values.update({
- 'type': 'binary',
- 'mimetype': 'text/scss',
- })
+ values.update({"type": "binary", "mimetype": "text/scss"})
IrAttachmentObj.sudo().create(values)
- self.write({'scss_modif_timestamp': modif_timestamp})
- self.env['ir.qweb'].sudo().clear_caches()
+ self.write({"scss_modif_timestamp": modif_timestamp})
+ self.env["ir.qweb"].sudo().clear_caches()
diff --git a/web_company_color/tests/test_res_company.py b/web_company_color/tests/test_res_company.py
index ef3fcc238b36..5b27c589e5c0 100644
--- a/web_company_color/tests/test_res_company.py
+++ b/web_company_color/tests/test_res_company.py
@@ -1,59 +1,73 @@
# Copyright 2019 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import common
+
from ..models.res_company import URL_BASE
class TestResCompany(common.TransactionCase):
- IMG_GREEN = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUl' \
- + 'EQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg=='
+ IMG_GREEN = (
+ "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUl"
+ + "EQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg=="
+ )
def test_scss_attachment(self):
- num_scss = self.env['ir.attachment'].search_count([
- ('url', 'ilike', '%s%%' % URL_BASE)
- ])
- num_companies = self.env['res.company'].search_count([])
+ num_scss = self.env["ir.attachment"].search_count(
+ [("url", "ilike", "%s%%" % URL_BASE)]
+ )
+ num_companies = self.env["res.company"].search_count([])
self.assertEqual(num_scss, num_companies, "Invalid scss attachments")
def test_create_unlink_company(self):
- company_id = self.env['res.company'].create({
- 'name': 'Company Test'
- })
- self.assertEqual(company_id.color_navbar_bg, False,
- "Invalid Navbar Background Color")
+ company_id = self.env["res.company"].create({"name": "Company Test"})
+ self.assertEqual(
+ company_id.color_navbar_bg, False, "Invalid Navbar Background Color"
+ )
self.test_scss_attachment()
- company_id.sudo().write({'logo': self.IMG_GREEN})
- self.assertEqual(company_id.color_navbar_bg, '#00ff00',
- "Invalid Navbar Background Color")
+ company_id.sudo().write({"logo": self.IMG_GREEN})
+ self.assertEqual(
+ company_id.color_navbar_bg, "#00ff00", "Invalid Navbar Background Color"
+ )
company_id.sudo().unlink()
self.test_scss_attachment()
def test_change_logo(self):
- company_id = self.env['res.company'].search([], limit=1)
- company_id.sudo().write({'logo': self.IMG_GREEN})
- self.assertEqual(company_id.color_navbar_bg, '#00ff00',
- "Invalid Navbar Background Color")
+ company_id = self.env["res.company"].search([], limit=1)
+ company_id.sudo().write({"logo": self.IMG_GREEN})
+ self.assertEqual(
+ company_id.color_navbar_bg, "#00ff00", "Invalid Navbar Background Color"
+ )
def test_scss_sanitized_values(self):
- company_id = self.env['res.company'].search([], limit=1)
- company_id.sudo().write({'color_navbar_bg': False})
+ company_id = self.env["res.company"].search([], limit=1)
+ company_id.sudo().write({"color_navbar_bg": False})
values = company_id.sudo()._scss_get_sanitized_values()
- self.assertEqual(values['color_navbar_bg'], '$o-brand-odoo',
- "Invalid Navbar Background Color")
- company_id.sudo().write({'color_navbar_bg': '#DEAD00'})
+ self.assertEqual(
+ values["color_navbar_bg"],
+ "$o-brand-odoo",
+ "Invalid Navbar Background Color",
+ )
+ company_id.sudo().write({"color_navbar_bg": "#DEAD00"})
values = company_id.sudo()._scss_get_sanitized_values()
- self.assertEqual(values['color_navbar_bg'], '#DEAD00',
- "Invalid Navbar Background Color")
+ self.assertEqual(
+ values["color_navbar_bg"], "#DEAD00", "Invalid Navbar Background Color"
+ )
def test_change_color(self):
- company_id = self.env['res.company'].search([], limit=1)
- company_id.sudo().write({'color_navbar_bg': '#DEAD00'})
- self.assertEqual(company_id.color_navbar_bg, '#DEAD00',
- "Invalid Navbar Background Color")
- self.assertEqual(company_id.company_colors['color_navbar_bg'],
- '#DEAD00', "Invalid Navbar Background Color")
- company_id.sudo().write({'color_navbar_bg': False})
- self.assertFalse(company_id.color_navbar_bg,
- "Invalid Navbar Background Color")
- self.assertNotIn('color_navbar_bg', company_id.company_colors,
- "Invalid Navbar Background Color")
+ company_id = self.env["res.company"].search([], limit=1)
+ company_id.sudo().write({"color_navbar_bg": "#DEAD00"})
+ self.assertEqual(
+ company_id.color_navbar_bg, "#DEAD00", "Invalid Navbar Background Color"
+ )
+ self.assertEqual(
+ company_id.company_colors["color_navbar_bg"],
+ "#DEAD00",
+ "Invalid Navbar Background Color",
+ )
+ company_id.sudo().write({"color_navbar_bg": False})
+ self.assertFalse(company_id.color_navbar_bg, "Invalid Navbar Background Color")
+ self.assertNotIn(
+ "color_navbar_bg",
+ company_id.company_colors,
+ "Invalid Navbar Background Color",
+ )
diff --git a/web_company_color/utils.py b/web_company_color/utils.py
index f2ac423b797b..118ceb26a56e 100644
--- a/web_company_color/utils.py
+++ b/web_company_color/utils.py
@@ -2,12 +2,13 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import base64
import math
-from PIL import Image
from io import BytesIO
+from PIL import Image
+
def n_rgb_to_hex(_r, _g, _b):
- return '#%02x%02x%02x' % (int(255*_r), int(255*_g), int(255*_b))
+ return "#{:02x}{:02x}{:02x}".format(int(255 * _r), int(255 * _g), int(255 * _b))
def convert_to_image(field_binary):
@@ -16,22 +17,20 @@ def convert_to_image(field_binary):
def image_to_rgb(img):
def normalize_vec3(vec3):
- _l = 1.0 / math.sqrt(vec3[0]*vec3[0]
- + vec3[1]*vec3[1]
- + vec3[2]*vec3[2])
- return (vec3[0]*_l, vec3[1]*_l, vec3[2]*_l)
+ _l = 1.0 / math.sqrt(vec3[0] * vec3[0] + vec3[1] * vec3[1] + vec3[2] * vec3[2])
+ return (vec3[0] * _l, vec3[1] * _l, vec3[2] * _l)
# Force Alpha Channel
- if img.mode != 'RGBA':
- img = img.convert('RGBA')
+ if img.mode != "RGBA":
+ img = img.convert("RGBA")
width, height = img.size
# Reduce pixels
- width, height = (max(1, int(width/4)), max(1, int(height/4)))
+ width, height = (max(1, int(width / 4)), max(1, int(height / 4)))
img = img.resize((width, height))
rgb_sum = [0, 0, 0]
# Mix. image colors using addition method
RGBA_WHITE = (255, 255, 255, 255)
- for i in range(0, height*width):
+ for i in range(0, height * width):
rgba = img.getpixel((i % width, i / width))
if rgba[3] > 128 and rgba != RGBA_WHITE:
rgb_sum[0] += rgba[0]
diff --git a/web_company_color/view/assets.xml b/web_company_color/view/assets.xml
index d84a3e0bd988..54577128694d 100644
--- a/web_company_color/view/assets.xml
+++ b/web_company_color/view/assets.xml
@@ -1,17 +1,25 @@
-
-
+
-
-
+
-
-
+
+
diff --git a/web_company_color/view/res_company.xml b/web_company_color/view/res_company.xml
index 4551d03c822d..3f3bcc49ffaf 100644
--- a/web_company_color/view/res_company.xml
+++ b/web_company_color/view/res_company.xml
@@ -1,20 +1,20 @@
-
-
+
-
-
res.company
-
+
@@ -29,5 +29,4 @@
-
From baca09fccdd5ff0e7626959a261a940265fface6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Alexandre=20D=C3=ADaz?=
Date: Thu, 19 Mar 2020 15:04:49 +0100
Subject: [PATCH 28/69] [MIG] web_widget_color: Migration to 13.0
---
web_company_color/README.rst | 14 +--
web_company_color/__manifest__.py | 2 +-
web_company_color/hooks.py | 2 +-
web_company_color/i18n/hr.po | 21 +++--
web_company_color/i18n/web_company_color.pot | 14 +--
web_company_color/i18n/zh_CN.po | 17 ++--
web_company_color/models/__init__.py | 2 +
web_company_color/models/assetsbundle.py | 14 +++
web_company_color/models/ir_qweb.py | 86 +++++++++++++++++++
web_company_color/models/res_company.py | 38 ++------
web_company_color/readme/CONTRIBUTORS.rst | 4 +-
.../static/description/index.html | 10 +--
web_company_color/view/assets.xml | 20 ++---
13 files changed, 165 insertions(+), 79 deletions(-)
create mode 100644 web_company_color/models/assetsbundle.py
create mode 100644 web_company_color/models/ir_qweb.py
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index f293d67e57c6..be4f7fb1c044 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -14,13 +14,13 @@ Web Company Color
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/12.0/web_company_color
+ :target: https://github.com/OCA/web/tree/13.0/web_company_color
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_company_color
+ :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_company_color
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/12.0
+ :target: https://runbot.odoo-community.org/runbot/162/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -65,8 +65,8 @@ Authors
Contributors
~~~~~~~~~~~~
-* Jordi Ballester Alomar (Eficent)
-* Lois Rilo (Eficent)
+* Jordi Ballester Alomar (ForgeFlow)
+* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
@@ -83,6 +83,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index f5869b6eb209..219ab9178852 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -8,7 +8,7 @@
"version": "13.0.1.0.0",
"author": "Alexandre Díaz, " "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
- "depends": ["web", "base_sparse_field", "web_widget_color"],
+ "depends": ["web", "base_sparse_field"],
"data": ["view/assets.xml", "view/res_company.xml"],
"uninstall_hook": "uninstall_hook",
"post_init_hook": "post_init_hook",
diff --git a/web_company_color/hooks.py b/web_company_color/hooks.py
index a2d07f89f31d..ca23677bf0e6 100644
--- a/web_company_color/hooks.py
+++ b/web_company_color/hooks.py
@@ -7,7 +7,7 @@
def uninstall_hook(cr, registry):
env = api.Environment(cr, SUPERUSER_ID, {})
- env["ir.attachment"].search([("url", "like", "%s%%" % URL_BASE)]).unlink()
+ env["ir.attachment"].search([("url", "=like", "%s%%" % URL_BASE)]).unlink()
def post_init_hook(cr, registry):
diff --git a/web_company_color/i18n/hr.po b/web_company_color/i18n/hr.po
index cfb3ac711c11..52117b0cf11c 100644
--- a/web_company_color/i18n/hr.po
+++ b/web_company_color/i18n/hr.po
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * web_company_color
+# * web_company_color
#
msgid ""
msgstr ""
@@ -13,14 +13,16 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
-"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
-msgid " \n"
-" In order for the changes to take effect, please refresh\n"
+msgid ""
+" \n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
" \n"
@@ -63,6 +65,9 @@ msgid "Navbar Text Color"
msgstr "Boja teksta navigacijske trake"
#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
-msgid "SCSS Modif. Timestamp"
-msgstr "SCSS Modif. Vremenski žig"
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr ""
+
+#~ msgid "SCSS Modif. Timestamp"
+#~ msgstr "SCSS Modif. Vremenski žig"
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index bddcd9052090..368b414e3c76 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * web_company_color
+# * web_company_color
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -15,7 +15,8 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
-msgid " \n"
+msgid ""
+" \n"
" In order for the changes to take effect, please refresh\n"
" the page."
msgstr ""
@@ -56,7 +57,6 @@ msgid "Navbar Text Color"
msgstr ""
#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
-msgid "SCSS Modif. Timestamp"
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
msgstr ""
-
diff --git a/web_company_color/i18n/zh_CN.po b/web_company_color/i18n/zh_CN.po
index e72127bd79d5..1ad56e7e14cc 100644
--- a/web_company_color/i18n/zh_CN.po
+++ b/web_company_color/i18n/zh_CN.po
@@ -1,6 +1,6 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * web_company_color
+# * web_company_color
#
msgid ""
msgstr ""
@@ -18,8 +18,10 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
-msgid " \n"
-" In order for the changes to take effect, please refresh\n"
+msgid ""
+" \n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
" \n"
@@ -62,6 +64,9 @@ msgid "Navbar Text Color"
msgstr "导航栏文字颜色"
#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__scss_modif_timestamp
-msgid "SCSS Modif. Timestamp"
-msgstr "SCSS修改时间戳"
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr ""
+
+#~ msgid "SCSS Modif. Timestamp"
+#~ msgstr "SCSS修改时间戳"
diff --git a/web_company_color/models/__init__.py b/web_company_color/models/__init__.py
index a12c1b8ee0e7..8677b09f5075 100644
--- a/web_company_color/models/__init__.py
+++ b/web_company_color/models/__init__.py
@@ -1,3 +1,5 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from . import assetsbundle
from . import res_company
+from . import ir_qweb
diff --git a/web_company_color/models/assetsbundle.py b/web_company_color/models/assetsbundle.py
new file mode 100644
index 000000000000..d6c31c2bec39
--- /dev/null
+++ b/web_company_color/models/assetsbundle.py
@@ -0,0 +1,14 @@
+# Copyright 2020 Alexandre Díaz
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.addons.base.models.assetsbundle import AssetsBundle, ScssStylesheetAsset
+
+
+class AssetsBundleCompanyColor(AssetsBundle):
+ def get_company_color_asset_node(self):
+ """ Process the user active company scss and returns the node to inject """
+ company_id = self.env["res.company"].browse(
+ self.env.context.get("active_company_id", 0)
+ )
+ asset = ScssStylesheetAsset(self, url=company_id.scss_get_url())
+ compiled = self.compile_css(asset.compile, asset.get_source())
+ return ("style", {}, compiled)
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
new file mode 100644
index 000000000000..869e040b361e
--- /dev/null
+++ b/web_company_color/models/ir_qweb.py
@@ -0,0 +1,86 @@
+# Copyright 2020 Alexandre Díaz
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from inspect import unwrap
+
+from odoo import api, models, tools
+from odoo.http import request
+
+from odoo.addons.base.models.ir_qweb import IrQWeb
+
+from .assetsbundle import AssetsBundleCompanyColor
+
+# Monkey Patch to change the ormcache_context decorator of '_get_asset_nodes' to
+# add 'active_company_id' context key. This is done to avoid "clear_caches" usage
+# that works in a more aggressive way to the LRU cache.
+
+_orig_get_asset_nodes = unwrap(IrQWeb._get_asset_nodes)
+
+
+@tools.conditional(
+ "xml" not in tools.config["dev_mode"],
+ tools.ormcache_context(
+ "xmlid",
+ 'options.get("lang", "en_US")',
+ "css",
+ "js",
+ "debug",
+ "async_load",
+ "defer_load",
+ "lazy_load",
+ keys=("website_id", "active_company_id"),
+ ),
+)
+def _get_asset_nodes__mp(
+ self,
+ xmlid,
+ options,
+ css=True,
+ js=True,
+ debug=False,
+ async_load=False,
+ defer_load=False,
+ lazy_load=False,
+ values=None,
+):
+ return _orig_get_asset_nodes(
+ self,
+ xmlid,
+ options,
+ css=css,
+ js=js,
+ debug=debug,
+ async_load=async_load,
+ defer_load=defer_load,
+ lazy_load=lazy_load,
+ values=values,
+ )
+
+
+IrQWeb._get_asset_nodes = _get_asset_nodes__mp
+
+
+class QWeb(models.AbstractModel):
+ _inherit = "ir.qweb"
+
+ @api.model
+ def render(self, id_or_xml_id, values=None, **options):
+ """ Adds the active company to the context """
+ try:
+ active_company_id = int(
+ request.httprequest.cookies.get("cids", "").split(",")[0]
+ )
+ except Exception:
+ active_company_id = False
+ company_id = (
+ self.env["res.company"].browse(active_company_id)
+ or self.env.user.company_id
+ )
+ self = self.with_context(active_company_id=company_id.id)
+ return super().render(id_or_xml_id, values=values, **options)
+
+ def _get_asset_content(self, xmlid, options):
+ """ Handle 'special' web_company_color xmlid """
+ if xmlid == "web_company_color.company_color_assets":
+ asset = AssetsBundleCompanyColor(xmlid, [], env=self.env)
+ return ([], [asset.get_company_color_asset_node()])
+ return super()._get_asset_content(xmlid, options)
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index 622a73477d8b..a458b25f1744 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -1,7 +1,6 @@
# Copyright 2019 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import base64
-import time
from colorsys import hls_to_rgb, rgb_to_hls
from odoo import api, fields, models
@@ -9,7 +8,7 @@
from ..utils import convert_to_image, image_to_rgb, n_rgb_to_hex
URL_BASE = "/web_company_color/static/src/scss/"
-URL_SCSS_GEN_TEMPLATE = URL_BASE + "custom_colors.%d.%s.gen.scss"
+URL_SCSS_GEN_TEMPLATE = URL_BASE + "custom_colors.%d.gen.scss"
class ResCompany(models.Model):
@@ -53,7 +52,6 @@ class ResCompany(models.Model):
"Navbar Background Color Hover", sparse="company_colors"
)
color_navbar_text = fields.Char("Navbar Text Color", sparse="company_colors")
- scss_modif_timestamp = fields.Char("SCSS Modif. Timestamp")
@api.model_create_multi
def create(self, vals_list):
@@ -61,17 +59,14 @@ def create(self, vals_list):
records.scss_create_or_update_attachment()
return records
- @api.multi
def unlink(self):
- result = super().unlink()
IrAttachmentObj = self.env["ir.attachment"]
for record in self:
IrAttachmentObj.sudo().search(
- [("url", "like", "%s%%" % record._scss_get_url_simplified())]
+ [("url", "=", record.scss_get_url()), ("company_id", "=", record.id)]
).sudo().unlink()
- return result
+ return super().unlink()
- @api.multi
def write(self, values):
if not self.env.context.get("ignore_company_color", False):
fields_to_check = (
@@ -107,7 +102,6 @@ def write(self, values):
result = super().write(values)
return result
- @api.multi
def _scss_get_sanitized_values(self):
self.ensure_one()
# Clone company_color as dictionary to avoid ORM operations
@@ -126,7 +120,6 @@ def _scss_get_sanitized_values(self):
)
return values
- @api.multi
def _scss_generate_content(self):
self.ensure_one()
# ir.attachment need files with content to work
@@ -134,41 +127,28 @@ def _scss_generate_content(self):
return "// No Web Company Color SCSS Content\n"
return self.SCSS_TEMPLATE % self._scss_get_sanitized_values()
- # URL to scss related with this company, without timestamp
- # /web_company_color/static/src/scss/custom_colors.
- def _scss_get_url_simplified(self):
- self.ensure_one()
- NTEMPLATE = ".".join(URL_SCSS_GEN_TEMPLATE.split(".")[:2])
- return NTEMPLATE % self.id
-
- @api.multi
- def scss_get_url(self, timestamp=None):
+ def scss_get_url(self):
self.ensure_one()
- return URL_SCSS_GEN_TEMPLATE % (self.id, timestamp or self.scss_modif_timestamp)
+ return URL_SCSS_GEN_TEMPLATE % self.id
- @api.multi
def scss_create_or_update_attachment(self):
IrAttachmentObj = self.env["ir.attachment"]
- # The time window is 1 second
- # This mean that all modifications realized in that second will
- # have the same timestamp
- modif_timestamp = str(int(time.time()))
for record in self:
datas = base64.b64encode(record._scss_generate_content().encode("utf-8"))
+ custom_url = record.scss_get_url()
custom_attachment = IrAttachmentObj.sudo().search(
- [("url", "like", "%s%%" % record._scss_get_url_simplified())]
+ [("url", "=", custom_url), ("company_id", "=", record.id)]
)
- custom_url = record.scss_get_url(timestamp=modif_timestamp)
values = {
"datas": datas,
+ "db_datas": datas,
"url": custom_url,
"name": custom_url,
- "datas_fname": custom_url.split("/")[-1],
+ "company_id": record.id,
}
if custom_attachment:
custom_attachment.sudo().write(values)
else:
values.update({"type": "binary", "mimetype": "text/scss"})
IrAttachmentObj.sudo().create(values)
- self.write({"scss_modif_timestamp": modif_timestamp})
self.env["ir.qweb"].sudo().clear_caches()
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
index 1cb0a6535fb0..09be7ad0909b 100644
--- a/web_company_color/readme/CONTRIBUTORS.rst
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -1,4 +1,4 @@
-* Jordi Ballester Alomar (Eficent)
-* Lois Rilo (Eficent)
+* Jordi Ballester Alomar (ForgeFlow)
+* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 114e240e9fad..50ab87995f08 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -367,7 +367,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -397,7 +397,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -411,8 +411,8 @@
@@ -424,7 +424,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
diff --git a/web_company_color/view/assets.xml b/web_company_color/view/assets.xml
index 54577128694d..94b3bafc2662 100644
--- a/web_company_color/view/assets.xml
+++ b/web_company_color/view/assets.xml
@@ -4,22 +4,16 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
+
-
-
-
+
+
From 7db0f99ceddac2c468f675c50b844e8445dea8d3 Mon Sep 17 00:00:00 2001
From: Alessandro Fiorino
Date: Sat, 16 May 2020 01:02:33 +0000
Subject: [PATCH 29/69] Added translation using Weblate (Italian)
---
web_company_color/i18n/it.po | 68 +++++++++++++++++++++++++++++++++
web_company_color/i18n/zh_CN.po | 6 +--
2 files changed, 71 insertions(+), 3 deletions(-)
create mode 100644 web_company_color/i18n/it.po
diff --git a/web_company_color/i18n/it.po b/web_company_color/i18n/it.po
new file mode 100644
index 000000000000..b55ba1a43e75
--- /dev/null
+++ b/web_company_color/i18n/it.po
@@ -0,0 +1,68 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2020-05-16 03:19+0000\n"
+"Last-Translator: Alessandro Fiorino \n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.10\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid ""
+" \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+" \n"
+" Perché i cambiamenti abbiano effetto, prego "
+"aggiornare la pagina."
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Aziende"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "Colori Aziendali"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "Stili Aziendali"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "Sfondo Barra Navigazione"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "Colore Hover Sfondo Barra Navigazione"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "Colori Barra Navigazione"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "Colori Testo Barra Navigazione"
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr "Qweb"
diff --git a/web_company_color/i18n/zh_CN.po b/web_company_color/i18n/zh_CN.po
index 1ad56e7e14cc..a44a740e6eb0 100644
--- a/web_company_color/i18n/zh_CN.po
+++ b/web_company_color/i18n/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2019-09-01 12:52+0000\n"
+"PO-Revision-Date: 2020-07-08 05:19+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
@@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 3.8\n"
+"X-Generator: Weblate 3.10\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
@@ -66,7 +66,7 @@ msgstr "导航栏文字颜色"
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_ir_qweb
msgid "Qweb"
-msgstr ""
+msgstr "Qweb"
#~ msgid "SCSS Modif. Timestamp"
#~ msgstr "SCSS修改时间戳"
From 9a2b59912bcb94cfd48e0c3b2fcfe3d32d29c305 Mon Sep 17 00:00:00 2001
From: Dennis Sluijk
Date: Wed, 11 Nov 2020 11:08:23 +0000
Subject: [PATCH 30/69] Added translation using Weblate (Dutch)
---
web_company_color/i18n/nl.po | 67 ++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
create mode 100644 web_company_color/i18n/nl.po
diff --git a/web_company_color/i18n/nl.po b/web_company_color/i18n/nl.po
new file mode 100644
index 000000000000..ba37a460ac79
--- /dev/null
+++ b/web_company_color/i18n/nl.po
@@ -0,0 +1,67 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2020-11-11 13:08+0000\n"
+"Last-Translator: Dennis Sluijk \n"
+"Language-Team: none\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.10\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid ""
+" \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+" \n"
+" Ververs de pagina om de wijzigingen door te voeren."
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Bedrijven"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "Bedrijfskleuren"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "Bedrijfsstijlen"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "Navigatiebalk Achtergrondkleur"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "Navigatiebalk Achtergrondkleur (als je de muis er overheen beweegt)"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "Navigatiebalk Kleuren"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "Navigatiebalk Tekstkleuren"
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr "Qweb"
From 05aec0e37252f35198019204a0bb60ac46f0de97 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Mon, 7 Dec 2020 20:43:23 +0100
Subject: [PATCH 31/69] [FIX] web_company_color: Resilient tests
We need to disable the company unlinking test, as if not, when tested
in integrated environments, it fails as there are records linked to the
company, like the warehouse when `stock` module is installed.
---
web_company_color/__manifest__.py | 4 ++--
web_company_color/tests/test_res_company.py | 10 ++++++----
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 219ab9178852..29c10b1d4580 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,8 +5,8 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "13.0.1.0.0",
- "author": "Alexandre Díaz, " "Odoo Community Association (OCA)",
+ "version": "13.0.1.0.1",
+ "author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
"data": ["view/assets.xml", "view/res_company.xml"],
diff --git a/web_company_color/tests/test_res_company.py b/web_company_color/tests/test_res_company.py
index 5b27c589e5c0..8234b6f44ca6 100644
--- a/web_company_color/tests/test_res_company.py
+++ b/web_company_color/tests/test_res_company.py
@@ -11,7 +11,7 @@ class TestResCompany(common.TransactionCase):
+ "EQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg=="
)
- def test_scss_attachment(self):
+ def _test_scss_attachment(self):
num_scss = self.env["ir.attachment"].search_count(
[("url", "ilike", "%s%%" % URL_BASE)]
)
@@ -23,13 +23,15 @@ def test_create_unlink_company(self):
self.assertEqual(
company_id.color_navbar_bg, False, "Invalid Navbar Background Color"
)
- self.test_scss_attachment()
+ self._test_scss_attachment()
company_id.sudo().write({"logo": self.IMG_GREEN})
self.assertEqual(
company_id.color_navbar_bg, "#00ff00", "Invalid Navbar Background Color"
)
- company_id.sudo().unlink()
- self.test_scss_attachment()
+ # TODO: We can't remove companies if they have attached data, like
+ # warehouse when we have stock module installed
+ # company_id.sudo().unlink()
+ # self._test_scss_attachment()
def test_change_logo(self):
company_id = self.env["res.company"].search([], limit=1)
From 65d86d6a519ad5eaa88c730888cf21b8db4012c9 Mon Sep 17 00:00:00 2001
From: Francisco Ivan Anton Prieto
Date: Thu, 21 Jan 2021 20:04:09 +0100
Subject: [PATCH 32/69] [MIG] web_company_color: Migration to 14.0
---
web_company_color/README.rst | 11 +++++-----
web_company_color/__manifest__.py | 2 +-
web_company_color/i18n/web_company_color.pot | 20 ++++++++++++++++++-
web_company_color/models/ir_qweb.py | 4 ++--
web_company_color/readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 7 ++++---
6 files changed, 33 insertions(+), 12 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index be4f7fb1c044..09b04dff6158 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -14,13 +14,13 @@ Web Company Color
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/13.0/web_company_color
+ :target: https://github.com/OCA/web/tree/14.0/web_company_color
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_company_color
+ :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_company_color
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/13.0
+ :target: https://runbot.odoo-community.org/runbot/162/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -69,6 +69,7 @@ Contributors
* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
+* Iván Antón
Maintainers
~~~~~~~~~~~
@@ -83,6 +84,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 29c10b1d4580..e73cf17e5172 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "13.0.1.0.1",
+ "version": "14.0.1.0.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index 368b414e3c76..826901d2d7f4 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -36,6 +36,24 @@ msgstr ""
msgid "Company Styles"
msgstr ""
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
+msgid "ID"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
+#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
+msgid "Last Modified on"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
index 869e040b361e..956f9964f935 100644
--- a/web_company_color/models/ir_qweb.py
+++ b/web_company_color/models/ir_qweb.py
@@ -63,7 +63,7 @@ class QWeb(models.AbstractModel):
_inherit = "ir.qweb"
@api.model
- def render(self, id_or_xml_id, values=None, **options):
+ def _render(self, id_or_xml_id, values=None, **options):
""" Adds the active company to the context """
try:
active_company_id = int(
@@ -76,7 +76,7 @@ def render(self, id_or_xml_id, values=None, **options):
or self.env.user.company_id
)
self = self.with_context(active_company_id=company_id.id)
- return super().render(id_or_xml_id, values=values, **options)
+ return super()._render(id_or_xml_id, values=values, **options)
def _get_asset_content(self, xmlid, options):
""" Handle 'special' web_company_color xmlid """
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
index 09be7ad0909b..71df9a76bb7a 100644
--- a/web_company_color/readme/CONTRIBUTORS.rst
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -2,3 +2,4 @@
* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
+* Iván Antón
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 50ab87995f08..251ac0d3ce4e 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -367,7 +367,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -397,7 +397,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -424,7 +425,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From bc1af76ca670bfbd0c866ae0f85113a4e5449786 Mon Sep 17 00:00:00 2001
From: Corneliuus
Date: Wed, 13 Oct 2021 20:22:33 +0000
Subject: [PATCH 33/69] Added translation using Weblate (German)
---
web_company_color/i18n/de.po | 87 ++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
create mode 100644 web_company_color/i18n/de.po
diff --git a/web_company_color/i18n/de.po b/web_company_color/i18n/de.po
new file mode 100644
index 000000000000..06a507d082e6
--- /dev/null
+++ b/web_company_color/i18n/de.po
@@ -0,0 +1,87 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-10-13 20:28+0000\n"
+"Last-Translator: Corneliuus \n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid ""
+" \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+" \n"
+" Damit die Änderungen wirksam werden, aktualisieren "
+"Sie bitte\n"
+" Sie die Seite."
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Unternehmen"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "Unternehmensfarben"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "Unternehmensstile"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
+msgid "ID"
+msgstr "ID"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
+#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt bearbeitet am"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "Navbar-Hintergrundfarbe"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "Navbar Hintergrundfarbe Hover"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "Navbar-Farben"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "Navbar Textfarbe"
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr "Qweb"
From be38415340eeeee6c2521e1ef01c9a41e1dcd26b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dept=2E=20T=C3=A9cnico?=
Date: Thu, 18 Nov 2021 14:56:41 +0000
Subject: [PATCH 34/69] Added translation using Weblate (Catalan)
---
web_company_color/i18n/ca.po | 83 ++++++++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
create mode 100644 web_company_color/i18n/ca.po
diff --git a/web_company_color/i18n/ca.po b/web_company_color/i18n/ca.po
new file mode 100644
index 000000000000..08bf41220599
--- /dev/null
+++ b/web_company_color/i18n/ca.po
@@ -0,0 +1,83 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2021-11-18 17:36+0000\n"
+"Last-Translator: Dept. Técnico \n"
+"Language-Team: none\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid ""
+" \n"
+" In order for the changes to take effect, please refresh\n"
+" the page."
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Companyies"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr ""
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
+msgid "ID"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
+#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr ""
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr ""
From b932342c5a510f8811e4f8cd483b627fa4b184c1 Mon Sep 17 00:00:00 2001
From: Bernat Puig Font
Date: Wed, 22 Dec 2021 10:45:03 +0100
Subject: [PATCH 35/69] [IMP] web_company_color: black, isort, prettier
---
web_company_color/models/assetsbundle.py | 2 +-
web_company_color/models/ir_qweb.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/web_company_color/models/assetsbundle.py b/web_company_color/models/assetsbundle.py
index d6c31c2bec39..2f2ce00831e6 100644
--- a/web_company_color/models/assetsbundle.py
+++ b/web_company_color/models/assetsbundle.py
@@ -5,7 +5,7 @@
class AssetsBundleCompanyColor(AssetsBundle):
def get_company_color_asset_node(self):
- """ Process the user active company scss and returns the node to inject """
+ """Process the user active company scss and returns the node to inject"""
company_id = self.env["res.company"].browse(
self.env.context.get("active_company_id", 0)
)
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
index 956f9964f935..f43c5aace08b 100644
--- a/web_company_color/models/ir_qweb.py
+++ b/web_company_color/models/ir_qweb.py
@@ -64,7 +64,7 @@ class QWeb(models.AbstractModel):
@api.model
def _render(self, id_or_xml_id, values=None, **options):
- """ Adds the active company to the context """
+ """Adds the active company to the context"""
try:
active_company_id = int(
request.httprequest.cookies.get("cids", "").split(",")[0]
@@ -79,7 +79,7 @@ def _render(self, id_or_xml_id, values=None, **options):
return super()._render(id_or_xml_id, values=values, **options)
def _get_asset_content(self, xmlid, options):
- """ Handle 'special' web_company_color xmlid """
+ """Handle 'special' web_company_color xmlid"""
if xmlid == "web_company_color.company_color_assets":
asset = AssetsBundleCompanyColor(xmlid, [], env=self.env)
return ([], [asset.get_company_color_asset_node()])
From 2f05db6cfa76e0ac26a8de12f1283ab1e596cf6c Mon Sep 17 00:00:00 2001
From: Bernat Puig Font
Date: Thu, 23 Dec 2021 10:31:20 +0100
Subject: [PATCH 36/69] [MIG] web_company_color: Migration to 15.0
---
web_company_color/README.rst | 13 ++-
web_company_color/__manifest__.py | 2 +-
web_company_color/i18n/web_company_color.pot | 20 +---
web_company_color/models/assetsbundle.py | 14 ++-
web_company_color/models/ir_qweb.py | 104 +++++-------------
web_company_color/readme/CONTRIBUTORS.rst | 3 +-
.../static/description/index.html | 9 +-
7 files changed, 56 insertions(+), 109 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index 09b04dff6158..e397965b7b48 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -14,13 +14,13 @@ Web Company Color
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/14.0/web_company_color
+ :target: https://github.com/OCA/web/tree/15.0/web_company_color
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_company_color
+ :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_company_color
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/14.0
+ :target: https://runbot.odoo-community.org/runbot/162/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -66,10 +66,11 @@ Contributors
~~~~~~~~~~~~
* Jordi Ballester Alomar (ForgeFlow)
-* Lois Rilo (ForgeFlow)
+* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
* Iván Antón
+* Bernat Puig (ForgeFlow)
Maintainers
~~~~~~~~~~~
@@ -84,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index e73cf17e5172..726ae7761b95 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "14.0.1.0.0",
+ "version": "15.0.1.0.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index 826901d2d7f4..b5910cafa36c 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -36,24 +36,6 @@ msgstr ""
msgid "Company Styles"
msgstr ""
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
-msgid "ID"
-msgstr ""
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
-#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
-msgid "Last Modified on"
-msgstr ""
-
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/models/assetsbundle.py b/web_company_color/models/assetsbundle.py
index 2f2ce00831e6..aec30736c652 100644
--- a/web_company_color/models/assetsbundle.py
+++ b/web_company_color/models/assetsbundle.py
@@ -1,14 +1,22 @@
# Copyright 2020 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+from odoo.http import request
+
from odoo.addons.base.models.assetsbundle import AssetsBundle, ScssStylesheetAsset
class AssetsBundleCompanyColor(AssetsBundle):
def get_company_color_asset_node(self):
"""Process the user active company scss and returns the node to inject"""
- company_id = self.env["res.company"].browse(
- self.env.context.get("active_company_id", 0)
+ try:
+ active_company_id = int(
+ request.httprequest.cookies.get("cids", "").split(",")[0]
+ )
+ except Exception:
+ active_company_id = False
+ company_id = (
+ self.env["res.company"].browse(active_company_id) or self.env.company
)
asset = ScssStylesheetAsset(self, url=company_id.scss_get_url())
compiled = self.compile_css(asset.compile, asset.get_source())
- return ("style", {}, compiled)
+ return "style", {}, compiled
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
index f43c5aace08b..1b8a627b8766 100644
--- a/web_company_color/models/ir_qweb.py
+++ b/web_company_color/models/ir_qweb.py
@@ -1,86 +1,40 @@
# Copyright 2020 Alexandre Díaz
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-from inspect import unwrap
-
-from odoo import api, models, tools
-from odoo.http import request
-
-from odoo.addons.base.models.ir_qweb import IrQWeb
+from odoo import models
from .assetsbundle import AssetsBundleCompanyColor
-# Monkey Patch to change the ormcache_context decorator of '_get_asset_nodes' to
-# add 'active_company_id' context key. This is done to avoid "clear_caches" usage
-# that works in a more aggressive way to the LRU cache.
-
-_orig_get_asset_nodes = unwrap(IrQWeb._get_asset_nodes)
-
-
-@tools.conditional(
- "xml" not in tools.config["dev_mode"],
- tools.ormcache_context(
- "xmlid",
- 'options.get("lang", "en_US")',
- "css",
- "js",
- "debug",
- "async_load",
- "defer_load",
- "lazy_load",
- keys=("website_id", "active_company_id"),
- ),
-)
-def _get_asset_nodes__mp(
- self,
- xmlid,
- options,
- css=True,
- js=True,
- debug=False,
- async_load=False,
- defer_load=False,
- lazy_load=False,
- values=None,
-):
- return _orig_get_asset_nodes(
- self,
- xmlid,
- options,
- css=css,
- js=js,
- debug=debug,
- async_load=async_load,
- defer_load=defer_load,
- lazy_load=lazy_load,
- values=values,
- )
-
-
-IrQWeb._get_asset_nodes = _get_asset_nodes__mp
-
class QWeb(models.AbstractModel):
_inherit = "ir.qweb"
- @api.model
- def _render(self, id_or_xml_id, values=None, **options):
- """Adds the active company to the context"""
- try:
- active_company_id = int(
- request.httprequest.cookies.get("cids", "").split(",")[0]
+ def _generate_asset_nodes_cache(
+ self,
+ bundle,
+ css=True,
+ js=True,
+ debug=False,
+ async_load=False,
+ defer_load=False,
+ lazy_load=False,
+ media=None,
+ ):
+ res = super()._generate_asset_nodes(
+ bundle, css, js, debug, async_load, defer_load, lazy_load, media
+ )
+ if bundle == "web_company_color.company_color_assets":
+ asset = AssetsBundleCompanyColor(
+ bundle, [], env=self.env, css=True, js=True
)
- except Exception:
- active_company_id = False
- company_id = (
- self.env["res.company"].browse(active_company_id)
- or self.env.user.company_id
+ res += [asset.get_company_color_asset_node()]
+ return res
+
+ def _get_asset_content(
+ self, bundle, nodeAttrs=None, defer_load=False, lazy_load=False
+ ):
+ """Handle 'special' web_company_color bundle"""
+ if bundle == "web_company_color.company_color_assets":
+ return [], []
+ return super()._get_asset_content(
+ bundle, nodeAttrs, defer_load=defer_load, lazy_load=lazy_load
)
- self = self.with_context(active_company_id=company_id.id)
- return super()._render(id_or_xml_id, values=values, **options)
-
- def _get_asset_content(self, xmlid, options):
- """Handle 'special' web_company_color xmlid"""
- if xmlid == "web_company_color.company_color_assets":
- asset = AssetsBundleCompanyColor(xmlid, [], env=self.env)
- return ([], [asset.get_company_color_asset_node()])
- return super()._get_asset_content(xmlid, options)
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
index 71df9a76bb7a..4159a702ba06 100644
--- a/web_company_color/readme/CONTRIBUTORS.rst
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -1,5 +1,6 @@
* Jordi Ballester Alomar (ForgeFlow)
-* Lois Rilo (ForgeFlow)
+* Lois Rilo (ForgeFlow)
* Simone Orsi
* Jairo Llopis
* Iván Antón
+* Bernat Puig (ForgeFlow)
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 251ac0d3ce4e..cf0ddca35e94 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -367,7 +367,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -397,7 +397,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -425,7 +426,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From 5b9f093366328d8b5a5c8472d7f90ae3689b4739 Mon Sep 17 00:00:00 2001
From: CarlosRoca13
Date: Thu, 3 Mar 2022 11:57:26 +0100
Subject: [PATCH 37/69] [FIX] web_company_color: Recalculated color when we do
not want If we change something with base.document.layout wizard, this will
launch the colors computing even without changing the logo. This procedure
will change the value of the colors if they were set by hand.
This change forces the user to press a button to recompute the colors and avoid possible undesired changes.
TT34902
---
web_company_color/README.rst | 6 +-
web_company_color/__manifest__.py | 2 +-
web_company_color/i18n/ca.po | 20 +----
web_company_color/i18n/de.po | 31 ++++----
web_company_color/i18n/es.po | 75 +++++++++++++++++++
web_company_color/i18n/hr.po | 5 ++
web_company_color/i18n/it.po | 8 +-
web_company_color/i18n/nl.po | 8 +-
web_company_color/i18n/web_company_color.pot | 5 ++
web_company_color/i18n/zh_CN.po | 5 ++
web_company_color/models/res_company.py | 44 +++++------
web_company_color/readme/CONTRIBUTORS.rst | 6 +-
.../static/description/index.html | 7 +-
web_company_color/tests/test_res_company.py | 2 +
web_company_color/view/res_company.xml | 6 ++
15 files changed, 170 insertions(+), 60 deletions(-)
create mode 100644 web_company_color/i18n/es.po
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index e397965b7b48..e8f05fea7fdb 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -68,9 +68,13 @@ Contributors
* Jordi Ballester Alomar (ForgeFlow)
* Lois Rilo (ForgeFlow)
* Simone Orsi
-* Jairo Llopis
* Iván Antón
* Bernat Puig (ForgeFlow)
+* `Tecnativa `_:
+
+ * Jairo Llopis
+ * Alexandre Díaz
+ * Carlos Roca
Maintainers
~~~~~~~~~~~
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 726ae7761b95..2db632b5ca9c 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "15.0.1.0.0",
+ "version": "15.0.1.1.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/i18n/ca.po b/web_company_color/i18n/ca.po
index 08bf41220599..66ee50a9b49f 100644
--- a/web_company_color/i18n/ca.po
+++ b/web_company_color/i18n/ca.po
@@ -20,7 +20,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
" \n"
-" In order for the changes to take effect, please refresh\n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
@@ -40,21 +41,8 @@ msgid "Company Styles"
msgstr ""
#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
-msgid "Display Name"
-msgstr ""
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
-msgid "ID"
-msgstr ""
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
-#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
-msgid "Last Modified on"
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
msgstr ""
#. module: web_company_color
diff --git a/web_company_color/i18n/de.po b/web_company_color/i18n/de.po
index 06a507d082e6..565605e7150c 100644
--- a/web_company_color/i18n/de.po
+++ b/web_company_color/i18n/de.po
@@ -20,7 +20,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
" \n"
-" In order for the changes to take effect, please refresh\n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
" \n"
@@ -44,22 +45,9 @@ msgid "Company Styles"
msgstr "Unternehmensstile"
#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
-msgid "Display Name"
-msgstr "Anzeigename"
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
-#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
-msgid "ID"
-msgstr "ID"
-
-#. module: web_company_color
-#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb____last_update
-#: model:ir.model.fields,field_description:web_company_color.field_res_company____last_update
-msgid "Last Modified on"
-msgstr "Zuletzt bearbeitet am"
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
@@ -85,3 +73,12 @@ msgstr "Navbar Textfarbe"
#: model:ir.model,name:web_company_color.model_ir_qweb
msgid "Qweb"
msgstr "Qweb"
+
+#~ msgid "Display Name"
+#~ msgstr "Anzeigename"
+
+#~ msgid "ID"
+#~ msgstr "ID"
+
+#~ msgid "Last Modified on"
+#~ msgstr "Zuletzt bearbeitet am"
diff --git a/web_company_color/i18n/es.po b/web_company_color/i18n/es.po
new file mode 100644
index 000000000000..8e95c26bb74b
--- /dev/null
+++ b/web_company_color/i18n/es.po
@@ -0,0 +1,75 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_company_color
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-03-02 15:55+0000\n"
+"PO-Revision-Date: 2022-03-02 16:56+0100\n"
+"Last-Translator: claudiagn \n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Poedit 2.3\n"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid ""
+" \n"
+" In order for the changes to take effect, please "
+"refresh\n"
+" the page."
+msgstr ""
+" \n"
+" Para que los cambios surtan efecto, actualice\n"
+" la página."
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_res_company
+msgid "Companies"
+msgstr "Compañías"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__company_colors
+msgid "Company Colors"
+msgstr "Colores de la compañía"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Company Styles"
+msgstr "Estilos de compañía"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr "Calcular colores a partir del logo"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
+msgid "Navbar Background Color"
+msgstr "Color de fondo de la barra de navegación"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg_hover
+msgid "Navbar Background Color Hover"
+msgstr "Desplazamiento del color de fondo de la barra de navegación"
+
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Navbar Colors"
+msgstr "Colores de la barra de navegación"
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_text
+msgid "Navbar Text Color"
+msgstr "Color de texto de la barra de navegación"
+
+#. module: web_company_color
+#: model:ir.model,name:web_company_color.model_ir_qweb
+msgid "Qweb"
+msgstr "Qweb"
diff --git a/web_company_color/i18n/hr.po b/web_company_color/i18n/hr.po
index 52117b0cf11c..09462c42fce5 100644
--- a/web_company_color/i18n/hr.po
+++ b/web_company_color/i18n/hr.po
@@ -44,6 +44,11 @@ msgstr "Boje tvrtke"
msgid "Company Styles"
msgstr "Stilovi tvrtke"
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/i18n/it.po b/web_company_color/i18n/it.po
index b55ba1a43e75..cd70f7d6b6f3 100644
--- a/web_company_color/i18n/it.po
+++ b/web_company_color/i18n/it.po
@@ -20,7 +20,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
" \n"
-" In order for the changes to take effect, please refresh\n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
" \n"
@@ -42,6 +43,11 @@ msgstr "Colori Aziendali"
msgid "Company Styles"
msgstr "Stili Aziendali"
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/i18n/nl.po b/web_company_color/i18n/nl.po
index ba37a460ac79..a8eac0ed47bd 100644
--- a/web_company_color/i18n/nl.po
+++ b/web_company_color/i18n/nl.po
@@ -20,7 +20,8 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
" \n"
-" In order for the changes to take effect, please refresh\n"
+" In order for the changes to take effect, please "
+"refresh\n"
" the page."
msgstr ""
" \n"
@@ -41,6 +42,11 @@ msgstr "Bedrijfskleuren"
msgid "Company Styles"
msgstr "Bedrijfsstijlen"
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index b5910cafa36c..18ef16987d82 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -36,6 +36,11 @@ msgstr ""
msgid "Company Styles"
msgstr ""
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/i18n/zh_CN.po b/web_company_color/i18n/zh_CN.po
index a44a740e6eb0..359d65b34193 100644
--- a/web_company_color/i18n/zh_CN.po
+++ b/web_company_color/i18n/zh_CN.po
@@ -43,6 +43,11 @@ msgstr "公司颜色"
msgid "Company Styles"
msgstr "公司风格"
+#. module: web_company_color
+#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
+msgid "Compute colors from logo"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
msgid "Navbar Background Color"
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index a458b25f1744..6f07d12ed929 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -74,34 +74,36 @@ def write(self, values):
"color_navbar_bg_hover",
"color_navbar_text",
)
- if "logo" in values:
- if values["logo"]:
- _r, _g, _b = image_to_rgb(convert_to_image(values["logo"]))
- # Make color 10% darker
- _h, _l, _s = rgb_to_hls(_r, _g, _b)
- _l = max(0, _l - 0.1)
- _rd, _gd, _bd = hls_to_rgb(_h, _l, _s)
- # Calc. optimal text color (b/w)
- # Grayscale human vision perception (Rec. 709 values)
- _a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b)
- values.update(
- {
- "color_navbar_bg": n_rgb_to_hex(_r, _g, _b),
- "color_navbar_bg_hover": n_rgb_to_hex(_rd, _gd, _bd),
- "color_navbar_text": "#000" if _a < 0.5 else "#fff",
- }
- )
- else:
- values.update(self.default_get(fields_to_check))
-
result = super().write(values)
-
if any([field in values for field in fields_to_check]):
self.scss_create_or_update_attachment()
else:
result = super().write(values)
return result
+ def button_compute_color(self):
+ self.ensure_one()
+ values = self.default_get(
+ ["color_navbar_bg", "color_navbar_bg_hover", "color_navbar_text"]
+ )
+ if self.logo:
+ _r, _g, _b = image_to_rgb(convert_to_image(self.logo))
+ # Make color 10% darker
+ _h, _l, _s = rgb_to_hls(_r, _g, _b)
+ _l = max(0, _l - 0.1)
+ _rd, _gd, _bd = hls_to_rgb(_h, _l, _s)
+ # Calc. optimal text color (b/w)
+ # Grayscale human vision perception (Rec. 709 values)
+ _a = 1 - (0.2126 * _r + 0.7152 * _g + 0.0722 * _b)
+ values.update(
+ {
+ "color_navbar_bg": n_rgb_to_hex(_r, _g, _b),
+ "color_navbar_bg_hover": n_rgb_to_hex(_rd, _gd, _bd),
+ "color_navbar_text": "#000" if _a < 0.5 else "#fff",
+ }
+ )
+ self.write(values)
+
def _scss_get_sanitized_values(self):
self.ensure_one()
# Clone company_color as dictionary to avoid ORM operations
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
index 4159a702ba06..e164ff36ad05 100644
--- a/web_company_color/readme/CONTRIBUTORS.rst
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -1,6 +1,10 @@
* Jordi Ballester Alomar (ForgeFlow)
* Lois Rilo (ForgeFlow)
* Simone Orsi
-* Jairo Llopis
* Iván Antón
* Bernat Puig (ForgeFlow)
+* `Tecnativa `_:
+
+ * Jairo Llopis
+ * Alexandre Díaz
+ * Carlos Roca
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index cf0ddca35e94..8fa6ad7cd7d2 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -414,9 +414,14 @@
Jordi Ballester Alomar <jordi.ballester@forgeflow.com > (ForgeFlow)
Lois Rilo <lois.rilo@forgeflow.com > (ForgeFlow)
Simone Orsi <simone.orsi@camptocamp.com >
-Jairo Llopis <jairo.llopis@tecnativa.com >
Iván Antón <ozono@ozonomultimedia.com >
Bernat Puig <bernat.puig@forgeflow.com > (ForgeFlow)
+Tecnativa :
+Jairo Llopis
+Alexandre Díaz
+Carlos Roca
+
+
diff --git a/web_company_color/tests/test_res_company.py b/web_company_color/tests/test_res_company.py
index 8234b6f44ca6..06a780cb1127 100644
--- a/web_company_color/tests/test_res_company.py
+++ b/web_company_color/tests/test_res_company.py
@@ -25,6 +25,7 @@ def test_create_unlink_company(self):
)
self._test_scss_attachment()
company_id.sudo().write({"logo": self.IMG_GREEN})
+ company_id.button_compute_color()
self.assertEqual(
company_id.color_navbar_bg, "#00ff00", "Invalid Navbar Background Color"
)
@@ -36,6 +37,7 @@ def test_create_unlink_company(self):
def test_change_logo(self):
company_id = self.env["res.company"].search([], limit=1)
company_id.sudo().write({"logo": self.IMG_GREEN})
+ company_id.button_compute_color()
self.assertEqual(
company_id.color_navbar_bg, "#00ff00", "Invalid Navbar Background Color"
)
diff --git a/web_company_color/view/res_company.xml b/web_company_color/view/res_company.xml
index 3f3bcc49ffaf..25265f90c64c 100644
--- a/web_company_color/view/res_company.xml
+++ b/web_company_color/view/res_company.xml
@@ -19,6 +19,12 @@
+
From a930af3a0bf469e3d6ac7a5a092b8e1756328c07 Mon Sep 17 00:00:00 2001
From: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT
Date: Fri, 9 Dec 2022 12:50:37 +0000
Subject: [PATCH 38/69] Translated using Weblate (German)
Currently translated at 100.0% (10 of 10 strings)
Translation: web-15.0/web-15.0-web_company_color
Translate-URL: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_company_color/de/
---
web_company_color/i18n/de.po | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/web_company_color/i18n/de.po b/web_company_color/i18n/de.po
index 565605e7150c..84dc718f51f9 100644
--- a/web_company_color/i18n/de.po
+++ b/web_company_color/i18n/de.po
@@ -6,15 +6,16 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2021-10-13 20:28+0000\n"
-"Last-Translator: Corneliuus \n"
+"PO-Revision-Date: 2022-12-09 14:45+0000\n"
+"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3.2\n"
+"X-Generator: Weblate 4.14.1\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
@@ -47,7 +48,7 @@ msgstr "Unternehmensstile"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid "Compute colors from logo"
-msgstr ""
+msgstr "Farben aus Logo generieren"
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
From eb918ea200132cc369e11fe18b7780cdeb6ceb9a Mon Sep 17 00:00:00 2001
From: Lois Rilo
Date: Wed, 7 Jun 2023 13:09:52 +0200
Subject: [PATCH 39/69] [MIG] web_company_color: Migration to 16.0
---
web_company_color/README.rst | 10 +++++-----
web_company_color/__manifest__.py | 2 +-
web_company_color/i18n/web_company_color.pot | 2 +-
web_company_color/models/ir_qweb.py | 6 ++----
web_company_color/static/description/index.html | 6 +++---
5 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index e8f05fea7fdb..0fd3e19bfde4 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -14,13 +14,13 @@ Web Company Color
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/15.0/web_company_color
+ :target: https://github.com/OCA/web/tree/16.0/web_company_color
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_company_color
+ :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_company_color
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/15.0
+ :target: https://runbot.odoo-community.org/runbot/162/16.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -89,6 +89,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 2db632b5ca9c..3c11a71e0c2f 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "15.0.1.1.0",
+ "version": "16.0.1.0.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index 18ef16987d82..adbd5fa1de0d 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
index 1b8a627b8766..944288c5080d 100644
--- a/web_company_color/models/ir_qweb.py
+++ b/web_company_color/models/ir_qweb.py
@@ -29,12 +29,10 @@ def _generate_asset_nodes_cache(
res += [asset.get_company_color_asset_node()]
return res
- def _get_asset_content(
- self, bundle, nodeAttrs=None, defer_load=False, lazy_load=False
- ):
+ def _get_asset_content(self, bundle, defer_load=False, lazy_load=False, media=None):
"""Handle 'special' web_company_color bundle"""
if bundle == "web_company_color.company_color_assets":
return [], []
return super()._get_asset_content(
- bundle, nodeAttrs, defer_load=defer_load, lazy_load=lazy_load
+ bundle, defer_load=defer_load, lazy_load=lazy_load, media=media
)
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 8fa6ad7cd7d2..487b44890821 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -367,7 +367,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -397,7 +397,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -431,7 +431,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From 8b21e7ef997f7b89bf4dde6bd99acd7e03df95a1 Mon Sep 17 00:00:00 2001
From: dsolanki
Date: Tue, 13 Jun 2023 16:00:38 +0530
Subject: [PATCH 40/69] [FIX] web_company_color: unaligned button view
---
web_company_color/README.rst | 1 +
web_company_color/__manifest__.py | 2 +-
web_company_color/i18n/ca.po | 2 +-
web_company_color/i18n/de.po | 21 ++++++++++++-------
web_company_color/i18n/es.po | 15 +++++++++----
web_company_color/i18n/hr.po | 15 +++++++++----
web_company_color/i18n/it.po | 15 +++++++++----
web_company_color/i18n/nl.po | 14 ++++++++++---
web_company_color/i18n/web_company_color.pot | 2 +-
web_company_color/i18n/zh_CN.po | 15 +++++++++----
web_company_color/readme/CONTRIBUTORS.rst | 1 +
.../static/description/index.html | 1 +
web_company_color/view/res_company.xml | 19 ++++++++++-------
13 files changed, 86 insertions(+), 37 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index 0fd3e19bfde4..bf88841fb372 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -70,6 +70,7 @@ Contributors
* Simone Orsi
* Iván Antón
* Bernat Puig (ForgeFlow)
+* Dhara Solanki
* `Tecnativa `_:
* Jairo Llopis
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 3c11a71e0c2f..e23d86d9ffca 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "16.0.1.0.0",
+ "version": "16.0.1.1.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/i18n/ca.po b/web_company_color/i18n/ca.po
index 66ee50a9b49f..dab300634e1c 100644
--- a/web_company_color/i18n/ca.po
+++ b/web_company_color/i18n/ca.po
@@ -19,7 +19,7 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
diff --git a/web_company_color/i18n/de.po b/web_company_color/i18n/de.po
index 84dc718f51f9..3ac6574578d6 100644
--- a/web_company_color/i18n/de.po
+++ b/web_company_color/i18n/de.po
@@ -7,8 +7,8 @@ msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-12-09 14:45+0000\n"
-"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n"
+"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -20,15 +20,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" Damit die Änderungen wirksam werden, aktualisieren "
-"Sie bitte\n"
-" Sie die Seite."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -75,6 +71,17 @@ msgstr "Navbar Textfarbe"
msgid "Qweb"
msgstr "Qweb"
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " Damit die Änderungen wirksam werden, "
+#~ "aktualisieren Sie bitte\n"
+#~ " Sie die Seite."
+
#~ msgid "Display Name"
#~ msgstr "Anzeigename"
diff --git a/web_company_color/i18n/es.po b/web_company_color/i18n/es.po
index 8e95c26bb74b..1701eb82a2f1 100644
--- a/web_company_color/i18n/es.po
+++ b/web_company_color/i18n/es.po
@@ -20,14 +20,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" Para que los cambios surtan efecto, actualice\n"
-" la página."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -73,3 +70,13 @@ msgstr "Color de texto de la barra de navegación"
#: model:ir.model,name:web_company_color.model_ir_qweb
msgid "Qweb"
msgstr "Qweb"
+
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " Para que los cambios surtan efecto, actualice\n"
+#~ " la página."
diff --git a/web_company_color/i18n/hr.po b/web_company_color/i18n/hr.po
index 09462c42fce5..35cf6f04680e 100644
--- a/web_company_color/i18n/hr.po
+++ b/web_company_color/i18n/hr.po
@@ -20,14 +20,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" Kako bi promjene postale vidljive, molimo \n"
-" učitajte ponovo ovu stranicu."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -74,5 +71,15 @@ msgstr "Boja teksta navigacijske trake"
msgid "Qweb"
msgstr ""
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " Kako bi promjene postale vidljive, molimo \n"
+#~ " učitajte ponovo ovu stranicu."
+
#~ msgid "SCSS Modif. Timestamp"
#~ msgstr "SCSS Modif. Vremenski žig"
diff --git a/web_company_color/i18n/it.po b/web_company_color/i18n/it.po
index cd70f7d6b6f3..fd059c956c93 100644
--- a/web_company_color/i18n/it.po
+++ b/web_company_color/i18n/it.po
@@ -19,14 +19,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" Perché i cambiamenti abbiano effetto, prego "
-"aggiornare la pagina."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -72,3 +69,13 @@ msgstr "Colori Testo Barra Navigazione"
#: model:ir.model,name:web_company_color.model_ir_qweb
msgid "Qweb"
msgstr "Qweb"
+
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " Perché i cambiamenti abbiano effetto, prego "
+#~ "aggiornare la pagina."
diff --git a/web_company_color/i18n/nl.po b/web_company_color/i18n/nl.po
index a8eac0ed47bd..826381fba8f1 100644
--- a/web_company_color/i18n/nl.po
+++ b/web_company_color/i18n/nl.po
@@ -19,13 +19,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" Ververs de pagina om de wijzigingen door te voeren."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -71,3 +69,13 @@ msgstr "Navigatiebalk Tekstkleuren"
#: model:ir.model,name:web_company_color.model_ir_qweb
msgid "Qweb"
msgstr "Qweb"
+
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " Ververs de pagina om de wijzigingen door te "
+#~ "voeren."
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index adbd5fa1de0d..cce6fbde82a0 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -16,7 +16,7 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please refresh\n"
" the page."
msgstr ""
diff --git a/web_company_color/i18n/zh_CN.po b/web_company_color/i18n/zh_CN.po
index 359d65b34193..99677d649fa1 100644
--- a/web_company_color/i18n/zh_CN.po
+++ b/web_company_color/i18n/zh_CN.po
@@ -19,14 +19,11 @@ msgstr ""
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid ""
-" \n"
+" \n"
" In order for the changes to take effect, please "
"refresh\n"
" the page."
msgstr ""
-" \n"
-" 为了使更改生效,请刷新\n"
-" 这个页面。"
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -73,5 +70,15 @@ msgstr "导航栏文字颜色"
msgid "Qweb"
msgstr "Qweb"
+#~ msgid ""
+#~ " \n"
+#~ " In order for the changes to take effect, please "
+#~ "refresh\n"
+#~ " the page."
+#~ msgstr ""
+#~ " \n"
+#~ " 为了使更改生效,请刷新\n"
+#~ " 这个页面。"
+
#~ msgid "SCSS Modif. Timestamp"
#~ msgstr "SCSS修改时间戳"
diff --git a/web_company_color/readme/CONTRIBUTORS.rst b/web_company_color/readme/CONTRIBUTORS.rst
index e164ff36ad05..180a4a029f3a 100644
--- a/web_company_color/readme/CONTRIBUTORS.rst
+++ b/web_company_color/readme/CONTRIBUTORS.rst
@@ -3,6 +3,7 @@
* Simone Orsi
* Iván Antón
* Bernat Puig (ForgeFlow)
+* Dhara Solanki
* `Tecnativa `_:
* Jairo Llopis
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 487b44890821..16c8170460be 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -416,6 +416,7 @@
Simone Orsi <simone.orsi@camptocamp.com >
Iván Antón <ozono@ozonomultimedia.com >
Bernat Puig <bernat.puig@forgeflow.com > (ForgeFlow)
+Dhara Solanki <dhara.solanki@initos.com >
Tecnativa :
Jairo Llopis
Alexandre Díaz
diff --git a/web_company_color/view/res_company.xml b/web_company_color/view/res_company.xml
index 25265f90c64c..93356c7e6fe4 100644
--- a/web_company_color/view/res_company.xml
+++ b/web_company_color/view/res_company.xml
@@ -19,15 +19,18 @@
-
-
-
+
+
+
In order for the changes to take effect, please refresh
the page.
From 267a2a101e132a1e7c8af36714a51ad9913d1bf0 Mon Sep 17 00:00:00 2001
From: Holger Brunn
Date: Sat, 10 Apr 2021 05:39:49 +0200
Subject: [PATCH 41/69] [IMP] web_company_color: Support button and link
customizing
---
web_company_color/models/res_company.py | 64 +++++++++++++++++++++++++
web_company_color/view/res_company.xml | 7 ++-
2 files changed, 70 insertions(+), 1 deletion(-)
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index 6f07d12ed929..be86ca6dc5fd 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -44,6 +44,47 @@ class ResCompany(models.Model):
}
}
}
+ a[href],
+ a[tabindex],
+ .btn-link,
+ .o_external_button {
+ color: %(color_link_text)s !important;
+ }
+ a:hover,
+ .btn-link:hover {
+ color: %(color_link_text_hover)s !important;
+ }
+ .btn-primary:not(.disabled),
+ .ui-autocomplete .ui-menu-item.ui-state-focus a {
+ color: %(color_button_text)s !important;
+ background-color: %(color_button_bg)s !important;
+ border-color: %(color_button_bg)s !important;
+ }
+ .btn-primary:hover:not(.disabled),
+ .ui-autocomplete .ui-menu-item.ui-state-focus a:hover {
+ color: %(color_button_text)s !important;
+ background-color: %(color_button_bg_hover)s !important;
+ border-color: %(color_button_bg_hover)s !important;
+ }
+ .o_searchview .o_searchview_facet .o_searchview_facet_label {
+ color: %(color_button_text)s !important;
+ background-color: %(color_button_bg)s !important;
+ }
+ .o_form_view .o_horizontal_separator {
+ color: %(color_link_text)s !important;
+ }
+ .o_form_view .oe_button_box .oe_stat_button .o_button_icon,
+ .o_form_view .oe_button_box .oe_stat_button .o_stat_info .o_stat_value,
+ .o_form_view .oe_button_box .oe_stat_button > span .o_stat_value {
+ color: %(color_link_text)s !important;
+ }
+ .o_form_view .o_form_statusbar > .o_statusbar_status >
+ .o_arrow_button.btn-primary.disabled {
+ color: %(color_link_text)s !important;
+ }
+ .o_required_modifier.o_input, .o_required_modifier .o_input {
+ background-color: lighten(%(color_button_bg)s, 10%%) !important;
+ }
"""
company_colors = fields.Serialized()
@@ -52,6 +93,16 @@ class ResCompany(models.Model):
"Navbar Background Color Hover", sparse="company_colors"
)
color_navbar_text = fields.Char("Navbar Text Color", sparse="company_colors")
+ color_button_text = fields.Char("Button Text Color", sparse="company_colors")
+ color_button_bg = fields.Char("Button Background Color", sparse="company_colors")
+ color_button_bg_hover = fields.Char(
+ "Button Background Color Hover", sparse="company_colors"
+ )
+ color_link_text = fields.Char("Link Text Color", sparse="company_colors")
+ color_link_text_hover = fields.Char(
+ "Link Text Color Hover", sparse="company_colors"
+ )
+ scss_modif_timestamp = fields.Char("SCSS Modif. Timestamp")
@api.model_create_multi
def create(self, vals_list):
@@ -73,6 +124,11 @@ def write(self, values):
"color_navbar_bg",
"color_navbar_bg_hover",
"color_navbar_text",
+ "color_button_bg",
+ "color_button_bg_hover",
+ "color_button_text",
+ "color_link_text",
+ "color_link_text_hover",
)
result = super().write(values)
if any([field in values for field in fields_to_check]):
@@ -118,6 +174,14 @@ def _scss_get_sanitized_values(self):
or "$o-navbar-inverse-link-hover-bg"
),
"color_navbar_text": (values.get("color_navbar_text") or "#FFF"),
+ "color_button_bg": values.get("color_button_bg") or "$primary",
+ "color_button_bg_hover": values.get("color_button_bg_hover")
+ or 'darken(theme-color("primary"), 10%)',
+ "color_button_text": values.get("color_button_text") or "#FFF",
+ "color_link_text": values.get("color_link_text")
+ or 'theme-color("primary")',
+ "color_link_text_hover": values.get("color_link_text_hover")
+ or 'darken(theme-color("primary"), 10%)',
}
)
return values
diff --git a/web_company_color/view/res_company.xml b/web_company_color/view/res_company.xml
index 93356c7e6fe4..45dd79421834 100644
--- a/web_company_color/view/res_company.xml
+++ b/web_company_color/view/res_company.xml
@@ -15,10 +15,15 @@
name="company_styles"
groups="base.group_system"
>
-
+
+
+
+
+
+
Date: Wed, 6 Jul 2022 12:36:32 +0200
Subject: [PATCH 42/69] Update scss selectors after JQuery3 Update
See upstream commit: https://github.com/odoo/odoo/commit/0bc24a78a2fa7836196f18218cce6d6135f9cc15
---
web_company_color/i18n/de.po | 11 +++++++----
web_company_color/models/res_company.py | 4 ++--
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/web_company_color/i18n/de.po b/web_company_color/i18n/de.po
index 3ac6574578d6..634f34b89a13 100644
--- a/web_company_color/i18n/de.po
+++ b/web_company_color/i18n/de.po
@@ -6,16 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2022-12-09 14:45+0000\n"
-"Last-Translator: Nils Coenen | NICO SOLUTIONS - ENGINEERING & IT \n"
+"PO-Revision-Date: 2023-06-20 11:09+0000\n"
+"Last-Translator: Nils Coenen \n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.14.1\n"
+"X-Generator: Weblate 4.17\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
@@ -25,6 +24,10 @@ msgid ""
"refresh\n"
" the page."
msgstr ""
+" \n"
+" Damit die Änderungen wirksam werden, aktualisieren "
+"Sie bitte\n"
+" die Seite."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index be86ca6dc5fd..e50d945a1249 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -55,13 +55,13 @@ class ResCompany(models.Model):
color: %(color_link_text_hover)s !important;
}
.btn-primary:not(.disabled),
- .ui-autocomplete .ui-menu-item.ui-state-focus a {
+ .ui-autocomplete .ui-menu-item > a.ui-state-active {
color: %(color_button_text)s !important;
background-color: %(color_button_bg)s !important;
border-color: %(color_button_bg)s !important;
}
.btn-primary:hover:not(.disabled),
- .ui-autocomplete .ui-menu-item.ui-state-focus a:hover {
+ .ui-autocomplete .ui-menu-item > a.ui-state-active:hover {
color: %(color_button_text)s !important;
background-color: %(color_button_bg_hover)s !important;
border-color: %(color_button_bg_hover)s !important;
From 0dbc68eb22be5e8e534ed2f90bdda55227215868 Mon Sep 17 00:00:00 2001
From: "Jan Tapper [Onestein]"
Date: Mon, 7 Aug 2023 13:30:48 +0000
Subject: [PATCH 43/69] Translated using Weblate (Dutch)
Currently translated at 100.0% (10 of 10 strings)
Translation: web-16.0/web-16.0-web_company_color
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_company_color/nl/
---
web_company_color/i18n/nl.po | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/web_company_color/i18n/nl.po b/web_company_color/i18n/nl.po
index 826381fba8f1..edeed58e9888 100644
--- a/web_company_color/i18n/nl.po
+++ b/web_company_color/i18n/nl.po
@@ -6,15 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2020-11-11 13:08+0000\n"
-"Last-Translator: Dennis Sluijk \n"
+"PO-Revision-Date: 2023-08-07 16:10+0000\n"
+"Last-Translator: \"Jan Tapper [Onestein]\" \n"
"Language-Team: none\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 4.17\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
@@ -24,6 +24,10 @@ msgid ""
"refresh\n"
" the page."
msgstr ""
+" \n"
+" Om de aanpassingen actief te maken, ververs "
+"alstublieft\n"
+" de pagina."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
@@ -43,7 +47,7 @@ msgstr "Bedrijfsstijlen"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
msgid "Compute colors from logo"
-msgstr ""
+msgstr "Genereer kleuren vanuit het logo"
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_navbar_bg
From 67f70230e70bbacfdd9cb5f2e61d2496af322c39 Mon Sep 17 00:00:00 2001
From: Ivorra78
Date: Sun, 27 Aug 2023 18:12:22 +0000
Subject: [PATCH 44/69] Translated using Weblate (Spanish)
Currently translated at 100.0% (10 of 10 strings)
Translation: web-16.0/web-16.0-web_company_color
Translate-URL: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_company_color/es/
---
web_company_color/README.rst | 15 ++++---
web_company_color/i18n/es.po | 9 ++--
.../static/description/index.html | 42 ++++++++++---------
3 files changed, 37 insertions(+), 29 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index bf88841fb372..c0bbbb1aee18 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -2,10 +2,13 @@
Web Company Color
=================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:87a21b4b71e561d5717d2ce03ac4bbd2676df1b82d72d31a19dcbd2b19b27d5d
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Web Company Color
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_company_color
:alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/162/16.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
This module change navbar colors based in the company logo colors.
@@ -49,7 +52,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback `_.
Do not contact contributors directly about support or help with technical issues.
diff --git a/web_company_color/i18n/es.po b/web_company_color/i18n/es.po
index 1701eb82a2f1..804474b1800f 100644
--- a/web_company_color/i18n/es.po
+++ b/web_company_color/i18n/es.po
@@ -7,15 +7,15 @@ msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-02 15:55+0000\n"
-"PO-Revision-Date: 2022-03-02 16:56+0100\n"
-"Last-Translator: claudiagn \n"
+"PO-Revision-Date: 2023-09-02 20:35+0000\n"
+"Last-Translator: Ivorra78 \n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Weblate 4.17\n"
#. module: web_company_color
#: model_terms:ir.ui.view,arch_db:web_company_color.view_company_form
@@ -25,6 +25,9 @@ msgid ""
"refresh\n"
" the page."
msgstr ""
+" \n"
+" Para que los cambios surtan efecto, actualice\n"
+" la página."
#. module: web_company_color
#: model:ir.model,name:web_company_color.model_res_company
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 16c8170460be..4e4134e6ea78 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -1,20 +1,20 @@
-
+
-
+
Web Company Color
-
-
Web Company Color
+
+
+
+
+
+
+
Web Company Color
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -386,18 +391,18 @@
Web Company Color
-
+
Go to company record and set a logo. Can see/modify applied colors on
the “Navbar” section.
For optimal results use images with alpha channel.
-
+
White color is omitted in the addition operation to support images
without alpha channel.
-
+
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -405,15 +410,15 @@
Do not contact contributors directly about support or help with technical issues.
+
From bd6725f8fb7fc1e0d10278154f3e01f6d9952301 Mon Sep 17 00:00:00 2001
From: DavidJForgeFlow
Date: Tue, 14 Oct 2025 09:17:43 +0200
Subject: [PATCH 61/69] [IMP] web_company_color: mobile systray button
When used on mobile/tablet view, the buttons and texts in the navbar do not match the company colors.
---
web_company_color/README.rst | 2 +-
web_company_color/__manifest__.py | 2 +-
web_company_color/models/res_company.py | 5 ++++-
web_company_color/static/description/index.html | 2 +-
4 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index 38d79d4f2f0c..13215077c780 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -11,7 +11,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:622d249810675797d351ceaaa800f9df89d92067ce131c14087b0b92fbf78283
+ !! source digest: sha256:75f2396aade33370837fa8dc343dfb818e4b777b8115331fed547449727181f5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index 6bd35b046e8c..be2582397a45 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "18.0.1.0.3",
+ "version": "18.0.1.0.4",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index 0dc6d2147192..f4c296b0fba6 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -115,7 +115,10 @@ class ResCompany(models.Model):
background-color: %(color_navbar_bg_hover)s !important;
}
}
- .o_menu_systray button{
+ .o_menu_systray button,
+ .o_navbar_breadcrumbs,
+ .o_main_navbar button,
+ .o_menu_toggle {
color: %(color_navbar_text)s !important;
&:hover, &:focus, &:active, &:focus:active {
background-color: %(color_navbar_bg_hover)s !important;
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 36e812031a5a..8545f0ec29b1 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -372,7 +372,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:622d249810675797d351ceaaa800f9df89d92067ce131c14087b0b92fbf78283
+!! source digest: sha256:75f2396aade33370837fa8dc343dfb818e4b777b8115331fed547449727181f5
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
This module change navbar colors based in the company logo colors.
From bc992e46197070247b0ead2c0bc3b49b33c2bc14 Mon Sep 17 00:00:00 2001
From: Bhavesh Heliconia
Date: Fri, 17 Oct 2025 13:08:10 +0530
Subject: [PATCH 62/69] [MIG] web_company_color: Migration to 19.0
---
web_company_color/README.rst | 16 ++++++++++------
web_company_color/__manifest__.py | 2 +-
web_company_color/models/ir_qweb.py | 12 ++++++------
web_company_color/models/res_company.py | 5 +----
web_company_color/readme/CONTRIBUTORS.md | 2 ++
web_company_color/static/description/index.html | 12 ++++++++----
6 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index 13215077c780..9a4f52c3f62d 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -11,7 +11,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:75f2396aade33370837fa8dc343dfb818e4b777b8115331fed547449727181f5
+ !! source digest: sha256:622d249810675797d351ceaaa800f9df89d92067ce131c14087b0b92fbf78283
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -21,13 +21,13 @@ Web Company Color
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/18.0/web_company_color
+ :target: https://github.com/OCA/web/tree/19.0/web_company_color
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_company_color
+ :target: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_company_color
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -59,7 +59,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -86,6 +86,10 @@ Contributors
- Alexandre Díaz
- Carlos Roca
+- `Heliconia Solutions Pvt. Ltd. `__
+
+ - Bhavesh Heliconia
+
Maintainers
-----------
@@ -99,6 +103,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/web `_ project on GitHub.
+This module is part of the `OCA/web `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_company_color/__manifest__.py b/web_company_color/__manifest__.py
index be2582397a45..08fc9708c6d3 100644
--- a/web_company_color/__manifest__.py
+++ b/web_company_color/__manifest__.py
@@ -5,7 +5,7 @@
{
"name": "Web Company Color",
"category": "web",
- "version": "18.0.1.0.4",
+ "version": "19.0.1.0.0",
"author": "Alexandre Díaz, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web", "base_sparse_field"],
diff --git a/web_company_color/models/ir_qweb.py b/web_company_color/models/ir_qweb.py
index b9f389f004e3..523d0d8cd85e 100644
--- a/web_company_color/models/ir_qweb.py
+++ b/web_company_color/models/ir_qweb.py
@@ -9,12 +9,7 @@ class QWeb(models.AbstractModel):
_inherit = "ir.qweb"
def _generate_asset_links_cache(
- self,
- bundle,
- css=True,
- js=True,
- assets_params=None,
- rtl=False,
+ self, bundle, css=True, js=True, assets_params=None, rtl=False, autoprefix=False
):
res = super()._generate_asset_links_cache(
bundle,
@@ -22,6 +17,7 @@ def _generate_asset_links_cache(
js=js,
assets_params=assets_params,
rtl=rtl,
+ autoprefix=autoprefix,
)
if bundle == "web_company_color.company_color_assets":
asset = AssetsBundleCompanyColor(
@@ -38,6 +34,7 @@ def _generate_asset_links(
debug_assets=False,
assets_params=None,
rtl=False,
+ autoprefix=False,
):
res = super()._generate_asset_links(
bundle,
@@ -46,6 +43,7 @@ def _generate_asset_links(
debug_assets=debug_assets,
assets_params=assets_params,
rtl=rtl,
+ autoprefix=autoprefix,
)
if bundle == "web_company_color.company_color_assets":
asset = AssetsBundleCompanyColor(
@@ -69,6 +67,7 @@ def _get_asset_nodes(
defer_load=False,
lazy_load=False,
media=None,
+ autoprefix=False,
):
res = super()._get_asset_nodes(
bundle,
@@ -78,6 +77,7 @@ def _get_asset_nodes(
defer_load=defer_load,
lazy_load=lazy_load,
media=media,
+ autoprefix=autoprefix,
)
for tag, attributes in res:
if tag == "link" and attributes.get("href", "").startswith(
diff --git a/web_company_color/models/res_company.py b/web_company_color/models/res_company.py
index f4c296b0fba6..0dc6d2147192 100644
--- a/web_company_color/models/res_company.py
+++ b/web_company_color/models/res_company.py
@@ -115,10 +115,7 @@ class ResCompany(models.Model):
background-color: %(color_navbar_bg_hover)s !important;
}
}
- .o_menu_systray button,
- .o_navbar_breadcrumbs,
- .o_main_navbar button,
- .o_menu_toggle {
+ .o_menu_systray button{
color: %(color_navbar_text)s !important;
&:hover, &:focus, &:active, &:focus:active {
background-color: %(color_navbar_bg_hover)s !important;
diff --git a/web_company_color/readme/CONTRIBUTORS.md b/web_company_color/readme/CONTRIBUTORS.md
index c66d22568de5..56447aa857e7 100644
--- a/web_company_color/readme/CONTRIBUTORS.md
+++ b/web_company_color/readme/CONTRIBUTORS.md
@@ -8,3 +8,5 @@
- Jairo Llopis
- Alexandre Díaz
- Carlos Roca
+- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
+ - Bhavesh Heliconia
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index 8545f0ec29b1..d7fb5a5b031c 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -372,9 +372,9 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:75f2396aade33370837fa8dc343dfb818e4b777b8115331fed547449727181f5
+!! source digest: sha256:622d249810675797d351ceaaa800f9df89d92067ce131c14087b0b92fbf78283
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
This module change navbar colors based in the company logo colors.
Table of contents
@@ -406,7 +406,7 @@
Bugs are tracked on GitHub Issues .
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-feedback .
+
feedback .
Do not contact contributors directly about support or help with technical issues.
@@ -443,7 +447,7 @@
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-
This module is part of the OCA/web project on GitHub.
+
This module is part of the OCA/web project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute .
From fd06d572eaa4778defa3481008a72008d3552f96 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Wed, 7 Oct 2026 06:17:27 +0000
Subject: [PATCH 63/69] [UPD] Update web_company_color.pot
---
web_company_color/i18n/web_company_color.pot | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/web_company_color/i18n/web_company_color.pot b/web_company_color/i18n/web_company_color.pot
index 0edc979260f1..1a473c7f5d74 100644
--- a/web_company_color/i18n/web_company_color.pot
+++ b/web_company_color/i18n/web_company_color.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 18.0\n"
+"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -61,6 +61,18 @@ msgstr ""
msgid "Compute colors from logo"
msgstr ""
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__display_name
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: web_company_color
+#: model:ir.model.fields,field_description:web_company_color.field_ir_qweb__id
+#: model:ir.model.fields,field_description:web_company_color.field_res_company__id
+msgid "ID"
+msgstr ""
+
#. module: web_company_color
#: model:ir.model.fields,field_description:web_company_color.field_res_company__color_link_text
msgid "Link Text Color"
From d885629a473f699a0715517b49247524fabf7036 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 7 Oct 2026 06:23:02 +0000
Subject: [PATCH 64/69] [BOT] post-merge updates
---
README.md | 1 +
setup/_metapackage/pyproject.toml | 3 ++-
web_company_color/README.rst | 2 +-
web_company_color/static/description/index.html | 4 ++--
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 1e2b05cb8955..f28f0bf5d832 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,7 @@ addon | version | maintainers | summary
--- | --- | --- | ---
[web_calendar_slot_duration](web_calendar_slot_duration/) | 19.0.1.0.0 | | Customizable calendar slot durations
[web_chatter_position](web_chatter_position/) | 19.0.1.0.0 | | Add an option to change the chatter position
+[web_company_color](web_company_color/) | 19.0.1.0.0 | | Web Company Color
[web_company_context_highlight](web_company_context_highlight/) | 19.0.1.0.0 | | Highlight the company switcher when multiple companies are selected
[web_dark_mode](web_dark_mode/) | 19.0.1.0.0 | | Enabled Dark Mode for the Odoo Backend
[web_date_format_numeric](web_date_format_numeric/) | 19.0.1.0.0 | | Display all date/datetime fields in numeric format
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml
index 3b235044c2f0..c676317d5f9c 100644
--- a/setup/_metapackage/pyproject.toml
+++ b/setup/_metapackage/pyproject.toml
@@ -1,9 +1,10 @@
[project]
name = "odoo-addons-oca-web"
-version = "19.0.20260922.0"
+version = "19.0.20261007.0"
dependencies = [
"odoo-addon-web_calendar_slot_duration==19.0.*",
"odoo-addon-web_chatter_position==19.0.*",
+ "odoo-addon-web_company_color==19.0.*",
"odoo-addon-web_company_context_highlight==19.0.*",
"odoo-addon-web_dark_mode==19.0.*",
"odoo-addon-web_date_format_numeric==19.0.*",
diff --git a/web_company_color/README.rst b/web_company_color/README.rst
index 9a4f52c3f62d..57e444e24caa 100644
--- a/web_company_color/README.rst
+++ b/web_company_color/README.rst
@@ -11,7 +11,7 @@ Web Company Color
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:622d249810675797d351ceaaa800f9df89d92067ce131c14087b0b92fbf78283
+ !! source digest: sha256:238dbb5fcd4a1b17f5fb8c0663c60295a2c26b9162bb189a92cb5b26de1ba1ba
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/web_company_color/static/description/index.html b/web_company_color/static/description/index.html
index d7fb5a5b031c..3b7361f161c1 100644
--- a/web_company_color/static/description/index.html
+++ b/web_company_color/static/description/index.html
@@ -3,7 +3,7 @@
-README.rst
+Web Company Color