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" /> - -
- + nav @@ -45,7 +45,7 @@ - + diff --git a/odex30_base/odex30_web/static/src/webclient/settings_form_view/res_config_edition.xml b/odex30_base/odex30_web/static/src/webclient/settings_form_view/res_config_edition.xml index f6d24e5..1ee612a 100644 --- a/odex30_base/odex30_web/static/src/webclient/settings_form_view/res_config_edition.xml +++ b/odex30_base/odex30_web/static/src/webclient/settings_form_view/res_config_edition.xml @@ -5,20 +5,10 @@

- Odoo (Enterprise Edition) + Odex 30

- -
Odoo Enterprise Edition License V1.0 - - - - -
Database expiration:
-
-
- diff --git a/odex30_base/odex30_web/static/src/webclient/webclient.js b/odex30_base/odex30_web/static/src/webclient/webclient.js index c0246d0..51f9912 100644 --- a/odex30_base/odex30_web/static/src/webclient/webclient.js +++ b/odex30_base/odex30_web/static/src/webclient/webclient.js @@ -2,12 +2,12 @@ import { WebClient } from "@web/webclient/webclient"; import { useService } from "@web/core/utils/hooks"; -import { OdexNavBar } from "./navbar/navbar"; +import { EnterpriseNavBar } from "./navbar/navbar"; -export class WebClientOdex extends WebClient { +export class WebClientEnterprise extends WebClient { static components = { ...WebClient.components, - NavBar: OdexNavBar, + NavBar: EnterpriseNavBar, }; setup() { super.setup();