diff --git a/.gitignore b/.gitignore index a81c8ee1..559ca2e7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ dist/ downloads/ eggs/ .eggs/ -lib/ +#lib/ lib64/ parts/ sdist/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..35410cac --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..b245076c --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +__manifest__.py \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jikimo_sf.iml b/.idea/jikimo_sf.iml new file mode 100644 index 00000000..438c2779 --- /dev/null +++ b/.idea/jikimo_sf.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..a6fa933e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..74e50a18 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2f3e7869 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM jikimo-hn-docker.pkg.coding.net/jikimo_sfs/odoo-sf/odoo-sf:1.0 +USER root:root + +ADD . /app + +WORKDIR /app + +COPY ./requirements.txt /app + +RUN sed -i 's#http://deb.debian.org#http://mirrors.aliyun.com#g' /etc/apt/sources.list +# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf + +# 系统更新 +RUN apt-get update +# RUN apt-get do-release-upgrade + +# 更新python的依赖 +#RUN pip3 install --upgrade pip +RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple + +# 设置时区 +RUN rm -rf /etc/localtime +RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + +# 拷贝代码到工作目录 +COPY . /mnt/extra-addons + +# 拷贝配置文件到配置目录 +COPY ./odoo.conf /etc/odoo + +# 启动odoo +#COPY ./entrypoint.sh / \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 00000000..50ed18aa --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +# -*-coding:utf-8-*- diff --git a/code_backend_theme/.idea/code_backend_theme.iml b/code_backend_theme/.idea/code_backend_theme.iml new file mode 100644 index 00000000..d0876a78 --- /dev/null +++ b/code_backend_theme/.idea/code_backend_theme.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/code_backend_theme/.idea/inspectionProfiles/profiles_settings.xml b/code_backend_theme/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/code_backend_theme/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/code_backend_theme/.idea/modules.xml b/code_backend_theme/.idea/modules.xml new file mode 100644 index 00000000..b257b5b4 --- /dev/null +++ b/code_backend_theme/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/code_backend_theme/README.rst b/code_backend_theme/README.rst new file mode 100644 index 00000000..82f6d7d9 --- /dev/null +++ b/code_backend_theme/README.rst @@ -0,0 +1,40 @@ +Code Backend Theme +================== +* Code Backend Theme module for Odoo 16 community editions + +Installation +============ + - www.odoo.com/documentation/16.0/setup/install.html + - Install our custom addon + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html) + +Company +------- +* 'Cybrosys Techno Solutions '__ + +Credits +------- +* 'Cybrosys Techno Solutions '__ + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: ``__ + diff --git a/code_backend_theme/__init__.py b/code_backend_theme/__init__.py new file mode 100644 index 00000000..5042f465 --- /dev/null +++ b/code_backend_theme/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from .hooks import test_pre_init_hook, test_post_init_hook diff --git a/code_backend_theme/__manifest__.py b/code_backend_theme/__manifest__.py new file mode 100644 index 00000000..196dd795 --- /dev/null +++ b/code_backend_theme/__manifest__.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# + +{ + "name": "Code Backend Theme V16", + "description": """Minimalist and elegant backend theme for Odoo 16, Backend Theme, Theme""", + "summary": "Code Backend Theme V16 is an attractive theme for backend", + "category": "Themes/Backend", + "version": "16.0.1.0.2", + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + "depends": ['base', 'web', 'mail'], + "data": [ + 'views/layout.xml', + 'views/icons.xml', + # 'views/navbar.xml' + ], + 'assets': { + 'web.assets_backend': [ + 'code_backend_theme/static/src/js/chrome/myDropdown.js', + 'code_backend_theme/static/src/xml/styles.xml', + 'code_backend_theme/static/src/xml/top_bar.xml', + # 'code_backend_theme/static/src/xml/dropdown.xml', + 'code_backend_theme/static/src/xml/navbar.xml', + 'code_backend_theme/static/src/scss/theme_accent.scss', + 'code_backend_theme/static/src/scss/navigation_bar.scss', + 'code_backend_theme/static/src/scss/datetimepicker.scss', + 'code_backend_theme/static/src/scss/theme.scss', + 'code_backend_theme/static/src/scss/change.scss', + 'code_backend_theme/static/src/scss/sidebar.scss', + 'code_backend_theme/static/src/js/chrome/sidebar_menu.js', + 'code_backend_theme/static/src/js/chrome/test.js', + 'code_backend_theme/static/src/js/fields/colors.js', + + ], + 'web.assets_frontend': [ + 'code_backend_theme/static/src/scss/login.scss', + ], + + }, + 'images': [ + 'static/description/banner.png', + 'static/description/theme_screenshot.png', + ], + 'license': 'LGPL-3', + 'pre_init_hook': 'test_pre_init_hook', + 'post_init_hook': 'test_post_init_hook', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/code_backend_theme/doc/RELEASE_NOTES.md b/code_backend_theme/doc/RELEASE_NOTES.md new file mode 100644 index 00000000..0364c2d1 --- /dev/null +++ b/code_backend_theme/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 17.10.2022 +#### Version 16.0.1.0.0 +#### ADD +Initial Commit diff --git a/code_backend_theme/hooks.py b/code_backend_theme/hooks.py new file mode 100644 index 00000000..81a996b7 --- /dev/null +++ b/code_backend_theme/hooks.py @@ -0,0 +1,292 @@ +"""Hooks for Changing Menu Web_icon""" +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2021-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import base64 + +from odoo import api, SUPERUSER_ID +from odoo.modules import get_module_resource + + +def test_pre_init_hook(cr): + """pre init hook""" + + env = api.Environment(cr, SUPERUSER_ID, {}) + menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)]) + + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Contacts.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Link Tracker.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Dashboards.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Sales.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Invoicing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Invoicing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Inventory.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Purchase.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Calendar.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'CRM.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Note' or menu.name == 'Notes': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Note.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Website.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Point of Sale.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Manufacturing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Repairs.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Email Marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'SMS Marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Project.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Surveys.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Employees.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Recruitment.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Attendances.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Time Off.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Expenses.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Maintenance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Live Chat.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Lunch.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Fleet.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Timesheets.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Events.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'eLearning.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Members.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + + +def test_post_init_hook(cr, registry): + """post init hook""" + + env = api.Environment(cr, SUPERUSER_ID, {}) + menu_item = env['ir.ui.menu'].search([('parent_id', '=', False)]) + + for menu in menu_item: + if menu.name == 'Contacts': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Contacts.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Link Tracker': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Link Tracker.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Dashboards': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Dashboards.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Sales': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Sales.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Invoicing' or menu.name == 'Accounting': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Invoicing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Inventory': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Inventory.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Purchase': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Purchase.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Calendar': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Calendar.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'CRM': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'CRM.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Note': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Note.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Website': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Website.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Point of Sale': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Point of Sale.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Manufacturing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Manufacturing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Repairs': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Repairs.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Email Marketing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Email Marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'SMS Marketing': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'SMS Marketing.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Project': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Project.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Surveys': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Surveys.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Employees': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Employees.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Recruitment': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Recruitment.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Attendances': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Attendances.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Time Off': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Time Off.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Expenses': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Expenses.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Maintenance': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Maintenance.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Live Chat': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Live Chat.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Lunch': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Lunch.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Fleet': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Fleet.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Timesheets': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Timesheets.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Events': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Events.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'eLearning': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'eLearning.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) + if menu.name == 'Members': + img_path = get_module_resource( + 'code_backend_theme', 'static', 'src', 'img', 'icons', 'Members.png') + menu.write({'web_icon_data': base64.b64encode(open(img_path, "rb").read())}) diff --git a/code_backend_theme/static/description/assets/all_screens.png b/code_backend_theme/static/description/assets/all_screens.png new file mode 100644 index 00000000..dda177cb Binary files /dev/null and b/code_backend_theme/static/description/assets/all_screens.png differ diff --git a/code_backend_theme/static/description/assets/easily-access-menu.gif b/code_backend_theme/static/description/assets/easily-access-menu.gif new file mode 100644 index 00000000..08340f30 Binary files /dev/null and b/code_backend_theme/static/description/assets/easily-access-menu.gif differ diff --git a/code_backend_theme/static/description/assets/hero.png b/code_backend_theme/static/description/assets/hero.png new file mode 100644 index 00000000..e4415fd0 Binary files /dev/null and b/code_backend_theme/static/description/assets/hero.png differ diff --git a/code_backend_theme/static/description/assets/icons/check.png b/code_backend_theme/static/description/assets/icons/check.png new file mode 100644 index 00000000..c8e85f51 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/check.png differ diff --git a/code_backend_theme/static/description/assets/icons/chevron.png b/code_backend_theme/static/description/assets/icons/chevron.png new file mode 100644 index 00000000..2089293d Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/chevron.png differ diff --git a/code_backend_theme/static/description/assets/icons/cogs.png b/code_backend_theme/static/description/assets/icons/cogs.png new file mode 100644 index 00000000..95d0bad6 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/cogs.png differ diff --git a/code_backend_theme/static/description/assets/icons/consultation.png b/code_backend_theme/static/description/assets/icons/consultation.png new file mode 100644 index 00000000..8319d4ba Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/consultation.png differ diff --git a/code_backend_theme/static/description/assets/icons/ecom-black.png b/code_backend_theme/static/description/assets/icons/ecom-black.png new file mode 100644 index 00000000..a9385ff1 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/ecom-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/education-black.png b/code_backend_theme/static/description/assets/icons/education-black.png new file mode 100644 index 00000000..3eb09b27 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/education-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/hotel-black.png b/code_backend_theme/static/description/assets/icons/hotel-black.png new file mode 100644 index 00000000..130f613b Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/hotel-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/license.png b/code_backend_theme/static/description/assets/icons/license.png new file mode 100644 index 00000000..a5869797 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/license.png differ diff --git a/code_backend_theme/static/description/assets/icons/lifebuoy.png b/code_backend_theme/static/description/assets/icons/lifebuoy.png new file mode 100644 index 00000000..658d56cc Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/lifebuoy.png differ diff --git a/code_backend_theme/static/description/assets/icons/manufacturing-black.png b/code_backend_theme/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 00000000..697eb0e9 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/manufacturing-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/pos-black.png b/code_backend_theme/static/description/assets/icons/pos-black.png new file mode 100644 index 00000000..97c0f90c Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/pos-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/puzzle.png b/code_backend_theme/static/description/assets/icons/puzzle.png new file mode 100644 index 00000000..65cf854e Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/puzzle.png differ diff --git a/code_backend_theme/static/description/assets/icons/restaurant-black.png b/code_backend_theme/static/description/assets/icons/restaurant-black.png new file mode 100644 index 00000000..4a35eb93 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/restaurant-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/service-black.png b/code_backend_theme/static/description/assets/icons/service-black.png new file mode 100644 index 00000000..301ab51c Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/service-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/trading-black.png b/code_backend_theme/static/description/assets/icons/trading-black.png new file mode 100644 index 00000000..9398ba2f Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/trading-black.png differ diff --git a/code_backend_theme/static/description/assets/icons/training.png b/code_backend_theme/static/description/assets/icons/training.png new file mode 100644 index 00000000..884ca024 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/training.png differ diff --git a/code_backend_theme/static/description/assets/icons/update.png b/code_backend_theme/static/description/assets/icons/update.png new file mode 100644 index 00000000..ecbc5a01 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/update.png differ diff --git a/code_backend_theme/static/description/assets/icons/user.png b/code_backend_theme/static/description/assets/icons/user.png new file mode 100644 index 00000000..6ffb23d9 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/user.png differ diff --git a/code_backend_theme/static/description/assets/icons/wrench.png b/code_backend_theme/static/description/assets/icons/wrench.png new file mode 100644 index 00000000..6c04dea0 Binary files /dev/null and b/code_backend_theme/static/description/assets/icons/wrench.png differ diff --git a/code_backend_theme/static/description/assets/menu_focus.png b/code_backend_theme/static/description/assets/menu_focus.png new file mode 100644 index 00000000..dc7b00c8 Binary files /dev/null and b/code_backend_theme/static/description/assets/menu_focus.png differ diff --git a/code_backend_theme/static/description/assets/misc/categories.png b/code_backend_theme/static/description/assets/misc/categories.png new file mode 100644 index 00000000..bedf1e0b Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/categories.png differ diff --git a/code_backend_theme/static/description/assets/misc/check-box.png b/code_backend_theme/static/description/assets/misc/check-box.png new file mode 100644 index 00000000..42caf24b Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/check-box.png differ diff --git a/code_backend_theme/static/description/assets/misc/compass.png b/code_backend_theme/static/description/assets/misc/compass.png new file mode 100644 index 00000000..d5fed8fa Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/compass.png differ diff --git a/code_backend_theme/static/description/assets/misc/corporate.png b/code_backend_theme/static/description/assets/misc/corporate.png new file mode 100644 index 00000000..2eb13edb Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/corporate.png differ diff --git a/code_backend_theme/static/description/assets/misc/customer-support.png b/code_backend_theme/static/description/assets/misc/customer-support.png new file mode 100644 index 00000000..79efc72e Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/customer-support.png differ diff --git a/code_backend_theme/static/description/assets/misc/cybrosys-logo.png b/code_backend_theme/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 00000000..cc3cc0cc Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/cybrosys-logo.png differ diff --git a/code_backend_theme/static/description/assets/misc/features.png b/code_backend_theme/static/description/assets/misc/features.png new file mode 100644 index 00000000..b41769f7 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/features.png differ diff --git a/code_backend_theme/static/description/assets/misc/logo.png b/code_backend_theme/static/description/assets/misc/logo.png new file mode 100644 index 00000000..478462d3 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/logo.png differ diff --git a/code_backend_theme/static/description/assets/misc/pictures.png b/code_backend_theme/static/description/assets/misc/pictures.png new file mode 100644 index 00000000..56d255fe Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/pictures.png differ diff --git a/code_backend_theme/static/description/assets/misc/pie-chart.png b/code_backend_theme/static/description/assets/misc/pie-chart.png new file mode 100644 index 00000000..426e0524 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/pie-chart.png differ diff --git a/code_backend_theme/static/description/assets/misc/right-arrow.png b/code_backend_theme/static/description/assets/misc/right-arrow.png new file mode 100644 index 00000000..730984a0 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/right-arrow.png differ diff --git a/code_backend_theme/static/description/assets/misc/star.png b/code_backend_theme/static/description/assets/misc/star.png new file mode 100644 index 00000000..2eb9ab29 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/star.png differ diff --git a/code_backend_theme/static/description/assets/misc/support.png b/code_backend_theme/static/description/assets/misc/support.png new file mode 100644 index 00000000..4f18b8b8 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/support.png differ diff --git a/code_backend_theme/static/description/assets/misc/whatsapp.png b/code_backend_theme/static/description/assets/misc/whatsapp.png new file mode 100644 index 00000000..d513a535 Binary files /dev/null and b/code_backend_theme/static/description/assets/misc/whatsapp.png differ diff --git a/code_backend_theme/static/description/assets/modules/1.png b/code_backend_theme/static/description/assets/modules/1.png new file mode 100644 index 00000000..5238bdea Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/1.png differ diff --git a/code_backend_theme/static/description/assets/modules/2.png b/code_backend_theme/static/description/assets/modules/2.png new file mode 100644 index 00000000..1ae7cfe3 Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/2.png differ diff --git a/code_backend_theme/static/description/assets/modules/3.png b/code_backend_theme/static/description/assets/modules/3.png new file mode 100644 index 00000000..3c3ff1af Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/3.png differ diff --git a/code_backend_theme/static/description/assets/modules/4.png b/code_backend_theme/static/description/assets/modules/4.png new file mode 100644 index 00000000..3fae4631 Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/4.png differ diff --git a/code_backend_theme/static/description/assets/modules/5.gif b/code_backend_theme/static/description/assets/modules/5.gif new file mode 100644 index 00000000..2a5f8e65 Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/5.gif differ diff --git a/code_backend_theme/static/description/assets/modules/6.png b/code_backend_theme/static/description/assets/modules/6.png new file mode 100644 index 00000000..7f281527 Binary files /dev/null and b/code_backend_theme/static/description/assets/modules/6.png differ diff --git a/code_backend_theme/static/description/assets/resp-gif.gif b/code_backend_theme/static/description/assets/resp-gif.gif new file mode 100644 index 00000000..f6939e09 Binary files /dev/null and b/code_backend_theme/static/description/assets/resp-gif.gif differ diff --git a/code_backend_theme/static/description/assets/responsive.jpg b/code_backend_theme/static/description/assets/responsive.jpg new file mode 100644 index 00000000..06cb4e9a Binary files /dev/null and b/code_backend_theme/static/description/assets/responsive.jpg differ diff --git a/code_backend_theme/static/description/assets/screenshots/1.png b/code_backend_theme/static/description/assets/screenshots/1.png new file mode 100644 index 00000000..ae85974d Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/1.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png b/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png new file mode 100644 index 00000000..a365ac47 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/10.newlookoftabs.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/10.png b/code_backend_theme/static/description/assets/screenshots/10.png new file mode 100644 index 00000000..bbdb1f2a Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/10.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/11.png b/code_backend_theme/static/description/assets/screenshots/11.png new file mode 100644 index 00000000..9569c400 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/11.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/11.recruitment.png b/code_backend_theme/static/description/assets/screenshots/11.recruitment.png new file mode 100644 index 00000000..cf5f0a45 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/11.recruitment.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/12.png b/code_backend_theme/static/description/assets/screenshots/12.png new file mode 100644 index 00000000..2efcdb24 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/12.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png b/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png new file mode 100644 index 00000000..cd444ffc Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/12.saleskanban.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png b/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png new file mode 100644 index 00000000..3d30005f Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/13.modified kanban employee.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/13.png b/code_backend_theme/static/description/assets/screenshots/13.png new file mode 100644 index 00000000..2032c09c Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/13.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/14.png b/code_backend_theme/static/description/assets/screenshots/14.png new file mode 100644 index 00000000..72daae46 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/14.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png b/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png new file mode 100644 index 00000000..a15a09f2 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/15.sidebarwithlistview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/16grapghview.png b/code_backend_theme/static/description/assets/screenshots/16grapghview.png new file mode 100644 index 00000000..f30cacb8 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/16grapghview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png b/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png new file mode 100644 index 00000000..93001bce Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/17.attendanceview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png b/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png new file mode 100644 index 00000000..babf27bf Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/2.groupbyview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/2.png b/code_backend_theme/static/description/assets/screenshots/2.png new file mode 100644 index 00000000..ed8bf28a Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/2.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/3.png b/code_backend_theme/static/description/assets/screenshots/3.png new file mode 100644 index 00000000..82147fbc Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/3.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/3.settings page.png b/code_backend_theme/static/description/assets/screenshots/3.settings page.png new file mode 100644 index 00000000..ea62e8cd Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/3.settings page.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/4.discusspage.png b/code_backend_theme/static/description/assets/screenshots/4.discusspage.png new file mode 100644 index 00000000..c81b6bda Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/4.discusspage.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/4.png b/code_backend_theme/static/description/assets/screenshots/4.png new file mode 100644 index 00000000..593473de Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/4.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/5.png b/code_backend_theme/static/description/assets/screenshots/5.png new file mode 100644 index 00000000..9d323ce6 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/5.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png b/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png new file mode 100644 index 00000000..8305b920 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/5.productskanaban.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/6.png b/code_backend_theme/static/description/assets/screenshots/6.png new file mode 100644 index 00000000..26a82e85 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/6.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/6.purchase view.png b/code_backend_theme/static/description/assets/screenshots/6.purchase view.png new file mode 100644 index 00000000..140a74fa Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/6.purchase view.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/7.png b/code_backend_theme/static/description/assets/screenshots/7.png new file mode 100644 index 00000000..0c0816a2 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/7.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png b/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png new file mode 100644 index 00000000..1f30fcf1 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/7.productviewsmartbuttons.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/8.png b/code_backend_theme/static/description/assets/screenshots/8.png new file mode 100644 index 00000000..9e7e3a33 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/8.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/8error.png b/code_backend_theme/static/description/assets/screenshots/8error.png new file mode 100644 index 00000000..447fa018 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/8error.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/9.png b/code_backend_theme/static/description/assets/screenshots/9.png new file mode 100644 index 00000000..515cba76 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/9.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/Form view.png b/code_backend_theme/static/description/assets/screenshots/Form view.png new file mode 100644 index 00000000..45633572 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/Form view.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png b/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png new file mode 100644 index 00000000..607b257b Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/code_backend_screenshots.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png b/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png new file mode 100644 index 00000000..d6f3f0d6 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/kanabangroupview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/listview.png b/code_backend_theme/static/description/assets/screenshots/listview.png new file mode 100644 index 00000000..a8160457 Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/listview.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/login.png b/code_backend_theme/static/description/assets/screenshots/login.png new file mode 100644 index 00000000..cb6e824f Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/login.png differ diff --git a/code_backend_theme/static/description/assets/screenshots/modal.png b/code_backend_theme/static/description/assets/screenshots/modal.png new file mode 100644 index 00000000..b89e182c Binary files /dev/null and b/code_backend_theme/static/description/assets/screenshots/modal.png differ diff --git a/code_backend_theme/static/description/banner.png b/code_backend_theme/static/description/banner.png new file mode 100644 index 00000000..e62c9f37 Binary files /dev/null and b/code_backend_theme/static/description/banner.png differ diff --git a/code_backend_theme/static/description/icon.png b/code_backend_theme/static/description/icon.png new file mode 100644 index 00000000..260f9abc Binary files /dev/null and b/code_backend_theme/static/description/icon.png differ diff --git a/code_backend_theme/static/description/index.html b/code_backend_theme/static/description/index.html new file mode 100644 index 00000000..051929eb --- /dev/null +++ b/code_backend_theme/static/description/index.html @@ -0,0 +1,1108 @@ + +
+
+
+

+ Code Backend Theme +

+

+ Minimalist and Elegant Backend + Theme for Odoo 16

+
+
+ +
+
+
+ + + +
+
+
+

+ The Code Backend Theme V16 Gives You a Fully Modified View with + a Full Screen Display. + This is a Minimalist and Elegant Backend Theme for Odoo 16. + This Theme Will Change Your Old Experience to a New Experience + With Odoo. + It is a Perfect Choice for Your Odoo Backend and an Attractive + Theme for Your Odoo 16. + It will Give You a Clean Layout with a New Color Combination and + a Modified Font. It has a + Sidebar with + New App Icons and Company Logo. This Will Change Your Old + Kanban, List and Form Views to A Fully + Modified View. +

+
+
+ +
+
+
+ + + + + + +
+
+
+ +

+ Features

+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ New +
+

Fully Responsive + Layout

+
+ Now take advantage of everything your dashboard has to + offer even on the go. Our design are + now + fully responsive enabling you to view and manage + everything from the comfort of your mobile + device. Everything + has been designed in a meticulous fashion so that every + view snaps itself to fit the size of + the + device you are using, be it smartphones, tablet or any + other portables, our theme adjusts + itself + to fit the screen size. +
+ + +

Fully responsive

+
+ + + +

Fly-out hamburger menu on the left

+
+ + + +

Fits perfectly to all screen sizes

+
+ + + +

Quick access menu at the bottom in discuss

+
+ +
+
+ +
+
+ + +
+
+
+

Kanban Group View

+
+ The Code Backend Theme V16 Gives You a Fully Modified Kanban + View and Kanban Group View. + The Section Wise Separated Stages give a Pleasant Experience + And an Extraordinary Design + To Your Content Tiles Making The Tiles Look Great. + It will Give You a Clean Layout with the New Color + Combination and a Modified Font. +
+
+
+ + +

Modified Font

+
+ + + +

New Color Combination

+
+ + + +

Full Screen View

+
+
+ +
+ + +

Stages are Separated in View

+
+ + + +

Clean Layout

+
+ + + +

Buttons with New Colors

+
+
+
+
+
+ +
+
+
+ + + +
+
+
+

List View

+
+ The All new Code Backend Theme V16 Gives You The Fully + Modified List View and This Table Design + is Also Have Awesome Design and it Gives You More Beauty for + Your Odoo Backend. + It will Give You a Clean Layout with the New Color + Combination and a Modified Font. +
+
+
+ + +

Modified Table Style

+
+ + + +

New Color Combination

+
+ + + +

New Scroll Bar

+
+
+ +
+ + +

New Status Tag

+
+ + + +

New Scrollbar

+
+ + + +

Buttons with New Colors

+
+
+
+
+
+ +
+
+
+ + + +
+
+
+

Form View

+
+ Code Backend Theme Gives You The Fully Modified Form View + with a Full Screen Experience. It will + Give You a Clean Layout with the New Color Combination + and a Modified Font. +
+
+
+ + +

Modified Form Style

+
+ + + +

Full Screen Form View

+
+ + + +

New Looks for Tabs

+
+
+ +
+ + +

New Style for Required Field

+
+ + + +

New Chatter Style Under Form View

+
+ + + +

New Looks for Status Button

+
+
+
+
+
+ +
+
+
+ + + +
+
+ +
+
+

+ Overview

+
+ Code Backend Theme V16 is an Attractive Theme for Your + Odoo 16. + This Theme Will Change Improve Your Experience With + Odoo. + This is a Minimalist and Elegant Backend Theme for Odoo + 16 And Can Offer a Perfect Choice + for + Your Odoo Backend. +
+
+ + +

Modified Structure for All Type Views

+
+ + + +

New Style for Active Menus, Radio Buttons and Checkboxes

+
+ + +

New Color Combination

+
+ + + +

New Look for All Applications

+
+ + +

A Clean layout and New Font Style

+
+ + +

Sidebar with New Menu Icons

+
+ +
+ +
+
+ +
+
+
+ New +
+

+ All-New Menu Design

+ +
+ The All-New Menu Design is Main Attractive Section for + the Code Backend Theme. The Sidebar + have New Minimalist + Icons for Applications in Odoo. Also the Sidebar Have + Closing and Opening Option. + Customisable Logo Attached in Sidebar + That is Automatically Fetch Your Company Logo. +
+ +
+
+ +
+
+ + + + +
+
+
+

Easily Access Sidebar + Menu

+
+ Reveal the sidebar menu with just a click. Sidebar menu + features all the relevant links to + navigate + through the application. + Hiding the sidebar leaves more space on the main area + offering a distraction-free view that lets + you + focus on what matters the most. +
+
+
+ +
+
+
+ + + +
+
+
+ +

+ Screenshots

+
+
+ +
+
+
+
+
+ 1
+
+
Login Page
+
+
+
+ +
+
+ +
+
+
+
+
+ 2
+
+
Group By View
+
+
+
+ +
+
+ +
+
+
+
+
+ 3
+
+
Settings Page
+
+
+
+ +
+
+ +
+
+
+
+
+ 4
+
+
Discuss Page
+
+
+
+ +
+
+ +
+
+
+
+
+ 5
+
+
Product Kanban View
+
+
+
+ +
+
+ +
+
+
+
+
+ 6
+
+
Purchase List View
+
+
+
+ +
+
+ +
+
+
+
+
+ 7
+
+
Product View with Smart Buttons
+
+
+
+ +
+
+
+
+
+
+
+ 8
+
+
Modified Alert Notifications are + Placed on the Right Bottom of Display +
+
+
+
+ +
+
+ +
+
+
+
+
+ 9
+
+
Wizards and User Error Popups
+
+
+
+ +
+
+ +
+
+
+
+
+ 10
+
+
New Looks for The Tabs
+
+
+
+ +
+
+ +
+
+
+
+
+ 11
+
+
Recruitment Kanban View With + Ribbons
+
+
+
+ +
+
+
+
+
+
+
+ 12
+
+
Sales Kanban View
+
+
+
+ +
+
+ +
+
+
+
+
+ 13
+
+
Modified Kanban View for Employees + With New Designed Category Section
+
+
+
+ +
+
+ + +
+
+
+
+
+ 14
+
+
Sidebar with List View
+
+
+
+ +
+
+ + +
+
+
+
+
+ 15
+
+
Attendance Pages
+
+
+
+ +
+
+ +
+
+
+
+
+ 16
+
+
Graphs with Sidebar
+
+
+
+ +
+
+
+ + + + +
+
+
+ +

+ Our Services

+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+ +

+ Our Industries

+
+ +
+
+ +
+ Trading +
+

+ Easily + procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A + platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, + track and + schedule your operations

+
+
+
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+
+
+ +
+ Service Management +
+

+ Keep + track of + services and invoice

+
+
+
+
+ +
+ Restaurant +
+

+ Run + your bar or + restaurant methodically

+
+
+
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + + + + +
+
+
+ +

+ Need Help?

+
+
+ + + +
+ +
+
+ +
+ +
+ +
+
+ +
diff --git a/code_backend_theme/static/description/theme_screenshot.png b/code_backend_theme/static/description/theme_screenshot.png new file mode 100644 index 00000000..c4748f48 Binary files /dev/null and b/code_backend_theme/static/description/theme_screenshot.png differ diff --git a/code_backend_theme/static/src/icon/caret-down.svg b/code_backend_theme/static/src/icon/caret-down.svg new file mode 100644 index 00000000..1833ee38 --- /dev/null +++ b/code_backend_theme/static/src/icon/caret-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/code_backend_theme/static/src/img/code_logo.png b/code_backend_theme/static/src/img/code_logo.png new file mode 100644 index 00000000..124152a0 Binary files /dev/null and b/code_backend_theme/static/src/img/code_logo.png differ diff --git a/code_backend_theme/static/src/img/icons/Attendances.png b/code_backend_theme/static/src/img/icons/Attendances.png new file mode 100644 index 00000000..6f2e83d3 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Attendances.png differ diff --git a/code_backend_theme/static/src/img/icons/CRM.png b/code_backend_theme/static/src/img/icons/CRM.png new file mode 100644 index 00000000..01e32619 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/CRM.png differ diff --git a/code_backend_theme/static/src/img/icons/Calendar.png b/code_backend_theme/static/src/img/icons/Calendar.png new file mode 100644 index 00000000..bfa7e476 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Calendar.png differ diff --git a/code_backend_theme/static/src/img/icons/Contacts.png b/code_backend_theme/static/src/img/icons/Contacts.png new file mode 100644 index 00000000..5865350a Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Contacts.png differ diff --git a/code_backend_theme/static/src/img/icons/Dashboards.png b/code_backend_theme/static/src/img/icons/Dashboards.png new file mode 100644 index 00000000..0ab41966 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Dashboards.png differ diff --git a/code_backend_theme/static/src/img/icons/Email Marketing.png b/code_backend_theme/static/src/img/icons/Email Marketing.png new file mode 100644 index 00000000..66c873ab Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Email Marketing.png differ diff --git a/code_backend_theme/static/src/img/icons/Employees.png b/code_backend_theme/static/src/img/icons/Employees.png new file mode 100644 index 00000000..85aff52c Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Employees.png differ diff --git a/code_backend_theme/static/src/img/icons/Events.png b/code_backend_theme/static/src/img/icons/Events.png new file mode 100644 index 00000000..b0c5e718 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Events.png differ diff --git a/code_backend_theme/static/src/img/icons/Expenses.png b/code_backend_theme/static/src/img/icons/Expenses.png new file mode 100644 index 00000000..67406ddc Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Expenses.png differ diff --git a/code_backend_theme/static/src/img/icons/Fleet.png b/code_backend_theme/static/src/img/icons/Fleet.png new file mode 100644 index 00000000..422959bf Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Fleet.png differ diff --git a/code_backend_theme/static/src/img/icons/Inventory.png b/code_backend_theme/static/src/img/icons/Inventory.png new file mode 100644 index 00000000..5dd73dd1 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Inventory.png differ diff --git a/code_backend_theme/static/src/img/icons/Invoicing.png b/code_backend_theme/static/src/img/icons/Invoicing.png new file mode 100644 index 00000000..9be39f57 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Invoicing.png differ diff --git a/code_backend_theme/static/src/img/icons/Link Tracker.png b/code_backend_theme/static/src/img/icons/Link Tracker.png new file mode 100644 index 00000000..b468d30c Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Link Tracker.png differ diff --git a/code_backend_theme/static/src/img/icons/Live Chat.png b/code_backend_theme/static/src/img/icons/Live Chat.png new file mode 100644 index 00000000..60a44e72 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Live Chat.png differ diff --git a/code_backend_theme/static/src/img/icons/Lunch.png b/code_backend_theme/static/src/img/icons/Lunch.png new file mode 100644 index 00000000..d8a2e95b Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Lunch.png differ diff --git a/code_backend_theme/static/src/img/icons/Maintenance.png b/code_backend_theme/static/src/img/icons/Maintenance.png new file mode 100644 index 00000000..a0bb8a72 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Maintenance.png differ diff --git a/code_backend_theme/static/src/img/icons/Manufacturing.png b/code_backend_theme/static/src/img/icons/Manufacturing.png new file mode 100644 index 00000000..4b922f99 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Manufacturing.png differ diff --git a/code_backend_theme/static/src/img/icons/Members.png b/code_backend_theme/static/src/img/icons/Members.png new file mode 100644 index 00000000..c538782c Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Members.png differ diff --git a/code_backend_theme/static/src/img/icons/Note.png b/code_backend_theme/static/src/img/icons/Note.png new file mode 100644 index 00000000..329f473e Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Note.png differ diff --git a/code_backend_theme/static/src/img/icons/Point of Sale.png b/code_backend_theme/static/src/img/icons/Point of Sale.png new file mode 100644 index 00000000..bbdb5a1d Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Point of Sale.png differ diff --git a/code_backend_theme/static/src/img/icons/Project.png b/code_backend_theme/static/src/img/icons/Project.png new file mode 100644 index 00000000..c22fe19f Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Project.png differ diff --git a/code_backend_theme/static/src/img/icons/Purchase.png b/code_backend_theme/static/src/img/icons/Purchase.png new file mode 100644 index 00000000..457740d1 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Purchase.png differ diff --git a/code_backend_theme/static/src/img/icons/Recruitment.png b/code_backend_theme/static/src/img/icons/Recruitment.png new file mode 100644 index 00000000..b3a2dc76 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Recruitment.png differ diff --git a/code_backend_theme/static/src/img/icons/Repairs.png b/code_backend_theme/static/src/img/icons/Repairs.png new file mode 100644 index 00000000..0547711f Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Repairs.png differ diff --git a/code_backend_theme/static/src/img/icons/SMS Marketing.png b/code_backend_theme/static/src/img/icons/SMS Marketing.png new file mode 100644 index 00000000..6b90e20d Binary files /dev/null and b/code_backend_theme/static/src/img/icons/SMS Marketing.png differ diff --git a/code_backend_theme/static/src/img/icons/Sales.png b/code_backend_theme/static/src/img/icons/Sales.png new file mode 100644 index 00000000..6259ec78 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Sales.png differ diff --git a/code_backend_theme/static/src/img/icons/Surveys.png b/code_backend_theme/static/src/img/icons/Surveys.png new file mode 100644 index 00000000..f422f46e Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Surveys.png differ diff --git a/code_backend_theme/static/src/img/icons/Time Off.png b/code_backend_theme/static/src/img/icons/Time Off.png new file mode 100644 index 00000000..c34cde49 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Time Off.png differ diff --git a/code_backend_theme/static/src/img/icons/Timesheets.png b/code_backend_theme/static/src/img/icons/Timesheets.png new file mode 100644 index 00000000..3c552b3e Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Timesheets.png differ diff --git a/code_backend_theme/static/src/img/icons/Website.png b/code_backend_theme/static/src/img/icons/Website.png new file mode 100644 index 00000000..cd10570f Binary files /dev/null and b/code_backend_theme/static/src/img/icons/Website.png differ diff --git a/code_backend_theme/static/src/img/icons/apps.png b/code_backend_theme/static/src/img/icons/apps.png new file mode 100644 index 00000000..ce5cf33f Binary files /dev/null and b/code_backend_theme/static/src/img/icons/apps.png differ diff --git a/code_backend_theme/static/src/img/icons/close.png b/code_backend_theme/static/src/img/icons/close.png new file mode 100644 index 00000000..c6ea25fe Binary files /dev/null and b/code_backend_theme/static/src/img/icons/close.png differ diff --git a/code_backend_theme/static/src/img/icons/discuss.png b/code_backend_theme/static/src/img/icons/discuss.png new file mode 100644 index 00000000..382b72f8 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/discuss.png differ diff --git a/code_backend_theme/static/src/img/icons/eLearning.png b/code_backend_theme/static/src/img/icons/eLearning.png new file mode 100644 index 00000000..e0cd5c2a Binary files /dev/null and b/code_backend_theme/static/src/img/icons/eLearning.png differ diff --git a/code_backend_theme/static/src/img/icons/settings.png b/code_backend_theme/static/src/img/icons/settings.png new file mode 100644 index 00000000..7ff68e47 Binary files /dev/null and b/code_backend_theme/static/src/img/icons/settings.png differ diff --git a/code_backend_theme/static/src/js/chrome/myDropdown.js b/code_backend_theme/static/src/js/chrome/myDropdown.js new file mode 100644 index 00000000..89860b86 --- /dev/null +++ b/code_backend_theme/static/src/js/chrome/myDropdown.js @@ -0,0 +1,11 @@ +/** @odoo-module **/ + +import {Dropdown} from "@web/core/dropdown/dropdown" + +var {patch} = require("web.utils") + +patch(Dropdown.prototype, "Dropdown.DropdownJS", { + close() { + return this.changeStateAndNotify({open: true, groupIsOpen: true}); + } +}) \ No newline at end of file diff --git a/code_backend_theme/static/src/js/chrome/sidebar_menu.js b/code_backend_theme/static/src/js/chrome/sidebar_menu.js new file mode 100644 index 00000000..7bd42dd2 --- /dev/null +++ b/code_backend_theme/static/src/js/chrome/sidebar_menu.js @@ -0,0 +1,126 @@ +odoo.define('code_backend_theme.SidebarMenu', function (require) { + "use strict"; + //鼠标点击侧边导航栏,对应的导航选项卡的显隐 + // console.log($('.d-block').css()) + $(document).on("click", '.sidebar_menu li', function (event) { + var aA = $(this).children('.d-md-flex').children() + var aLi = $(this).parent().children() + for (var i = 0; i < aLi.length; i++) { + $(aLi[i]).children('.d-md-flex').css({'visibility': 'hidden', 'height': '0'}) + var every_aA = $(aLi[i]).children('.d-md-flex').children() + for (var j = 0; j < every_aA.length; j++) { + $(every_aA[j]).css({'display': 'none'}) + } + } + if ($(this).children('.d-md-flex').css('visibility') == 'hidden') { + for (var i = 0; i < aA.length; i++) { + $(aA[i]).css({'display': 'block'}) + } + $(this).children('.d-md-flex').css({ + 'visibility': 'visible', 'height': `auto`, + }) + } else { + $(this).children('.d-md-flex').css({'visibility': 'hidden', 'height': '0'}) + for (var i = 0; i < aA.length; i++) { + $(aA[i]).css({'display': 'none'}) + } + } + }) + + // $(document).on("mouseover", '.sidebar_menu li', function (event) { + // $('.sidebar_menu li').off() + // $(this).css({'background-color': '#fff !important'}) + // }) + // $(document).on("mouseleave", '.sidebar_menu li', function (event) { + // $(this).css({'background-color': '#ccc !important'}) + // }) + //sidebar toggle effect + $(document).on("click", "#closeSidebar", function (event) { + $("#closeSidebar").hide(); + $("#openSidebar").show(); + }); + $(document).on("click", "#openSidebar", function (event) { + $("#openSidebar").hide(); + $("#closeSidebar").show(); + }); + $(document).on("click", "#openSidebar", function (event) { + $("#sidebar_panel").css({'display': 'block'}); + $(".o_action_manager").css({'margin-left': '250px', 'transition': 'all .1s linear'}); + $(".top_heading").css({'margin-left': '250px', 'transition': 'all .1s linear', 'width': 'auto'}); + + //add class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").addClass(navbar_id); + navbar.addClass("small_nav"); + + //add class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").addClass(action_manager_id); + action_manager.addClass("sidebar_margin"); + + //add class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").addClass(top_head_id); + top_head.addClass("sidebar_margin"); + }); + $(document).on("click", "#closeSidebar", function (event) { + $("#sidebar_panel").css({'display': 'none'}); + $(".o_action_manager").css({'margin-left': '0px'}); + $(".top_heading").css({'margin-left': '0px', 'width': '100%'}); + + //remove class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").removeClass(navbar_id); + navbar.removeClass("small_nav"); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); + + $(document).on("click", ".sidebar a", function (event) { + var menu = $(".sidebar a"); + var $this = $(this); + var id = $this.data("id"); + $("header").removeClass().addClass(id); + menu.removeClass("active"); + $this.addClass("active"); + + //sidebar close on menu-item click + // $("#sidebar_panel").css({'display': 'none'}); + // $(".o_action_manager").css({'margin-left': '200px'}); + // $(".top_heading").css({'margin-left': '0px', 'width': '100%'}); + // $("#closeSidebar").hide(); + // $("#openSidebar").show(); + + //remove class in navbar + var navbar = $(".o_main_navbar"); + var navbar_id = navbar.data("id"); + $("nav").removeClass(navbar_id); + navbar.removeClass("small_nav"); + + //remove class in action-manager + var action_manager = $(".o_action_manager"); + var action_manager_id = action_manager.data("id"); + $("div").removeClass(action_manager_id); + action_manager.removeClass("sidebar_margin"); + + //remove class in top_heading + var top_head = $(".top_heading"); + var top_head_id = top_head.data("id"); + $("div").removeClass(top_head_id); + top_head.removeClass("sidebar_margin"); + }); +}); \ No newline at end of file diff --git a/code_backend_theme/static/src/js/chrome/test.js b/code_backend_theme/static/src/js/chrome/test.js new file mode 100644 index 00000000..fc776835 --- /dev/null +++ b/code_backend_theme/static/src/js/chrome/test.js @@ -0,0 +1,6 @@ +odoo.define('code_backend_theme.Sidebarmenu', function (require) { + "use strict"; + $(document).on('click','.dropdown-menu .dropdown-item',function () { + console.log(11111111111) + }) +}); \ No newline at end of file diff --git a/code_backend_theme/static/src/js/fields/colors.js b/code_backend_theme/static/src/js/fields/colors.js new file mode 100644 index 00000000..a8c587b8 --- /dev/null +++ b/code_backend_theme/static/src/js/fields/colors.js @@ -0,0 +1,10 @@ +/** @odoo-module **/ +import { getColor } from "@web/views/graph/colors"; + +var code_backend_color = ["#556ee6", "#f1b44c", "#50a5f1", "#ffbb78", "#34c38f", "#98df8a", "#d62728", + "#ff9896", "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", "#e377c2", "#f7b6d2", + "#7f7f7f", "#c7c7c7", "#bcbd22", "#dbdb8d", "#17becf", "#9edae5"]; + +for (let i=0;i div { + display: none; + padding-top: 5px !important; + padding-bottom: 5px !important; +} + +.sidebar_menu .o-dropdown { + padding-left: 25px; + padding-top: 8px; + padding-bottom: 0px; +} + +.o-dropdown button { + padding-left: 0; + color: #fff; +} + +.nav-link { + box-shadow: 0px 0px 2px #fff; +} + +.sidebar_menu li:hover .dropdown-item { + background-color: unset !important; +} + +.sidebar_menu li:hover .o-dropdown { + background-color: unset !important; + transition: .3s all; +} + +.sidebar_menu li .o-dropdown { + background-color: unset !important; + cursor: pointer; + padding-left: 53px !important; +} + +.o_menu_sections .dropdown-menu { + position: unset !important; + background-color: unset; +} + +.sidebar_menu li .o_menu_sections > a { + padding-left: 53px !important; +} + +.sidebar_menu li:hover .dropdown-menu a, +.sidebar_menu li:hover .dropdown-menu { + background-color: unset !important; +} + +.o_menu_sections .dropdown-menu .dropdown-menu_group { + color: #ccc; + background-color: unset; + padding-bottom: 0.5rem !important; + padding-left: 89px; +} + +.o_menu_sections .dropdown-menu { + width: 250px !important; + margin-left: -75px !important; + max-height: unset !important; + box-shadow: unset !important; + border: none; +} + +.o-dropdown--menu .dropdown-item.focus { + background-color: unset !important; +} + +.sidebar_menu .dropdown-menu .dropdown-item { + padding-left: 103px !important; +} + +svg { + width: 18px; + height: 18px; +} + +svg:nth-of-type(1) { + display: none; +} + +.dropdown-toggle { + width: 100% !important; + display: flex; + justify-content: space-between; +} + +//$caret-width: 80px; +// +.sidebar_menu .dropdown-toggle[aria-expanded="false"] :after { + display: inline-block; + width: 0; + height: 0; + position: absolute; + right: 5px; + top: 12px; + content: ""; + border-top: $caret-width solid; + border-right: $caret-width solid transparent; + border-left: $caret-width solid transparent; +} + +.sidebar_menu .dropdown-toggle[aria-expanded="true"]:after { + display: inline-block; + width: 0; + height: 0; + position: absolute; + right: 5px; + top: 12px; + content: ""; + border-top: 0; + border-right: $caret-width solid transparent; + border-left: $caret-width solid transparent; + border-bottom: $caret-width solid; +} + +.text-truncate { + overflow: unset !important; + text-overflow: unset !important; +} + +.o_list_controller { + width: 41px !important; +} + +.o_main_navbar .dropdown-toggle { + height: 100% !important; +} + +.MessagingMenuContainer { + display: flex; + align-items: center; +} diff --git a/code_backend_theme/static/src/scss/datetimepicker.scss b/code_backend_theme/static/src/scss/datetimepicker.scss new file mode 100644 index 00000000..9c8f3108 --- /dev/null +++ b/code_backend_theme/static/src/scss/datetimepicker.scss @@ -0,0 +1,68 @@ +/* date time picker colour changes for the theme */ +.datepicker { + .table-sm { + > thead { + > tr > .prev { + color: #fff !important; + background-color: $primary_accent !important; + &:hover{ + background-color: darken($primary_accent, 10%) !important; + } + > .fa{ + color: #fff !important; + } + } + > tr > .next { + color: #fff !important; + background-color: $primary_accent !important; + &:hover{ + background-color: darken($primary_accent, 10%) !important; + } + > .fa{ + color: #fff !important; + } + } + > tr > .picker-switch { + color: #fff !important; + background-color: $primary_accent !important; + &:hover{ + background-color: darken($primary_accent, 10%) !important; + } + } + } + > tbody > tr > td { + &.today:before { + border-bottom-color: $primary_accent !important; + } + &.active { + background-color: $primary_accent !important; + } + } + } +} +.picker-switch { + span.fa { + margin: 0; + @include transition($btn-transition); + &.primary { + background-color: $primary_accent; + color: white; + &:hover { + background-color: darken($primary_accent, 20%); + } + } + } +} + +.daterangepicker .drp-calendar .calendar-table thead tr:first-child { + color: #FFFFFF; + background-color: $primary_accent; +} + +.daterangepicker .drp-calendar .calendar-table tbody tr td:not(.off).active, .daterangepicker .drp-calendar .calendar-table tbody tr td:not(.off).active:hover { + background-color: $primary_accent; +} + +.daterangepicker .drp-calendar .calendar-table thead tr:first-child th.prev:hover, .daterangepicker .drp-calendar .calendar-table thead tr:first-child th.next:hover { + background-color: darken($primary_accent, 20%); +} \ No newline at end of file diff --git a/code_backend_theme/static/src/scss/login.scss b/code_backend_theme/static/src/scss/login.scss new file mode 100644 index 00000000..db1dd577 --- /dev/null +++ b/code_backend_theme/static/src/scss/login.scss @@ -0,0 +1,145 @@ +#wrapwrap > main { + background: #f8f8fb; +} +// .navbar { +// background: #fff !important; +// } +body { + font-family: 'Poppins', sans-serif !important; +} +body.bg-100 { + background-color: #000000 !important; +} +.card.o_database_list { + align-items: center; + max-width: 450px !important +} +.card.o_database_list .card-body { + background-color: #fff !important; + border-radius: 5px !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + width: 450px; +} +a { + color: #556ee6; + text-decoration: none; +} +a:hover { + color: #4458b8; + text-decoration: underline; +} +.alert-info { + color: #306391; + background-color: #dcedfc; + border-color: #cbe4fb; +} +.oe_login_form button.btn-link { + color: #495057; + font-weight: 500; + font-size: 14px !important; +} +.oe_login_form button.btn-link:hover { + color: #171a1c; +} + +//login button starts +.btn-primary { + color: #fff; + background-color: #556ee6; + border-color: #556ee6; +} +.btn-primary:hover { + color: #fff; + background-color: #485ec4; + border-color: #4458b8; +} +.btn-check:active+.btn-primary, +.btn-check:checked+.btn-primary, +.btn-primary.active,.btn-primary:active, +.show>.btn-primary.dropdown-toggle { + color: #fff; + background-color: #4458b8 !important; + border-color: #4053ad !important; +} +.btn-check:focus+.btn-primary, .btn-primary:focus { + color: #fff; + background-color: #485ec4 !important; + border-color: #4458b8 !important; + -webkit-box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; + box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; +} +.oe_login_form .btn { + display: inline-block; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: .47rem .75rem; + border-radius: .25rem; + -webkit-transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; +} +.btn-secondary { + color: #fff !important; + background-color: #74788d !important; + border-color: #74788d !important; +} +.btn-secondary:hover { + color: #fff !important; + background-color: #636678 !important; + border-color: #5d6071 !important; +} +.btn-secondary:active { + color: #fff; + background-color: #5d6071 !important; + border-color: #575a6a !important; +} +.btn-secondary i,.btn-secondary span { + color: #fff !important; +} +.btn-fill-secondary:focus, .btn-secondary:focus, .btn-fill-secondary.focus, .focus.btn-secondary { + box-shadow: none !important; +} +//login button ends + +//input starts +.oe_login_form input { + display: block; + width: 100%; + height: 40px !important; + padding: 10px 20px; + font-size: 13px; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da !important; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: .25rem; + -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + box-shadow: none !important; + margin-bottom:10px !important; +} +form label { + font-weight: 400 !important; +} +.oe_login_form a.btn.btn-secondary { + height: 40px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.35rem 0.75rem; +} +.oe_login_form a.btn.btn-secondary i.fa.fa-database { + margin-left: 5px; +} \ No newline at end of file diff --git a/code_backend_theme/static/src/scss/navigation_bar.scss b/code_backend_theme/static/src/scss/navigation_bar.scss new file mode 100644 index 00000000..0edd9807 --- /dev/null +++ b/code_backend_theme/static/src/scss/navigation_bar.scss @@ -0,0 +1,366 @@ +.o_form_statusbar{ + .o_statusbar_buttons{ + .btn{ + margin-right: 30px !important; + } + } +} +.o_cp_left{ +.btn{ +margin-right: 30px !important; +} +} + +.o_calendar_buttons > button > .fa{ +color: #ffffff !important; +} +.o_main_navbar, .btn-primary, .btn-primary:active, .o_searchview_facet_label { + background-color: $primary_accent !important; + color: $inverse_accent !important; +} +.o_search_panel_section_icon { + color: $primary_accent !important; +} +.btn-secondary { + border-radius: 0; + border: solid 1px $primary_accent !important; + color: $primary_accent !important; +}o_list_table +.o_list_view .o_list_table thead { + position: sticky; + top: 0; +} + +.breadcrumb-item > a, .o_menu_item > a { + color: $primary_accent !important; +} + +.fa-trash { + color: #f46a6a !important; +} + +.o_main_navbar > a:hover { + background-color: lighten($primary_accent, 10%) !important; +} + +.o_main_navbar > .o_menu_sections > li > a:hover, .o_main_navbar > .o_menu_systray > li > a:hover, .o_main_navbar > .o_menu_sections > li.show > a, .o_main_navbar > .o_menu_systray > li.show > a { + background-color: lighten($primary_accent, 10%) !important; +} + +.o_main_navbar > .o_menu_apps > li > a:hover, .o_main_navbar > .o_menu_apps > li > a:active { + background-color: lighten($primary_accent, 10%) !important; +} + +.o_main_navbar > .o_menu_apps > .dropdown.show > .dropdown-menu.show { + max-height: 100vh !important; + height: 93vh !important; +} +.o_main_navbar > .o_menu_apps > .dropdown.show > .dropdown-menu.show > a { + //border-bottom: 1px solid lighten($primary_accent, 30%); +} + +.o_mail_discuss_sidebar { + background-color: #1c2833; +} + +.dropdown-toggle:after { + background-color: lighten($primary_accent, 10%) !important; +} + +.o_external_button { + border: none !important; +} + +.o_field_x2many_list_row_add > a { + color: $primary_accent !important; +} + +.nav-item > a { + color: $primary_accent !important; +} + +.o_main_navbar > .o_menu_apps > li > a > i { + color: $inverse_accent !important; + font-size: 16px !important; +} + +.o_form_uri > span { + color: $primary_accent !important; +} + +.o_required_modifier.o_input { + background-color: $inverse_accent !important; + color: $primary_accent !important; + border-left: solid 3px #f46a6a !important; +} + +.o_input { + border: solid 1px $primary_accent !important; + color: $primary_accent !important; +} + +.o-no-caret > i, button[aria-pressed=true] { + color: $inverse_accent !important; +} + +.o_loading { + background-color: $primary_accent; +} + +.fas { + color: $inverse_accent !important; +} + +.dashboard_mainbar { + width: 100%; +} + +.a_app_menu_title { + display: none; +} + +.o_menu_apps > .dropdown.show > .dropdown-menu.show:hover .a_app_menu_title { + display: inline-block; + width: 200px; +} + +.o_required_modifier.o_input, .o_required_modifier.o_input { + background-color: $inverse_accent !important; + color: $primary_accent !important; + border-left: solid 3px #f46a6a !important; +} +.o_required_modifier .o_input, .o_required_modifier .o_input { + background-color: $inverse_accent !important; +} + + + +.dropdown-toggle:after { + background-color: #ffffff00 !important; +} + +.o_required_modifier > .o_input_dropdown > .ui-autocomplete-input { + background-color: $inverse_accent !important; + color: $primary_accent !important; + border-left: solid 3px #f46a6a !important; +} + +.o_datepicker.o_field_date.o_field_widget.o_required_modifier > input { + background-color: $inverse_accent !important; + color: $primary_accent !important; + border-left: solid 3px #f46a6a !important; +} + +.ui-state-active { + background-color: $primary_accent !important; + color: $inverse_accent !important; +} + +.oe_search_bgnd { + background-color: lighten($primary_accent, 20%) !important; + color: $inverse_accent !important; +} + +.oe_search_tab { + background-color: $primary_accent !important; + color: $inverse_accent !important; +} + +.o_horizontal_separator { + color: $primary_accent !important +} + +.o_field_widget.o_field_image .o_form_image_controls { + background-color: $primary_accent !important; +} + +.o_field_widget.o_field_image .o_form_image_controls > button { + color: $inverse_accent !important; +} + +.dropdown-item.o_app.mt0:hover , .dropdown-item.o_app.mt0:hover > .a_app_menu_title{ +background-color: $primary_accent !important; +color: $inverse_accent !important; +} + +// .o_address_country{ +// display: none !important; +// } +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::before { +background-color: $primary_accent !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::before { +background-color: $primary_accent !important; +} +.o_mail_systray_item .o_mail_systray_dropdown .o_mail_systray_dropdown_top .o_filter_button.active { +color: $primary_accent; +text-decoration: none; +} +.o_mail_user_status.o_user_online { +color: #fff !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.btn-primary.disabled::after { + border-left-color: $primary_accent; +} +.btn-link { +font-weight: 400; +color: $primary_accent !important; +text-decoration: none; +} +.o_thread_window_header { +background-color: $primary_accent !important; +} +.o_thread_window_close,.o_thread_window_expand{ +color: $inverse_accent !important; +} +.o_menu_sections, .o_menu_systray, .o_web_client > header{ +background: $primary_accent !important; +} +.fa-building-o{ +color: white !important; +} +.o_button_import, .oe_import_file{ +background: #5aa29f !important; +color: white !important; +border: solid 2px #5aa29f !important; +} +.o_button_import:hover, .oe_import_file:hover,.o_button_import:active, .oe_import_file:active{ +background: white !important; +color: #5aa29f !important; +border: solid 2px #5aa29f !important; +} +.o_form_button_save,.o_form_button_edit{ +background: #7BA94F !important; +color: white !important; +border: solid 2px #7BA94F !important; +} +.o_form_button_save:hover,.o_form_button_edit:hover,.o_form_button_save:active,.o_form_button_edit:active{ +background: white !important; +color: #7BA94F !important; +border: solid 2px #7BA94F !important; +} +.o-kanban-button-new, .o_list_button_add,.o_form_button_create{ +background: #b9408d !important; +color: white !important; +border: solid 2px #b9408d !important; +} +.o-kanban-button-new:hover, .o_list_button_add:hover,.o_form_button_create:hover,.o-kanban-button-new:active, .o_list_button_add:active,.o_form_button_create:active{ +background: white !important; +color: #b9408d !important; +border: solid 2px #b9408d !important; +} +.o_form_button_cancel,.o_import_cancel{ +background: #cf4137 !important; +color: white !important; +border: solid 2px #cf4137 !important; + +} +.o_form_button_cancel:hover,.o_import_cancel:hover,.o_form_button_cancel:active,.o_import_cancel:active{ +background: white !important; +color: #cf4137 !important; +border: solid 2px #cf4137 !important; +} +.report_button{ +border-radius: 0 !important; +border: solid 2px $primary_accent; +background: $primary_accent !important; +} +.report_button:hover,.report_button:active{ +border-radius: 0 !important; +border: solid 2px $primary_accent !important; +color: $primary_accent !important; +background: $inverse_accent !important; +} +.btn-primary{ +border-radius: 0 !important; +} +.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link{ +border: none; +border-bottom: solid; +font-weight: bold; +} +//.nav-link{ +// @include hover-focus { +// border: none; +// } +//} +.o_data_row:has(.custom-control-input:checked){ +background: blue !important; +} +.o_field_one2many{ + .o_list_view{ + .table-responsive{ + max-height:50vh; + } + } +} +thead{ +position: sticky; +position: -webkit-sticky; +top: 0; +} +.o_list_view .o_list_table tbody{ + position: sticky; + top: 30px; +} +.o_list_view{ + .o_list_table{ + thead{ + z-index:999; + } + } +} +.o_list_view .table-responsive .table{ + width: max-content !important; + min-width: 100%; + + thead + { + z-index:999; + tr:nth-child(1) th{ + position: sticky; + top: 0; + z-index: 999; + background-color: #eeeeee !important; + } + } +} +.o_list_view .o_list_table tbody{ +position:initial !important; +} +.o_list_view .table-responsive .table thead{ +z-index: 1; +} +.o_optional_columns_dropdown_toggle{ +z-index: 999; +} +.o_home_menu_background:not(.o_home_menu_background_custom) .o_main_navbar{ + max-height:100px; +} + + +.o_progressbar .o_progress .o_progressbar_complete { +background-color: #3d9bbb; +} +.o_cp_left .btn { + margin-right: 10px !important; +} + +.o_main_navbar .o_menu_sections { + flex-wrap: wrap !important; +} + +.o_section_and_note_list_view{ + width:98%; +} + +.o_list_renderer{ + margin-left: 21px; +} +.o_notebook .nav{ + background: none; +} +.o-form-buttonbox{ + margin-left:-15px; + margin-right:-15px; +} \ No newline at end of file diff --git a/code_backend_theme/static/src/scss/sidebar.scss b/code_backend_theme/static/src/scss/sidebar.scss new file mode 100644 index 00000000..0be6f744 --- /dev/null +++ b/code_backend_theme/static/src/scss/sidebar.scss @@ -0,0 +1,97 @@ +#sidebar_panel { + height: calc(100% - 0%); + position: fixed; + top: 0px; + background-color: #2a3042; + display: none; + width: 200px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.sidebar_panel .sidebar_close { + text-align: end; + display: none; + position: sticky; + height: 35px; + padding-top: 5px; + top: 0; + background: #2a3042; + z-index: 1; +} +.sidebar_panel .sidebar_close a#closeSidebar { + font-size: 18px; + margin-right: 10px; + color: #ffffff; + opacity: .3; +} +.sidebar_panel .sidebar_close a#closeSidebar img { + width: 15px; +} +.sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 20px; +} +.sidebar_panel .sidebar .sidebar_logo img { + max-width: 150px; +} + +.sidebar_panel .sidebar .sidebar_head { + padding-top: 20px; + padding-left: 15px; + color: #6a7187; + font-size: 14px; +} + +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} + +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} + +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + padding: 8px 10px 8px 25px; + color: #ffffff; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: #1e2230; + color: #fff; +} +.sidebar_panel .nav-link { + opacity: .5; + transition:.3s all; +} +.sidebar_panel .sidebar a.nav-link.active { + color: #fff !important; + opacity: 1; +} + +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 20px; + margin-right: 8px; +} \ No newline at end of file diff --git a/code_backend_theme/static/src/scss/theme.scss b/code_backend_theme/static/src/scss/theme.scss new file mode 100644 index 00000000..c1ee24b1 --- /dev/null +++ b/code_backend_theme/static/src/scss/theme.scss @@ -0,0 +1,1655 @@ +//Top Bar +@font-face { + font-family: 'Poppins' !important; + src: url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap'); +} +body { + font-family: 'Poppins', sans-serif !important; + background-color: #f8f8fb; +} +a { + color: $primary_accent; +} +a:hover { + color: $primary_hover; +} +a.btn { + height: auto !important; +} + +.o_main_navbar, .o_searchview_facet_label { + background-color: transparent !important; + color: $f_color !important; + border:1px !important; +} +.o_menu_sections, .o_menu_systray, .o_web_client > header{ + background: $bg_white !important; +} +.oe_topbar_name { + color: $f_color !important; +} +.o_main_navbar > .o_menu_apps > li > a > i { + color: $f_color !important; + font-size: 16px !important; +} +.o_main_navbar { + align-items: center; + border-bottom: 0px solid #5f5e97 !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + background-color: #fff !important; +} + +.top_heading { + display: flex; + justify-content: flex-start; + align-items: center; + width: 100%; +} +.top_heading ul { + margin-bottom: 0 !important; +} +.top_heading > a { + margin-left: 10px; + font-size: 20px; +} +.top_heading li { + list-style: none; +} + +.o-no-caret > i, button[aria-pressed="true"] { + color: $f_color !important; +} +.o_main_navbar > ul > li > a, .o_main_navbar > ul > li > label { + height: 46px; + padding: 0 5px; + color: $f_color !important; + line-height: 46px; +} +.o_main_navbar > .o_menu_sections > li > a:hover, +.o_main_navbar > .o_menu_systray > li > a:hover, +.o_main_navbar > .o_menu_sections > li.show > a, +.o_main_navbar > .o_menu_systray > li.show > a { + background-color: $bg_white !important; +} + +.topbar_icon .fa { + color: #555b6d !important; + font-size: 20px !important +} + +.o_main_navbar .o_user_menu .oe_topbar_avatar { + height: 35px; + width: 35px; +} + +.o_MessagingMenu_counter { + background-color: #556ee6; + color: #fff !important; +} +.o_mail_systray_item .o_notification_counter { + background: #556ee6 !important; +} + +.o_control_panel { + background: #f8f8fb !important; + border:none !important; +} +.o_facet_remove.oi.oi-close.btn.btn-link{ +margin-top: -10px; + margin-right: -5px !important; +} +.js_quantity.form-control.quantity.text-center{ +height:3.4rem !important; +} +.o_searchview { + border: 1px solid #ddd; + padding-left: 12px; + padding-right: 20px; + -webkit-box-shadow: none; + box-shadow: none; + border-radius: 5px; + padding-top: 6px; +} +.o_searchview .o_searchview_icon { + position: absolute; + top: 11px; + left: auto; + bottom: auto; + right: 8px; +} +.o_searchview .o_searchview_facet { + border: 1px solid #ddd; + background: #f8f8fb; + border-radius: 10px; + padding: 0 2px; + max-height:20px; +} +.o_cp_bottom_right span.o_dropdown_title { + color: #555b6d; +} +.o_cp_bottom_left .o_form_button_cancel { + margin-right: 5px !important; + padding: 6px 8px !important; + color: #fff !important; + background-color: #f46a6a !important; + border-color: #f46a6a !important; +} +.o_cp_bottom_left .o_form_button_cancel:hover { + background-color: #cf5a5a !important; + border-color: #c35555 !important; +} +.o_control_panel { + border-bottom: none important; + margin: 15px 15px 0 15px; + background-color: #ffffff !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + border-radius: 5px; +} + +.o_form_view, +.o_widget_Discuss { + background: #f8f8fb; +} +.o_form_statusbar .o_statusbar_buttons .btn { + margin-right: 15px !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):before, .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):after { + border-top: 21px solid transparent !important; + border-bottom: 17px solid transparent !important; +} +.o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):before { + right: -11px; + border-left-color: $primary_accent; +} +//Top Bar End + +// Button +.btn { + display: inline-block; + font-weight: 400 !important; + line-height: 1.5 !important; + color: #495057; + text-align: center; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 6px 15px !important; + border-radius: 4px !important; + -webkit-transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + height: 40px !important; + margin-bottom: 2px; +} +.btn-primary { + color: #fff !important; + background-color: $primary_accent !important; + border-color: $primary_accent !important; +} +.btn-primary:hover { + color: #fff !important; + background-color: $primary_hover !important; + border-color: #4458b8 !important; +} +.btn-primary:active { + color: #fff !important; + background-color: #4458b8 !important; + border-color: #4053ad !important; +} +.btn-check:focus+.btn-primary, .btn-primary:focus { + color: #fff; + background-color: #485ec4 !important; + border-color: #4458b8 !important; + -webkit-box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; + box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; +} +.btn-primary i,.btn-primary span { + color: #fff !important; +} +.btn-secondary { + color: #fff !important; + background-color: #74788d !important; + border-color: #74788d !important; +} +.btn-secondary:hover { + color: #fff !important; + background-color: #636678 !important; + border-color: #5d6071 !important; +} +.btn-secondary:active { + color: #fff; + background-color: #5d6071 !important; + border-color: #575a6a !important; +} +.btn-check:focus+.btn-secondary, .btn-secondary:focus { + color: #fff; + background-color: #636678 !important; + border-color: #5d6071 !important; + -webkit-box-shadow: 0 0 0 .15rem rgba(137,140,158,.5) !important; + box-shadow: 0 0 0 .15rem rgba(137,140,158,.5) !important; +} +.btn-secondary i,.btn-secondary span { + color: #fff !important; +} +.btn-info { + color: #fff !important; + background-color: #50a5f1 !important; + border-color: #50a5f1 !important; +} +.btn-info:hover { + color: #fff !important; + background-color: #448ccd !important; + border-color: #4084c1 !important; +} +button[name="action_cancel"], +button[name="button_cancel"], +button[special="cancel"] { + color: #fff !important; + background-color: #f46a6a !important; + border-color: #f46a6a !important; +} +button[name="action_cancel"]:hover, +button[name="button_cancel"]:hover, +button[special="cancel"]:hover { + background-color: #cf5a5a !important; + border-color: #c35555 !important; +} +button[name="action_cancel"]:active, +button[name="button_cancel"]:active, +button[special="cancel"]:active { + color: #fff !important; + background-color: #c35555 !important; + border-color: #b75050 !important; +} +button[name="action_cancel"]:focus, +button[name="button_cancel"]:focus, +button[special="cancel"]:focus { + color: #fff !important; + background-color: #cf5a5a !important; + border-color: #c35555 !important; + -webkit-box-shadow: 0 0 0 0.15rem rgba(246,128,128,.50) !important; + box-shadow: 0 0 0 0.15rem rgba(246,128,128,.50) !important; +} +button[name="update_module"] { + margin-right: 2px; +} + +.btn-warning, +button[name="action_uninstall"] { + color: #fff !important; + background-color: #f1b44c !important; + border-color: #f1b44c !important; +} +.btn-warning:hover, +button[name="action_uninstall"]:hover { + color: #fff !important; + background-color: #cd9941 !important; + border-color: #c1903d !important; +} +.btn-warning:active, +button[name="action_uninstall"]:active { + color: #fff !important; + background-color: #c1903d !important; + border-color: #b58739 !important; +} +.btn-warning:focus, +button[name="action_uninstall"]:focus { + color: #fff !important; + background-color: #cd9941 !important; + border-color: #c1903d !important; + -webkit-box-shadow: 0 0 0 0.15rem rgba(243,191,103,.50) !important; + box-shadow: 0 0 0 0.15rem rgba(243,191,1,.50) !important; +} + +.o_statusbar_status .o_arrow_button.btn-secondary { + border: solid 1px #556ee6 !important; + color: #556ee6 !important; + background-color: #fff !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary:hover:after { + border-color: #fff !important; +} +.o_statusbar_status .o_arrow_button.btn-primary { + border: solid 1px #556ee6 !important; + color: #fff !important; +} +.o_cp_bottom_right .btn-secondary { + background: #fff; + border-color: #dddddd !important; + margin-right: 5px !important; + padding : 6px 8px !important; +} +.o_cp_bottom_left .o_form_button_create { + color: #fff !important; + background-color: #74788d !important; + border-color: #74788d !important; + padding: 5px 15px !important; +} + +.o_web_settings_invite { + margin-left: 7px; + position: relative; + top: -1px; +} +.o_form_view .oe_button_box .btn.oe_stat_button { + height: 44px !important; + opacity: 1 !important; + border-radius: 0px !important; +} +.oe_module_action .btn { + height: auto !important; +} +.o_cp_buttons a.btn { + display: flex !important; + align-items: center; +} +button.fa.fa-external-link.btn.btn-secondary.o_external_button { + padding: 2px !important; + color: #74788d !important; + background: none !important; +} +.o_statusbar_status.o_field_widget.o_readonly_modifier .btn { + margin-right: 0 !important; +} +.btn-group .btn { + margin-right: 3px; +} +.o_Composer_actionButton.o-last.o-has-current-partner-avatar.o-composer-is-compact { + height: 48px !important; + border-bottom-left-radius: 0px !important; + border-top-left-radius: 0px !important; +} +.oe_right .btn { + margin-left: 2px; +} +//Button End + +//table +.table-sm th, .table-sm td { + padding: 0.5rem; +} +tr.o_data_row { + font-size: 15px; +} +.o_list_view .table-responsive .table thead tr:nth-child(1) th { + position: sticky; + top: 0; + z-index: 999; + background-color: #ffffff !important; +} +th.o_list_record_selector { + color: #495057 !important; + border-color: #eff2f7 !important; + background-color: #f8f9fa !important; +} +.table>:not(caption)>*>* { + padding: 1rem 1rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + -webkit-box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.o_list_view .o_list_table thead > tr > th:not(.o_list_record_selector).o_list_number_th { + text-align: left !important; +} +.o_list_view .o_list_table thead > tr > th:not(.o_list_record_selector) { + border-left: none !important; +} +.table thead th { + vertical-align: bottom; + border-bottom: none; +} +.table th { + border-top: 1px solid #fff !important; +} +.o_list_view .o_list_table tfoot { + background-color: #fff !important; +} +.o_list_view .table-responsive .o_list_table tfoot tr:nth-child(1) td { + background-color: #fff !important; +} +.o_list_view .o_list_table tr:focus-within, +.o_list_view .o_list_table.table-striped tr:focus-within { + background-color: #fff !important; +} +// Table End + +// Checkbox +.custom-checkbox label { + position: relative; + cursor: pointer; +} + +.custom-checkbox label:before { + content:''; + -webkit-appearance: none; + background-color: transparent; + border: 1px solid #0079bf; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05); + padding: 10px; + display: inline-block; + position: relative; + vertical-align: middle; + cursor: pointer; + margin-right: 5px; + margin-top: 0px; +} + +.custom-checkbox input:checked + label:after { + content: ''; + display: block; + position: absolute; + top: 2px; + left: 9px; + width: 6px; + height: 14px; + border: solid #0079bf; + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + +.custom-checkbox label::before { + content: ''; + -webkit--webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0px -15px 10px -12px rgba(0, 0, 0, 0.05); + padding: 10px; + display: inline-block; + position: relative; + vertical-align: middle; + cursor: pointer; + margin-right: 5px; +} +.custom-control-label::before { + position: absolute; + top: 0px !important; + left: 1px !important; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #FFFFFF; + border: 1px solid rgba(0,0,0,.25) !important; + box-shadow: none !important; + border-radius: 5 !important; + margin-top: -5px; +} +.custom-checkbox { + padding-left: 0rem !important; +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: $primary_accent; +} + +.custom-checkbox input:checked + label::after { + content: ''; + display: block; + position: absolute; + top: 1px; + left: 9px; + width: 6px; + height: 14px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} +.dropdown-item .custom-checkbox input:checked + label::after { + content: ''; + display: block; + position: absolute; + top: 1px; + left: 19px; + width: 6px; + height: 14px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #ffffff; + background-color: #556ee6; + border-color: #556ee6; +} +.custom-control.custom-checkbox .custom-control-input:not(:checked):not(:indeterminate) ~ .custom-control-label:before { + background: none; + outline: none !important; +} + +.o_list_selection_box { + display: inline-block; + padding: 0.375rem 0.75rem; + vertical-align: middle; + border: 1px solid rgba(85,110,230,.25)!important; + background-color: rgba(85,110,230,.25)!important; + color: $primary_accent !important; + border-radius: 5px; +} +.o_radio_input + .custom-control-label::before { + position: absolute !important; + top: 8.5px !important; + left: -1.5rem !important; + display: block !important; + width: 1rem !important; + height: 1rem !important; + pointer-events: none !important; + content: "" !important; + background-color: #FFFFFF !important; + border: #adb5bd solid 1px !important; +} +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background: $primary_accent !important; + border-radius: 30px; +} +// Checkbox End + +//sheet +.o_form_view .o_form_sheet_bg { + border-bottom: none; + background: #ffffff !important; + box-shadow: none !important; + border-radius: 5px; + padding: 10px; +} +.o_form_view .o_form_sheet_bg > .o_form_sheet { + min-width: 650px; + max-width: initial; + min-height: 330px; + border: 1px solid #c8c8d3; + box-shadow: none !important; + background: white; + + margin: 4.8px auto; + padding: 24px; + padding-right: 16px; + padding-left: 16px; + border-radius: 5px; +} +.o_form_view .o_form_statusbar { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: flex; + justify-content: space-between; + padding-left: 5px; + border-bottom: none !important; + background-color: white; + border-radius: 5px; +} +.o_required_modifier > .o_input_dropdown > .ui-autocomplete-input { + border-left: solid 3px #f46a6a !important; +} +.fa-building-o { + color: #555b6d !important; +} +//sheet end + +//Discuss +.o_Discuss { + padding: 15px !important; + background: #f5f5f9 !important; +} + +.o_Discuss .o_DiscussSidebar { + background-color: #ffffff !important; + color: #dee2e6 !important; + border-radius: 5px; + margin-right: 10px !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} + +.o_DiscussSidebar_item.o-active { + color: #f46a6a !important; + font-weight: 500 !important; +} +.o_DiscussSidebarItem:hover { + background: none !important; +} +.o_DiscussSidebarItem { + cursor: pointer !important; + color: #74788d !important; + line-height: 24px !important; + padding: 10px 5px !important; +} +.o_DiscussSidebarItem_activeIndicator.o-item-active { + background: none !important; +} +.o_DiscussSidebar_item.o-active .fa { + color: #f46a6a !important; +} +.o_widget_Discuss .o_Discuss_content { + border-top: none !important; + background-color: #ffffff !important; + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; +} +.o_DiscussSidebarItem_counter { + background-color: #f46a6a !important; + color: #fff !important; +} +.o_ThreadIcon_online { + color: #34c38f; +} +.o_Message_prettyBody table th { + color: $primary_accent !important; +} +.o_Message_prettyBody table thead tr td { + background-color: $primary_hover !important; +} +.o_DiscussSidebarMailbox.o-active { + background-color: #e9ecef; + color: #f46a6a !important; + font-weight: 500 !important; +} +.o_Discuss .o_DiscussSidebar { + color: #74788d !important; + line-height: 24px !important; + padding: 10px 5px !important; +} +.o_DiscussSidebarMailbox.o-starred-box .o_DiscussSidebarMailbox_counter { + border-color: #f46a6a !important; + background-color: #f46a6a !important; + color: #fff !important; +} +.o_list_buttons.d-flex button { + margin-right: 5px; +} +// Discuss End + +//Chatter @form +.o_FormRenderer_chatterContainer { + max-width: initial; + margin-top: 15px !important; + padding: 0 !important; + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_ChatterContainer { + padding: 10px; + background: #fff; + border-radius: 5px; +} +.o_Discuss .o_Message .o_Message_prettyBody p a { + background: $primary_accent !important; +} +.o_Message.o-not-discussion { + background-color: #eff2f7; + margin: 5px; + border-radius: 5px; + border-bottom: none; +} +.o_Composer { + background-color: #fff; + border-radius: 0 0 5px 5px; + border: none !important; +} +//Chatter @form Ends + +//Chatter mini starts +.o_ChatWindow { + background-color: #fff !important; + border-radius: 5px 5px 0 0 !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.25) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .25) !important; +} +.o_PartnerImStatusIcon_icon.o-offline { + color: #495057 !important; +} +.o_PartnerImStatusIcon_icon.o-online { + color: #34c38f !important; +} +.o_PartnerImStatusIcon_innerBackground { + color: white !important; +} +i.o_PartnerImStatusIcon_outerBackground.fa.fa-circle.fa-stack-1x { + color: #fff !important; +} +.o_ChatWindowHeader_item.o_ChatWindowHeader_rightArea .fa { + color: #fff !important; +} +.o_ChatWindowHeader { + background-color: #556ee6; + color: white !important; +} +//Chatter mini ends + +// Tabs Start +.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { + border: none; + border-bottom: solid; + font-weight: bold; + background: $primary_accent; + background-color: $primary_accent !important; + color: #ffffff !important; + border-radius: 5px; +} +.nav-link { + display: block; + padding: 1rem 2rem; +} +.o_form_view .o_notebook { + clear: both; + margin-top: 25px; + --notebook-margin-x: -32px; + --notebook-padding-x: 23px; +} +.nav-tabs { + border-bottom: none; +} +.nav-tabs .nav-link { + border: 1px solid #e3e3e3; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom: none !important; +} +.nav-item > a { + color: #555b6d !important; +} +.nav-link:hover, .nav-link:focus { + border: 1px solid #e9e9e9 !important; + border-bottom: none !important; +} +ul.sidebar_menu .nav-link:hover,ul.sidebar_menu .nav-link:focus { + border: none !important; + border-bottom: none !important; +} +a#closeSidebar { + margin-left: 10px; +} + +a#openSidebar { + margin-left: 10px; +} + +// TAbs End + +//font color +.o_horizontal_separator { + color: #495057 !important; +} +.btn-link { + font-weight: 400; + color: $primary_accent !important; + text-decoration: none; +} +.o_activity_view .o_record_selector { + color: #34c38f; +} +//font color ends + +//form +input { + display: block; + width: 100%; + //height: 40px !important; + //padding: 10px 20px; + font-size: 13px; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da !important; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: .25rem; + -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + box-shadow: none !important; + margin-bottom:10px !important; +} +select { + width: 100%; + height: 40px !important; + padding: 10px 20px; + font-size: 13px; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da !important; + border-radius: .25rem; + -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + box-shadow: none !important; + margin-bottom:10px !important; +} +.o_field_widget .o_input_dropdown .o_dropdown_button { + position: absolute; + top: 6px; + left: auto; + bottom: auto; + right: 9px; +} +.o_datepicker .o_datepicker_button { + position: absolute; + top: 6px; + left: auto; + bottom: auto; + right: 9px; + pointer-events: none; +} +.o_input { + border: solid 1px #ced4da !important; + color: #495057 !important; +} +.o_form_view .oe_button_box .btn.oe_stat_button > .o_stat_info .o_stat_value, +.o_form_view .oe_button_box .btn.oe_stat_button > span .o_stat_value { + color: #556ee6; +} +.o_form_view .oe_button_box .oe_stat_button .o_button_icon { + color: #556ee6; +} +//form end + +//search view +.o_searchview input.o_searchview_input { + border: none !important; + height: auto !important; + margin: 0 !important; + padding: 0px; +} +.o_base_settings .o_control_panel .o_panel .o_setting_search .searchIcon { + top: 9px; + right: 10px; +} +.o_base_settings .o_control_panel .o_panel .o_setting_search .searchInput { + padding: 10px 15px; +} +//search view end + +//settings page +.o_web_settings_invite { + margin-left: 7px; +} +.o_settings_container .o_setting_box .o_setting_right_pane { + margin-left: 32px !important; + border-left: 1px solid #dee2e6; + padding-left: 12px; +} +.o_setting_container { + background: #f8f8fb; + padding: 15px 0 0 0; +} +.o_base_settings .o_control_panel { + margin: 0; +} +.settings { + margin-left: 15px; + background-color: #ffffff !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + border-radius: 5px; +} +.settings_tab { + background-color: #ffffff !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + border-radius: 5px; +} +.o_base_settings .o_setting_container .settings_tab .selected, + .o_base_settings .o_setting_container .settings_tab .selected span { + box-shadow: none !important; + color: #f46a6a !important; + font-weight: 500 !important; + background: none !important; +} +.o_base_settings .o_setting_container .settings_tab .tab { + color: #74788d !important; +} +.o_setting_container .o_field_widget.o_field_many2one.o_with_button.oe_inline { + margin-left: 15px !important; +} +//settings page end + +//scrollbar starts +::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 3px rgba(0,0,0,.19); + border-radius: 10px; + background-color: #F5F5F5; +} +::-webkit-scrollbar { + width: 12px; + background-color: #F5F5F5; +} +::-webkit-scrollbar-thumb { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 3px rgba(0,0,0,.2); + background-color: #c9ccd6; +} +//scrollbar ends + +//common starts +.o_content { + margin: 15px; + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + background-color: #f8f8fb; +} +.o_action { + background: #f8f8fb; +} +//common ends + +//kanban_view starts +.o_kanban_view { + border-radius: 5px; + background: #fff; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_kanban_view.o_kanban_ungrouped .o_kanban_record { + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_kanban_view .o_kanban_group { + background: #fff; + border-radius: 5px; + margin-right: 10px; +} +.o_kanban_view.o_kanban_grouped { + background-color: #f8f8fb; +} +.o_kanban_view.o_kanban_grouped .o_kanban_record, .o_kanban_view.o_kanban_grouped .o_kanban_quick_create { + border-radius: 5px; + margin-bottom: 10px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_kanban_view.o_kanban_dashboard .o_kanban_record .o_kanban_card_header + .container.o_kanban_card_content .o_kanban_primary_bottom.bottom_block { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + background: rgba(85,110,230,.25) !important; +} +.o_kanban_view .o_kanban_record.o_kanban_record_has_image_fill .o_kanban_image_fill_left { + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; +} +.o_kanban_record::after { + border-bottom-left-radius: 5px; + border-top-left-radius: 5px; +} +.o_kanban_quick_create .o_form_view, +.o_kanban_quick_create .o_action, +.o_kanban_quick_create .o_content { + background: #fff; + margin: 0px; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.o_kanban_view .o_kanban_content .bg-primary { + border-radius: 5px 0 0 5px; +} +//kanban_view ends +//Canvas +canvas.chartjs-render-monitor { + width: 100% !important; + height: 100% !important; +} +//Canvas End +//Apps menu starts +.o_search_panel { + border-right: none; + background-color: #ffffff; + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.list-group-item-action { + width: 100%; + color: #74788d; + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + color: none !important; + background: none !important; +} +.o_search_panel .list-group-item header.active { + background: none !important; + color: #f46a6a !important; + font-weight: 500 !important; +} +.o_controller_with_searchpanel .o_renderer_with_searchpanel { + margin-left: 15px; +} +//Apps menu ends + +//Website app starts +.o_dashboards .o_website_dashboard { + background-color: #ffffff !important; +} +.o_dashboards .o_website_dashboard div.o_box { + box-shadow: none !important; +} +.o_inner_box { + background-color: $primary_accent !important; + border-radius: 5px; +} +.o_inner_box:hover { + background-color: $primary_hover !important; +} +//Website app ends + +//Purchase app starts +td.o_main { + background-color: $primary_accent !important; + border-radius: 5px; +} +td.o_main:hover { + background-color: $primary_hover !important; +} +.o_purchase_dashboard .table > thead > tr > td, +.o_purchase_dashboard .table tbody > tr > td { + border-radius: 5px; +} +//Purchase app ends + +//input inside colour starts +.o_searchview .o_searchview_facet .o_facet_values { + border :1px solid white; +} + +select, input { + color: #4c4c4c !important; +} +.o_required_modifier > .o_input_dropdown > .ui-autocomplete-input { + color: #4c4c4c !important; +} +.o_required_modifier.o_input, .o_required_modifier.o_input { + color: #4c4c4c !important; +} +.o_datepicker.o_field_date.o_field_widget.o_required_modifier > input { + color: #4c4c4c !important; +} +.o_field_widget.o_field_many2manytags .o_tag_color_0 { + max-height:20px; +} + +//input inside colour ends + +//welcome demo starts +.o_onboarding_container.collapse.show { + border-radius: 5px !important; + margin: 15px 15px 0px 15px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_onboarding.o_onboarding_blue, +.o_onboarding.o_onboarding_blue .o_onboarding_step_title, +.o_onboarding.o_onboarding_blue .o_onboarding_step_action, +.o_onboarding.o_onboarding_blue a.o_onboarding_all_done, +.o_onboarding.o_onboarding_blue .o_onboarding_all_done > .fa, +.o_onboarding.o_onboarding_blue .o_onboarding_btn_close { + border-radius: 5px; +} +.o_onboarding { + border-radius: 5px; +} +//welcome demo ends + +//modal starts +.modal.o_technical_modal .modal-content { + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #f6f6f6; +} +.modal.o_technical_modal .modal-content .o_form_view, +.modal.o_technical_modal .modal-content .o_content, +.modal.o_technical_modal .modal-content .o_action { + background-color: #fff !important;; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +.modal.show .modal-dialog { + display: -webkit-box; + display: -webkit-flex; + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} +.modal .o_form_view .o_group .o_field_widget { + width: 98% !important; +} +//modal ends + +//Calendar starts +.o_calendar_view { + background: #fff; +} +//Calendar ends + +//expense starts +.o_content .o_expense_container { + background: #fff; +} +//expense ends + +//lunch starts +.o_lunch_content .o_lunch_banner { + border-bottom: none !important; + background-color: #fff !important; + margin: 0 15px 10px 15px; + border-radius: 5px; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +//lunch ends + +//kiosk starts +.o_hr_attendance_kiosk_backdrop { + background-color: #f8f8fb !important; +} +.o_hr_attendance_kiosk_mode { + background-color: #fff !important; + border-radius: 0 0 5px 5px !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_hr_attendance_kiosk_mode .o_hr_attendance_user_badge { + border-radius: 5px 5px 0 0 !important; + border-top: none !important; + background: rgba(85,110,230,.25) !important; +} +.o_hr_attendance_sign_in_out_icon.fa-sign-in { + color: #fff !important; + background-color: $primary_accent !important; + border-color: $primary_accent !important; +} +.o_hr_attendance_sign_in_out_icon.fa-sign-in:hover { + color: #fff !important; + background-color: $primary_hover !important; + border-color: #4458b8 !important; +} +.o_hr_attendance_sign_in_out_icon.fa-sign-in:active { + color: #fff !important; + background-color: #4458b8 !important; + border-color: #4053ad !important; +} +.o_hr_attendance_sign_in_out_icon.fa-sign-in:focus { + color: #fff; + background-color: #485ec4 !important; + border-color: #4458b8 !important; + -webkit-box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; + box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; +} +.o_hr_attendance_kiosk_mode h3.mt0.mb0.text-muted { + color: $primary_accent !important; +} +.o_hr_attendance_button_employees div.mb16.mt16 { + margin-top: 4px !important; +} +//kiosk ends + +//timeoff starts +.o_timeoff_container { + background: #fff; +} +//timeoff ends + +//project .fa colours starts +.o_mail_activity .o_activity_color_planned { + color: #34c38f !important; +} +.o_mail_activity .o_activity_color_overdue { + color: #f46a6a !important; +} +.o_field_widget.o_priority > .o_priority_star.fa-star { + color: #f1b44c !important; +} +//project .fa colours ends + +//sale status icon starts +.bg-primary { + background-color: $primary_accent !important; +} +.bg-secondary { + background-color: $secondary_accent !important; +} +.bg-success-light { + color: #1f7556 !important; + background-color: #d6f3e9 !important; +} +.bg-info-light { + color: #306391 !important; + background-color: #dcedfc !important; +} +.bg-danger-light { + background-color: #fde1e1 !important; + color: #924040 !important; +} +.bg-warning-light { + background-color: #fcf0db !important; + color: #916c2e !important; +} +.o_field_widget.o_field_badge { + color: #464855; + background-color: #e3e4e8; +} +//sale status icon end + +//stock icon colors starts +.o_list_view .o_list_table .text-danger, +.o_list_view .o_list_table .oe_import .alert.text-error, +.oe_import .o_list_view .o_list_table .alert.text-error { + color: #f46a6a !important; +} +.text-danger { + color: #f1b44c !important; +} +.text-warning { + color: #f1b44c !important; +} +.text-error { + color: #f46a6a !important; +} +.text-success { + color: #34c38f !important; +} +//stock icon colors ends + +//badges starts +.badge-primary { + background-color: #556ee6 !important; +} +.badge-secondary { + background-color: #74788d; +} +.badge-success { + background-color: #34c38f; +} +.badge-info { + background-color: #50a5f1; +} +.badge-danger { + background-color: #f46a6a; +} +.badge-warning { + background-color: #f1b44c; +} +.badge-dark { + background-color: #343a40; +} +.bg-success { + background-color: #34c38f !important; +} +.bg-success-full { + background-color: #34c38f !important; +} +.bg-warning-full { + background-color: #f1b44c !important; +} +.bg-danger-full { + background-color: #f46a6a; +} +.o-planned { + color: #34c38f !important; +} +.o-overdue { + color: #f46a6a !important; +} +.o_progressbar_complete { + background-color: #34c38f !important; +} +//badges ends + +//alert starts +.alert-warning { + color: #916c2e; + background-color: #fcf0db; + border-color: #fbe9c9; +} +.alert-danger { + color: #924040; + background-color: #fde1e1; + border-color: #fcd2d2; +} +.alert-success { + color: #1f7556; + background-color: #d6f3e9; + border-color: #c2eddd; +} +.alert-info { + color: #306391; + background-color: #dcedfc; + border-color: #cbe4fb; +} +.toast { + border-radius: 5px !important; + color: #924040 !important; + background-color: #fde1e1 !important; + border-color: #fcd2d2 !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.toast-header { + border-bottom: 1px solid #fcd2d2 !important; + color: #924040 !important; + background-color: #fde1e1 !important; + border-color: #fcd2d2 !important; +} +.toast-body { + color: #924040 !important; + background-color: #fde1e1 !important; + border-color: #fcd2d2 !important; +} +.o_notification_manager { + top: auto !important; + bottom: 30px !important; +} +//alert ends + +//recruitment starts +div.o_boolean_toggle.custom-control.custom-checkbox > label.custom-control-label::before, +div.o_boolean_toggle.custom-control.custom-checkbox > label.custom-control-label::after { + left: 0.1rem !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > input.custom-control-input:checked + label.custom-control-label::after { + top: 1.5px !important; +} +div.o_boolean_toggle.custom-control.custom-checkbox > label.custom-control-label::after { + top: 1px; +} +.o_kanban_view.o_kanban_dashboard.o_hr_recruitment_kanban .ribbon span { + background-color: #556ee6; +} +.o_kanban_view.o_kanban_dashboard.o_hr_recruitment_kanban.o_kanban_ungrouped .o_kanban_record:not(.o_kanban_ghost) { + height: 197px; +} +//recruitment ends + +//note editor starts +.note-popover .popover .popover-body, .panel-heading.note-toolbar { + padding: 5px !important; + border-bottom: none !important; + background: rgba(85, 110, 230, 0.25) !important; + border-radius: 5px 5px 0 0 ; +} +.note-editor .note-statusbar { + border-radius: 0 0 5px 5px; +} +.wysiwyg_iframe, .note-editor { + border: 1px, bold !important; + border-radius: 5px; +} +//note editor ends + +//progress starts +.oe_kanban_content .progress .progress-bar { + background-color: #556ee6; +} +.progress-bar.bg-muted-full { + background-color: #dee2e6; +} +//progress ends + +//email marketing starts +.o_domain_node.o_domain_tree.o_domain_selector > .o_domain_debug_container { + background: rgba(85, 110, 230, 0.25); + color: #000; +} +.o_domain_node.o_domain_tree.o_domain_selector > .o_domain_debug_container > input { + background: rgba(85, 110, 230, 0.25); +} +.o_field_widget.o_field_domain.o_inline_mode.o_edit_mode > .o_field_domain_panel { + top: -18px; +} +.o_domain_node .o_domain_selector_row > .o_domain_node_control_panel { + top: 5px; +} +.o_mail_emojis_dropdown { + bottom: 50px; +} +//emal marketing ends + +// menu+ color starts +.o_main_navbar > ul > li.o_extra_menu_items.show > ul > li > a { + background-color: #74788d; +} +.o_main_navbar > ul > li.o_extra_menu_items.show > ul > li > a.dropdown-toggle { + background-color: #abadba; +} +//menu+ color ends + +//top menu bar starts +nav.o_main_navbar.small_nav { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + height: auto; +} + +ul.o_menu_systray.topbar_icon { + margin-left: auto; +} +.o_main_navbar .o_user_menu > a { + display: flex; + align-items: center; +} +.oe_topbar_name { + max-width: 300px; + margin-left: 5px; + white-space: nowrap; + overflow: hidden; +} +ul.o_menu_sections { + padding-left: 20px; +} +@media (max-width: 1371px) { + nav.o_main_navbar { + display: flex; + //flex-wrap: wrap; + justify-content: right; + height: auto; + } + ul.o_menu_systray.topbar_icon { + margin-left: auto; + } +} +@media (max-width: 575.98px) { + .o_main_navbar .o_menu_sections { + max-width: 200px; + overflow-x: auto; + flex-wrap: nowrap !important; + } + .o_search_panel { + flex: auto; + } +} +//top menu bar ends + +//datetimepicker starts +.datepicker td, +.datepicker td a, +.datepicker th, +.datepicker span { + padding: 0.5rem !important; +} +div.dropdown-menu.bootstrap-datetimepicker-widget { + width: auto !important; +} +//datetimepicker ends + +//groupby color starts +.o_list_view tbody > tr.o_group_header { + background-image: none !important; +} +.table-striped tbody tr.o_group_header:nth-of-type(odd) { + background-color: rgba(85,110,230,0.17); +} +.table-striped tbody tr.o_group_header:hover { + background-color: rgba(85,110,230,0.23); +} +//groupby color ends + +//Responsive starts +@media (max-width:992px) { + .o_action_manager.sidebar_margin { + margin: 0 !important; + } + .top_heading.sidebar_margin { + margin: 0 !important; + } + .sidebar_panel .sidebar { + position: relative; + padding-top: 0px !important; + } + .sidebar_panel .sidebar_close { + display: block !important; + } +} +@media (max-width:480px) { + ul.o_menu_apps { + padding-left: 25px; + } + .o_control_panel { + margin: 15px 10px 0 10px; + } + .o_control_panel > div { + flex-wrap: wrap; + } + .o_cp_top_left, .o_cp_top_right, + .o_cp_bottom_left, .o_cp_bottom_right { + width: 100%; + } + .o_widget_Discuss .o_Discuss.o-mobile:not(.o-adding-item) { + border: none !important; + } + html .o_web_client > .o_action_manager { + overflow: auto !important; + } + ul.o_menu_systray.topbar_icon li:nth-child(1) { + margin-left: 20px; + } + .o_main_navbar .o_user_menu { + margin-left: 20px; + } + .sidebar_panel .sidebar .sidebar_logo img { + max-width: 112px; + } + .sidebar_panel .sidebar .sidebar_logo { + padding-top: 20px; + text-align: center; + padding-bottom: 5px; + } + li.o_switch_company_menu.show .dropdown-menu.dropdown-menu-right.show { + right: auto !important; + left: 0px; + } + ul.o_menu_systray.topbar_icon .dropdown-menu.show{ + left: 0px !important; + right: auto !important; + } + ul.o_menu_systray.topbar_icon { + margin-left: 0; + } + .o_MessagingMenu_dropdownMenu.o-mobile { + top: 70px; + } + .o_control_panel .o_cp_bottom_right { + flex-wrap: wrap; + } + .o_form_view .o_form_statusbar { + flex-wrap: wrap; + } + .btn { + padding: 2px 10px !important; + height: 35px !important; + } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):before, + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button:not(:first-child):after { + border-top: 17px solid transparent !important; + border-bottom: 16px solid transparent !important; + } + .o_statusbar_status.o_field_widget.o_readonly_modifier { + width: 100%; + justify-content: flex-end; + margin-top: 5px; + } + .o_form_view .o_form_statusbar > .o_statusbar_buttons > .btn { + margin: 1px 0px 4px 0; + } + .o_form_statusbar .o_statusbar_buttons .btn { + margin-right: 5px !important; + } + .o_control_panel .o_cp_bottom_left > .o_cp_action_menus .o_dropdown_toggler_btn { + margin-right: 3px; + } + .o_form_view .o_form_sheet_bg > .o_form_sheet { + min-width: auto; + } + .nav-tabs .nav-link { + padding: 8px; + } + .modal.o_technical_modal.o_modal_full .modal-dialog .modal-content .modal-header { + background: $primary_accent; + } + .o_form_view .o_group .o_group_col_6 { + width: 100%; + } + .o_kanban_view.o_kanban_ungrouped .o_kanban_record { + flex-wrap: wrap; + } + .o_kanban_view .o_kanban_record.o_kanban_record_has_image_fill .o_kanban_image_fill_left { + border-radius: 5px; + } + .o_field_widget.o_field_image .o_form_image_controls > .fa.o_select_file_button { + background: #74788d; + } +} +//Responsive ends + +//New changes +.o_main_navbar .dropdown .dropdown-toggle, .o_main_navbar .o_menu_sections .dropdown .dropdown-toggle, +.o_main_navbar .o_menu_systray .dropdown .dropdown-toggle, .o_main_navbar .o_nav_entry, +.o_main_navbar .o_menu_sections .o_nav_entry, .o_main_navbar .o_menu_systray .o_nav_entry, +.o_main_navbar > .o_menu_sections > div, .o_main_navbar > .o_menu_sections > div > a, +.o_main_navbar .o_menu_systray > div, .o_main_navbar .o_menu_systray > div > a, +.o_main_navbar .o_menu_toggle, .o_main_navbar .o_navbar_apps_menu, .o_main_navbar .o_menu_brand { + color: $f_color !important; +} +.o_content .o_expense_purple { + color: #556ee6; +} +.row.o_recruitment_kanban_boxes .custom-checkbox input:checked + label::after { + display:none +} + +//new fix +.o_form_view .oe_button_box + .oe_title, .o_form_view .oe_button_box + .oe_avatar + .oe_title { + width: 100% !important; +} +.form-check-input { + //width: 1em; + //max-height: 1em; + box-sizing: border-box; +} +.o_facet_values { + border: none !important; +} + diff --git a/code_backend_theme/static/src/scss/theme_accent.scss b/code_backend_theme/static/src/scss/theme_accent.scss new file mode 100644 index 00000000..fd27b8ff --- /dev/null +++ b/code_backend_theme/static/src/scss/theme_accent.scss @@ -0,0 +1,9 @@ +$primary_accent: #556ee6 !default; +$secondary_accent: #334332 !default; +$inverse_accent: #ffffff !default; +$o-kanban-color-border-width: 8px; +$selected_row: #ffffff !default; +$bg_white: #ffffff !default; +$f_color: #555b6d !default; +$primary_hover: #485ec4 !default; + diff --git a/code_backend_theme/static/src/xml/navbar.xml b/code_backend_theme/static/src/xml/navbar.xml new file mode 100644 index 00000000..abe1f7bf --- /dev/null +++ b/code_backend_theme/static/src/xml/navbar.xml @@ -0,0 +1,75 @@ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
\ No newline at end of file diff --git a/code_backend_theme/static/src/xml/styles.xml b/code_backend_theme/static/src/xml/styles.xml new file mode 100644 index 00000000..224b4dec --- /dev/null +++ b/code_backend_theme/static/src/xml/styles.xml @@ -0,0 +1,21 @@ + + + + + + d-flex align-items-center + + + + + + + + + + + + + \ No newline at end of file diff --git a/code_backend_theme/static/src/xml/top_bar.xml b/code_backend_theme/static/src/xml/top_bar.xml new file mode 100644 index 00000000..571616d9 --- /dev/null +++ b/code_backend_theme/static/src/xml/top_bar.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/code_backend_theme/views/icons.xml b/code_backend_theme/views/icons.xml new file mode 100644 index 00000000..62d02652 --- /dev/null +++ b/code_backend_theme/views/icons.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/code_backend_theme/views/layout.xml b/code_backend_theme/views/layout.xml new file mode 100644 index 00000000..20f83c30 --- /dev/null +++ b/code_backend_theme/views/layout.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/fixed_header_list/.idea/.gitignore b/fixed_header_list/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/fixed_header_list/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/fixed_header_list/.idea/fixed_header_list.iml b/fixed_header_list/.idea/fixed_header_list.iml new file mode 100644 index 00000000..d0876a78 --- /dev/null +++ b/fixed_header_list/.idea/fixed_header_list.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/fixed_header_list/.idea/inspectionProfiles/profiles_settings.xml b/fixed_header_list/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/fixed_header_list/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/fixed_header_list/.idea/misc.xml b/fixed_header_list/.idea/misc.xml new file mode 100644 index 00000000..d56657ad --- /dev/null +++ b/fixed_header_list/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/fixed_header_list/.idea/modules.xml b/fixed_header_list/.idea/modules.xml new file mode 100644 index 00000000..a0464531 --- /dev/null +++ b/fixed_header_list/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/fixed_header_list/.idea/workspace.xml b/fixed_header_list/.idea/workspace.xml new file mode 100644 index 00000000..c04af466 --- /dev/null +++ b/fixed_header_list/.idea/workspace.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + 1686036004857 + + + + + + \ No newline at end of file diff --git a/fixed_header_list/__init__.py b/fixed_header_list/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/fixed_header_list/__manifest__.py b/fixed_header_list/__manifest__.py new file mode 100644 index 00000000..acf89c84 --- /dev/null +++ b/fixed_header_list/__manifest__.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Fixed Header List View', + 'version': '15.0.1.0.0', + 'sequence': 1, + 'summary': """ + Set Fix Header List, Set Fix Header Tree, Set Permanent Header List, Web Sticky Header List, Freeze Header List, + Set Fix Header, Set Permanent Header, Web Sticky Header, Freeze Header, Set Fix Header in List, Set Permanent Header in List, + Web Sticky Header in List, Freeze Header in List, Set Fix List Header, Set Permanent List Header, Web Sticky List Header, + Freeze List Header, All in one Fix Header, All in one Permanent Header, All in one Web Sticky Header List, Frozen Header Frozen, + All in one Freeze Header List, All in one Sticky Tree Header, All in one Sticky List Header, All ine One Sticky View List, + List View Manager ListView Manager, Sticky Tree View Fixed Tree View, All in one Tree View, Fix List Header Table, Fixed Table Header, + """, + 'description': "Fixed Header List View is very useful for displaying list headers within Odoo.", + 'author': 'NEWAY Solutions', + 'maintainer': 'NEWAY Solutions', + 'price': '0.0', + 'currency': 'USD', + 'website': 'https://neway-solutions.com', + 'license': 'LGPL-3', + 'images': [ + 'static/description/screenshot.gif' + ], + 'depends': [ + 'web' + ], + 'data': [ + + ], + 'assets': { + 'web.assets_backend': [ + 'fixed_header_list/static/src/scss/list.scss', + ], + }, + 'demo': [], + 'installable': True, + 'application': True, + 'auto_install': False, +} diff --git a/fixed_header_list/static/description/apps/advanced_list_view.png b/fixed_header_list/static/description/apps/advanced_list_view.png new file mode 100644 index 00000000..06f294f0 Binary files /dev/null and b/fixed_header_list/static/description/apps/advanced_list_view.png differ diff --git a/fixed_header_list/static/description/apps/beautiful_login_form.png b/fixed_header_list/static/description/apps/beautiful_login_form.png new file mode 100644 index 00000000..ff65c9e6 Binary files /dev/null and b/fixed_header_list/static/description/apps/beautiful_login_form.png differ diff --git a/fixed_header_list/static/description/apps/hierarchical_tree.png b/fixed_header_list/static/description/apps/hierarchical_tree.png new file mode 100644 index 00000000..502c4901 Binary files /dev/null and b/fixed_header_list/static/description/apps/hierarchical_tree.png differ diff --git a/fixed_header_list/static/description/apps/neway_theme.png b/fixed_header_list/static/description/apps/neway_theme.png new file mode 100644 index 00000000..ad46c676 Binary files /dev/null and b/fixed_header_list/static/description/apps/neway_theme.png differ diff --git a/fixed_header_list/static/description/apps/odoo_chatter.png b/fixed_header_list/static/description/apps/odoo_chatter.png new file mode 100644 index 00000000..235984f3 Binary files /dev/null and b/fixed_header_list/static/description/apps/odoo_chatter.png differ diff --git a/fixed_header_list/static/description/apps/vanilla_theme.png b/fixed_header_list/static/description/apps/vanilla_theme.png new file mode 100644 index 00000000..0dc03c74 Binary files /dev/null and b/fixed_header_list/static/description/apps/vanilla_theme.png differ diff --git a/fixed_header_list/static/description/banner.png b/fixed_header_list/static/description/banner.png new file mode 100644 index 00000000..5745bc9b Binary files /dev/null and b/fixed_header_list/static/description/banner.png differ diff --git a/fixed_header_list/static/description/icon.png b/fixed_header_list/static/description/icon.png new file mode 100644 index 00000000..c0eb21d4 Binary files /dev/null and b/fixed_header_list/static/description/icon.png differ diff --git a/fixed_header_list/static/description/icons/apps.svg b/fixed_header_list/static/description/icons/apps.svg new file mode 100644 index 00000000..0c479a8a --- /dev/null +++ b/fixed_header_list/static/description/icons/apps.svg @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/fixed_header_list/static/description/icons/feature.svg b/fixed_header_list/static/description/icons/feature.svg new file mode 100644 index 00000000..c5d83585 --- /dev/null +++ b/fixed_header_list/static/description/icons/feature.svg @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/fixed_header_list/static/description/icons/overview.svg b/fixed_header_list/static/description/icons/overview.svg new file mode 100644 index 00000000..6d28b693 --- /dev/null +++ b/fixed_header_list/static/description/icons/overview.svg @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/fixed_header_list/static/description/icons/screenshot.svg b/fixed_header_list/static/description/icons/screenshot.svg new file mode 100644 index 00000000..8d082acb --- /dev/null +++ b/fixed_header_list/static/description/icons/screenshot.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/fixed_header_list/static/description/index.html b/fixed_header_list/static/description/index.html new file mode 100644 index 00000000..eaef5ea8 --- /dev/null +++ b/fixed_header_list/static/description/index.html @@ -0,0 +1,94 @@ + + + + + + + NEWAY Solutions + + + + + +
+
+

+ + Overview +

+

+ User can see header is freezed while scrolling in the list view. +

+ +
+
+
+
+ +
+ +
+ + + diff --git a/fixed_header_list/static/description/screenshot.gif b/fixed_header_list/static/description/screenshot.gif new file mode 100644 index 00000000..2bbbc550 Binary files /dev/null and b/fixed_header_list/static/description/screenshot.gif differ diff --git a/fixed_header_list/static/description/screenshot.png b/fixed_header_list/static/description/screenshot.png new file mode 100644 index 00000000..0147cb1a Binary files /dev/null and b/fixed_header_list/static/description/screenshot.png differ diff --git a/fixed_header_list/static/src/scss/list.scss b/fixed_header_list/static/src/scss/list.scss new file mode 100644 index 00000000..506dab8f --- /dev/null +++ b/fixed_header_list/static/src/scss/list.scss @@ -0,0 +1,16 @@ +.o_list_view .o_list_table thead { + position: sticky; + top: 0; + z-index: 100000; +} +//.o_list_view .o_list_table { +// height: 1799px !important; +//} +.table-responsive { + overflow: unset; +} +.o_form_view.o_xxl_form_view .o_form_sheet_bg > .o_form_statusbar { + position: sticky !important; + top: 0; + z-index: 100000; +} \ No newline at end of file diff --git a/jikimo_auto_backup/__init__.py b/jikimo_auto_backup/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/jikimo_auto_backup/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/jikimo_auto_backup/__manifest__.py b/jikimo_auto_backup/__manifest__.py new file mode 100644 index 00000000..487af621 --- /dev/null +++ b/jikimo_auto_backup/__manifest__.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Database auto-backup", + 'summary': 'Automated backups', + 'description': """ + The Database Auto-Backup module enables the user to make configurations for the automatic backup of the database. + Backups can be taken on the local system or on a remote server, through SFTP. + You only have to specify the hostname, port, backup location and databasename (all will be pre-filled by default with correct data. + If you want to write to an external server with SFTP you will need to provide the IP, username and password for the remote backups. + The base of this module is taken from Odoo SA V6.1 (https://www.odoo.com/apps/modules/6.0/auto_backup/) and then upgraded and heavily expanded. + This module is made and provided by Yenthe Van Ginneken (Oocademy). + Automatic backup for all such configured databases can then be scheduled as follows: + + 1) Go to Settings / Technical / Automation / Scheduled actions. + 2) Search the action 'Backup scheduler'. + 3) Set it active and choose how often you wish to take backups. + 4) If you want to write backups to a remote location you should fill in the SFTP details. + """, + 'author': "Yenthe Van Ginneken", + 'website': "http://www.odoo.yenthevg.com", + 'category': 'Administration', + 'version': '16.0.0.1', + 'installable': True, + 'license': 'LGPL-3', + + # any module necessary for this one to work correctly + 'depends': ['base'], + + # always loaded + 'data': [ + 'security/user_groups.xml', + 'security/ir.model.access.csv', + 'views/backup_view.xml', + 'data/backup_data.xml', + ], +} diff --git a/jikimo_auto_backup/data/backup_data.xml b/jikimo_auto_backup/data/backup_data.xml new file mode 100644 index 00000000..2253df9d --- /dev/null +++ b/jikimo_auto_backup/data/backup_data.xml @@ -0,0 +1,17 @@ + + + + + days + Backup scheduler + -1 + 5 + False + False + 1 + + code + model.schedule_backup() + + + diff --git a/jikimo_auto_backup/i18n/ar.po b/jikimo_auto_backup/i18n/ar.po new file mode 100644 index 00000000..b4042ad8 --- /dev/null +++ b/jikimo_auto_backup/i18n/ar.po @@ -0,0 +1,314 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auto_backup +# +# SaFi J. , 2015. +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-26 14:17+0000\n" +"PO-Revision-Date: 2015-12-13 10:46+0300\n" +"Last-Translator: SaFi J. \n" +"Language-Team: team@daleeltech.com\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + + + +#. module: auto_backup +#: code:addons/auto_backup/backup_scheduler.py:137 +#, python-format +msgid "%s" +msgstr "%s" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "المسار الكامل لحفظ النسخ الاحتياطي" + +#. module: auto_backup +#: field:db.backup,sendmailsftpfail:0 +msgid "Auto. E-mail on backup fail" +msgstr "إرسال بريد إلكتروني تلقائياً في حالة فشل النسخ الاحتياطي" + +#. module: auto_backup +#: field:db.backup,autoremove:0 +msgid "Auto. Remove Backups" +msgstr "إزالة النسخ الاحتياطية تلقائياً" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Automatic backups of the database can be scheduled as follows:" +msgstr "النسخ الاحتياطي التلقائي لقاعدة البيانات يمكن جدولته كالتالي" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "دليل النسخ الاحتياطي" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_tree +msgid "Backups" +msgstr "النسخ الاحتياطية" + +#. module: auto_backup +#: help:db.backup,daystokeepsftp:0 +msgid "Choose after how many days the backup should be deleted from the FTP server. For example:\n" +"If you fill in 5 the backups will be removed after 5 days from the FTP server." +msgstr "" +"اختر بعد كم من الأيام سيتم حذف النسخ الاحتياطي من خادم FTP مثلاً :\n إذا أدخلت " +"5 فإن النسخ الاحتياطية سيتم إزالتها من خادم FTP بعد 5 أيام." + +#. module: auto_backup +#: help:db.backup,daystokeep:0 +msgid "Choose after how many days the backup should be deleted. For example:\n" +"If you fill in 5 the backups will be removed after 5 days." +msgstr "" +"اختر بعد كم من الأيام سيتم حذف النسخ الاحتياطي مثلاً :\n إذا أدخلت 5 فإن النسخ " +"الاحتياطية سيتم إزالتها بعد 5 أيام." + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "إعدادات النسخ الإحتياطي" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Contact us!" +msgstr "اتصل بنا!" + +#. module: auto_backup +#: field:db.backup,create_uid:0 +msgid "Created by" +msgstr "تم ألإنشاء بواسطة" + +#. module: auto_backup +#: field:db.backup,create_date:0 +msgid "Created on" +msgstr "تم ألإنشاء في" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "قاعدة البيانات" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "قاعدة البيانات التي تريد جدولة النسخ الاحتياطي لها" + +#. module: auto_backup +#: field:db.backup,emailtonotify:0 +msgid "E-mail to notify" +msgstr "تنبيه البريد الإلكتروني" + +#. module: auto_backup +#: code:addons/auto_backup/backup_scheduler.py:106 +#: constraint:db.backup:0 +#, python-format +msgid "Error ! No such database exists!" +msgstr "خطأ ! لا وجود لقاعدة البيانات هذه !" + +#. module: auto_backup +#: help:db.backup,emailtonotify:0 +msgid "Fill in the e-mail where you want to be notified that the backup failed on the FTP." +msgstr "" +"ادخل عنوان البريد الإلكتروني الذي تريد تنبيهك من خلاله عند فشل النسخ " +"الاحتياطي على FTP." + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "For example: /odoo/backups/" +msgstr "مثلاً : /odoo/backups/" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Go to Settings / Technical / Automation / Scheduled Actions." +msgstr "اذهب إلى الإعدادات / التقني / ألأتمته / جدولة الإخزاءات." + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Help" +msgstr "المساعدة" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "المضيف" + +#. module: auto_backup +#: field:db.backup,id:0 +msgid "ID" +msgstr "المعرف" + +#. module: auto_backup +#: field:db.backup,sftpip:0 +msgid "IP Address SFTP Server" +msgstr "عنوان بروتوكول الأنترنت لخادم SFTP" + +#. module: auto_backup +#: help:db.backup,sendmailsftpfail:0 +msgid "If you check this option you can choose to automaticly get e-mailed when the backup to the external server failed." +msgstr "" +"إذا قمت بتأشير هذا الخيار ستستطيع اختيار استلام البريد الإلكتروني تلقائياً " +"عند فشل النسخ الاحتياطي للخادوم الخارجي." + +#. module: auto_backup +#: help:db.backup,autoremove:0 +msgid "If you check this option you can choose to automaticly remove the backup after xx days" +msgstr "" +"إذا قمت بتأشير هذا الخيار ستستطيع اختيار الإزالة التلقائية للنسخ الاحتياطي " +"بعد س من الأيام" + +#. module: auto_backup +#: help:db.backup,sftpwrite:0 +msgid "If you check this option you can specify the details needed to write to a remote server with SFTP." +msgstr "" +"إذا قمت بتأشير هذا الخيار ستستطيع تحديد التفاصيل المطلوبة للكتابة على الخادم " +"البعيد من خلال SFTP." + +#. module: auto_backup +#: field:db.backup,write_uid:0 +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: auto_backup +#: field:db.backup,write_date:0 +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Local backup configuration" +msgstr "إعدادات النسخ الاحتياطي المحلي" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Need more help?" +msgstr "هل تحتاج لمزيد من المساعدة ؟" + +#. module: auto_backup +#: field:db.backup,sftppassword:0 +msgid "Password User SFTP Server" +msgstr "كلمة المرور لمستخدم خادم SFTP" + +#. module: auto_backup +#: field:db.backup,sftppath:0 +msgid "Path external server" +msgstr "المسار الخارجي للخادم" + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "المنفذ" + +#. module: auto_backup +#: field:db.backup,daystokeepsftp:0 +msgid "Remove SFTP after x days" +msgstr "الإزالة من خادم SFTP بعد س من الأيام" + +#. module: auto_backup +#: field:db.backup,daystokeep:0 +msgid "Remove after x days" +msgstr "الإزالة بعد س من الأيام" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "SFTP" +msgstr "SFTP" + +#. module: auto_backup +#: field:db.backup,sftpport:0 +msgid "SFTP Port" +msgstr "منفذ SFTP" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_search +msgid "Search options" +msgstr "خيارات البحث" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Search the action named 'Backup scheduler'." +msgstr "ابحث عن الأجزاء المسمى 'Backup scheduler'." + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Set the scheduler to active and fill in how often you want backups generated." +msgstr "قم بتفعيل الجدولة واملأ كم تربد عادة توليد النسخ الاحتياطي." + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Test" +msgstr "اختبار" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Test SFTP Connection" +msgstr "اختبار توصيل SFTP" + +#. module: auto_backup +#: help:db.backup,sftpip:0 +msgid "The IP address from your remote server. For example 192.168.0.1" +msgstr "عنوان بروتوكول الإنترنت من خادومك البعيد. مثلاً 192.168.0.1" + +#. module: auto_backup +#: help:db.backup,sftppath:0 +msgid "The location to the folder where the dumps should be written to. For example /odoo/backups/.\n" +"Files will then be written to /odoo/backups/ on your remote server." +msgstr "" +"موقع المجلد التي يجب كتابة ملفات النسخ عليه. مثلاً /odoo/backups/.\n" +"وحينها سيتم كتابة الملفات إلى /odoo/backups/ على خادومك البعيد." + +#. module: auto_backup +#: help:db.backup,sftppassword:0 +msgid "The password from the user where the SFTP connection should be made with. This is the password from the user on the external server." +msgstr "" +"كلمة المرور الذي من المفترض عمل اتصال SFTP من بها. هذا هي كلمة المرور على " +"الخادم الخارجي." + +#. module: auto_backup +#: help:db.backup,sftpport:0 +msgid "The port on the FTP server that accepts SSH/SFTP calls." +msgstr "المنفذ على خادم FTP الذي يقبل طلبات SSH/SFTP." + +#. module: auto_backup +#: help:db.backup,sftpusername:0 +msgid "The username where the SFTP connection should be made with. This is the user on the external server." +msgstr "" +"اسم المستخدم الذي من المفترض عمل اتصال SFTP من به. هذا هو المستخدم على " +"الخادم الخارجي." + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "This configures the scheduler for automatic backup of the given database running on given host at given port on regular intervals." +msgstr "" +"هذا الإعداد سيجدول النسخ الاحتياطي التلقائي لقاعدة بيانات معينة وسينفذ على " +"مضيف معين بمنفذ معين خلال فترات متتابعة. " + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Use SFTP with caution! This writes files to external servers under the path you specify." +msgstr "" +"استخدم SFTP بحذر ! لأن هذا يؤدي لكتابة ملفات لخوادم خارجية على المسار الذي " +"حددته." + +#. module: auto_backup +#: field:db.backup,sftpusername:0 +msgid "Username SFTP Server" +msgstr "أسم المستخدم لخادم SFTP" + +#. module: auto_backup +#: view:db.backup:auto_backup.view_backup_conf_form +msgid "Warning:" +msgstr "تحذير :" + +#. module: auto_backup +#: field:db.backup,sftpwrite:0 +msgid "Write to external server with sftp" +msgstr "الكتابة على خادم خارجي من خلال sftp" diff --git a/jikimo_auto_backup/i18n/bg.po b/jikimo_auto_backup/i18n/bg.po new file mode 100644 index 00000000..c44799fd --- /dev/null +++ b/jikimo_auto_backup/i18n/bg.po @@ -0,0 +1,158 @@ +# Bulgarian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 13:49+0000\n" +"PO-Revision-Date: 2011-03-30 07:20+0000\n" +"Last-Translator: Dimitar Markov \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-20 05:35+0000\n" +"X-Generator: Launchpad (build 16567)\n" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "" + +#. module: auto_backup +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"Името на обекта трябва да започва с x_ и не може да никакви специални знаци !" + +#. module: auto_backup +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Невалидно име на модел при задаване на действие" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions" +msgstr "" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Test" +msgstr "Тестване" + +#. module: auto_backup +#: view:db.backup:0 +msgid "IP Configuration" +msgstr "" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "" + +#. module: auto_backup +#: model:ir.module.module,shortdesc:auto_backup.module_meta_information +msgid "Database Auto-Backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Database Configuration" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "4) Set other values as per your preference" +msgstr "" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "Хост" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"Automatic backup of all the databases under this can be scheduled as " +"follows: " +msgstr "" + +#. module: auto_backup +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "База данни" + +#. module: auto_backup +#: view:db.backup:0 +msgid "2) Schedule new action(create a new record)" +msgstr "" + +#. module: auto_backup +#: model:ir.module.module,description:auto_backup.module_meta_information +msgid "" +"The generic Open ERP Database Auto-Backup system enables the user to make " +"configurations for the automatic backup of the database.\n" +"User simply requires to specify host & port under IP Configuration & " +"database(on specified host running at specified port) and backup " +"directory(in which all the backups of the specified database will be stored) " +"under Database Configuration.\n" +"\n" +"Automatic backup for all such configured databases under this can then be " +"scheduled as follows: \n" +" \n" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions\n" +"2) Schedule new action(create a new record)\n" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'\n" +"4) Set other values as per your preference" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Help" +msgstr "Помощ" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host at given port on regular intervals." +msgstr "" + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "Порт" diff --git a/jikimo_auto_backup/i18n/ca.po b/jikimo_auto_backup/i18n/ca.po new file mode 100644 index 00000000..cb9e2f1d --- /dev/null +++ b/jikimo_auto_backup/i18n/ca.po @@ -0,0 +1,157 @@ +# Catalan translation for openobject-addons +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 13:49+0000\n" +"PO-Revision-Date: 2014-10-20 06:41+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-10-21 06:30+0000\n" +"X-Generator: Launchpad (build 17203)\n" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "" + +#. module: auto_backup +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" + +#. module: auto_backup +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions" +msgstr "" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Test" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "IP Configuration" +msgstr "" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "" + +#. module: auto_backup +#: model:ir.module.module,shortdesc:auto_backup.module_meta_information +msgid "Database Auto-Backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Database Configuration" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "4) Set other values as per your preference" +msgstr "" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"Automatic backup of all the databases under this can be scheduled as " +"follows: " +msgstr "" + +#. module: auto_backup +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "2) Schedule new action(create a new record)" +msgstr "" + +#. module: auto_backup +#: model:ir.module.module,description:auto_backup.module_meta_information +msgid "" +"The generic Open ERP Database Auto-Backup system enables the user to make " +"configurations for the automatic backup of the database.\n" +"User simply requires to specify host & port under IP Configuration & " +"database(on specified host running at specified port) and backup " +"directory(in which all the backups of the specified database will be stored) " +"under Database Configuration.\n" +"\n" +"Automatic backup for all such configured databases under this can then be " +"scheduled as follows: \n" +" \n" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions\n" +"2) Schedule new action(create a new record)\n" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'\n" +"4) Set other values as per your preference" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Help" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host at given port on regular intervals." +msgstr "" + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "" diff --git a/jikimo_auto_backup/i18n/es.po b/jikimo_auto_backup/i18n/es.po new file mode 100644 index 00000000..6c56d1b6 --- /dev/null +++ b/jikimo_auto_backup/i18n/es.po @@ -0,0 +1,166 @@ +# Spanish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 13:49+0000\n" +"PO-Revision-Date: 2011-08-23 19:48+0000\n" +"Last-Translator: mgaja (GrupoIsep.com) \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-20 05:35+0000\n" +"X-Generator: Launchpad (build 16567)\n" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "Base de datos que desea programar copias de seguridad para" + +#. module: auto_backup +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"¡El objeto debe empezar con x_ y no puede contener ningún carácter especial!" + +#. module: auto_backup +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Nombre del modelo inválido en la definición de acción." + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "backup.BBDD" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions" +msgstr "" +"1) Vaya a Administración / Configuración / Programador / Acciones programadas" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "Configurar copia de seguridad" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Test" +msgstr "Prueba" + +#. module: auto_backup +#: view:db.backup:0 +msgid "IP Configuration" +msgstr "Configuración IP" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "Ruta absoluta para el almacenamiento de las copias de seguridad" + +#. module: auto_backup +#: model:ir.module.module,shortdesc:auto_backup.module_meta_information +msgid "Database Auto-Backup" +msgstr "Copia de seguridad automática de Base de datos" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Database Configuration" +msgstr "Configuración de Base de Datos" + +#. module: auto_backup +#: view:db.backup:0 +msgid "4) Set other values as per your preference" +msgstr "4) Establecer los demás valores según su preferencia" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "Host" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"Automatic backup of all the databases under this can be scheduled as " +"follows: " +msgstr "" +"Copia de seguridad automática de las bases de datos en virtud de este puede " +"ser programado de la siguiente manera: " + +#. module: auto_backup +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "¡XML inválido para la definición de la vista!" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "Directorio de la copia de seguridad" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "Base de datos" + +#. module: auto_backup +#: view:db.backup:0 +msgid "2) Schedule new action(create a new record)" +msgstr "2) Lista de nuevas acciones (crear un nuevo registro)" + +#. module: auto_backup +#: model:ir.module.module,description:auto_backup.module_meta_information +msgid "" +"The generic Open ERP Database Auto-Backup system enables the user to make " +"configurations for the automatic backup of the database.\n" +"User simply requires to specify host & port under IP Configuration & " +"database(on specified host running at specified port) and backup " +"directory(in which all the backups of the specified database will be stored) " +"under Database Configuration.\n" +"\n" +"Automatic backup for all such configured databases under this can then be " +"scheduled as follows: \n" +" \n" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions\n" +"2) Schedule new action(create a new record)\n" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'\n" +"4) Set other values as per your preference" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'" +msgstr "" +"3) Ajuste \"objeto\" a \"db.backup\" y \"función\" a \"programar copias de " +"seguridad\" en la página \"Datos Técnicos\"" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Help" +msgstr "Ayuda" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host at given port on regular intervals." +msgstr "" +"Esto configura el planificador de copia de seguridad automática de la base " +"de datos dado que se ejecutan en el host dado en el puerto en intervalos " +"regulares." + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "Puerto" diff --git a/jikimo_auto_backup/i18n/ko_KR.po b/jikimo_auto_backup/i18n/ko_KR.po new file mode 100644 index 00000000..beaf9b56 --- /dev/null +++ b/jikimo_auto_backup/i18n/ko_KR.po @@ -0,0 +1,395 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auto_backup +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0-20180205\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-08 03:22+0000\n" +"PO-Revision-Date: 2018-02-08 12:47+0900\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: \n" +"Language: ko_KR\n" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Warning:\n" +" Use SFTP with caution! This writes files to external " +"servers under the path you specify." +msgstr "" +"경고:\n" +" 조심해서 SFTP를 사용하세요! 이것은 당신이 지정한 경로" +"밑에 외부서버들로 파일들을 쓰게됩니다." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_folder +msgid "Absolute path for storing the backups" +msgstr "백업저장용 절대경로명" + +#. module: auto_backup +#: model:ir.module.category,name:auto_backup.module_management +msgid "Auto backup access" +msgstr "자동으로 백업 액세스하기" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_send_mail_sftp_fail +msgid "Auto. E-mail on backup fail" +msgstr "백업실패시에 이메일로 알려주기 (자동)" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_autoremove +msgid "Auto. Remove Backups" +msgstr "백업제거하기 (자동)" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Back-up view" +msgstr "백업보기" + +#. module: auto_backup +#: model:ir.ui.menu,name:auto_backup.auto_backup_menu +msgid "Back-ups" +msgstr "백업" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_folder +msgid "Backup Directory" +msgstr "백업디렉토리" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_backup_type +msgid "Backup Type" +msgstr "백업타입" + +#. module: auto_backup +#: model:ir.actions.server,name:auto_backup.backup_scheduler_ir_actions_server +#: model:ir.cron,cron_name:auto_backup.backup_scheduler +#: model:ir.cron,name:auto_backup.backup_scheduler +msgid "Backup scheduler" +msgstr "백업스케줄러" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_tree +msgid "Backups" +msgstr "백업" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_days_to_keep_sftp +msgid "" +"Choose after how many days the backup should be deleted from the FTP server. " +"For example:\n" +"If you fill in 5 the backups will be removed after 5 days from the FTP " +"server." +msgstr "" +"FTP서버로부터 몇일지난 백업본을 삭제할지 선택하세요. 예를들면:\n" +"만약 5를 기입하면 그 백업본들은 FTP서버에서 5일후에 삭제됩니다." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_days_to_keep +msgid "" +"Choose after how many days the backup should be deleted. For example:\n" +"If you fill in 5 the backups will be removed after 5 days." +msgstr "" +"FTP서버로부터 몇일지난 백업본을 삭제할지 선택하세요. 예를들면:\n" +"만약 5를 기입하면 그 백업본들은 FTP서버에서 5일후에 삭제됩니다." + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure back-ups" +msgstr "백업구성하기" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:129 +#, python-format +msgid "Connection Test Failed!" +msgstr "연결테스트실패~" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:124 +#, python-format +msgid "" +"Connection Test Succeeded!\n" +"Everything seems properly set up for FTP back-ups!" +msgstr "" +"연결테스트성공!\n" +"모든게 적절히 세팅된거 같습니다!" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Contact me!" +msgstr "저에게 연락하세요~" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_create_uid +msgid "Created by" +msgstr "생성됨" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_create_date +msgid "Created on" +msgstr "생성됨" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_name +msgid "Database" +msgstr "데이터베이스" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_name +msgid "Database you want to schedule backups for" +msgstr "백업을 스케줄하기 원하는 데이터베이스" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_display_name +msgid "Display Name" +msgstr "표시이름" + +#. module: auto_backup +#: selection:db.backup,backup_type:0 +msgid "Dump" +msgstr "덤프" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_email_to_notify +msgid "E-mail to notify" +msgstr "통보할 이메일주소" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:98 constraint:db.backup:0 +#, python-format +msgid "Error ! No such database exists!" +msgstr "에러~ 그런 데이터베이스가 존재하지 않습니다" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_email_to_notify +msgid "" +"Fill in the e-mail where you want to be notified that the backup failed on " +"the FTP." +msgstr "FTP서버상에서 백업실패할때 알림받기원하는 이메일주소를 채워넣으세요" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "For example: /odoo/backups/" +msgstr "예: /odoo/backups/" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Go to Settings / Technical / Automation / Scheduled Actions." +msgstr "Settings / Technical / Automation / Scheduled Actions 으로 가세요." + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Help" +msgstr "도움말" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:132 +#, python-format +msgid "Here is what we got instead:\n" +msgstr "우리가 대신하는것이 여기있습니다:\n" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_host +msgid "Host" +msgstr "호스트" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_id +msgid "ID" +msgstr "ID" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_host +msgid "IP Address SFTP Server" +msgstr "SFTP서버 IP주소" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_send_mail_sftp_fail +msgid "" +"If you check this option you can choose to automaticly get e-mailed when the " +"backup to the external server failed." +msgstr "" +"이 옵션을 체크하면 외부서버에서 백업실패할때 자동적으로 이메일하도록 선택할 " +"수 있습니다." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_autoremove +msgid "" +"If you check this option you can choose to automaticly remove the backup " +"after xx days" +msgstr "" +"이 옵션을 선택하면 자동적으로 며칠(xx days)후에 백업을 제거하도록 선택할 수 " +"있습니다" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_write +msgid "" +"If you check this option you can specify the details needed to write to a " +"remote server with SFTP." +msgstr "" +"이 옵션을 선택하면 SFTP 원격서버로 쓰려고 할때 요구되는 정보를 지정할 수 있습" +"니다." + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup___last_update +msgid "Last Modified on" +msgstr "최근수정일자" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_write_uid +msgid "Last Updated by" +msgstr "최근수정자" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_write_date +msgid "Last Updated on" +msgstr "최근업데이트일자" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Local backup configuration" +msgstr "로컬백업환경설정" + +#. module: auto_backup +#: model:res.groups,name:auto_backup.group_manager +msgid "Manager" +msgstr "관리자" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Need more help?" +msgstr "더 도움이 필요하세요?" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_password +msgid "Password User SFTP Server" +msgstr "SFTP서버 사용자 패스워드" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_path +msgid "Path external server" +msgstr "외부서버경로" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_port +msgid "Port" +msgstr "포트" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_days_to_keep_sftp +msgid "Remove SFTP after x days" +msgstr "몇일후에 SFTP 제거" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_days_to_keep +msgid "Remove after x days" +msgstr "몇일후에 제거하기" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "SFTP" +msgstr "SFTP" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_port +msgid "SFTP Port" +msgstr "SFTP 포트" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Search the action named 'Backup scheduler'." +msgstr "'백업스케줄러'라고 명명된 액션을 검색하세요" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Set the scheduler to active and fill in how often you want backups generated." +msgstr "스케줄러를 활성화로 세팅하고 백업주기를 채워넣으세요" + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Test SFTP Connection" +msgstr "SFTP연결테스트" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_host +msgid "The IP address from your remote server. For example 192.168.0.1" +msgstr "원격서버로부터의 IP주소. 예를들자면, 192.168.0.1" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_path +msgid "" +"The location to the folder where the dumps should be written to. For " +"example /odoo/backups/.\n" +"Files will then be written to /odoo/backups/ on your remote server." +msgstr "" +"덤프파일이 씌어져야하는 폴더위치. 예를들어보자면 /odoo/backups/.\n" +"그 다음에 파일들은 당신서버상의 /odoo/backups/ 로 쓰여질겁니다." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_password +msgid "" +"The password from the user where the SFTP connection should be made with. " +"This is the password from the user on the external server." +msgstr "" +"SFTP연결이 만들어져야하는 그 사용자의 비밀번호. 이것은 외부서버상의 그 사용자" +"의 비밀번호예요~" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_port +msgid "The port on the FTP server that accepts SSH/SFTP calls." +msgstr "SSH/SFTP접속을 허용하는 FTP서버상의 포트" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup_sftp_user +msgid "" +"The username where the SFTP connection should be made with. This is the user " +"on the external server." +msgstr "SFTP연결할 사용자명. 외부서버상의 사용자명이예요~ " + +#. module: auto_backup +#: model:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host\n" +" at given port on regular intervals.\n" +"
\n" +" Automatic backups of the database can be scheduled " +"as follows:" +msgstr "" +"이것은 정기적인 간격으로 해당 호스트상에서 실행중인 데이터베이스의 자동백업용" +"으로 스케줄러를 구성합니다. 그 데이터베이스의 자동백업들은 아래처럼 스케줄될 " +"수 있습니다:" + +#. module: auto_backup +#: model:ir.module.category,description:auto_backup.module_management +msgid "User access level for this module" +msgstr "이 모듈용 사용자접근레벨" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_user +msgid "Username SFTP Server" +msgstr "SFTP서버 사용자명" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup_sftp_write +msgid "Write to external server with sftp" +msgstr "sftp와 함께 외부서버로 쓰기" + +#. module: auto_backup +#: selection:db.backup,backup_type:0 +msgid "Zip" +msgstr "Zip" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "db.backup" diff --git a/jikimo_auto_backup/i18n/nl.po b/jikimo_auto_backup/i18n/nl.po new file mode 100644 index 00000000..305dce7d --- /dev/null +++ b/jikimo_auto_backup/i18n/nl.po @@ -0,0 +1,380 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auto_backup +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-20 13:29+0000\n" +"PO-Revision-Date: 2019-10-20 13:29+0000\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: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Warning:\n" +" Use SFTP with caution! This writes files to external servers under the path you specify." +msgstr "Waarschuwing:\n" +" Gebruik SFTP voorzichtig! Dit schrijft bestanden naar externe servers onder het pad dat u opgeeft." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__folder +msgid "Absolute path for storing the backups" +msgstr "Absoluut pad om backups te bewaren" + +#. module: auto_backup +#: model:ir.module.category,name:auto_backup.module_management +msgid "Auto backup access" +msgstr "Auto backup toegang" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "Auto. E-mail on backup fail" +msgstr "Auto. e-mail bij mislukte back-up" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__autoremove +msgid "Auto. Remove Backups" +msgstr "Auto. e-mailen wanneer backup mislukt" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Back-up view" +msgstr "Back-up weergave" + +#. module: auto_backup +#: model:ir.ui.menu,name:auto_backup.auto_backup_menu +msgid "Back-ups" +msgstr "Back-ups" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__folder +msgid "Backup Directory" +msgstr "Backup folder" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__backup_type +msgid "Backup Type" +msgstr "Soort back-up" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "Backup configuration record" +msgstr "Back-up configuratie" + +#. module: auto_backup +#: model:ir.actions.server,name:auto_backup.backup_scheduler_ir_actions_server +#: model:ir.cron,cron_name:auto_backup.backup_scheduler +#: model:ir.cron,name:auto_backup.backup_scheduler +msgid "Backup scheduler" +msgstr "Backup planner" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_tree +msgid "Backups" +msgstr "Back-ups" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep_sftp +msgid "" +"Choose after how many days the backup should be deleted from the FTP server. For example:\n" +"If you fill in 5 the backups will be removed after 5 days from the FTP server." +msgstr "Kies na hoeveel dagen de backups verwijderd moeten worden van de FTP server. Bijvoorbeeld:\n" +"Als u 5 invult zal de backup na 5 dagen verwijderd worden van de FTP server." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep +msgid "" +"Choose after how many days the backup should be deleted. For example:\n" +"If you fill in 5 the backups will be removed after 5 days." +msgstr "Kies na hoeveel dagen de backups verwijderd moeten worden van de FTP server. Bijvoorbeeld:\n" +"Als u 5 invult zal de backup na 5 dagen verwijderd worden van de FTP server." + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure back-ups" +msgstr "Configureer back-ups" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Connection Test Failed!" +msgstr "Connectie test mislukt!" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "" +"Connection Test Succeeded!\n" +"Everything seems properly set up for FTP back-ups!" +msgstr "Connectie test succesvol!\n" +"Alles lijkt correct opgezet voor FTP back-ups!" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Contact me!" +msgstr "Contacteer mij!" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__name +msgid "Database" +msgstr "Database" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__name +msgid "Database you want to schedule backups for" +msgstr "Dataabse waar u back-ups voor wilt plannen" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__dump +msgid "Dump" +msgstr "Dump" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__email_to_notify +msgid "E-mail to notify" +msgstr "E-mail om te verwittigen" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Error ! No such database exists!" +msgstr "Fout! Deze database bestaat niet!" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__email_to_notify +msgid "" +"Fill in the e-mail where you want to be notified that the backup failed on " +"the FTP." +msgstr "Vul de e-mail in waarop u wilt verwittigd worden als de backup mislukt op de FTP." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "For example: /odoo/backups/" +msgstr "Bijvoorbeeld: /odoo/backups/" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Go to Settings / Technical / Automation / Scheduled Actions." +msgstr "Ga naar Instellingen / Technisch / Automatisering / Geplande acties." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Help" +msgstr "Help" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Here is what we got instead:\n" +msgstr "Hier is wat we in de plaats terugkregen:\n" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__host +msgid "Host" +msgstr "Host" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__id +msgid "ID" +msgstr "ID" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_host +msgid "IP Address SFTP Server" +msgstr "IP adres SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "" +"If you check this option you can choose to automaticly get e-mailed when the" +" backup to the external server failed." +msgstr "Als u deze optie aanvinkt kan u kiezen om automatisch een e-mail aan te krijgen als de backuaar de externe server mislukt." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__autoremove +msgid "" +"If you check this option you can choose to automaticly remove the backup " +"after xx days" +msgstr "Als u deze optie aanvinkt kan u kiezen om automatisch backups te verwijderen " +"na xx dagen" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_write +msgid "" +"If you check this option you can specify the details needed to write to a " +"remote server with SFTP." +msgstr "Als u deze optie aanvinkt kan u de details invullen die nodig zijn om te connecteren met de " +" externe SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Local backup configuration" +msgstr "Lokale back-up configuratie" + +#. module: auto_backup +#: model:res.groups,name:auto_backup.group_manager +msgid "Manager" +msgstr "Beheerder" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Need more help?" +msgstr "Meer hulp nodig?" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_password +msgid "Password User SFTP Server" +msgstr "Wachtwoord gebruiker SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_path +msgid "Path external server" +msgstr "Pad externe server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__port +msgid "Port" +msgstr "Poort" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep_sftp +msgid "Remove SFTP after x days" +msgstr "Verwijderd SFTP na x dagen" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep +msgid "Remove after x days" +msgstr "Verwijder na x dagen" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "SFTP" +msgstr "SFTP" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_port +msgid "SFTP Port" +msgstr "SFTP poort" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Search the action named 'Backup scheduler'." +msgstr "Zoek de actie met de naam 'Backup planner'." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Set the scheduler to active and fill in how often you want backups " +"generated." +msgstr "Zet de planner actief en vul in hoe vaak u wilt dat er backups gegenereerd " +"worden." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Test SFTP Connection" +msgstr "Test SFTP verbinding" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_host +msgid "The IP address from your remote server. For example 192.168.0.1" +msgstr "Het IP adres van uw externe server. Bijvoorbeeld: 192.168.0.1" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_path +msgid "" +"The location to the folder where the dumps should be written to. For example /odoo/backups/.\n" +"Files will then be written to /odoo/backups/ on your remote server." +msgstr "De locatie naar de folder waar de backup naar toe moet geschreven worden. Bijvoorbeeld odoo/backups/\n" +"Bestanden worden dan naar /odoo/backups/ geschreven op de externe server" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_password +msgid "" +"The password from the user where the SFTP connection should be made with. " +"This is the password from the user on the external server." +msgstr "Het wachtwoord van de gebruiker waar de SFTP connectie mee moet gemaakt worden. " +"Dit is het wachtwoord van de gebruiker op de externe server." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_port +msgid "The port on the FTP server that accepts SSH/SFTP calls." +msgstr "De poort op de FTP server die SSH/SFTP accepteert." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_user +msgid "" +"The username where the SFTP connection should be made with. This is the user" +" on the external server." +msgstr "De gebruikersnaam waar de SFTP connectie mee gemaakt moet worden. Dit is de gebruiker" +" op de externe server." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"This configures the scheduler for automatic backup of the given database running on given host\n" +" at given port on regular intervals.\n" +"
\n" +" Automatic backups of the database can be scheduled as follows:" +msgstr "Dit configureert de planner om automatische backups van de opgegeven database te maken die op deze host,\n" +" op een bepaalde poort draaien, op regelmatige intervals.\n" +"
\n" +" Automatische backups kunnen als volgt ingepland worden:" + +#. module: auto_backup +#: model:ir.module.category,description:auto_backup.module_management +msgid "User access level for this module" +msgstr "Gebruikerstoegang voor deze module" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_user +msgid "Username SFTP Server" +msgstr "Gebruikersnaam SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_write +msgid "Write to external server with sftp" +msgstr "Schrijf naar externe server met SFTP" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__zip +msgid "Zip" +msgstr "ZIP" + diff --git a/jikimo_auto_backup/i18n/nl_BE.po b/jikimo_auto_backup/i18n/nl_BE.po new file mode 100644 index 00000000..8cc89c8a --- /dev/null +++ b/jikimo_auto_backup/i18n/nl_BE.po @@ -0,0 +1,380 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auto_backup +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-20 13:29+0000\n" +"PO-Revision-Date: 2019-10-20 13:29+0000\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: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Warning:\n" +" Use SFTP with caution! This writes files to external servers under the path you specify." +msgstr "Waarschuwing:\n" +" Gebruik SFTP voorzichtig! Dit schrijft bestanden naar externe servers onder het pad dat u opgeeft." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__folder +msgid "Absolute path for storing the backups" +msgstr "Absoluut pad om backups te bewaren" + +#. module: auto_backup +#: model:ir.module.category,name:auto_backup.module_management +msgid "Auto backup access" +msgstr "Auto backup toegang" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "Auto. E-mail on backup fail" +msgstr "Auto. e-mail bij mislukte back-up" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__autoremove +msgid "Auto. Remove Backups" +msgstr "Auto. e-mailen wanneer backup mislukt" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Back-up view" +msgstr "Back-up weergave" + +#. module: auto_backup +#: model:ir.ui.menu,name:auto_backup.auto_backup_menu +msgid "Back-ups" +msgstr "Back-ups" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__folder +msgid "Backup Directory" +msgstr "Backup folder" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__backup_type +msgid "Backup Type" +msgstr "Soort back-up" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "Backup configuration record" +msgstr "Back-up configuratie" + +#. module: auto_backup +#: model:ir.actions.server,name:auto_backup.backup_scheduler_ir_actions_server +#: model:ir.cron,cron_name:auto_backup.backup_scheduler +#: model:ir.cron,name:auto_backup.backup_scheduler +msgid "Backup scheduler" +msgstr "Backup planner" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_tree +msgid "Backups" +msgstr "Back-ups" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep_sftp +msgid "" +"Choose after how many days the backup should be deleted from the FTP server. For example:\n" +"If you fill in 5 the backups will be removed after 5 days from the FTP server." +msgstr "Kies na hoeveel dagen de backups verwijderd moeten worden van de FTP server. Bijvoorbeeld:\n" +"Als u 5 invult zal de backup na 5 dagen verwijderd worden van de FTP server." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep +msgid "" +"Choose after how many days the backup should be deleted. For example:\n" +"If you fill in 5 the backups will be removed after 5 days." +msgstr "Kies na hoeveel dagen de backups verwijderd moeten worden van de FTP server. Bijvoorbeeld:\n" +"Als u 5 invult zal de backup na 5 dagen verwijderd worden van de FTP server." + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure back-ups" +msgstr "Configureer back-ups" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Connection Test Failed!" +msgstr "Connectie test mislukt!" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "" +"Connection Test Succeeded!\n" +"Everything seems properly set up for FTP back-ups!" +msgstr "Connectie test succesvol!\n" +"Alles lijkt correct opgezet voor FTP backups!" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Contact me!" +msgstr "Contacteer mij!" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__name +msgid "Database" +msgstr "Database" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__name +msgid "Database you want to schedule backups for" +msgstr "Dataabse waar u back-ups voor wilt plannen" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__dump +msgid "Dump" +msgstr "Dump" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__email_to_notify +msgid "E-mail to notify" +msgstr "E-mail om te verwittigen" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Error ! No such database exists!" +msgstr "Fout! Deze database bestaat niet!" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__email_to_notify +msgid "" +"Fill in the e-mail where you want to be notified that the backup failed on " +"the FTP." +msgstr "Vul de e-mail in waarop u wilt verwittigd worden als de backup mislukt op de FTP." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "For example: /odoo/backups/" +msgstr "Bijvoorbeeld: /odoo/backups/" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Go to Settings / Technical / Automation / Scheduled Actions." +msgstr "Ga naar Instellingen / Technisch / Automatisering / Geplande acties." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Help" +msgstr "Help" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Here is what we got instead:\n" +msgstr "Hier is wat we in de plaats terugkregen:\n" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__host +msgid "Host" +msgstr "Host" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__id +msgid "ID" +msgstr "ID" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_host +msgid "IP Address SFTP Server" +msgstr "IP adres SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "" +"If you check this option you can choose to automaticly get e-mailed when the" +" backup to the external server failed." +msgstr "Als u deze optie aanvinkt kan u kiezen om automatisch een e-mail aan te krijgen als de backuaar de externe server mislukt." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__autoremove +msgid "" +"If you check this option you can choose to automaticly remove the backup " +"after xx days" +msgstr "Als u deze optie aanvinkt kan u kiezen om automatisch backups te verwijderen " +"na xx dagen" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_write +msgid "" +"If you check this option you can specify the details needed to write to a " +"remote server with SFTP." +msgstr "Als u deze optie aanvinkt kan u de details invullen die nodig zijn om te connecteren met de " +" externe SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Local backup configuration" +msgstr "Lokale back-up configuratie" + +#. module: auto_backup +#: model:res.groups,name:auto_backup.group_manager +msgid "Manager" +msgstr "Beheerder" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Need more help?" +msgstr "Meer hulp nodig?" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_password +msgid "Password User SFTP Server" +msgstr "Wachtwoord gebruiker SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_path +msgid "Path external server" +msgstr "Pad externe server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__port +msgid "Port" +msgstr "Poort" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep_sftp +msgid "Remove SFTP after x days" +msgstr "Verwijderd SFTP na x dagen" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep +msgid "Remove after x days" +msgstr "Verwijder na x dagen" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "SFTP" +msgstr "SFTP" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_port +msgid "SFTP Port" +msgstr "SFTP poort" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Search the action named 'Backup scheduler'." +msgstr "Zoek de actie met de naam 'Backup planner'." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Set the scheduler to active and fill in how often you want backups " +"generated." +msgstr "Zet de planner actief en vul in hoe vaak u wilt dat er backups gegenereerd " +"worden." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Test SFTP Connection" +msgstr "Test SFTP verbinding" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_host +msgid "The IP address from your remote server. For example 192.168.0.1" +msgstr "Het IP adres van uw externe server. Bijvoorbeeld: 192.168.0.1" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_path +msgid "" +"The location to the folder where the dumps should be written to. For example /odoo/backups/.\n" +"Files will then be written to /odoo/backups/ on your remote server." +msgstr "De locatie naar de folder waar de backup naar toe moet geschreven worden. Bijvoorbeeld odoo/backups/\n" +"Bestanden worden dan naar /odoo/backups/ geschreven op de externe server" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_password +msgid "" +"The password from the user where the SFTP connection should be made with. " +"This is the password from the user on the external server." +msgstr "Het wachtwoord van de gebruiker waar de SFTP connectie mee moet gemaakt worden. " +"Dit is het wachtwoord van de gebruiker op de externe server." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_port +msgid "The port on the FTP server that accepts SSH/SFTP calls." +msgstr "De poort op de FTP server die SSH/SFTP accepteert." + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_user +msgid "" +"The username where the SFTP connection should be made with. This is the user" +" on the external server." +msgstr "De gebruikersnaam waar de SFTP connectie mee gemaakt moet worden. Dit is de gebruiker" +" op de externe server." + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"This configures the scheduler for automatic backup of the given database running on given host\n" +" at given port on regular intervals.\n" +"
\n" +" Automatic backups of the database can be scheduled as follows:" +msgstr "Dit configureert de planner om automatische backups van de opgegeven database te maken die op deze host,\n" +" op een bepaalde poort draaien, op regelmatige intervals.\n" +"
\n" +" Automatische backups kunnen als volgt ingepland worden:" + +#. module: auto_backup +#: model:ir.module.category,description:auto_backup.module_management +msgid "User access level for this module" +msgstr "Gebruikerstoegang voor deze module" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_user +msgid "Username SFTP Server" +msgstr "Gebruikersnaam SFTP server" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_write +msgid "Write to external server with sftp" +msgstr "Schrijf naar externe server met SFTP" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__zip +msgid "Zip" +msgstr "ZIP" + diff --git a/jikimo_auto_backup/i18n/pl.po b/jikimo_auto_backup/i18n/pl.po new file mode 100644 index 00000000..f35e6b82 --- /dev/null +++ b/jikimo_auto_backup/i18n/pl.po @@ -0,0 +1,178 @@ +# Polish translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 13:49+0000\n" +"PO-Revision-Date: 2011-02-15 15:01+0000\n" +"Last-Translator: OpenERP Administrators \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-04-20 05:35+0000\n" +"X-Generator: Launchpad (build 16567)\n" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "Baza danych, dla której chcesz zaplanować robienie kopii zapasowej" + +#. module: auto_backup +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"Nazwa obiektu musi zaczynać się od x_ oraz nie może zawierać znaków " +"specjalnych !" + +#. module: auto_backup +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Nieprawidłowa nazwa modelu w definicji akcji." + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions" +msgstr "1) Idź do Administracja / Konfirguracja / Planista / Planowane akcje" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "Konfiguruj kopie zapasowe" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Test" +msgstr "Przetestuj" + +#. module: auto_backup +#: view:db.backup:0 +msgid "IP Configuration" +msgstr "Konfiguracja adresu IP" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "Pełna ścieżka dla kopii zapasowych" + +#. module: auto_backup +#: model:ir.module.module,shortdesc:auto_backup.module_meta_information +msgid "Database Auto-Backup" +msgstr "Automatyczne kopie zapasowe bazy danych" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Database Configuration" +msgstr "Konfiguracja bazy danych" + +#. module: auto_backup +#: view:db.backup:0 +msgid "4) Set other values as per your preference" +msgstr "4) Ustaw inne dane według uznania" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "Host" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"Automatic backup of all the databases under this can be scheduled as " +"follows: " +msgstr "" +"Automatyczne kopie wszystkich baz danych mogą być zaplanowane następująco: " + +#. module: auto_backup +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "XML niewłaściwy dla tej architektury wyświetlania!" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "Katalog kopii zapasowych" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "Baza danych" + +#. module: auto_backup +#: view:db.backup:0 +msgid "2) Schedule new action(create a new record)" +msgstr "2) Zaplanuj nową akcję (utwórz nowy rekord)" + +#. module: auto_backup +#: model:ir.module.module,description:auto_backup.module_meta_information +msgid "" +"The generic Open ERP Database Auto-Backup system enables the user to make " +"configurations for the automatic backup of the database.\n" +"User simply requires to specify host & port under IP Configuration & " +"database(on specified host running at specified port) and backup " +"directory(in which all the backups of the specified database will be stored) " +"under Database Configuration.\n" +"\n" +"Automatic backup for all such configured databases under this can then be " +"scheduled as follows: \n" +" \n" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions\n" +"2) Schedule new action(create a new record)\n" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'\n" +"4) Set other values as per your preference" +msgstr "" +"System Open ERP Database Auto-Backup pozwala użytkownikowi utworzyć " +"konfiguracje dla automatycznego zachowywania kopii zapasowych baz danych.\n" +"Użytkownik musi tylko podać host i port w Konfiguracji IP i bazę danych " +"oraz katalog dla kopii zapasowej Konfiguracji bazy danych.\n" +"\n" +"Automatyczne kopie wszystkich baz danych mogą być zaplanowane następująco: " +"\n" +" \n" +"1) Idź do Administracja / Konfirguracja / Planista / Planowane akcje\n" +"2) Zaplanuj nową akcję (utwórz nowy rekord)\n" +"3) Ustaw 'Obiekt' na 'db.backup' i 'Funkcja' na 'schedule_backup' na stronie " +"'Dane techniczne'.\n" +"4) Ustaw inne dane według uznania" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'" +msgstr "" +"3) Ustaw 'Obiekt' na 'db.backup' i 'Funkcja' na 'schedule_backup' na stronie " +"'Dane techniczne'." + +#. module: auto_backup +#: view:db.backup:0 +msgid "Help" +msgstr "Pomoc" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host at given port on regular intervals." +msgstr "" +"Tu konfigurujesz planistę do automatycznego zapisywania kopii zapasowych dla " +"określonej bazy danych na na określonym hoście (komputerze) na określonym " +"porcie w regularnych terminach." + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "Port" diff --git a/jikimo_auto_backup/i18n/pt_BR.po b/jikimo_auto_backup/i18n/pt_BR.po new file mode 100644 index 00000000..5207baca --- /dev/null +++ b/jikimo_auto_backup/i18n/pt_BR.po @@ -0,0 +1,183 @@ +# Brazilian Portuguese translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2009-11-24 13:49+0000\n" +"PO-Revision-Date: 2013-07-20 09:39+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-22 05:50+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: auto_backup +#: help:db.backup,name:0 +msgid "Database you want to schedule backups for" +msgstr "Banco de dados que você deseja agendar backups para" + +#. module: auto_backup +#: constraint:ir.model:0 +msgid "" +"The Object name must start with x_ and not contain any special character !" +msgstr "" +"O nome do objeto deve iniciar com x_ e não conter qualquer caractere " +"especial!" + +#. module: auto_backup +#: constraint:ir.actions.act_window:0 +msgid "Invalid model name in the action definition." +msgstr "Nome do modelo inválida na definição da ação." + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "db.backup" +msgstr "db.backup" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions" +msgstr "" +"1) Vá para Administração / Configuração / Programador / Ações Programadas" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup_conf_form +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure Backup" +msgstr "Configurar backup" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Test" +msgstr "Teste" + +#. module: auto_backup +#: view:db.backup:0 +msgid "IP Configuration" +msgstr "Configuração de IP" + +#. module: auto_backup +#: help:db.backup,bkp_dir:0 +msgid "Absolute path for storing the backups" +msgstr "Caminho absoluto para armazenar os backups" + +#. module: auto_backup +#: model:ir.module.module,shortdesc:auto_backup.module_meta_information +msgid "Database Auto-Backup" +msgstr "Banco de Dados Auto-Backup" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Database Configuration" +msgstr "Configuração do Banco de Dados" + +#. module: auto_backup +#: view:db.backup:0 +msgid "4) Set other values as per your preference" +msgstr "4) Defina outros valores como por sua preferência" + +#. module: auto_backup +#: field:db.backup,host:0 +msgid "Host" +msgstr "Host" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"Automatic backup of all the databases under this can be scheduled as " +"follows: " +msgstr "" +"Backup automático de todos os bancos de dados sob este pode ser programado " +"como segue: " + +#. module: auto_backup +#: constraint:ir.ui.view:0 +msgid "Invalid XML for View Architecture!" +msgstr "Inválido XML para Ver Arquitetura!" + +#. module: auto_backup +#: field:db.backup,bkp_dir:0 +msgid "Backup Directory" +msgstr "Diretório de backup" + +#. module: auto_backup +#: field:db.backup,name:0 +msgid "Database" +msgstr "Banco de Dados" + +#. module: auto_backup +#: view:db.backup:0 +msgid "2) Schedule new action(create a new record)" +msgstr "2) Programe nova ação (criar um novo registro)" + +#. module: auto_backup +#: model:ir.module.module,description:auto_backup.module_meta_information +msgid "" +"The generic Open ERP Database Auto-Backup system enables the user to make " +"configurations for the automatic backup of the database.\n" +"User simply requires to specify host & port under IP Configuration & " +"database(on specified host running at specified port) and backup " +"directory(in which all the backups of the specified database will be stored) " +"under Database Configuration.\n" +"\n" +"Automatic backup for all such configured databases under this can then be " +"scheduled as follows: \n" +" \n" +"1) Go to Administration / Configuration / Scheduler / Scheduled Actions\n" +"2) Schedule new action(create a new record)\n" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'\n" +"4) Set other values as per your preference" +msgstr "" +"O sistema Auto-Backup genérico Aberto ERP banco de dados permite que o " +"usuário faça configurações para o backup automático do banco de dados. \n" +"usuário requer simplesmente para especificar anfitrião e porta em " +"Configuração do IP e banco de dados (on especificado host executando na " +"porta especificada) eo diretório de backup (em . que todos os backups de " +"banco de dados especificado serão armazenados) em Configuração do banco de " +"dados \n" +"de backup automático de todos esses bancos de dados configurados sob este " +"pode ser programado como segue:\n" +" \n" +" \n" +"1) Vá para Administração / Configuração / Programador / Ações Programadas \n" +"2) Programe nova ação (criar um novo registro) \n" +"3) Defina 'objeto' para 'db.backup' e 'função' para 'schedule_backup' em " +"página \"Dados Técnicos\" \n" +"4 ) Defina outros valores de acordo com sua preferência" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"3) Set 'Object' to 'db.backup' and 'Function' to 'schedule_backup' under " +"page 'Technical Data'" +msgstr "" +"3) Defina 'objeto' para 'db.backup' e 'função' para 'schedule_backup \"em\" " +"Dados Técnicos \"página" + +#. module: auto_backup +#: view:db.backup:0 +msgid "Help" +msgstr "Ajudar" + +#. module: auto_backup +#: view:db.backup:0 +msgid "" +"This configures the scheduler for automatic backup of the given database " +"running on given host at given port on regular intervals." +msgstr "" +"Isso configura o agendador de backup automático de um determinado banco de " +"dados rodando em determinado host em determinada porta em intervalos " +"regulares." + +#. module: auto_backup +#: field:db.backup,port:0 +msgid "Port" +msgstr "Porto" diff --git a/jikimo_auto_backup/i18n/zh_CN.po b/jikimo_auto_backup/i18n/zh_CN.po new file mode 100644 index 00000000..56f943df --- /dev/null +++ b/jikimo_auto_backup/i18n/zh_CN.po @@ -0,0 +1,358 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auto_backup +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 08:18+0000\n" +"PO-Revision-Date: 2024-04-19 08:18+0000\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: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Warning:\n" +" Use SFTP with caution! This writes files to external servers under the path you specify." +msgstr "谨慎使用SFTP!这会将文件写入您指定路径下的外部服务器。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__folder +msgid "Absolute path for storing the backups" +msgstr "备份绝对路径" + +#. module: auto_backup +#: model:ir.module.category,name:auto_backup.module_management +msgid "Auto backup access" +msgstr "自动备份权限" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "Auto. E-mail on backup fail" +msgstr "FTP备份失败自动邮件通知你" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__autoremove +msgid "Auto. Remove Backups" +msgstr "自动删除备份" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Back-up view" +msgstr "备份视图" + +#. module: auto_backup +#: model:ir.ui.menu,name:auto_backup.auto_backup_menu +msgid "Back-ups" +msgstr "备份" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__folder +msgid "Backup Directory" +msgstr "备份目录" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__backup_type +msgid "Backup Type" +msgstr "备份类型" + +#. module: auto_backup +#: model:ir.model,name:auto_backup.model_db_backup +msgid "Backup configuration record" +msgstr "备份配置记录" + +#. module: auto_backup +#: model:ir.actions.server,name:auto_backup.backup_scheduler_ir_actions_server +#: model:ir.cron,cron_name:auto_backup.backup_scheduler +#: model:ir.cron,name:auto_backup.backup_scheduler +msgid "Backup scheduler" +msgstr "备份调度器" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep_sftp +msgid "" +"Choose after how many days the backup should be deleted from the FTP server. For example:\n" +"If you fill in 5 the backups will be removed after 5 days from the FTP server." +msgstr "选择备份应在FTP服务器上删除的天数。例如:\n如果您填写5,则备份将在5天后从FTP服务器上删除。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__days_to_keep +msgid "" +"Choose after how many days the backup should be deleted. For example:\n" +"If you fill in 5 the backups will be removed after 5 days." +msgstr "选择备份应删除的天数。例如:\n如果您填写5,则备份将在5天后删除。" + +#. module: auto_backup +#: model:ir.actions.act_window,name:auto_backup.action_backup +#: model:ir.ui.menu,name:auto_backup.backup_conf_menu +msgid "Configure back-ups" +msgstr "配置备份" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Connection Test Failed!" +msgstr "连接测试失败!" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "" +"Connection Test Succeeded!\n" +"Everything seems properly set up for FTP back-ups!" +msgstr "连接测试成功!\nFTP备份似乎已正确设置!" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Contact me!" +msgstr "联系我!" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_uid +msgid "Created by" +msgstr "创建者" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__create_date +msgid "Created on" +msgstr "创建日期" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__name +msgid "Database" +msgstr "数据库" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__name +msgid "Database you want to schedule backups for" +msgstr "您要安排备份的数据库" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__dump +msgid "Dump" +msgstr "" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__email_to_notify +msgid "E-mail to notify" +msgstr "通知邮件" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__email_to_notify +msgid "" +"Fill in the e-mail where you want to be notified that the backup failed on " +"the FTP." +msgstr "填写您希望在FTP上备份失败时收到通知的电子邮件" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "For example: /odoo/backups/" +msgstr "例如:/odoo/backups/" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Go to Settings / Technical / Automation / Scheduled Actions." +msgstr "前往 设置/技术/自动化/计划任务。" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Help" +msgstr "帮助" + +#. module: auto_backup +#: code:addons/auto_backup/models/db_backup.py:0 +#, python-format +msgid "Here is what we got instead:\n" +msgstr "这是我们得到的内容:\n" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__host +msgid "Host" +msgstr "主机" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__id +msgid "ID" +msgstr "标识" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_host +msgid "IP Address SFTP Server" +msgstr "SFTP服务器的IP地址" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__send_mail_sftp_fail +msgid "" +"If you check this option you can choose to automaticly get e-mailed when the" +" backup to the external server failed." +msgstr "如果您选中此选项,当备份到外部服务器失败时,您可以选择自动接收邮件通知。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__autoremove +msgid "" +"If you check this option you can choose to automaticly remove the backup " +"after xx days" +msgstr "如果您选中此选项,您可以选择在xx天后自动删除备份" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_write +msgid "" +"If you check this option you can specify the details needed to write to a " +"remote server with SFTP." +msgstr "如果您选中此选项,您可以指定使用SFTP向远程服务器写入所需的详细信息。" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup____last_update +msgid "Last Modified on" +msgstr "最后修改时间" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_uid +msgid "Last Updated by" +msgstr "最后更新者" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__write_date +msgid "Last Updated on" +msgstr "最后更新时间" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Local backup configuration" +msgstr "本地备份配置" + +#. module: auto_backup +#: model:res.groups,name:auto_backup.group_manager +msgid "Manager" +msgstr "管理者" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Need more help?" +msgstr "需要更多帮助?" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_password +msgid "Password User SFTP Server" +msgstr "SFTP服务器用户密码" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_path +msgid "Path external server" +msgstr "外部服务器路径" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__port +msgid "Port" +msgstr "端口" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep_sftp +msgid "Remove SFTP after x days" +msgstr "x天后删除SFTP" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__days_to_keep +msgid "Remove after x days" +msgstr "x天后删除" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "SFTP" +msgstr "" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_port +msgid "SFTP Port" +msgstr "SFTP端口" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Search the action named 'Backup scheduler'." +msgstr "搜索名为'备份调度器'的操作。" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"Set the scheduler to active and fill in how often you want backups " +"generated." +msgstr "将调度器设置为激活状态,并填写您希望生成备份的频率。" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "Test SFTP Connection" +msgstr "测试SFTP连接" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_host +msgid "The IP address from your remote server. For example 192.168.0.1" +msgstr "远程服务器的IP地址。例如192.168.0.1" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_path +msgid "" +"The location to the folder where the dumps should be written to. For example /odoo/backups/.\n" +"Files will then be written to /odoo/backups/ on your remote server." +msgstr "转储文件应该写入的文件夹位置。例如 /odoo/backups/。\n文件将被写入远程服务器上的 /odoo/backups/。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_password +msgid "" +"The password from the user where the SFTP connection should be made with. " +"This is the password from the user on the external server." +msgstr "应与之建立SFTP连接的用户的密码。\n这是外部服务器上用户的密码。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_port +msgid "The port on the FTP server that accepts SSH/SFTP calls." +msgstr "FTP服务器上接受SSH/SFTP调用的端口。" + +#. module: auto_backup +#: model:ir.model.fields,help:auto_backup.field_db_backup__sftp_user +msgid "" +"The username where the SFTP connection should be made with. This is the user" +" on the external server." +msgstr "应与之建立SFTP连接的用户名。这是外部服务器上的用户。" + +#. module: auto_backup +#: model_terms:ir.ui.view,arch_db:auto_backup.view_backup_config_form +msgid "" +"This configures the scheduler for automatic backup of the given database running on given host\n" +" at given port on regular intervals.\n" +"
\n" +" Automatic backups of the database can be scheduled as follows:" +msgstr "这将配置调度器,以定期自动备份在指定主机上运行的给定数据库\n" +" 在给定端口上。\n" +"
\n" +" 可以如下安排数据库的自动备份:" + +#. module: auto_backup +#: model:ir.module.category,description:auto_backup.module_management +msgid "User access level for this module" +msgstr "此模块的用户访问级别" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_user +msgid "Username SFTP Server" +msgstr "SFTP服务器用户名" + +#. module: auto_backup +#: model:ir.model.fields,field_description:auto_backup.field_db_backup__sftp_write +msgid "Write to external server with sftp" +msgstr "通过SFTP向外部服务器写入" + +#. module: auto_backup +#: model:ir.model.fields.selection,name:auto_backup.selection__db_backup__backup_type__zip +msgid "Zip" +msgstr "" diff --git a/jikimo_auto_backup/models/__init__.py b/jikimo_auto_backup/models/__init__.py new file mode 100644 index 00000000..c7355bae --- /dev/null +++ b/jikimo_auto_backup/models/__init__.py @@ -0,0 +1,2 @@ + +from . import db_backup diff --git a/jikimo_auto_backup/models/db_backup.py b/jikimo_auto_backup/models/db_backup.py new file mode 100644 index 00000000..294ed8cb --- /dev/null +++ b/jikimo_auto_backup/models/db_backup.py @@ -0,0 +1,328 @@ + +import os +import datetime +import time +import shutil +import json +import tempfile + +from odoo import models, fields, api, tools, _ +from odoo.exceptions import Warning, AccessDenied +import odoo + +import logging +_logger = logging.getLogger(__name__) + +try: + import paramiko +except ImportError: + raise ImportError( + 'This module needs paramiko to automatically write backups to the FTP through SFTP. ' + 'Please install paramiko on your system. (sudo pip3 install paramiko)') + + +class DbBackup(models.Model): + _name = 'db.backup' + _description = 'Backup configuration record' + + def _get_db_name(self): + dbName = self._cr.dbname + return dbName + + # Columns for local server configuration + host = fields.Char('Host', required=True, default='localhost') + port = fields.Char('Port', required=True, default=8069) + name = fields.Char('Database', required=True, help='Database you want to schedule backups for', + default=_get_db_name) + folder = fields.Char('Backup Directory', help='Absolute path for storing the backups', required='True', + default='/odoo/backups') + backup_type = fields.Selection([('zip', 'Zip'), ('dump', 'Dump')], 'Backup Type', required=True, default='zip') + autoremove = fields.Boolean('Auto. Remove Backups', + help='If you check this option you can choose to automaticly remove the backup ' + 'after xx days') + days_to_keep = fields.Integer('Remove after x days', + help="Choose after how many days the backup should be deleted. For example:\n" + "If you fill in 5 the backups will be removed after 5 days.", + required=True) + + # Columns for external server (SFTP) + sftp_write = fields.Boolean('Write to external server with sftp', + help="If you check this option you can specify the details needed to write to a remote " + "server with SFTP.") + sftp_path = fields.Char('Path external server', + help='The location to the folder where the dumps should be written to. For example ' + '/odoo/backups/.\nFiles will then be written to /odoo/backups/ on your remote server.') + sftp_host = fields.Char('IP Address SFTP Server', + help='The IP address from your remote server. For example 192.168.0.1') + sftp_port = fields.Integer('SFTP Port', help='The port on the FTP server that accepts SSH/SFTP calls.', default=22) + sftp_user = fields.Char('Username SFTP Server', + help='The username where the SFTP connection should be made with. This is the user on the ' + 'external server.') + sftp_password = fields.Char('Password User SFTP Server', + help='The password from the user where the SFTP connection should be made with. This ' + 'is the password from the user on the external server.') + days_to_keep_sftp = fields.Integer('Remove SFTP after x days', + help='Choose after how many days the backup should be deleted from the FTP ' + 'server. For example:\nIf you fill in 5 the backups will be removed after ' + '5 days from the FTP server.', + default=30) + send_mail_sftp_fail = fields.Boolean('Auto. E-mail on backup fail', + help='If you check this option you can choose to automaticly get e-mailed ' + 'when the backup to the external server failed.') + email_to_notify = fields.Char('E-mail to notify', + help='Fill in the e-mail where you want to be notified that the backup failed on ' + 'the FTP.') + + def test_sftp_connection(self, context=None): + self.ensure_one() + + # Check if there is a success or fail and write messages + message_title = "" + message_content = "" + error = "" + has_failed = False + + for rec in self: + ip_host = rec.sftp_host + port_host = rec.sftp_port + username_login = rec.sftp_user + password_login = rec.sftp_password + + # Connect with external server over SFTP, so we know sure that everything works. + try: + s = paramiko.SSHClient() + s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + s.connect(ip_host, port_host, username_login, password_login, timeout=10) + sftp = s.open_sftp() + sftp.close() + message_title = _("Connection Test Succeeded!\nEverything seems properly set up for FTP back-ups!") + except Exception as e: + _logger.critical('There was a problem connecting to the remote ftp: %s', str(e)) + error += str(e) + has_failed = True + message_title = _("Connection Test Failed!") + if len(rec.sftp_host) < 8: + message_content += "\nYour IP address seems to be too short.\n" + message_content += _("Here is what we got instead:\n") + finally: + if s: + s.close() + + if has_failed: + raise Warning(message_title + '\n\n' + message_content + "%s" % str(error)) + else: + raise Warning(message_title + '\n\n' + message_content) + + @api.model + def schedule_backup(self): + conf_ids = self.search([]) + for rec in conf_ids: + + try: + if not os.path.isdir(rec.folder): + os.makedirs(rec.folder) + except: + raise + # Create name for dumpfile. + bkp_file = '%s_%s.%s' % (time.strftime('%Y_%m_%d_%H_%M_%S'), rec.name, rec.backup_type) + file_path = os.path.join(rec.folder, bkp_file) + try: + # try to backup database and write it away + fp = open(file_path, 'wb') + self._take_dump(rec.name, fp, 'db.backup', rec.backup_type) + fp.close() + except Exception as error: + _logger.debug( + "Couldn't backup database %s. Bad database administrator password for server running at " + "http://%s:%s" % (rec.name, rec.host, rec.port)) + _logger.debug("Exact error from the exception: %s", str(error)) + continue + + # Check if user wants to write to SFTP or not. + if rec.sftp_write is True: + try: + # Store all values in variables + dir = rec.folder + path_to_write_to = rec.sftp_path + ip_host = rec.sftp_host + port_host = rec.sftp_port + username_login = rec.sftp_user + password_login = rec.sftp_password + _logger.debug('sftp remote path: %s', path_to_write_to) + + try: + s = paramiko.SSHClient() + s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + s.connect(ip_host, port_host, username_login, password_login, timeout=20) + sftp = s.open_sftp() + except Exception as error: + _logger.critical('Error connecting to remote server! Error: %s', str(error)) + + try: + sftp.chdir(path_to_write_to) + except IOError: + # Create directory and subdirs if they do not exist. + current_directory = '' + for dirElement in path_to_write_to.split('/'): + current_directory += dirElement + '/' + try: + sftp.chdir(current_directory) + except: + _logger.info('(Part of the) path didn\'t exist. Creating it now at %s', + current_directory) + # Make directory and then navigate into it + sftp.mkdir(current_directory, 777) + sftp.chdir(current_directory) + pass + sftp.chdir(path_to_write_to) + # Loop over all files in the directory. + for f in os.listdir(dir): + if rec.name in f: + fullpath = os.path.join(dir, f) + if os.path.isfile(fullpath): + try: + sftp.stat(os.path.join(path_to_write_to, f)) + _logger.debug( + 'File %s already exists on the remote FTP Server ------ skipped', fullpath) + # This means the file does not exist (remote) yet! + except IOError: + try: + sftp.put(fullpath, os.path.join(path_to_write_to, f)) + _logger.info('Copying File % s------ success', fullpath) + except Exception as err: + _logger.critical( + 'We couldn\'t write the file to the remote server. Error: %s', str(err)) + + # Navigate in to the correct folder. + sftp.chdir(path_to_write_to) + + _logger.debug("Checking expired files") + # Loop over all files in the directory from the back-ups. + # We will check the creation date of every back-up. + for file in sftp.listdir(path_to_write_to): + if rec.name in file: + # Get the full path + fullpath = os.path.join(path_to_write_to, file) + # Get the timestamp from the file on the external server + timestamp = sftp.stat(fullpath).st_mtime + createtime = datetime.datetime.fromtimestamp(timestamp) + now = datetime.datetime.now() + delta = now - createtime + # If the file is older than the days_to_keep_sftp (the days to keep that the user filled in + # on the Odoo form it will be removed. + if delta.days >= rec.days_to_keep_sftp: + # Only delete files, no directories! + if ".dump" in file or '.zip' in file: + _logger.info("Delete too old file from SFTP servers: %s", file) + sftp.unlink(file) + # Close the SFTP session. + sftp.close() + s.close() + except Exception as e: + try: + sftp.close() + s.close() + except: + pass + _logger.error('Exception! We couldn\'t back up to the FTP server. Here is what we got back ' + 'instead: %s', str(e)) + # At this point the SFTP backup failed. We will now check if the user wants + # an e-mail notification about this. + if rec.send_mail_sftp_fail: + try: + ir_mail_server = self.env['ir.mail_server'].search([], order='sequence asc', limit=1) + message = "Dear,\n\nThe backup for the server " + rec.host + " (IP: " + rec.sftp_host + \ + ") failed. Please check the following details:\n\nIP address SFTP server: " + \ + rec.sftp_host + "\nUsername: " + rec.sftp_user + \ + "\n\nError details: " + tools.ustr(e) + \ + "\n\nWith kind regards" + catch_all_domain = self.env["ir.config_parameter"].sudo().get_param("mail.catchall.domain") + response_mail = "auto_backup@%s" % catch_all_domain if catch_all_domain else self.env.user.partner_id.email + msg = ir_mail_server.build_email(response_mail, [rec.email_to_notify], + "Backup from " + rec.host + "(" + rec.sftp_host + + ") failed", + message) + ir_mail_server.send_email(msg) + except Exception: + pass + + # Remove all old files (on local server) in case this is configured.. + if rec.autoremove: + directory = rec.folder + # Loop over all files in the directory. + for f in os.listdir(directory): + fullpath = os.path.join(directory, f) + # Only delete the ones wich are from the current database + # (Makes it possible to save different databases in the same folder) + if rec.name in fullpath: + timestamp = os.stat(fullpath).st_ctime + createtime = datetime.datetime.fromtimestamp(timestamp) + now = datetime.datetime.now() + delta = now - createtime + if delta.days >= rec.days_to_keep: + # Only delete files (which are .dump and .zip), no directories. + if os.path.isfile(fullpath) and (".dump" in f or '.zip' in f): + _logger.info("Delete local out-of-date file: %s", fullpath) + os.remove(fullpath) + + # This is more or less the same as the default Odoo function at + # https://github.com/odoo/odoo/blob/e649200ab44718b8faefc11c2f8a9d11f2db7753/odoo/service/db.py#L209 + # The main difference is that we do not do have a wrapper for the function check_db_management_enabled here and + # that we authenticate based on the cron its user id and by checking if we have 'db.backup' defined in the function + # call. Since this function is called from the cron and since we have these security checks on model and on user_id + # its pretty impossible to hack any way to take a backup. This allows us to disable the Odoo database manager + # which is a MUCH safer way + def _take_dump(self, db_name, stream, model, backup_format='zip'): + """Dump database `db` into file-like object `stream` if stream is None + return a file object with the dump """ + + cron_user_id = self.env.ref('jikimo_auto_backup.backup_scheduler').user_id.id + if self._name != 'db.backup' or cron_user_id != self.env.user.id: + _logger.error('Unauthorized database operation. Backups should only be available from the cron job.') + raise AccessDenied() + + _logger.info('DUMP DB: %s format %s', db_name, backup_format) + + cmd = ['pg_dump', '--no-owner'] + cmd.append(db_name) + + if backup_format == 'zip': + with tempfile.TemporaryDirectory() as dump_dir: + filestore = odoo.tools.config.filestore(db_name) + if os.path.exists(filestore): + shutil.copytree(filestore, os.path.join(dump_dir, 'filestore')) + with open(os.path.join(dump_dir, 'manifest.json'), 'w') as fh: + db = odoo.sql_db.db_connect(db_name) + with db.cursor() as cr: + json.dump(self._dump_db_manifest(cr), fh, indent=4) + cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql')) + odoo.tools.exec_pg_command(*cmd) + if stream: + odoo.tools.osutil.zip_dir(dump_dir, stream, include_dir=False, fnct_sort=lambda file_name: file_name != 'dump.sql') + else: + t=tempfile.TemporaryFile() + odoo.tools.osutil.zip_dir(dump_dir, t, include_dir=False, fnct_sort=lambda file_name: file_name != 'dump.sql') + t.seek(0) + return t + else: + cmd.insert(-1, '--format=c') + stdin, stdout = odoo.tools.exec_pg_command_pipe(*cmd) + if stream: + shutil.copyfileobj(stdout, stream) + else: + return stdout + + def _dump_db_manifest(self, cr): + pg_version = "%d.%d" % divmod(cr._obj.connection.server_version / 100, 100) + cr.execute("SELECT name, latest_version FROM ir_module_module WHERE state = 'installed'") + modules = dict(cr.fetchall()) + manifest = { + 'odoo_dump': '1', + 'db_name': cr.dbname, + 'version': odoo.release.version, + 'version_info': odoo.release.version_info, + 'major_version': odoo.release.major_version, + 'pg_version': pg_version, + 'modules': modules, + } + return manifest diff --git a/jikimo_auto_backup/requirments.txt b/jikimo_auto_backup/requirments.txt new file mode 100644 index 00000000..18db6486 --- /dev/null +++ b/jikimo_auto_backup/requirments.txt @@ -0,0 +1 @@ +# pip3 install paramiko diff --git a/jikimo_auto_backup/security/ir.model.access.csv b/jikimo_auto_backup/security/ir.model.access.csv new file mode 100644 index 00000000..0178d063 --- /dev/null +++ b/jikimo_auto_backup/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +admin_access, db_backup admin access,model_db_backup,base.group_no_one,1,1,1,1 +admin_security_rule, Model db_backup admin access,model_db_backup,jikimo_auto_backup.group_manager,1,1,1,1 diff --git a/jikimo_auto_backup/security/user_groups.xml b/jikimo_auto_backup/security/user_groups.xml new file mode 100644 index 00000000..53bb0d75 --- /dev/null +++ b/jikimo_auto_backup/security/user_groups.xml @@ -0,0 +1,15 @@ + + + + + Auto backup access + User access level for this module + 3 + + + + Manager + + + + diff --git a/jikimo_auto_backup/static/description/emailnotification.png b/jikimo_auto_backup/static/description/emailnotification.png new file mode 100644 index 00000000..14fce118 Binary files /dev/null and b/jikimo_auto_backup/static/description/emailnotification.png differ diff --git a/jikimo_auto_backup/static/description/icon.png b/jikimo_auto_backup/static/description/icon.png new file mode 100644 index 00000000..f96c1437 Binary files /dev/null and b/jikimo_auto_backup/static/description/icon.png differ diff --git a/jikimo_auto_backup/static/description/index.html b/jikimo_auto_backup/static/description/index.html new file mode 100644 index 00000000..f4254967 --- /dev/null +++ b/jikimo_auto_backup/static/description/index.html @@ -0,0 +1,95 @@ +
+
+
+

Automated backups

+

A tool for all your back-ups, internal and external!

+
+
+
+ +
+
+
+

+ Keep your Odoo data safe with this module. Take automated back-ups, remove them automatically + and even write them to an external server through an encrypted tunnel. + You can even specify how long local backups and external backups should be kept, automatically! +

+ +
+
+
+ +
+
+

Connect with an FTP Server

+

Keep your data safe, through an SSH tunnel!

+
+

+ Want to go even further and write your backups to an external server? + You can with this module! Specify the credentials to the server, specify a path and everything will be backed up automatically. This is done through an SSH (encrypted) tunnel, thanks to pysftp, so your data is safe! + +

+
+
+
+ +
+
+
+
+ +
+
+
+

Test connection

+

Checks your credentials in one click

+
+
+
+ + +
+
+
+

+ Want to make sure if the connection details are correct and if Odoo can automatically write them to the remote server? Simply click on the 'Test SFTP Connection' button and you will get message telling you if everything is OK, or what is wrong! +

+
+
+
+ +
+
+

E-mail on backup failure

+

Stay informed of problems, automatically!

+
+

+ Do you want to know if the database backup failed? Check the checkbox 'Auto. E-mail on backup fail' and fill in your e-mail. + Every time a backup fails you will get an e-mail in your mailbox with technical details. +

+
+
+
+ +
+
+
+
+ +
+
+
+

Contact / Support

+

Need help or want extra features?

+
+
+

+ Need help with the configuration or want this module to have more functionalities? + Please create a bug report on the Github issue tracker +

+
+
+
diff --git a/jikimo_auto_backup/static/description/overview.png b/jikimo_auto_backup/static/description/overview.png new file mode 100644 index 00000000..f531afd4 Binary files /dev/null and b/jikimo_auto_backup/static/description/overview.png differ diff --git a/jikimo_auto_backup/static/description/terminalssh.png b/jikimo_auto_backup/static/description/terminalssh.png new file mode 100644 index 00000000..15165f1e Binary files /dev/null and b/jikimo_auto_backup/static/description/terminalssh.png differ diff --git a/jikimo_auto_backup/static/description/testconnection.png b/jikimo_auto_backup/static/description/testconnection.png new file mode 100644 index 00000000..e6d5eea8 Binary files /dev/null and b/jikimo_auto_backup/static/description/testconnection.png differ diff --git a/jikimo_auto_backup/static/description/testconnectionfailed.png b/jikimo_auto_backup/static/description/testconnectionfailed.png new file mode 100644 index 00000000..bdbeb81d Binary files /dev/null and b/jikimo_auto_backup/static/description/testconnectionfailed.png differ diff --git a/jikimo_auto_backup/views/backup_view.xml b/jikimo_auto_backup/views/backup_view.xml new file mode 100644 index 00000000..d708b0e0 --- /dev/null +++ b/jikimo_auto_backup/views/backup_view.xml @@ -0,0 +1,105 @@ + + + db.backup.form + db.backup + form + +
+ + + + + + + + + + + + + + + + +
+ Warning: + Use SFTP with caution! This writes files to external servers under the path you specify. +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss new file mode 100644 index 00000000..b70cc749 --- /dev/null +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -0,0 +1,506 @@ +.test_model { + display: flex !important; +} + +.test_model > .o_form_label { + margin-left: 0px !important; + margin-right: 0px !important; + white-space: nowrap; +} + +div:has(.o_required_modifier) > label::before { + content: '*' !important; + color: red !important; + padding: 0 4px !important; + vertical-align: top !important; + font-size: unset !important; +} + +.my-image div { + + width: 110px !important; + height: 110px !important; +} + +.add_flex { + padding: 5px 0; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.maintenance_name { + font-weight: bold; +} + +.o_kanban_renderer .o_kanban_record .o_kanban_record_has_image_fill .o_kanban_image_fill_left { + flex: unset !important; +} + +.o_kanban_renderer .o_kanban_record .o_kanban_record_bottom { + margin-top: 5px; + display: inline !important; +} + +td.o_required_modifier { + display: table-cell !important; +} + +.show_state { + display: flex; + flex-direction: column; + position: absolute; + top: 28px; + bottom: 0; + right: 18px; + margin: auto; + //height: 34px; + height: unset !important; + align-items: center; +} + +.show_state > div { + width: 20px; + height: 12px; + border: 1px solid #000 +} + +.show_state > div:nth-child(1) { + border-bottom: none; +} + +.show_state > div:nth-child(2) { + border-top: 1px solid black !important; +} + +.oe_kanban_card.kanban_color_2 { + background-color: #FF4343 !important; + color: #fff; +} + +.oe_kanban_card.kanban_color_1 { + background-color: #fff !important; + opacity: 0.7; + color: #777; +} + +.oe_kanban_card.kanban_color_3 { + background-color: rgb(255, 150, 0) !important; + color: #fff; +} + +.my-image div { + width: 122px !important; + height: 122px !important; +} + +.my-image img { + width: 100%; + height: 100%; +} + +.color_1 { + background-color: #27FEA9; +} + +.color_2 { + background-color: #FF4343; +} + +.color_3 { + background-color: rgb(255, 150, 0); +} + +.font_color_1 { + color: rgb(0, 183, 0); +} + +.font_color_2 { + color: #FF4343; +} + +.font_color_3 { + color: rgb(255, 150, 0); +} + +.o_kanban_card_header_title { + font-size: 15px; +} + +.o_kanban_record_bottom { + font-family: '华文中宋'; + //font-weight: bold; +} + +.text-truncate { + overflow: unset !important; + text-overflow: unset !important; + //white-space: nowrap!important; +} + +.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) { + white-space: nowrap !important; +} + +.o_status { + width: 18px; + height: 18px; +} + +.czyg { + font-size: 12px; + margin-right: 10px; + color: #aaa; +} + +.o_kanban_primary_left { + display: flex; + flex-direction: row-reverse; + justify-content: flex-start; +} + +.o_list_view .o_list_table thead { + position: sticky; + top: 0; + //z-index: 100000; +} + +//.o_list_view .o_list_table { +// height: 1799px !important; +//} +.table-responsive { + overflow: unset; +} + +.o_form_view.o_xxl_form_view .o_form_sheet_bg > .o_form_statusbar { + position: sticky !important; + top: 0; + //z-index: 100000; +} + +//----------------------------------------------------------- + +//图文展示换行及对齐 +.many2many_flex { + flex-wrap: wrap; +} + +.many2many_flex > div { + width: 110px; + margin-right: 15px; + display: flex; + flex-direction: column; + align-items: flex-start; +} + +div[class="o_content o_component_with_search_panel"] .oe_kanban_color_0 { + position: relative; + padding: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] img[name="equipment_image"] { + width: 150px !important; + height: 150px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button { + position: absolute; + //top: -52px; + //left: -55px; + width: 80px; +} + +div[class="o_content o_component_with_search_panel"] .o_primary > span:nth-of-type(1) { + position: absolute; + top: 10px; + left: 168px; +} + +div[class="o_content o_component_with_search_panel"] .o_primary > span:nth-of-type(2) { + margin-left: 18px; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_manage_toggle_button { + top: 10px !important; + right: 17px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_record_headings .ml8 { + margin-left: 0px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_card_content { + min-height: 0 !important; + height: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_dashboard:not(.o_legacy_kanban_view) .o_kanban_record > div .o_kanban_card_header + .container.o_kanban_card_content { + margin-top: -5px !important; +} + +div[class="o_content o_component_with_search_panel"] .o_kanban_primary_left { + right: 10px; + padding: 0 !important; +} + +div[class="o_content o_component_with_search_panel"] .show_state { + right: 10px !important; + top: 45px !important; +} + +div[class="o_content o_component_with_search_panel"] .show_state span { + margin-top: 10px; + font-size: 12px; +} + +//div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .row { +// position: absolute; +// top: 55px; +// right: 43.5%; +//} +//------------------------------------------ + +.test_model > .o_form_label { + margin-left: 4px !important; + //line-height: 0 !important; +} + +@media screen and (min-width: 1200px) { + div[class="o_content o_component_with_search_panel"] .o_kanban_primary_right > .row { + right: 52%; + } + + //div[class="o_content o_component_with_search_panel"] .o_kanban_card_content button { + // + // left: -95px; + //} +} + + +//.o_kanban_renderer .o_kanban_record .o_kanban_record_bottom { +// display: flex !important; +// flex-direction: column; +//} + +.o_kanban_renderer .o_kanban_record .o_kanban_record_bottom > div:nth-child(1) > span:nth-child(1) { + display: inline-block; + margin-right: 10px; + +} + +.o_kanban_renderer .o_kanban_record .o_kanban_record_bottom > div:nth-child(1) { + margin-top: -5px; + margin-bottom: 5px; + +} + +.text-bg-warning { + background-color: #FED300 !important; +} + +.test_model>div { + display: flex; + width: 40%; +} + +.test_model>div .o_field_widget { + width: 40% !important; +} + +.o_form_label { + font-weight: 700 !important; +} + +.bigger .o_horizontal_separator { + font-size: 1.5rem; +} + +.o_horizontal_separator { + font-size: 1.5rem; +} +// +//.o_field_widget input[class='o_input'] { +//text-align: center +//} + +div:has(.o_required_modifier) > label::before { + position: absolute; + left: 24px; +} + +//.o_form_view .o_form_label { +// position: relative; +// width: 9rem; +// overflow: hidden; +// text-overflow: ellipsis; +// white-space: nowrap; +// padding-left: 1rem; +//} +// +//.o_form_view .o_form_label:hover { +// white-space: normal; +// overflow: visible; +//} + +.o_form_view { + .o_form_sheet_bg .o_form_sheet { + //max-width: none !important; + width: auto !important; + max-width: 98% !important; + } + .o_FormRenderer_chatterContainer { + max-width: none; + } +} + + +// 2023-11-16 hy 新增 +.o_kanban_card_content .btn-group { + position: unset; +} + +.o_kanban_card_content .btn-group button{ + top: 100px; + left: 168px; +} + + +.o_kanban_primary_right { + position: absolute; + top: 40px; + left: 168px; + padding: 0; + display: flex; + flex-wrap: wrap; + box-sizing: border-box; + .row { + width: 50%; + margin: 0; + >div { + padding: 0; + width: unset; + margin-right: 10px; + } + } +} +.oe_kanban_details li.o_text_overflow { + display: block; +} +.o_stock_kanban .o_kanban_card_content { + .row { + align-items: center; + + .o_kanban_primary_left, .o_kanban_primary_right { + display: block; + } + + .o_kanban_primary_right { + position: unset; + } + } +} +// 机床换刀申请表格宽度设置 +.o_list_table_ungrouped { + min-width: 1089px; +} +// 加工能力\冷却方式 竖列展示改为横列展示 +.processingMethod { + .o_cell.flex-grow-1.flex-sm-grow-0 { + width: 100%!important; + } +} +@media (min-width: 576px) { + .o_inner_group.processingMethod { + grid-template-columns: auto; + } +} + +// 设置所有表格序号列padding为0 +.o_form_view .o_notebook > .tab-content > .tab-pane > :first-child:not(.o_group) .o_field_x2many.o_field_x2many_list tr > :first-child, .o_form_view .o_notebook > .tab-content > .tab-pane > :first-child.o_invisible_modifier + .o_field_widget .o_field_x2many.o_field_x2many_list tr > :first-child { + padding: 0; + text-align: center; +} + +// 设置剩余number类型数据表格列 left +.o_list_renderer .o_list_table thead .o_list_number_th { + text-align:left; +} +.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector).o_list_number { + text-align: left; +} +.o_list_renderer .flex-row-reverse { + flex-direction: unset!important; +} + +.o_list_renderer .flex-row-reverse > .text-end { + text-align: left!important; +} + +// 设置modal弹窗样式 +.modal.o_technical_modal { + .modal-lg { + @media (min-width: 992px) { + max-width: 1200px; + } + @media (min-width: 576px) { + .o_form_view .o_inner_group { + grid-template-columns: auto; + } + } + + } +} + +// 更改表格底部按钮样式 +.o_list_renderer .o_field_x2many_list_row_add a,.treeHeaderBtn,.o_x2m_control_panel .o_cp_buttons .btn{ + display: inline-block; + margin: 5px 0; + font-size: 14px; + color: #71639e; + border: 1px solid #71639e; + padding: 0.2rem 0.6rem; + font-size: 1.08333333rem; + border-radius: 0.25rem; + transition: all .3s; +} +.o_list_renderer .o_field_x2many_list_row_add a:hover,.treeHeaderBtn:hover,.o_x2m_control_panel .o_cp_buttons .btn:hover{ + background: #71639e; + color: #fff +} + +// 修改时间输入框宽度 +.o_datepicker_input.o_input.datetimepicker-input { + width: 200px; +} + + +.o_form_view .o_form_editable .o_row > .o_field_widget, .o_form_view .o_form_editable .o_row > .o_field_widget.o_field_float_time { + width: auto !important; + flex: unset; +} +.addRequired { + padding-left: calc(0.3rem + 2px)!important; +} +.addRequired:before { + content: '*'; + color: red; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); +} +.o_list_renderer .o_list_table tfoot .o_list_number { + text-align: left !important; +} + +.o_field_widget.o_readonly_modifier.o_required_modifier.o_field_many2one[name=production_id] .o_form_uri { + font-weight: bold; + font-size: 20px; +} + +// 修改 【批量排程】【配送】 按钮UI +.btn-secondary { + color: #fff; + background-color: #4A4F59; + border-color: #4A4F59; +} \ No newline at end of file diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss new file mode 100644 index 00000000..5f8a2648 --- /dev/null +++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss @@ -0,0 +1,4 @@ +.row_no { + width: 35px !important; + vertical-align: middle; +} diff --git a/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml b/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml new file mode 100644 index 00000000..f9c25a3d --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/extent_purchase.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/views/list_nums/list_nbCols.js b/jikimo_frontend/static/src/views/list_nums/list_nbCols.js new file mode 100644 index 00000000..1403544f --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_nbCols.js @@ -0,0 +1,11 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch"; +import { ListRenderer } from "@web/views/list/list_renderer"; + +patch(ListRenderer.prototype, '/jikimo_frontend/static/src/views/list_nums/list_nbCols.js', { + get nbCols() { + const nbCols = this._super(...arguments); + return nbCols + 1; + } +}); diff --git a/jikimo_frontend/static/src/views/list_nums/list_nums.xml b/jikimo_frontend/static/src/views/list_nums/list_nums.xml new file mode 100644 index 00000000..d2ad6824 --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_nums.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jikimo_frontend/static/src/views/list_nums/list_nums2.xml b/jikimo_frontend/static/src/views/list_nums/list_nums2.xml new file mode 100644 index 00000000..9b2764d9 --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_nums2.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/views/list_nums/list_nums3.xml b/jikimo_frontend/static/src/views/list_nums/list_nums3.xml new file mode 100644 index 00000000..b1af1367 --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_nums3.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/jikimo_frontend/static/src/views/list_nums/list_render.xml b/jikimo_frontend/static/src/views/list_nums/list_render.xml new file mode 100644 index 00000000..7ba46848 --- /dev/null +++ b/jikimo_frontend/static/src/views/list_nums/list_render.xml @@ -0,0 +1,47 @@ + + diff --git a/jikimo_frontend/views/bye_odoo.xml b/jikimo_frontend/views/bye_odoo.xml new file mode 100644 index 00000000..0930f551 --- /dev/null +++ b/jikimo_frontend/views/bye_odoo.xml @@ -0,0 +1,35 @@ + + + + + +