diff --git a/odex30_base/odex30_web/__init__.py b/odex30_base/odex30_web/__init__.py
index d12004f..dc5e6b6 100644
--- a/odex30_base/odex30_web/__init__.py
+++ b/odex30_base/odex30_web/__init__.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
-from . import version
diff --git a/odex30_base/odex30_web/__manifest__.py b/odex30_base/odex30_web/__manifest__.py
index 326884b..e13b89b 100644
--- a/odex30_base/odex30_web/__manifest__.py
+++ b/odex30_base/odex30_web/__manifest__.py
@@ -1,15 +1,16 @@
+# -*- coding: utf-8 -*-
{
- 'name': 'Odex30 Web',
- 'category': 'Odex30-base',
- 'author': 'Expert Co. Ltd.',
+ 'name': 'Odex Web Client',
+ 'category': 'Hidden',
'version': '1.0',
'description': """
-Odex Web Client.
-===========================
-
-This module modifies the web addon to provide Odex design and responsiveness.
+ Web Client customizations for Odex
""",
+ 'summary': 'Web Client customizations for Odex',
+ 'author': 'Exp SA',
+ 'website': 'https://exp-sa.com',
+ 'company': 'Expert Ltd.',
'depends': ['web', 'base_setup'],
'auto_install': ['web'],
'data': [
@@ -27,7 +28,7 @@ This module modifies the web addon to provide Odex design and responsiveness.
('before', 'web/static/src/scss/bootstrap_overridden.scss', 'odex30_web/static/src/scss/bootstrap_overridden.scss'),
],
'web.assets_frontend': [
- 'odex30_web/static/src/webclient/home_menu/home_menu_background.scss',
+ 'odex30_web/static/src/webclient/home_menu/home_menu_background.scss', # used by login page
'odex30_web/static/src/webclient/navbar/navbar.scss',
],
'web.assets_backend': [
@@ -42,6 +43,7 @@ This module modifies the web addon to provide Odex design and responsiveness.
'odex30_web/static/src/views/**/*.xml',
('remove', 'odex30_web/static/src/views/pivot/**'),
+ # Don't include dark mode files in light mode
('remove', 'odex30_web/static/src/**/*.dark.scss'),
],
'web.assets_backend_lazy': [
@@ -49,37 +51,29 @@ This module modifies the web addon to provide Odex design and responsiveness.
],
'web.assets_backend_lazy_dark': [
('include', 'web.dark_mode_variables'),
+ # web._assets_backend_helpers
('before', 'odex30_web/static/src/scss/bootstrap_overridden.scss', 'odex30_web/static/src/scss/bootstrap_overridden.dark.scss'),
('after', 'web/static/lib/bootstrap/scss/_functions.scss', 'odex30_web/static/src/scss/bs_functions_overridden.dark.scss'),
],
'web.assets_web': [
('replace', 'web/static/src/main.js', 'odex30_web/static/src/main.js'),
],
+ # ========= Dark Mode =========
"web.dark_mode_variables": [
+ # web._assets_primary_variables
('before', 'odex30_web/static/src/scss/primary_variables.scss', 'odex30_web/static/src/scss/primary_variables.dark.scss'),
('before', 'odex30_web/static/src/**/*.variables.scss', 'odex30_web/static/src/**/*.variables.dark.scss'),
+ # web._assets_secondary_variables
('before', 'odex30_web/static/src/scss/secondary_variables.scss', 'odex30_web/static/src/scss/secondary_variables.dark.scss'),
],
"web.assets_web_dark": [
('include', 'web.dark_mode_variables'),
+ # web._assets_backend_helpers
('before', 'odex30_web/static/src/scss/bootstrap_overridden.scss', 'odex30_web/static/src/scss/bootstrap_overridden.dark.scss'),
('after', 'web/static/lib/bootstrap/scss/_functions.scss', 'odex30_web/static/src/scss/bs_functions_overridden.dark.scss'),
+ # assets_backend
'odex30_web/static/src/**/*.dark.scss',
],
- 'web.tests_assets': [
- 'odex30_web/static/tests/*.js',
- ],
- "web.assets_tests": [
- "odex30_web/static/tests/tours/**/*.js",
- ],
- 'web.assets_unit_tests': [
- 'odex30_web/static/tests/**/*.test.js',
- ],
- 'web.qunit_suite_tests': [
- 'odex30_web/static/tests/views/**/*.js',
- 'odex30_web/static/tests/webclient/**/*.js',
- ('remove', 'odex30_web/static/tests/**/*.test.js'),
- ],
},
- 'license': 'OEEL-1',
+ 'license': 'LGPL-3',
}
diff --git a/odex30_base/odex30_web/models/__init__.py b/odex30_base/odex30_web/models/__init__.py
index 62b8cb6..9a8cbc1 100644
--- a/odex30_base/odex30_web/models/__init__.py
+++ b/odex30_base/odex30_web/models/__init__.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import ir_http
from . import res_users_settings
diff --git a/odex30_base/odex30_web/models/ir_http.py b/odex30_base/odex30_web/models/ir_http.py
index c85021e..2e811e7 100644
--- a/odex30_base/odex30_web/models/ir_http.py
+++ b/odex30_base/odex30_web/models/ir_http.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
import json
@@ -10,10 +11,10 @@ class Http(models.AbstractModel):
@classmethod
def _post_logout(cls):
- super()._post_logout()
request.future_response.set_cookie('color_scheme', max_age=0)
def webclient_rendering_context(self):
+ """ Extend the rendering context with session info."""
return {
'session_info': self.session_info(),
}
@@ -21,17 +22,6 @@ class Http(models.AbstractModel):
def session_info(self):
ICP = self.env['ir.config_parameter'].sudo()
- if self.env.user.has_group('base.group_system'):
- warn_enterprise = 'admin'
- elif self.env.user._is_internal():
- warn_enterprise = 'user'
- else:
- warn_enterprise = False
-
result = super(Http, self).session_info()
- result['support_url'] = "https://www.odoo.com/help"
- if warn_enterprise:
- result['warning'] = warn_enterprise
- result['expiration_date'] = ICP.get_param('database.expiration_date')
- result['expiration_reason'] = ICP.get_param('database.expiration_reason')
+ result['support_url'] = "https://exp-sa.com/support_center"
return result
diff --git a/odex30_base/odex30_web/models/res_users_settings.py b/odex30_base/odex30_web/models/res_users_settings.py
index f0ebb5f..cabeab9 100644
--- a/odex30_base/odex30_web/models/res_users_settings.py
+++ b/odex30_base/odex30_web/models/res_users_settings.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from odoo import fields, models
diff --git a/odex30_base/odex30_web/static/src/core/notebook/notebook.scss b/odex30_base/odex30_web/static/src/core/notebook/notebook.scss
index 52ef717..8cf0ca9 100644
--- a/odex30_base/odex30_web/static/src/core/notebook/notebook.scss
+++ b/odex30_base/odex30_web/static/src/core/notebook/notebook.scss
@@ -1,3 +1,4 @@
+// Custom SCSS for enterprise version of notebook tabs
.o_notebook {
--notebook-link-border-color: #{$border-color};
diff --git a/odex30_base/odex30_web/static/src/main.js b/odex30_base/odex30_web/static/src/main.js
index 62f29c8..b4d4340 100644
--- a/odex30_base/odex30_web/static/src/main.js
+++ b/odex30_base/odex30_web/static/src/main.js
@@ -1,11 +1,11 @@
/** @odoo-module **/
import { startWebClient } from "@web/start";
-import { WebClientOdex } from "./webclient/webclient";
+import { WebClientEnterprise } from "./webclient/webclient";
/**
- * This file starts the webclient. In the manifest, it replaces
+ * This file starts the enterprise webclient. In the manifest, it replaces
* the community main.js to load a different webclient class
- * (WebClientOdex instead of WebClient)
+ * (WebClientEnterprise instead of WebClient)
*/
-startWebClient(WebClientOdex);
+startWebClient(WebClientEnterprise);
diff --git a/odex30_base/odex30_web/static/src/scss/bootstrap_overridden.dark.scss b/odex30_base/odex30_web/static/src/scss/bootstrap_overridden.dark.scss
index 6447ad6..bbb2ee3 100644
--- a/odex30_base/odex30_web/static/src/scss/bootstrap_overridden.dark.scss
+++ b/odex30_base/odex30_web/static/src/scss/bootstrap_overridden.dark.scss
@@ -61,7 +61,6 @@ $component-active-bg: $o-gray-300 !default;
// == Typography
$mark-bg: #ffdebc !default;
-$mark-color: shift-color($mark-bg, -75%) !default;
// == Tables
$table-bg: $o-view-background-color !default;
diff --git a/odex30_base/odex30_web/static/src/scss/secondary_variables.dark.scss b/odex30_base/odex30_web/static/src/scss/secondary_variables.dark.scss
index 1f29868..3db8566 100644
--- a/odex30_base/odex30_web/static/src/scss/secondary_variables.dark.scss
+++ b/odex30_base/odex30_web/static/src/scss/secondary_variables.dark.scss
@@ -1,5 +1,5 @@
-$o-colors-original: lighten(#000, 46.7%), #e74e4e, #f4b660, #F7CD1F, #6cedeb, #8d5482,
- #f07b50, #2C8397, #475577, #dc0457, #30C381, #9365B8 !default;
+$o-colors-original: lighten(#000, 46.7%), #f07b50, #f4b660, #F7CD1F, #6cedeb, #8d5482,
+ #e74e4e, #2C8397, #475577, #dc0457, #30C381, #9365B8 !default;
$o-colors-secondary-original: #aa4b6b, #30C381, #97743a, #F7CD1F, #4285F4, #8E24AA,
#D6145F, #173e43, #348F50, #AA3A38, #795548, #5e0231,
diff --git a/odex30_base/odex30_web/static/src/views/fields/properties/properties_field.dark.scss b/odex30_base/odex30_web/static/src/views/fields/properties/properties_field.dark.scss
index e9862c7..e45f6a1 100644
--- a/odex30_base/odex30_web/static/src/views/fields/properties/properties_field.dark.scss
+++ b/odex30_base/odex30_web/static/src/views/fields/properties/properties_field.dark.scss
@@ -1,5 +1,5 @@
.o_field_property_definition_type, .o_field_property_definition_type_menu {
- img {
+ .o_field_property_dropdown > img {
-webkit-filter: invert(100%);
filter: invert(100%);
}
@@ -11,3 +11,9 @@
}
}
}
+.o_field_property_definition_type_popover.popover {
+ .dropdown-item img {
+ -webkit-filter: invert(100%);
+ filter: invert(100%);
+ }
+}
diff --git a/odex30_base/odex30_web/static/src/views/list/list_renderer_desktop.js b/odex30_base/odex30_web/static/src/views/list/list_renderer_desktop.js
index 8ead910..e1314b1 100644
--- a/odex30_base/odex30_web/static/src/views/list/list_renderer_desktop.js
+++ b/odex30_base/odex30_web/static/src/views/list/list_renderer_desktop.js
@@ -60,9 +60,6 @@ export const patchListRendererDesktop = () => ({
// we set them to not editable too.
return false;
}
- if (action.res_model === "account.bank.statement.line") {
- return false; // bank reconciliation isn't editable
- }
return Boolean(action.res_model);
};
const onUiUpdated = () => {
diff --git a/odex30_base/odex30_web/static/src/webclient/burger_menu/burger_menu.js b/odex30_base/odex30_web/static/src/webclient/burger_menu/burger_menu.js
index 9c66e2c..206ff7f 100644
--- a/odex30_base/odex30_web/static/src/webclient/burger_menu/burger_menu.js
+++ b/odex30_base/odex30_web/static/src/webclient/burger_menu/burger_menu.js
@@ -3,7 +3,7 @@ import { BurgerMenu } from "@web/webclient/burger_menu/burger_menu";
import { useService } from "@web/core/utils/hooks";
import { registry } from "@web/core/registry";
-export class EnterpriseBurgerMenu extends BurgerMenu {
+export class OdexBurgerMenu extends BurgerMenu {
setup() {
super.setup();
this.hm = useService("home_menu");
@@ -15,7 +15,7 @@ export class EnterpriseBurgerMenu extends BurgerMenu {
}
const systrayItem = {
- Component: EnterpriseBurgerMenu,
+ Component: OdexBurgerMenu,
};
registry.category("systray").add("burger_menu", systrayItem, { sequence: 0, force: true });
diff --git a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.js b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.js
index b6f9209..90462b8 100644
--- a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.js
+++ b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.js
@@ -4,7 +4,6 @@ import { hasTouch, isIosApp, isMacOS } from "@web/core/browser/feature_detection
import { useHotkey } from "@web/core/hotkeys/hotkey_hook";
import { user } from "@web/core/user";
import { useService } from "@web/core/utils/hooks";
-import { ExpirationPanel } from "./expiration_panel";
import { useSortable } from "@web/core/utils/sortable_owl";
import {
@@ -37,7 +36,7 @@ class FooterComponent extends Component {
*/
export class HomeMenu extends Component {
static template = "odex30_web.HomeMenu";
- static components = { ExpirationPanel };
+ static components = { };
static props = {
apps: {
type: Array,
@@ -93,7 +92,6 @@ export class HomeMenu extends Component {
this.command = useService("command");
this.menus = useService("menu");
this.homeMenuService = useService("home_menu");
- this.subscription = useState(useService("enterprise_subscription"));
this.ui = useService("ui");
this.state = useState({
focusedIndex: null,
@@ -351,9 +349,7 @@ export class HomeMenu extends Component {
_onInputSearch() {
const onClose = () => {
this._focusInput();
- if (this.inputRef.el) {
- this.inputRef.el.value = "";
- }
+ this.inputRef.el.value = "";
};
const searchValue = this.compositionStart ? "/" : `/${this.inputRef.el.value.trim()}`;
this.compositionStart = false;
diff --git a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.scss b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.scss
index a147632..010e81a 100644
--- a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.scss
+++ b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.scss
@@ -1,5 +1,9 @@
.o_home_menu_background {
+ // 'Home menu background' design is shared with enterprise login
+ // screens and it's located in './home_menu_background.scss'
+ // When applied on webclient (note: we do not specify the webclient class
+ // here to avoid breaking studio custom style)
&:not(.o_home_menu_background_custom):not(.o_in_studio) .o_main_navbar {
background: transparent;
border-bottom-color: transparent;
@@ -36,8 +40,8 @@
.o_app_icon {
width: $o-home-menu-app-icon-max-width;
aspect-ratio: 1;
- padding: $o-home-menu-app-icon-padding;
- background-color: var(--AppSwitcherIcon-background, #{$o-home-menu-app-icon-background-color});
+ padding: 10px;
+ background-color: var(--AppSwitcherIcon-background, rgba(#fff, 1));
object-fit: cover;
transform-origin: center bottom;
transition: box-shadow ease-in 0.1s, transform ease-in 0.1s;
diff --git a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.variables.scss b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.variables.scss
index 18a9994..90341f2 100644
--- a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.variables.scss
+++ b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.variables.scss
@@ -1,8 +1,6 @@
$o-home-menu-font-size-base: 1rem;
$o-home-menu-container-size: 850px;
$o-home-menu-app-icon-max-width: 70px;
-$o-home-menu-app-icon-padding: 10px;
-$o-home-menu-app-icon-background-color: rgba(#fff, 1);
$o-home-menu-caption-color: $o-gray-700 !default;
$o-home-menu-caption-shadow: none !default;
diff --git a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.xml b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.xml
index 971f4a4..2c58f8a 100644
--- a/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.xml
+++ b/odex30_base/odex30_web/static/src/webclient/home_menu/home_menu.xml
@@ -10,10 +10,7 @@
t-att-aria-expanded="displayedApps.length ? 'true' : 'false'"
aria-autocomplete="list"
aria-haspopup="listbox"
- autocomplete="off"
/>
-
-