@ -0,0 +1,47 @@ |
|||||
|
.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg |
||||
|
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html |
||||
|
:alt: License: LGPL-3 |
||||
|
|
||||
|
Infinito Plus Backend Theme |
||||
|
=========================== |
||||
|
* Infinito Plus 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/16.0/legal/licenses/licenses.html) |
||||
|
|
||||
|
Company |
||||
|
------- |
||||
|
* 'Cybrosys Techno Solutions <https://cybrosys.com/>'__ |
||||
|
|
||||
|
Credits |
||||
|
------- |
||||
|
* 'Cybrosys Techno Solutions <https://cybrosys.com/>'__ |
||||
|
Author : Farseen, Musthafa @Cybrosys |
||||
|
Author : Sigha CK @Cybrosys |
||||
|
|
||||
|
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 |
||||
|
========== |
||||
|
.. image:: https://cybrosys.com/images/logo.png |
||||
|
:target: https://cybrosys.com |
||||
|
This module is maintained by Cybrosys Technologies. |
||||
|
|
||||
|
For support and more information, please visit https://www.cybrosys.com |
||||
|
|
||||
|
Further information |
||||
|
=================== |
||||
|
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,23 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from . import controllers |
||||
|
from . import models |
@ -0,0 +1,63 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
{ |
||||
|
'name': "Infinito Plus Backend Theme", |
||||
|
'description': """Utmost and dynamic backend theme for Odoo 16""", |
||||
|
'summary': """The Backend Theme Infinito Is A Dynamic And Ultimate Theme |
||||
|
For Your Odoo V16. This Theme Will Give You A New Experience |
||||
|
With Odoo.Main Highlight Of The Theme Is You Can Dynamically |
||||
|
Change The Fonts,Animations, Languages,Chatbox Layouts...Etc""", |
||||
|
'category': "Themes/Backend", |
||||
|
'version': "16.0.1.0.0", |
||||
|
'author': 'Cybrosys Techno Solutions', |
||||
|
'company': 'Cybrosys Techno Solutions', |
||||
|
'maintainer': 'Cybrosys Techno Solutions', |
||||
|
'website': "https://www.cybrosys.com", |
||||
|
'depends': ['backend_theme_infinito', 'web'], |
||||
|
"data": [ |
||||
|
'security/ir.model.access.csv' |
||||
|
], |
||||
|
'assets': { |
||||
|
'web.assets_backend': { |
||||
|
'/backend_theme_infinito_plus/static/src/xml/theme_editor.xml', |
||||
|
'/backend_theme_infinito_plus/static/src/xml/ListViewRefresh.xml', |
||||
|
'/backend_theme_infinito_plus/static/src/xml/systray.xml', |
||||
|
'/backend_theme_infinito_plus/static/src/xml/AddGoogleFonts.xml', |
||||
|
'/backend_theme_infinito_plus/static/src/xml/font.xml', |
||||
|
'/backend_theme_infinito_plus/static/src/css/font.css', |
||||
|
'/backend_theme_infinito_plus/static/src/css/chatter.css', |
||||
|
'/backend_theme_infinito_plus/static/src/scss/animation.scss', |
||||
|
'/backend_theme_infinito_plus/static/src/js/navbar.js', |
||||
|
'/backend_theme_infinito_plus/static/src/js/AdvancedFeatures.js', |
||||
|
'/backend_theme_infinito_plus/static/src/js/systray.js', |
||||
|
'/backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js', |
||||
|
}, |
||||
|
}, |
||||
|
'images': [ |
||||
|
'static/description/banner.png', |
||||
|
'static/description/theme_screenshot.png', |
||||
|
], |
||||
|
'license': 'LGPL-3', |
||||
|
'installable': True, |
||||
|
'application': False, |
||||
|
'auto_install': False, |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from . import main |
@ -0,0 +1,117 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
import json |
||||
|
import os |
||||
|
|
||||
|
from odoo.addons.backend_theme_infinito.controllers.main import ThemeStudio |
||||
|
from odoo.addons.backend_theme_infinito.controllers.main import minify_css |
||||
|
|
||||
|
from odoo import http |
||||
|
from odoo.http import request |
||||
|
|
||||
|
|
||||
|
class ThemeStudioPlus(ThemeStudio): |
||||
|
""" Class for adding new features""" |
||||
|
|
||||
|
@http.route(['/theme_studio/save_styles_plus'], type="json") |
||||
|
def save_styles_plus(self, new_style): |
||||
|
"""Create Dynamic Styles css file for chat box layout""" |
||||
|
changed_styles = json.loads(new_style) |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/controllers', '') |
||||
|
file_path = working_dir + '/static/src/css/chatter.css' |
||||
|
style_file = open(file_path, 'a') |
||||
|
style_file.truncate(0) |
||||
|
if os.stat(file_path).st_size == 0: |
||||
|
style_file.write('/* This file is generated automatically by ' |
||||
|
'Theme Infinito Plus */\n') |
||||
|
style_file.write('.o_ChatWindow' + ' {\n') |
||||
|
for i in changed_styles[0]: |
||||
|
style_file.write('\t' + i + ':' + changed_styles[0][i] + ';\n') |
||||
|
style_file.write('}\n') |
||||
|
style_file.close() |
||||
|
minify_css(file_path) |
||||
|
return True |
||||
|
|
||||
|
@http.route(['/theme_studio/animation_styles'], type="json") |
||||
|
def animation_styles(self, style): |
||||
|
"""create the Dynamic css file for animation""" |
||||
|
animated = json.loads(style) |
||||
|
saved_style = animated[0] |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
file_path = working_dir.replace('/controllers', |
||||
|
'/static/src/scss/animation.scss') |
||||
|
read_file = open(file_path, 'r') |
||||
|
css = read_file.read() |
||||
|
write_file = open(file_path, 'w') |
||||
|
for line in css.split('\n'): |
||||
|
if 'ease-in' in line: |
||||
|
write_file.write(css.replace(line.strip(), |
||||
|
'animation:' + saved_style + '#{' |
||||
|
'$tr * .1}s ease-in !important;')) |
||||
|
write_file.close() |
||||
|
read_file.close() |
||||
|
|
||||
|
@http.route(['/theme_studio/set_advanced_data_plus'], type="json") |
||||
|
def set_advanced_data_plus(self, vals): |
||||
|
"""save the features from theme studio""" |
||||
|
set_param = request.env['ir.config_parameter'].sudo().set_param |
||||
|
set_param('backend_theme_infinito_plus.is_refresh', |
||||
|
vals['infinitoRefresh']) |
||||
|
set_param('backend_theme_infinito_plus.chatbox_position', |
||||
|
vals['chatBoxPosition']) |
||||
|
set_param('backend_theme_infinito_plus.chatbox_position', |
||||
|
vals['chatBoxPosition']) |
||||
|
vals.get('chatBoxPosition') |
||||
|
vals.get('infinitoAnimation') |
||||
|
font = vals.get('infinitoGoogleFont') |
||||
|
font_obj = request.env['infinito.google.font'] |
||||
|
if font == 0: |
||||
|
font_obj.remove_fonts() |
||||
|
elif font: |
||||
|
font_obj.browse(font).set_css() |
||||
|
|
||||
|
@http.route(['/theme_studio/set_advanced_data_user_plus'], type="json") |
||||
|
def set_advanced_data_user_plus(self, vals): |
||||
|
"""Update the 'is_refresh' field of the current user""" |
||||
|
request.env.user.write({ |
||||
|
'is_refresh': vals['infinitoRefresh'], |
||||
|
}) |
||||
|
return True |
||||
|
|
||||
|
@http.route(['/theme_studio_plus/reset_to_default_style'], type="json") |
||||
|
def reset_to_default_style(self): |
||||
|
"""rest to default styles""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
style_file_path = working_dir.replace('controllers', |
||||
|
'static/src/css/font.css') |
||||
|
animation_file_path = working_dir.replace('controllers', |
||||
|
'static/src/scss/animation.scss') |
||||
|
chat_file_path = working_dir.replace('controllers', |
||||
|
'static/src/css/chatter.css') |
||||
|
style_file = open(style_file_path, 'w') |
||||
|
style_file.write('') |
||||
|
animation_file = open(animation_file_path, 'w') |
||||
|
animation_file.write('') |
||||
|
chat_file = open(chat_file_path, 'w') |
||||
|
chat_file.write('') |
||||
|
return True |
@ -0,0 +1,6 @@ |
|||||
|
## Module <backend_theme_infinito_plus_> |
||||
|
|
||||
|
#### 05.05.2023 |
||||
|
#### Version 16.0.1.0.0 |
||||
|
#### ADD |
||||
|
- Initial Commit for Infinito Plus Backend Theme |
@ -0,0 +1,25 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from . import add_google_fonts |
||||
|
from . import ir_http |
||||
|
from . import res_config_settings |
||||
|
from . import res_users |
@ -0,0 +1,90 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
import os |
||||
|
|
||||
|
import requests |
||||
|
|
||||
|
from odoo import api, fields, models, _ |
||||
|
from odoo.exceptions import ValidationError |
||||
|
|
||||
|
|
||||
|
class GoogleFont(models.Model): |
||||
|
"""Used for adding google fonts""" |
||||
|
_name = 'infinito.google.font' |
||||
|
_description = 'Add Google Fonts' |
||||
|
|
||||
|
name = fields.Char(string='Font Name', help="Name of the font") |
||||
|
font_url = fields.Text(string='Font URL', help="Store the font URL") |
||||
|
font = fields.Text(string='Font', help="Font style") |
||||
|
|
||||
|
@api.model |
||||
|
def save_google_fonts(self, g_font): |
||||
|
"""Function to store fonts in database""" |
||||
|
record = self.search([('font_url', '=', g_font[1])]) |
||||
|
if record: |
||||
|
# TODO: Raise warning |
||||
|
raise ValidationError(_('Font already existing')) |
||||
|
else: |
||||
|
font = self.get_css(g_font[0]) |
||||
|
rec = self.create({ |
||||
|
'name': g_font[0], |
||||
|
'font_url': g_font[1], |
||||
|
'font': font |
||||
|
}) |
||||
|
rec.set_css() |
||||
|
|
||||
|
def get_css(self, name): |
||||
|
"""get the css file of selected google font""" |
||||
|
headers_woff2 = { |
||||
|
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' |
||||
|
'(KHTML, like Gecko)' |
||||
|
'Chrome/101.0.4951.41 Safari/537.36', |
||||
|
} |
||||
|
url = f'https://fonts.googleapis.com/css?family={name}&display=swap' |
||||
|
req = requests.get(url, timeout=5, headers=headers_woff2) |
||||
|
return req.content |
||||
|
|
||||
|
def set_css(self): |
||||
|
"""open the file write the style in to the css file""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/models', '/static/src/css/font.css') |
||||
|
# open the file in write mode |
||||
|
with open(working_dir, 'w') as file: |
||||
|
style = f""" |
||||
|
{self.font} |
||||
|
* {{ |
||||
|
font-family: '{self.name}' !important; |
||||
|
}} |
||||
|
.fa {{ |
||||
|
font: normal normal normal 14px/1 FontAwesome !important;}} |
||||
|
.oi {{ |
||||
|
font-family: 'odoo_ui_icons' !important;}} |
||||
|
""" |
||||
|
file.write(style) |
||||
|
|
||||
|
@staticmethod |
||||
|
def remove_fonts(): |
||||
|
"""remove the style when changing the font""" |
||||
|
working_dir = os.path.dirname(os.path.realpath(__file__)) |
||||
|
working_dir = working_dir.replace('/models', '/static/src/css/font.css') |
||||
|
with open(working_dir, 'w') as file: |
||||
|
file.write('') |
@ -0,0 +1,52 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import models |
||||
|
|
||||
|
|
||||
|
class IrHttp(models.AbstractModel): |
||||
|
"""Class for session information""" |
||||
|
_inherit = 'ir.http' |
||||
|
|
||||
|
def session_info(self): |
||||
|
"""pass the session information """ |
||||
|
res = super(IrHttp, self).session_info() |
||||
|
get_param = self.env['ir.config_parameter'].sudo().get_param |
||||
|
all_langs = self.env['res.lang'].get_installed() |
||||
|
res['currentLang'] = \ |
||||
|
list(filter(lambda x: x[0] == self.env.user.lang, all_langs))[0] |
||||
|
res['availableLanguages'] = all_langs |
||||
|
if self.env.user.has_group('base.group_user'): |
||||
|
user_edit = get_param( |
||||
|
'backend_theme_infinito_plus.is_user_edit', default=False) |
||||
|
res['userEdit'] = user_edit |
||||
|
if user_edit: |
||||
|
res['infinitoRefresh'] = self.env.user.is_refresh |
||||
|
else: |
||||
|
res['infinitoRefresh'] = get_param( |
||||
|
'backend_theme_infinito_plus.is_refresh', default=False) |
||||
|
res['chatBoxPosition'] = get_param( |
||||
|
'backend_theme_infinito_plus.chatbox_position', |
||||
|
default=False) |
||||
|
res['infinitoAnimation'] = get_param( |
||||
|
'backend_theme_infinito_plus.animation_plus', |
||||
|
default=False) |
||||
|
return res |
@ -0,0 +1,59 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import api, fields, models |
||||
|
|
||||
|
|
||||
|
class ResConfigSettings(models.TransientModel): |
||||
|
"""Class for adding new fields in configuration settings""" |
||||
|
_inherit = 'res.config.settings' |
||||
|
|
||||
|
is_refresh = fields.Boolean(string='Refresh', help='Tree,Kanban Refresh ' |
||||
|
'mode Enabled', |
||||
|
default=False) |
||||
|
chatbox_position = fields.Char(string="ChatBox position", |
||||
|
help="different layouts for chatBox") |
||||
|
animation_plus = fields.Char(stirng="Animation", |
||||
|
help="Different Animations") |
||||
|
|
||||
|
@api.model |
||||
|
def get_values(self): |
||||
|
"""Get the current values for the configuration settings""" |
||||
|
res = super(ResConfigSettings, self).get_values() |
||||
|
get_param = self.env['ir.config_parameter'].sudo().get_param |
||||
|
res['is_refresh'] = get_param('backend_theme_infinito_plus.is_refresh', |
||||
|
default=False) |
||||
|
res['chatbox_position'] = get_param('backend_theme_infinito_plus' |
||||
|
'.chatbox_position') |
||||
|
res['animation_plus'] = get_param('backend_theme_infinito_plus' |
||||
|
'.animation_plus') |
||||
|
return res |
||||
|
|
||||
|
@api.model |
||||
|
def set_values(self): |
||||
|
"""Update the values of the configuration settings""" |
||||
|
set_param = self.env['ir.config_parameter'].sudo().set_param |
||||
|
set_param('backend_theme_infinito_plus.is_refresh', self.is_refresh) |
||||
|
set_param('backend_theme_infinito_plus.chatbox_position', |
||||
|
self.chatbox_position) |
||||
|
set_param('backend_theme_infinito_plus.animation_plus', |
||||
|
self.animation_plus) |
||||
|
super(ResConfigSettings, self).set_values() |
@ -0,0 +1,31 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################### |
||||
|
# |
||||
|
# Cybrosys Technologies Pvt. Ltd. |
||||
|
# |
||||
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
||||
|
# Author: Sigha CK (odoo@cybrosys.com) |
||||
|
# |
||||
|
# 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 <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################### |
||||
|
from odoo import fields, models |
||||
|
|
||||
|
|
||||
|
class User(models.Model): |
||||
|
"""class for user specific datas""" |
||||
|
_inherit = 'res.users' |
||||
|
|
||||
|
is_refresh = fields.Boolean(string='Tree,Kanban Refresh mode Enabled', |
||||
|
help="Refreshing feature for specific users", |
||||
|
default=False) |
|
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 284 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 737 KiB |
After Width: | Height: | Size: 1.4 MiB |
After Width: | Height: | Size: 2.4 MiB |
After Width: | Height: | Size: 359 KiB |
After Width: | Height: | Size: 107 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,512 @@ |
|||||
|
<!-- HERO --> |
||||
|
<div class="container"> |
||||
|
<div class="row" |
||||
|
style="padding: 4rem 2.5rem 0 !important; background-color: #fff !important;"> |
||||
|
<div class="col-lg-12 d-flex flex-column align-items-center"> |
||||
|
<h1 class="text-center text-uppercase" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-size: 67px !important; color: #791d97; font-weight: 900 !important;"> |
||||
|
INFINITO PLUS<span style="color:#5154a5;">Backend Theme </span><sup></sup> |
||||
|
</h1> |
||||
|
<p class="my-1 text-center text-uppercase" |
||||
|
style="letter-spacing: 4px !important; color: #74788D !important;"> |
||||
|
Utmost and dynamic backend theme for Odoo 16</p> |
||||
|
</div> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" |
||||
|
style="margin: 2rem 0;"> |
||||
|
<img src="./assets/hero.png" width="100%" height="auto" |
||||
|
class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF HERO --> |
||||
|
|
||||
|
<!-- OVERVIEW --> |
||||
|
<div class="container"> |
||||
|
<div class="row" |
||||
|
style="padding: 0rem 2.5rem !important; background-color: #fff !important;"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center"> |
||||
|
<p class="my-1 text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; color: #212121 !important;"> |
||||
|
The Backend Theme Infinito Is A Dynamic And Ultimate Theme For |
||||
|
Your Odoo V16. |
||||
|
This Theme Will Give You A New Experience |
||||
|
With Odoo. Main Highlight Of The Theme Is You Can Dynamically |
||||
|
Change The Fonts, animation, Chatbox Layout,...Etc. |
||||
|
Moreover It Act As A Studio Based Theme. It Also Provides |
||||
|
Language switching feature. |
||||
|
It Is A Perfect Choice For Your Odoo Backend And An Attractive |
||||
|
Theme For Your Odoo 16. |
||||
|
</p> |
||||
|
</div> |
||||
|
<div class="col-lg-12 mt-4"> |
||||
|
<div class="alert alert-warning text-center" role="alert"> |
||||
|
<i class="fa fa-exclamation-triangle mr-2" |
||||
|
aria-hidden="true"></i>Please make sure that you install |
||||
|
all |
||||
|
your apps prior to the installation of this theme. |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF OVERVIEW--> |
||||
|
|
||||
|
<!-- FEATURE --> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Features</h2> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<!-- RESPONSIVE --> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important;background-color: #fff !important;border-top: 5px solid #791d97 !important;min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/refresh_icon.gif" width="100%" |
||||
|
height="auto" |
||||
|
class="img-responsive"> |
||||
|
</div> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-8" style="padding: 2.5rem !important;"> |
||||
|
<div class="text-center" |
||||
|
style="font-size: 0.9rem !important; background-color: #791d97 !important; padding: 0.5 1.5rem !important; width: 60px; color: #ffffff !important; font-weight: 700; border-radius: 0.2rem !important; margin: 10px 0 !important;"> |
||||
|
New |
||||
|
</div> |
||||
|
<h3 style="font-weight: 700 !important;">View Refresh</h3> |
||||
|
<h6 |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
</h6> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF RESPONSIVE --> |
||||
|
|
||||
|
<!-- FEATURE Infinito Dynamic Styling--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Infinito Animation</h3> |
||||
|
<h6 |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
The significant and attractive feature of the Backend Theme |
||||
|
Infinito is its dynamic and powerful styling. |
||||
|
The user can select different animation. The new Backend |
||||
|
Theme Infinito V16 delivers you an entirely redesigned |
||||
|
Kanban view |
||||
|
and Kanban Group View. The animated view provides a |
||||
|
comfortable experience for the users. |
||||
|
</h6> |
||||
|
<div class="row mt-4"> |
||||
|
<div class="col-lg-6"> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Dynamic Styles</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Clean Layout</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/animation.gif" |
||||
|
width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURE --> |
||||
|
|
||||
|
<!-- TWO COLUMN BLOCK Sidebar--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem;padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<h3 class="mx-4 mt-3" style="font-weight: 700 !important;"> |
||||
|
ChatBox Layout Customization</h3> |
||||
|
<h6 class="mx-4" |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
Backend Theme Infinito V16 ensures stunning themes for your Odoo |
||||
|
16 platform. |
||||
|
The new chatbox layout with more customization options provides |
||||
|
a better experience. |
||||
|
The system encompasses the Left, Right, Top, Bottom positions, |
||||
|
user can select position from these positions. |
||||
|
</h6> |
||||
|
<div class="mx-4 my-4"> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Bottom Left</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Bottom Right</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Top Right</p> |
||||
|
</div> |
||||
|
<div class="d-flex"> |
||||
|
<i class="fa fa-check-square mr-2" |
||||
|
style="color:#791d97 !important; margin-top: 5px !important;"></i> |
||||
|
<p>Top Left</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/chatbox_layout.png" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- FEATURE full screen app bar--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Google Font</h3> |
||||
|
<h6 class="mx-4" |
||||
|
style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
User can customize fonts.This customization options provides a |
||||
|
better experience. |
||||
|
</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/google_fonts.gif" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURE --> |
||||
|
|
||||
|
<!-- FEATURE Language Switch--> |
||||
|
<div class="container" style="margin-top: 3rem;"> |
||||
|
<div class="row shadow" |
||||
|
style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top: 5px solid #791d97 !important; min-width: 94% !important;"> |
||||
|
<div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> |
||||
|
<h3 style="font-weight: 700 !important;">Language Switching</h3> |
||||
|
<h6 style="font-style: Montserrat, 'sans-serif' !important; color: #2A3042 !important; font-weight: 300 !important;"> |
||||
|
You can switch languages easily. All added languages will be |
||||
|
visible on systray option from where you can select the |
||||
|
language. |
||||
|
</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding-left: 0 !important; padding-right: 0!important;"> |
||||
|
<img src="./assets/screenshots/gif/swtich_languages.gif" width="100%" |
||||
|
height="auto" class="img-responsive"> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- END OF FEATURE --> |
||||
|
<!-- END OF SCREENSHOTS --> |
||||
|
|
||||
|
<!-- OUR SERVICES --> |
||||
|
<section class="container" style="margin-top: 6rem !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Our Services</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/cogs.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Customization</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/wrench.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/lifebuoy.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Support</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/user.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Hire |
||||
|
Odoo |
||||
|
Developer</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #54a0ff !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/puzzle.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Integration</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/update.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Migration</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/consultation.png" |
||||
|
class="img-responsive" height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Consultancy</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/training.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Implementation</h6> |
||||
|
</div> |
||||
|
<div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> |
||||
|
<div class="d-flex justify-content-center align-items-center mx-3 my-3" |
||||
|
style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> |
||||
|
<img src="assets/icons/license.png" class="img-responsive" |
||||
|
height="48px" width="48px"> |
||||
|
</div> |
||||
|
<h6 class="text-center" |
||||
|
style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> |
||||
|
Odoo |
||||
|
Licensing Consultancy</h6> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF END OF OUR SERVICES --> |
||||
|
|
||||
|
<!-- OUR INDUSTRIES --> |
||||
|
<section class="container" |
||||
|
style="margin-top: 6rem !important; background-color: #fff !important;"> |
||||
|
<div class="row"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Our Industries</h2> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/trading-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Trading |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easily |
||||
|
procure |
||||
|
and |
||||
|
sell your products</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/pos-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
POS |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Easy |
||||
|
configuration |
||||
|
and convivial experience</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/education-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Education |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
A |
||||
|
platform for |
||||
|
educational management</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/manufacturing-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Manufacturing |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Plan, |
||||
|
track and |
||||
|
schedule your operations</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/ecom-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
E-commerce & Website |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Mobile |
||||
|
friendly, |
||||
|
awe-inspiring product pages</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/service-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Service Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Keep |
||||
|
track of |
||||
|
services and invoice</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/restaurant-black.png" |
||||
|
class="img-responsive mb-3" height="48px" |
||||
|
width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Restaurant |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
Run |
||||
|
your bar or |
||||
|
restaurant methodically</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="col-lg-3"> |
||||
|
<div class="my-4 d-flex flex-column justify-content-center" |
||||
|
style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> |
||||
|
<img src="./assets/icons/hotel-black.png" |
||||
|
class="img-responsive mb-3" height="48px" width="48px"> |
||||
|
<h5 |
||||
|
style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> |
||||
|
Hotel Management |
||||
|
</h5> |
||||
|
<p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> |
||||
|
An |
||||
|
all-inclusive |
||||
|
hotel management application</p> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF END OF OUR INDUSTRIES --> |
||||
|
|
||||
|
<!-- FOOTER --> |
||||
|
<!-- Footer Section --> |
||||
|
<section class="container" |
||||
|
style="margin: 5rem auto 2rem; background-color: #fff !important;"> |
||||
|
<div class="row" style="max-width:1540px;"> |
||||
|
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mb-4"> |
||||
|
<h2 style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> |
||||
|
Need Help?</h2> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- Contact Cards --> |
||||
|
<div class="row d-flex justify-content-center align-items-center" |
||||
|
style="max-width:1540px; margin: 0 auto 2rem auto;"> |
||||
|
<div class="col-lg-12" |
||||
|
style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> |
||||
|
<div class="row mt-4"> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="mailto:odoo@cybrosys.com" target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #4d4d4d; color: #FFF; border-radius: 4px;"><i |
||||
|
class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> |
||||
|
</div> |
||||
|
<div class="col-lg-6"> |
||||
|
<a href="https://api.whatsapp.com/send?phone=918606827707" |
||||
|
target="_blank" |
||||
|
class="btn btn-block mb-2 deep_hover" |
||||
|
style="text-decoration: none; background-color: #25D366; color: #FFF; border-radius: 4px;"> |
||||
|
<i class="fa fa-whatsapp mr-2"></i>+91 86068 |
||||
|
27707</a> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<!-- End of Contact Cards --> |
||||
|
</section> |
||||
|
<!-- Footer --> |
||||
|
<section class="oe_container" |
||||
|
style="padding: 2rem 3rem 1rem; background-color: #fff !important;"> |
||||
|
<div class="row" |
||||
|
style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> |
||||
|
<!-- Logo --> |
||||
|
<div class="col-lg-12 d-flex justify-content-center align-items-center" |
||||
|
style="margin-top: 3rem;"> |
||||
|
<img src="https://www.cybrosys.com/images/logo.png" |
||||
|
width="200px" height="auto"/> |
||||
|
</div> |
||||
|
<!-- End of Logo --> |
||||
|
</div> |
||||
|
</section> |
||||
|
<!-- END OF FOOTER --> |
After Width: | Height: | Size: 975 KiB |
@ -0,0 +1,2 @@ |
|||||
|
/* This Styles are generated automatically by Theme Studio */ |
||||
|
.o_ChatWindow {top:10px !important;left:10px !important;right:auto !important;} |
@ -0,0 +1,55 @@ |
|||||
|
/* This Styles are generated automatically by Theme Studio */ |
||||
|
/* cyrillic-ext */ |
||||
|
@font-face { |
||||
|
font-family: 'Rubik Iso'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/rubikiso/v2/x3dickHUfr-S4VAI4sAxdvoDjy8.woff2) format('woff2'); |
||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; |
||||
|
} |
||||
|
/* cyrillic */ |
||||
|
@font-face { |
||||
|
font-family: 'Rubik Iso'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/rubikiso/v2/x3dickHUfr-S4VAI4sAxf_oDjy8.woff2) format('woff2'); |
||||
|
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; |
||||
|
} |
||||
|
/* hebrew */ |
||||
|
@font-face { |
||||
|
font-family: 'Rubik Iso'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/rubikiso/v2/x3dickHUfr-S4VAI4sAxefoDjy8.woff2) format('woff2'); |
||||
|
unicode-range: U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; |
||||
|
} |
||||
|
/* latin-ext */ |
||||
|
@font-face { |
||||
|
font-family: 'Rubik Iso'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/rubikiso/v2/x3dickHUfr-S4VAI4sAxdfoDjy8.woff2) format('woff2'); |
||||
|
unicode-range: U+0100-02AF, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; |
||||
|
} |
||||
|
/* latin */ |
||||
|
@font-face { |
||||
|
font-family: 'Rubik Iso'; |
||||
|
font-style: normal; |
||||
|
font-weight: 400; |
||||
|
font-display: swap; |
||||
|
src: url(https://fonts.gstatic.com/s/rubikiso/v2/x3dickHUfr-S4VAI4sAxe_oD.woff2) format('woff2'); |
||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; |
||||
|
} |
||||
|
|
||||
|
* { |
||||
|
font-family: 'Rubik Iso' !important; |
||||
|
} |
||||
|
.fa { |
||||
|
font: normal normal normal 14px/1 FontAwesome !important;} |
||||
|
.oi { |
||||
|
font-family: 'odoo_ui_icons' !important;} |
||||
|
|
@ -0,0 +1,204 @@ |
|||||
|
odoo.define('backend_theme_infinito_plus.AdvancedFeatures', function(require) { |
||||
|
"use strict"; |
||||
|
const {mount} = owl; |
||||
|
var AdvancedFeatures = require('backend_theme_infinito.AdvancedFeatures'); |
||||
|
var ajax = require('web.ajax'); |
||||
|
var session = require('web.session'); |
||||
|
var Dialog = require('web.Dialog'); |
||||
|
var core = require('web.core'); |
||||
|
var _t = core._t; |
||||
|
var qweb = core.qweb; |
||||
|
var rpc = require('web.rpc'); |
||||
|
// includes newly added features
|
||||
|
AdvancedFeatures.include({ |
||||
|
events: _.extend ({}, AdvancedFeatures.prototype.events, { |
||||
|
'click #infinito_font_select': '_onAddGoogleFontClick', |
||||
|
'change #infinito_font_select': 'onFontChange', |
||||
|
'change #chatbox_position': 'onPositionChange', |
||||
|
'change #animated_view': 'onAnimationChange', |
||||
|
}), |
||||
|
init: function(parent, type) { |
||||
|
this._super.apply(this, arguments); |
||||
|
this.chatBoxPosition = ['Top Right', 'Top Left', 'Bottom Right', 'Bottom Left'] |
||||
|
this.infinitoAnimation = ['Default', 'Scale', 'Slide in'] |
||||
|
}, |
||||
|
// function works when changing animations
|
||||
|
onAnimationChange: function(ev) { |
||||
|
let options = ev.target.value |
||||
|
if (options == 'Scale') { |
||||
|
this.animated_id = 1 |
||||
|
} else if (options == 'Slide in') { |
||||
|
this.animated_id = -1 |
||||
|
} else { |
||||
|
this.animated_id = 0 |
||||
|
} |
||||
|
}, |
||||
|
// function works when changing fonts
|
||||
|
onFontChange: function(ev) { |
||||
|
let options = ev.target.options |
||||
|
let selected = this.$(options[options.selectedIndex]) |
||||
|
if (selected.hasClass('add-font')) { |
||||
|
return |
||||
|
} else if (selected.hasClass('system-font')) { |
||||
|
this.font_id = 0 |
||||
|
} else { |
||||
|
this.font_id = parseInt(selected.data('id')) |
||||
|
} |
||||
|
}, |
||||
|
//render all the features while opening theme studio
|
||||
|
async renderData() { |
||||
|
this.font_id = false |
||||
|
this.chat_style = [] |
||||
|
this._super.apply(this, arguments); |
||||
|
this.$el.find('#navbarRefreshToggler').attr('checked', session.infinitoRefresh); |
||||
|
rpc.query({ |
||||
|
model: "infinito.google.font", |
||||
|
method: 'search_read', |
||||
|
args: [], |
||||
|
}).then((data) => { |
||||
|
this.$el.find('.infinito_font_select').html(qweb.render('theme_editor_sidebar_advanced_fonts', { |
||||
|
data |
||||
|
})) |
||||
|
}); |
||||
|
let position_content = ''; |
||||
|
for (let position of this.chatBoxPosition) { //append different positions to the selection as option
|
||||
|
position_content += `<option value="${position}">${position}</option>`; |
||||
|
} |
||||
|
this.$el.find('#chatbox_position').html(position_content); |
||||
|
this.$el.find('#chatbox_position').val(session.chatBoxPosition); |
||||
|
let animation_content = ''; |
||||
|
for (let animation of this.infinitoAnimation) { //append different animations to the selection as option
|
||||
|
animation_content += `<option value="${animation}">${animation}</option>`; |
||||
|
} |
||||
|
this.$el.find('#animated_view').html(animation_content); |
||||
|
this.$el.find('#animated_view').val(session.infinitoAnimation); |
||||
|
}, |
||||
|
// save the changes
|
||||
|
async _SaveChanges() { |
||||
|
this._super.apply(this, arguments); |
||||
|
let vals = { |
||||
|
'infinitoRefresh': this.$el.find('#navbarRefreshToggler')[0].checked, |
||||
|
'infinitoGoogleFont': this.font_id, |
||||
|
'chatBoxPosition': this.$el.find('#chatbox_position').val(), |
||||
|
'animations': this.animated_id, |
||||
|
'infinitoAnimation': this.$el.find("#animated_view").val() |
||||
|
} |
||||
|
var chat_style = this.chat_style |
||||
|
session.infinitoRefresh = vals.infinitoRefresh; |
||||
|
session.chatBoxPosition = vals.chatBoxPosition; |
||||
|
session.infinitoAnimation = vals.infinitoAnimation; |
||||
|
// save animation from the selection
|
||||
|
var style = []; |
||||
|
if (vals.animations == 1) { |
||||
|
style = []; |
||||
|
style.push('infinito_kanban_scale'); |
||||
|
} else if (vals.animations == 0) { |
||||
|
style = []; |
||||
|
style.push('infinito_kanban_shake'); |
||||
|
} else if (vals.animations == -1) { |
||||
|
style = []; |
||||
|
style.push('infinito_kanban_slide_in'); |
||||
|
} |
||||
|
if (style.length != 0) { |
||||
|
await ajax.jsonRpc('/theme_studio/animation_styles', 'call', { |
||||
|
'style': JSON.stringify(style) |
||||
|
}); |
||||
|
} |
||||
|
if (chat_style.length != 0) { |
||||
|
await ajax.jsonRpc('/theme_studio/save_styles_plus', 'call', { |
||||
|
'new_style': JSON.stringify(chat_style) |
||||
|
}); |
||||
|
} |
||||
|
if (this.type == 'global') { |
||||
|
await ajax.jsonRpc('/theme_studio/set_advanced_data_plus', 'call', { |
||||
|
vals |
||||
|
}).then((_) => { |
||||
|
this._Close(); |
||||
|
}) |
||||
|
} else { |
||||
|
await ajax.jsonRpc('/theme_studio/set_advanced_data_user_plus', 'call', { |
||||
|
vals |
||||
|
}).then((_) => { |
||||
|
this._Close(); |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
// on changing chatbox position
|
||||
|
async onPositionChange(ev) { |
||||
|
let val = ev.target.value; |
||||
|
var new_style = []; |
||||
|
if (val == 'Top Right') { |
||||
|
new_style = []; |
||||
|
new_style.push({ |
||||
|
'top': '10px', |
||||
|
'left': 'auto' |
||||
|
}); |
||||
|
} |
||||
|
if (val == 'Top Left') { |
||||
|
new_style = []; |
||||
|
new_style.push({ |
||||
|
'top': '10px', |
||||
|
'left': '10px', |
||||
|
'right': 'auto' |
||||
|
}); |
||||
|
} |
||||
|
if (val == 'Bottom Left') { |
||||
|
new_style = []; |
||||
|
new_style.push({ |
||||
|
'left': '10px', |
||||
|
'bottom': '10px', |
||||
|
'top': 'auto', |
||||
|
'right': 'auto' |
||||
|
}); |
||||
|
} |
||||
|
if (val == 'Bottom Right') { |
||||
|
new_style = []; |
||||
|
new_style.push({ |
||||
|
'right': '10px', |
||||
|
'bottom': '10px', |
||||
|
'top': 'auto', |
||||
|
'left': 'auto' |
||||
|
}); |
||||
|
} |
||||
|
this.chat_style = new_style |
||||
|
}, |
||||
|
// function works when clicking google font
|
||||
|
_onAddGoogleFontClick: function(ev) { |
||||
|
var val = ev.target.value |
||||
|
if (val == "Add a Google Font") { |
||||
|
const dialog = new Dialog(this, { |
||||
|
title: _t("Add a Google Font"), |
||||
|
$content: $(core.qweb.render('backend_theme_infinito_plus.dialog.addGoogleFont')), |
||||
|
// open a wizard for selecting google font
|
||||
|
buttons: [{ |
||||
|
text: _t("Save & Reload"), |
||||
|
classes: 'btn-primary', |
||||
|
click: async () => { |
||||
|
const inputEl = dialog.el.querySelector('.o_input_google_font'); |
||||
|
let m = inputEl.value.match(/\bfamily=([\w+]+)/); |
||||
|
// validation of link
|
||||
|
if (m) { |
||||
|
const font = m[1].replace(/\+/g, ' '); |
||||
|
var self = this; |
||||
|
rpc.query({ |
||||
|
model: "infinito.google.font", |
||||
|
method: 'save_google_fonts', |
||||
|
args: [ |
||||
|
[font, m.input] |
||||
|
], |
||||
|
}).then(function(data) {}); |
||||
|
window.location.reload(); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
text: _t("Discard"), |
||||
|
close: true, |
||||
|
}, |
||||
|
], |
||||
|
}); |
||||
|
dialog.open(); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
}); |
@ -0,0 +1,13 @@ |
|||||
|
odoo.define('backend_theme_infinito_plus.ThemeStudioMenu', function (require) { |
||||
|
"use strict"; |
||||
|
var core = require('web.core'); |
||||
|
var ThemeStudioMenu = require('backend_theme_infinito.ThemeStudioMenu'); |
||||
|
var ajax = require('web.ajax'); |
||||
|
ThemeStudioMenu.include({ |
||||
|
// reset all the features
|
||||
|
_onResetClick: async function(ev){ |
||||
|
this._super.apply(this, arguments); |
||||
|
await ajax.jsonRpc('/theme_studio_plus/reset_to_default_style', 'call', {}); |
||||
|
}, |
||||
|
}) |
||||
|
}); |
@ -0,0 +1,16 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
import { NavBar } from "@web/webclient/navbar/navbar"; |
||||
|
import { WebClient } from "@web/webclient/webclient"; |
||||
|
import { ControlPanel } from "@web/search/control_panel/control_panel"; |
||||
|
import { patch } from "@web/core/utils/patch"; |
||||
|
import session from 'web.session'; |
||||
|
patch(ControlPanel.prototype, 'backend_theme_infinito_plus/static/src/js/navbar.ControlPanel.js', { |
||||
|
// works when clicking refresh icon
|
||||
|
onRefresh(ev) { |
||||
|
this.env.searchModel._notify(); |
||||
|
}, |
||||
|
// check whether the refresh feature is enabled or disabled
|
||||
|
get RefreshOn() { |
||||
|
return session.infinitoRefresh; |
||||
|
}, |
||||
|
}); |
@ -0,0 +1,27 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
import { Dropdown } from "@web/core/dropdown/dropdown"; |
||||
|
import { DropdownItem } from "@web/core/dropdown/dropdown_item"; |
||||
|
import { registry } from "@web/core/registry"; |
||||
|
import session from "web.session"; |
||||
|
import { useService } from "@web/core/utils/hooks"; |
||||
|
import { Component } from "@odoo/owl"; |
||||
|
export class LanguageSwitch extends Component { |
||||
|
setup() { |
||||
|
this.currentLang = session.currentLang; |
||||
|
this.availableLanguages = session.availableLanguages; |
||||
|
this.orm = useService("orm"); |
||||
|
} |
||||
|
toggleLang(lang) { |
||||
|
this.orm.write('res.users', [session.uid], {lang}).then(async () => { |
||||
|
await this.env.bus.trigger("MENUS:APP-CHANGED"); |
||||
|
location.reload(); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
LanguageSwitch.template = "LanguageSwitch"; |
||||
|
LanguageSwitch.components = { Dropdown, DropdownItem }; |
||||
|
LanguageSwitch.toggleDelay = 1000; |
||||
|
export const systrayItem = { |
||||
|
Component: LanguageSwitch, |
||||
|
}; |
||||
|
registry.category("systray").add("LanguageSwitch", systrayItem, { sequence: 1 }); |
@ -0,0 +1,49 @@ |
|||||
|
.o_kanban_view { |
||||
|
.oe_kanban_card, .o_kanban_record { |
||||
|
@for $tr from 1 through 80 { |
||||
|
&:nth-child(#{$tr}) { |
||||
|
animation:infinito_kanban_shake #{$tr * .1}s ease-in !important; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@keyframes infinito_kanban_slide_in { |
||||
|
0% { transform: translateX(-100%); } |
||||
|
100% { transform: translateX(0); } |
||||
|
} |
||||
|
@keyframes infinito_kanban_scale { |
||||
|
0%, 100% { transform: translateY(0); } |
||||
|
50% { transform: translateY(-10px); } |
||||
|
} |
||||
|
@keyframes infinito_kanban_shake { |
||||
|
0% { |
||||
|
transform: rotate(-5deg); |
||||
|
opacity: 0; |
||||
|
} |
||||
|
|
||||
|
20% { |
||||
|
transform: rotate(5deg); |
||||
|
} |
||||
|
|
||||
|
40% { |
||||
|
transform: rotate(-3deg); |
||||
|
} |
||||
|
|
||||
|
60% { |
||||
|
transform: rotate(3deg); |
||||
|
} |
||||
|
|
||||
|
80% { |
||||
|
transform: rotate(-1deg); |
||||
|
} |
||||
|
|
||||
|
90% { |
||||
|
transform: rotate(1deg); |
||||
|
} |
||||
|
|
||||
|
100% { |
||||
|
transform: rotate(0deg); |
||||
|
opacity: 1; |
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<!-- Pop up for adding google font--> |
||||
|
<div t-name="backend_theme_infinito_plus.dialog.addGoogleFont"> |
||||
|
<div class="mb-3 row"> |
||||
|
<label class="col-form-label col-md-3" for="google_font_html">Google Font address</label> |
||||
|
<div class="col-md-9"> |
||||
|
<textarea id="google_font_html_infinito" |
||||
|
class="form-control o_input_google_font" |
||||
|
placeholder="https://fonts.google.com/specimen/Roboto" |
||||
|
style="height: 100px;"/> |
||||
|
<span class="float-end text-muted"> |
||||
|
Select one font on <a target="_blank" |
||||
|
href="https://fonts.google.com">fonts.google.com</a> and |
||||
|
copy paste the address of the font page here. |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</templates> |
@ -0,0 +1,11 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<templates id="template" xml:space="preserve"> |
||||
|
<t t-inherit="web.ControlPanel.Regular" t-inherit-mode="extension" owl="1"> |
||||
|
<xpath expr="//div[hasclass('o_cp_top_right')]" position="before"> |
||||
|
<!-- Showing Refresh icon in the systray--> |
||||
|
<button type="button" t-if="RefreshOn" |
||||
|
class="btn btn-refresh fa fa-refresh" |
||||
|
t-on-click="onRefresh"/> |
||||
|
</xpath> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<odoo> |
||||
|
<!-- Display all the added google fonts--> |
||||
|
<t t-name="theme_editor_sidebar_advanced_fonts"> |
||||
|
<div> |
||||
|
<h6 class="info-infinito" data-bs-toggle="popover" |
||||
|
data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced |
||||
|
features for themself" |
||||
|
title="" data-original-title="Help">Fonts |
||||
|
</h6> |
||||
|
<div class="sub_style" id="js_fonts"> |
||||
|
<select id="infinito_font_select" |
||||
|
class="form-select infinito-form-select "> |
||||
|
<option href="#" |
||||
|
class="form-select infinito-form-select system-font" |
||||
|
t-att-data-variable="variable">System Font |
||||
|
</option> |
||||
|
<t t-foreach="data" t-as="font"> |
||||
|
<option href="#" |
||||
|
class="form-select infinito-form-select" |
||||
|
t-att-data-id="font.id"> |
||||
|
<t t-esc="font.name"/> |
||||
|
</option> |
||||
|
</t> |
||||
|
<option href="#" |
||||
|
class="form-select infinito-form-select add-font" |
||||
|
t-att-data-variable="variable">Add a Google Font |
||||
|
</option> |
||||
|
</select> |
||||
|
</div> |
||||
|
</div> |
||||
|
</t> |
||||
|
</odoo> |
@ -0,0 +1,52 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<templates xml:space="preserve"> |
||||
|
<t t-name="LanguageSwitch" owl="1"> |
||||
|
<!-- show dropdown with different languages available --> |
||||
|
<Dropdown class="'o_switch_company_menu d-none d-md-block'" |
||||
|
position="'bottom-end'"> |
||||
|
<t t-set-slot="toggler"> |
||||
|
<i class="fa fa-building d-lg-none"/> |
||||
|
<span class="oe_topbar_name d-none d-lg-block" |
||||
|
t-esc="this.currentLang[1]"/> |
||||
|
</t> |
||||
|
<t t-foreach="this.availableLanguages" t-as="lang" |
||||
|
t-key="lang_index"> |
||||
|
<t t-call="LanguageSwitchItem"> |
||||
|
<t t-set="lang" t-value="lang"/> |
||||
|
</t> |
||||
|
</t> |
||||
|
</Dropdown> |
||||
|
</t> |
||||
|
<t t-name="LanguageSwitchItem" owl="1"> |
||||
|
<DropdownItem class="'p-0 bg-white'"> |
||||
|
<t t-set="isLangSelected" t-value="this.currentLang[0] == lang[0]"/> |
||||
|
<div class="d-flex" data-menu="lang" |
||||
|
t-att-data-lang-key="lang[0]"> |
||||
|
<div |
||||
|
class="border-end" |
||||
|
t-attf-class="{{isLangSelected ? 'border-primary' : ''}}" |
||||
|
t-on-click.stop="() => this.toggleLang(lang[0])"> |
||||
|
<span class="btn btn-light border-0 p-2"> |
||||
|
<i class="fa fa-fw py-2" |
||||
|
t-att-class="isLangSelected ? 'fa-check text-primary' : ''"/> |
||||
|
</span> |
||||
|
</div> |
||||
|
<div |
||||
|
role="button" |
||||
|
t-att-aria-pressed="isLangSelected" |
||||
|
t-att-aria-label="'Switch to ' + lang[1] " |
||||
|
t-att-title="'Switch to ' + lang[1] " |
||||
|
tabindex="0" |
||||
|
class="d-flex flex-grow-1 align-items-center py-0 log_into ps-2" |
||||
|
t-att-class="isLangSelected ? 'alert-primary ms-1 me-2' : 'btn btn-light fw-normal border-0'" |
||||
|
t-on-click="() => this.toggleLang(lang[0])"> |
||||
|
<span |
||||
|
class='company_label pe-3' |
||||
|
t-att-class="isLangSelected ? 'text-900 fw-bold' : 'ms-1'"> |
||||
|
<t t-esc="lang[1]"/> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</DropdownItem> |
||||
|
</t> |
||||
|
</templates> |
@ -0,0 +1,52 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
<t t-name="theme_editor_sidebar_advanced" |
||||
|
t-inherit="backend_theme_infinito.theme_editor_sidebar_advanced" |
||||
|
t-inherit-mode="extension" owl="1"> |
||||
|
<xpath expr="//div[@id='other']" position="inside"> |
||||
|
<div class="card card-body"> |
||||
|
<div class="sidebar_left"> |
||||
|
<div class="wrapper"> |
||||
|
<div class="sub_style"> |
||||
|
<!-- View for enabling or disabling refresh feature--> |
||||
|
<div class="t_settings info-infinito" |
||||
|
data-bs-toggle="popover" data-placement="right" |
||||
|
data-content="Refresh the tree, kanban view" |
||||
|
title="" data-original-title="Help"> |
||||
|
Refresh |
||||
|
</div> |
||||
|
<label class="switch"> |
||||
|
<input type="checkbox" id="navbarRefreshToggler" |
||||
|
checked=""/> |
||||
|
<span class="slider round"/> |
||||
|
</label> |
||||
|
</div> |
||||
|
<div class="sub_style infinito_font_select"></div> |
||||
|
<div> |
||||
|
<!-- View for different selection for ChatBox feature--> |
||||
|
<h6 class="info-infinito" data-bs-toggle="popover" |
||||
|
data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced features for themself" |
||||
|
title="" data-original-title="Help">Chatbox Position |
||||
|
</h6> |
||||
|
<div class="sub_style"> |
||||
|
<select class="form-select infinito-form-select" |
||||
|
id="chatbox_position"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div> |
||||
|
<!-- View for different selections for animations --> |
||||
|
<h6 class="info-infinito" data-bs-toggle="popover" |
||||
|
data-placement="right" |
||||
|
data-content="All internal users can edit their Advanced features for themself" |
||||
|
title="" data-original-title="Help">Animation |
||||
|
</h6> |
||||
|
<div class="sub_style"> |
||||
|
<select class="form-select infinito-form-select" |
||||
|
id="animated_view"/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</xpath> |
||||
|
</t> |