Browse Source

May 17 : [ADD] Initial Commit 'backend_theme_infinito_plus'

pull/257/head
AjmalCybro 2 years ago
parent
commit
b22dc2f2c6
  1. 47
      backend_theme_infinito_plus/README.rst
  2. 23
      backend_theme_infinito_plus/__init__.py
  3. 63
      backend_theme_infinito_plus/__manifest__.py
  4. 22
      backend_theme_infinito_plus/controllers/__init__.py
  5. 117
      backend_theme_infinito_plus/controllers/main.py
  6. 6
      backend_theme_infinito_plus/doc/RELEASE_NOTES.md
  7. 25
      backend_theme_infinito_plus/models/__init__.py
  8. 90
      backend_theme_infinito_plus/models/add_google_fonts.py
  9. 52
      backend_theme_infinito_plus/models/ir_http.py
  10. 59
      backend_theme_infinito_plus/models/res_config_settings.py
  11. 31
      backend_theme_infinito_plus/models/res_users.py
  12. 2
      backend_theme_infinito_plus/security/ir.model.access.csv
  13. BIN
      backend_theme_infinito_plus/static/description/assets/banner.png
  14. BIN
      backend_theme_infinito_plus/static/description/assets/hero.png
  15. BIN
      backend_theme_infinito_plus/static/description/assets/icons/check.png
  16. BIN
      backend_theme_infinito_plus/static/description/assets/icons/chevron.png
  17. BIN
      backend_theme_infinito_plus/static/description/assets/icons/cogs.png
  18. BIN
      backend_theme_infinito_plus/static/description/assets/icons/consultation.png
  19. BIN
      backend_theme_infinito_plus/static/description/assets/icons/ecom-black.png
  20. BIN
      backend_theme_infinito_plus/static/description/assets/icons/education-black.png
  21. BIN
      backend_theme_infinito_plus/static/description/assets/icons/hotel-black.png
  22. BIN
      backend_theme_infinito_plus/static/description/assets/icons/license.png
  23. BIN
      backend_theme_infinito_plus/static/description/assets/icons/lifebuoy.png
  24. BIN
      backend_theme_infinito_plus/static/description/assets/icons/manufacturing-black.png
  25. BIN
      backend_theme_infinito_plus/static/description/assets/icons/pos-black.png
  26. BIN
      backend_theme_infinito_plus/static/description/assets/icons/puzzle.png
  27. BIN
      backend_theme_infinito_plus/static/description/assets/icons/restaurant-black.png
  28. BIN
      backend_theme_infinito_plus/static/description/assets/icons/service-black.png
  29. BIN
      backend_theme_infinito_plus/static/description/assets/icons/trading-black.png
  30. BIN
      backend_theme_infinito_plus/static/description/assets/icons/training.png
  31. BIN
      backend_theme_infinito_plus/static/description/assets/icons/update.png
  32. BIN
      backend_theme_infinito_plus/static/description/assets/icons/user.png
  33. BIN
      backend_theme_infinito_plus/static/description/assets/icons/wrench.png
  34. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/chatbox_layout.png
  35. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/animation.gif
  36. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/google_fonts.gif
  37. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/refresh_icon.gif
  38. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/swtich_languages.gif
  39. BIN
      backend_theme_infinito_plus/static/description/banner.png
  40. BIN
      backend_theme_infinito_plus/static/description/icon.png
  41. 512
      backend_theme_infinito_plus/static/description/index.html
  42. BIN
      backend_theme_infinito_plus/static/description/theme_screenshot.png
  43. 2
      backend_theme_infinito_plus/static/src/css/chatter.css
  44. 55
      backend_theme_infinito_plus/static/src/css/font.css
  45. 204
      backend_theme_infinito_plus/static/src/js/AdvancedFeatures.js
  46. 13
      backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js
  47. 16
      backend_theme_infinito_plus/static/src/js/navbar.js
  48. 27
      backend_theme_infinito_plus/static/src/js/systray.js
  49. 49
      backend_theme_infinito_plus/static/src/scss/animation.scss
  50. 20
      backend_theme_infinito_plus/static/src/xml/AddGoogleFonts.xml
  51. 11
      backend_theme_infinito_plus/static/src/xml/ListViewRefresh.xml
  52. 34
      backend_theme_infinito_plus/static/src/xml/font.xml
  53. 52
      backend_theme_infinito_plus/static/src/xml/systray.xml
  54. 52
      backend_theme_infinito_plus/static/src/xml/theme_editor.xml

47
backend_theme_infinito_plus/README.rst

@ -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>`__

23
backend_theme_infinito_plus/__init__.py

@ -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

63
backend_theme_infinito_plus/__manifest__.py

@ -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,
}

22
backend_theme_infinito_plus/controllers/__init__.py

@ -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

117
backend_theme_infinito_plus/controllers/main.py

@ -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

6
backend_theme_infinito_plus/doc/RELEASE_NOTES.md

@ -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

25
backend_theme_infinito_plus/models/__init__.py

@ -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

90
backend_theme_infinito_plus/models/add_google_fonts.py

@ -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('')

52
backend_theme_infinito_plus/models/ir_http.py

@ -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

59
backend_theme_infinito_plus/models/res_config_settings.py

@ -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()

31
backend_theme_infinito_plus/models/res_users.py

@ -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)

2
backend_theme_infinito_plus/security/ir.model.access.csv

@ -0,0 +1,2 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_infinito_google_font,access_infinito_google_font,model_infinito_google_font,base.group_user,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_infinito_google_font access_infinito_google_font model_infinito_google_font base.group_user 1 1 1 1

BIN
backend_theme_infinito_plus/static/description/assets/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
backend_theme_infinito_plus/static/description/assets/hero.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
backend_theme_infinito_plus/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
backend_theme_infinito_plus/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
backend_theme_infinito_plus/static/description/assets/screenshots/chatbox_layout.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
backend_theme_infinito_plus/static/description/assets/screenshots/gif/animation.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

BIN
backend_theme_infinito_plus/static/description/assets/screenshots/gif/google_fonts.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
backend_theme_infinito_plus/static/description/assets/screenshots/gif/refresh_icon.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
backend_theme_infinito_plus/static/description/assets/screenshots/gif/swtich_languages.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

BIN
backend_theme_infinito_plus/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
backend_theme_infinito_plus/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

512
backend_theme_infinito_plus/static/description/index.html

@ -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 &amp; 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 -->

BIN
backend_theme_infinito_plus/static/description/theme_screenshot.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 KiB

2
backend_theme_infinito_plus/static/src/css/chatter.css

@ -0,0 +1,2 @@
/* This Styles are generated automatically by Theme Studio */
.o_ChatWindow {top:10px !important;left:10px !important;right:auto !important;}

55
backend_theme_infinito_plus/static/src/css/font.css

@ -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;}

204
backend_theme_infinito_plus/static/src/js/AdvancedFeatures.js

@ -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();
}
}
});
});

13
backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js

@ -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', {});
},
})
});

16
backend_theme_infinito_plus/static/src/js/navbar.js

@ -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;
},
});

27
backend_theme_infinito_plus/static/src/js/systray.js

@ -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 });

49
backend_theme_infinito_plus/static/src/scss/animation.scss

@ -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;
}
}

20
backend_theme_infinito_plus/static/src/xml/AddGoogleFonts.xml

@ -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>

11
backend_theme_infinito_plus/static/src/xml/ListViewRefresh.xml

@ -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>

34
backend_theme_infinito_plus/static/src/xml/font.xml

@ -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>

52
backend_theme_infinito_plus/static/src/xml/systray.xml

@ -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>

52
backend_theme_infinito_plus/static/src/xml/theme_editor.xml

@ -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>
Loading…
Cancel
Save