diff --git a/app_odoo_customize/__manifest__.py b/app_odoo_customize/__manifest__.py
index f2ab035b..f1955116 100644
--- a/app_odoo_customize/__manifest__.py
+++ b/app_odoo_customize/__manifest__.py
@@ -23,17 +23,65 @@
{
'name': 'odoo 15 Customize OEM(Boost, Data reset)',
- 'version': '15.21.10.07',
+ 'version': '15.21.10.08',
'author': 'Sunpop.cn',
'category': 'Productivity',
'website': 'https://www.sunpop.cn',
'license': 'LGPL-3',
'sequence': 2,
+ 'images': ['static/description/banner.gif'],
'summary': """
- 1 click customize odoo, reset data. For quick develop. Set brand, boost, reset data, debug. Language Switcher.
+ 1 click customize odoo, reset data. For quick develop. Set brand, boost, reset data, debug. Language Switcher.
Easy Delete data.reset account chart.
- customize my odoo.
+ customize my odoo.
""",
+ 'depends': [
+ 'base_setup',
+ 'web',
+ 'mail',
+ 'iap',
+ # 'digest',
+ # when enterprise
+ # 'web_mobile'
+ ],
+ 'data': [
+ 'security/res_groups.xml',
+ 'security/ir.model.access.csv',
+ 'views/app_odoo_customize_views.xml',
+ 'views/app_theme_config_settings_views.xml',
+ 'views/res_config_settings_views.xml',
+ 'views/ir_views.xml',
+ 'views/ir_module_module_views.xml',
+ 'views/ir_translation_views.xml',
+ 'views/ir_ui_menu_views.xml',
+ 'views/ir_ui_view_views.xml',
+ 'views/ir_model_fields_views.xml',
+ 'views/ir_model_data_views.xml',
+ # data
+ 'data/ir_config_parameter_data.xml',
+ 'data/ir_module_module_data.xml',
+ # 'data/digest_template_data.xml',
+ 'data/res_company_data.xml',
+ ],
+ # 'qweb': [
+ # 'static/src/xml/*.xml',
+ # ],
+ 'assets': {
+ 'web.assets_backend': [
+ 'app_odoo_customize/static/src/scss/app.scss',
+ 'app_odoo_customize/static/src/scss/ribbon.scss',
+ 'app_odoo_customize/static/src/scss/dialog.scss',
+ 'app_odoo_customize/static/src/js/app_window_title.js',
+ 'app_odoo_customize/static/src/js/user_menu.js',
+ # 'app_odoo_customize/static/src/js/ribbon.js',
+ 'app_odoo_customize/static/src/js/dialog.js',
+ ],
+ },
+ 'pre_init_hook': 'pre_init_hook',
+ 'post_init_hook': 'post_init_hook',
+ 'installable': True,
+ 'application': True,
+ 'auto_install': True,
'description': """
App Customize Odoo (Change Title,Language,Documentation,Quick Debug)
@@ -87,7 +135,7 @@
The user can get the help document just by one click.
## 在符合odoo开源协议的前提下,去除odoo版权信息,自定义你的odoo
可完全自行设置下列 odoo 选项,让 odoo 看上去像是你的软件产品
- 支持odoo 15,14,13,12, 11, 10, 9 版本,社区版企业版通用
+ 支持odoo 15,14,13,12, 11, 10, 9 版本,社区版企业版通用
1. 删除菜单导航页脚的 Odoo 标签
2. 将弹出窗口中 "Odoo" 设置为自定义名称
3. 自定义用户菜单中的 Documentation, Support, About 的链接
@@ -119,61 +167,13 @@
29. App版本比较,快速查看可本地更新的模块
30. 一键导出翻译文件 po
31. 显示或去除 odoo 推荐
- 32. 增加修复品类及区位名的操作
- 33. 增加 Demo 的显示设置
- 34. 增加清除质检数据
- 35. 优化至odoo14适用
- 36. 可为多个模块强制更新翻译
- 37. noupdate字段的快速管理,主要针对 xml_id
- 38. 对话框可拖拽
+ 32. 增加修复品类及区位名的操作
+ 33. 增加 Demo 的显示设置
+ 34. 增加清除质检数据
+ 35. 优化至odoo14适用
+ 36. 可为多个模块强制更新翻译
+ 37. noupdate字段的快速管理,主要针对 xml_id
+ 38. 对话框可拖拽
39. 只有系统管理员可以操作快速debug
""",
- 'images': ['static/description/banner.gif'],
- 'depends': [
- 'base_setup',
- 'web',
- 'mail',
- 'iap',
- # 'digest',
- # when enterprise
- # 'web_mobile'
- ],
- 'data': [
- 'security/res_groups.xml',
- 'security/ir.model.access.csv',
- 'views/app_odoo_customize_views.xml',
- 'views/app_theme_config_settings_views.xml',
- 'views/res_config_settings_views.xml',
- 'views/ir_views.xml',
- 'views/ir_module_module_views.xml',
- 'views/ir_translation_views.xml',
- 'views/ir_ui_menu_views.xml',
- 'views/ir_ui_view_views.xml',
- 'views/ir_model_fields_views.xml',
- 'views/ir_model_data_views.xml',
- # data
- 'data/ir_config_parameter_data.xml',
- 'data/ir_module_module_data.xml',
- # 'data/digest_template_data.xml',
- 'data/res_company_data.xml',
- ],
- 'qweb': [
- 'static/src/xml/*.xml',
- ],
- 'assets': {
- 'web.assets_backend': [
- 'app_odoo_customize/static/src/scss/app.scss',
- 'app_odoo_customize/static/src/scss/ribbon.scss',
- 'app_odoo_customize/static/src/scss/dialog.scss',
- 'app_odoo_customize/static/src/js/app_window_title.js',
- 'app_odoo_customize/static/src/js/customize_user_menu.js',
- 'app_odoo_customize/static/src/js/ribbon.js',
- 'app_odoo_customize/static/src/js/dialog.js',
- ],
- },
- 'pre_init_hook': 'pre_init_hook',
- 'post_init_hook': 'post_init_hook',
- 'installable': True,
- 'application': True,
- 'auto_install': True,
}
diff --git a/app_odoo_customize/data/ir_config_parameter_data.xml b/app_odoo_customize/data/ir_config_parameter_data.xml
index 849a5a26..794b1da5 100644
--- a/app_odoo_customize/data/ir_config_parameter_data.xml
+++ b/app_odoo_customize/data/ir_config_parameter_data.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/app_odoo_customize/models/__init__.py b/app_odoo_customize/models/__init__.py
index 1c5bcbfb..3c95cea5 100644
--- a/app_odoo_customize/models/__init__.py
+++ b/app_odoo_customize/models/__init__.py
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
from . import res_config_settings
-from . import ir_ui_view
from . import base_language_install
from . import ir_module_module
from . import web_environment_ribbon_backend
+from . import ir_http
+# from . import ir_ui_view
# from . import ir_ui_menu
diff --git a/app_odoo_customize/models/ir_http.py b/app_odoo_customize/models/ir_http.py
new file mode 100644
index 00000000..ddf8a9d6
--- /dev/null
+++ b/app_odoo_customize/models/ir_http.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+
+from odoo import models
+from odoo.http import request
+
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = 'ir.http'
+
+ def session_info(self):
+ result = super(IrHttp, self).session_info()
+ config_parameter = request.env['ir.config_parameter'].sudo()
+ result['app_system_name'] = config_parameter.get_param('app_system_name', 'odooApp')
+ result['app_documentation_url'] = config_parameter.get_param('app_documentation_url')
+ result['app_documentation_dev_url'] = config_parameter.get_param('app_documentation_dev_url')
+ result['app_support_url'] = config_parameter.get_param('app_support_url')
+ result['app_account_title'] = config_parameter.get_param('app_account_title')
+ result['app_account_url'] = config_parameter.get_param('app_account_url')
+ result['app_show_documentation'] = config_parameter.get_param('app_show_documentation')
+ result['app_show_documentation_dev'] = config_parameter.get_param('app_show_documentation_dev')
+ result['app_show_support'] = config_parameter.get_param('app_show_support')
+ result['app_show_account'] = config_parameter.get_param('app_show_account')
+ result['app_show_poweredby'] = config_parameter.get_param('app_show_poweredby')
+ return result
diff --git a/app_odoo_customize/models/ir_module_module.py b/app_odoo_customize/models/ir_module_module.py
index a4f8e391..e8028b2b 100644
--- a/app_odoo_customize/models/ir_module_module.py
+++ b/app_odoo_customize/models/ir_module_module.py
@@ -46,7 +46,7 @@ class IrModule(models.Model):
})
return action
- @api.depends('name', 'state')
+ @api.depends('name', 'latest_version', 'state')
def _get_latest_version(self):
default_version = modules.adapt_version('1.0')
for module in self:
diff --git a/app_odoo_customize/models/ir_ui_view.py b/app_odoo_customize/models/ir_ui_view.py
index 632653f7..30217efd 100644
--- a/app_odoo_customize/models/ir_ui_view.py
+++ b/app_odoo_customize/models/ir_ui_view.py
@@ -9,10 +9,9 @@ _logger = logging.getLogger(__name__)
class View(models.Model):
_inherit = 'ir.ui.view'
- @api.model
- def render_template(self, template, values=None, engine='ir.qweb'):
- if template in ['web.login', 'web.webclient_bootstrap']:
- if not values:
- values = {}
- values["title"] = self.env['ir.config_parameter'].sudo().get_param("app_system_name", "odooApp")
- return super(View, self).render_template(template, values=values, engine=engine)
\ No newline at end of file
+ def _render_template(self, template, values=None, engine='ir.qweb'):
+ # if template in ['web.login', 'web.webclient_bootstrap']:
+ if not values:
+ values = {}
+ values["title"] = values["app_title"] = self.env['ir.config_parameter'].sudo().get_param("app_system_name", "odooApp")
+ return super(View, self)._render_template(template, values=values, engine=engine)
diff --git a/app_odoo_customize/models/res_config_settings.py b/app_odoo_customize/models/res_config_settings.py
index 84d1932a..98176652 100644
--- a/app_odoo_customize/models/res_config_settings.py
+++ b/app_odoo_customize/models/res_config_settings.py
@@ -3,6 +3,7 @@
import logging
from odoo import api, fields, models, _
+from odoo.exceptions import UserError, ValidationError
_logger = logging.getLogger(__name__)
diff --git a/app_odoo_customize/static/src/js/app_window_title.js b/app_odoo_customize/static/src/js/app_window_title.js
index 8e673b54..155261eb 100644
--- a/app_odoo_customize/static/src/js/app_window_title.js
+++ b/app_odoo_customize/static/src/js/app_window_title.js
@@ -1,12 +1,13 @@
-odoo.define('app_odoo_customize.app_system_name', function (require) {
-"use strict";
+/** @odoo-module **/
-var WebClient = require('web.WebClient');
-WebClient.include({
- init: function() {
+import { WebClient } from "@web/webclient/webclient";
+import { patch } from "@web/core/utils/patch";
+import { session } from "@web/session";
+
+patch(WebClient.prototype, "app_odoo_customize.WebClient", {
+ setup() {
this._super.apply(this, arguments);
- this.set('title_part', {"zopenerp": document.title});
+ const app_system_name = session.app_system_name || 'odooApp';
+ this.title.setParts({ zopenerp: app_system_name }); // zopenerp is easy to grep
}
});
-
-});
\ No newline at end of file
diff --git a/app_odoo_customize/static/src/js/dialog.js b/app_odoo_customize/static/src/js/dialog.js
index 2cc20f82..8c337eb9 100644
--- a/app_odoo_customize/static/src/js/dialog.js
+++ b/app_odoo_customize/static/src/js/dialog.js
@@ -1,17 +1,23 @@
-odoo.define('app_odoo_customize.dialog', function (require) {
-'use strict';
+/** @odoo-module **/
- var Dialog = require('web.Dialog');
+import { Dialog } from "@web/core/dialog/dialog";
+import { patch } from "@web/core/utils/patch";
+import { session } from "@web/session";
- Dialog.include({
- open: function () {
- this._super.apply(this, arguments);
- this._opened.then(function(){
- $(".modal-content").draggable({
- handle: ".modal-header"
- });
- });
- return this;
- },
- });
+patch(Dialog.prototype, "app_odoo_customize.Dialog", {
+ setup() {
+ this._super.apply(this, arguments);
+ const app_system_name = session.app_system_name || "odooApp";
+ this.title = app_system_name;
+ },
+ // mounted() {
+ // //todo: 没用,不能用 jq的处理方式
+ // this._super.apply(this, arguments);
+ // var $dl = this.__owl__.vnode ? this.__owl__.vnode.elm : null;
+ // var $ml = $dl.children[0].children[0].children[0];
+ // $ml.draggable({
+ // handle: ".modal-header"
+ // });
+ // },
});
+
diff --git a/app_odoo_customize/static/src/js/user_menu.js b/app_odoo_customize/static/src/js/user_menu.js
new file mode 100644
index 00000000..016f1c32
--- /dev/null
+++ b/app_odoo_customize/static/src/js/user_menu.js
@@ -0,0 +1,116 @@
+/** @odoo-module **/
+
+import { UserMenu } from "@web/webclient/user_menu/user_menu";
+import { routeToUrl } from "@web/core/browser/router_service";
+import { patch } from "@web/core/utils/patch";
+import { browser } from "@web/core/browser/browser";
+import { registry } from "@web/core/registry";
+import { session } from "@web/session";
+const userMenuRegistry = registry.category("user_menuitems");
+
+patch(UserMenu.prototype, "app_odoo_customize.UserMenu", {
+ setup() {
+ this._super.apply(this, arguments);
+ userMenuRegistry.remove("documentation");
+ userMenuRegistry.remove("support");
+ userMenuRegistry.remove("odoo_account");
+ userMenuRegistry.add("debug", debugItem)
+ .add("asset_asset", activateAssetsDebugging)
+ .add("leave_debug", leaveDebugMode)
+ .add("separator0", separator8)
+ .add("documentation", documentationItem)
+ .add("support", supportItem)
+ .add("odoo_account", odooAccountItem);
+ },
+ // getElements() {
+ // var ret = this._super.apply(this, arguments);
+ // return ret;
+ // },
+});
+
+function debugItem(env) {
+ const url_debug = $.param.querystring(window.location.href, 'debug=1');
+ return {
+ type: "item",
+ id: "debug",
+ description: env._t("Activate the developer mode"),
+ href: url_debug,
+ callback: () => {
+ browser.open(url_debug, "_self");
+ },
+ sequence: 5,
+ };
+}
+
+function activateAssetsDebugging(env) {
+ return {
+ type: "item",
+ description: env._t("Activate Assets Debugging"),
+ callback: () => {
+ browser.location.search = "?debug=assets";
+ },
+ sequence: 6,
+ };
+}
+
+function leaveDebugMode(env) {
+ return {
+ type: "item",
+ description: env._t("Leave the Developer Tools"),
+ callback: () => {
+ const route = env.services.router.current;
+ route.search.debug = "";
+ browser.location.href = browser.location.origin + routeToUrl(route);
+ },
+ sequence: 7,
+ };
+}
+
+function separator8() {
+ return {
+ type: "separator",
+ sequence: 8,
+ };
+}
+function documentationItem(env) {
+ const documentationURL = session.app_documentation_url;
+ return {
+ type: "item",
+ id: "documentation",
+ description: env._t("Documentation"),
+ href: documentationURL,
+ callback: () => {
+ browser.open(documentationURL, "_blank");
+ },
+ sequence: 10,
+ };
+}
+
+function supportItem(env) {
+ const url = session.app_support_url;
+ return {
+ type: "item",
+ id: "support",
+ description: env._t("Support"),
+ href: url,
+ callback: () => {
+ browser.open(url, "_blank");
+ },
+ sequence: 20,
+ };
+}
+
+function odooAccountItem(env) {
+ const app_account_title = session.app_account_title;
+ const app_account_url = session.app_account_url;
+ return {
+ type: "item",
+ id: "account",
+ description: env._t(app_account_title),
+ href: app_account_url,
+ callback: () => {
+ browser.open(app_account_url, "_blank");
+ },
+ sequence: 60,
+ };
+}
diff --git a/app_odoo_customize/static/src/xml/customize_user_menu.xml b/app_odoo_customize/static/src/xml/customize_user_menu.xml
index 8662379b..95834640 100644
--- a/app_odoo_customize/static/src/xml/customize_user_menu.xml
+++ b/app_odoo_customize/static/src/xml/customize_user_menu.xml
@@ -1,6 +1,8 @@
-
+
+
+
Activate the developer mode