Browse Source

Oct 25 : [ADD] Initial Commit 'backend_theme_infinito_plus'

pull/254/merge
AjmalCybro 2 years ago
parent
commit
119861cbb2
  1. 47
      backend_theme_infinito_plus/README.rst
  2. 23
      backend_theme_infinito_plus/__init__.py
  3. 64
      backend_theme_infinito_plus/__manifest__.py
  4. 22
      backend_theme_infinito_plus/controllers/__init__.py
  5. 128
      backend_theme_infinito_plus/controllers/backend_theme_infinito_plus.py
  6. 6
      backend_theme_infinito_plus/doc/RELEASE_NOTES.md
  7. 25
      backend_theme_infinito_plus/models/__init__.py
  8. 92
      backend_theme_infinito_plus/models/infinito_google_font.py
  9. 57
      backend_theme_infinito_plus/models/ir_http.py
  10. 65
      backend_theme_infinito_plus/models/res_config_settings.py
  11. 35
      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/hero.png
  14. BIN
      backend_theme_infinito_plus/static/description/assets/icons/check.png
  15. BIN
      backend_theme_infinito_plus/static/description/assets/icons/chevron.png
  16. BIN
      backend_theme_infinito_plus/static/description/assets/icons/cogs.png
  17. BIN
      backend_theme_infinito_plus/static/description/assets/icons/consultation.png
  18. BIN
      backend_theme_infinito_plus/static/description/assets/icons/ecom-black.png
  19. BIN
      backend_theme_infinito_plus/static/description/assets/icons/education-black.png
  20. BIN
      backend_theme_infinito_plus/static/description/assets/icons/hotel-black.png
  21. BIN
      backend_theme_infinito_plus/static/description/assets/icons/license.png
  22. BIN
      backend_theme_infinito_plus/static/description/assets/icons/lifebuoy.png
  23. BIN
      backend_theme_infinito_plus/static/description/assets/icons/logo.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/chatbox_layout.png
  37. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/google_font.gif
  38. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/refresh_icon.gif
  39. BIN
      backend_theme_infinito_plus/static/description/assets/screenshots/gif/swtich_languages.gif
  40. BIN
      backend_theme_infinito_plus/static/description/banner.jpg
  41. BIN
      backend_theme_infinito_plus/static/description/icon.png
  42. 526
      backend_theme_infinito_plus/static/description/index.html
  43. BIN
      backend_theme_infinito_plus/static/description/theme_screenshot.jpg
  44. 0
      backend_theme_infinito_plus/static/src/css/chatter.css
  45. 28
      backend_theme_infinito_plus/static/src/css/font.css
  46. 165
      backend_theme_infinito_plus/static/src/js/AdvancedFeautres.js
  47. 12
      backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js
  48. 15
      backend_theme_infinito_plus/static/src/js/navbar.js
  49. 32
      backend_theme_infinito_plus/static/src/js/systray.js
  50. 49
      backend_theme_infinito_plus/static/src/scss/animation.scss
  51. 17
      backend_theme_infinito_plus/static/src/xml/AddGoogleFonts_templates.xml
  52. 9
      backend_theme_infinito_plus/static/src/xml/refresh_templates.xml
  53. 104
      backend_theme_infinito_plus/static/src/xml/sidebar_templates.xml
  54. 20
      backend_theme_infinito_plus/static/src/xml/systray_templates.xml

47
backend_theme_infinito_plus/README.rst

@ -0,0 +1,47 @@
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
Backend Theme Infinito Plus
===========================
* Backend Theme Infinito Plus module for Odoo 15 community editions
Configuration
=============
* No additional configurations needed
Company
=======
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
Credits
=======
Developer: (V15) Ramees Jaman KT , Contact: odoo@cybrosys.com
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: Cybrosys Techno Solutions(<https://www.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

64
backend_theme_infinito_plus/__manifest__.py

@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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': 'Backend Theme Infinito Plus',
'version': "15.0.1.0.0",
'category': 'Extra Tools',
'summary': 'The Backend Theme Infinito Is A Dynamic And Ultimate Theme'
'For Your Odoo V15. This Theme Will Give You A New Experience '
'With Odoo.Main Highlight Of The Theme Is You Can Dynamically '
'Change The Fonts,Animations, Languages,...Etc',
'description': """Utmost and dynamic backend theme for Odoo 15""",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': "https://www.cybrosys.com",
'depends': ['web', 'backend_theme_infinito'],
'data': [
'security/ir.model.access.csv'
],
'assets': {
'web.assets_backend': {
'backend_theme_infinito_plus/static/src/css/chatter.css',
'backend_theme_infinito_plus/static/src/css/font.css',
'backend_theme_infinito_plus/static/src/scss/animation.scss',
'backend_theme_infinito_plus/static/src/js/AdvancedFeautres.js',
'backend_theme_infinito_plus/static/src/js/navbar.js',
'backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js',
'backend_theme_infinito_plus/static/src/js/systray.js'
},
'web.assets_qweb': {
'backend_theme_infinito_plus/static/src/xml/sidebar_templates.xml',
'backend_theme_infinito_plus/static/src/xml/AddGoogleFonts_templates.xml',
'backend_theme_infinito_plus/static/src/xml/refresh_templates.xml',
'backend_theme_infinito_plus/static/src/xml/systray_templates.xml'
}
},
'images': [
'static/description/banner.jpg',
'static/description/theme_screenshot.jpg',
],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': 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: Cybrosys Techno Solutions(<https://www.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 backend_theme_infinito_plus

128
backend_theme_infinito_plus/controllers/backend_theme_infinito_plus.py

@ -0,0 +1,128 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 import http
from odoo.http import request
from odoo.addons.backend_theme_infinito.controllers.main import ThemeStudio
from odoo.addons.backend_theme_infinito.controllers.main import minify_css
class ThemeStudioPlus(ThemeStudio):
"""Controller for updating the changes from infinito control panel"""
@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/font_style'], type="json")
def font_style(self, font_id):
"""updating th e google fonts"""
font_obj = request.env['infinito.google.font']
if font_id == 0:
font_obj.remove_fonts()
else:
font_obj.browse(font_id).set_css()
@http.route(['/theme_studio/set_advanced_plus_data'], 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.google_font',
vals['infinitoGoogleFont'])
if 'infinitoAnimation' in vals.keys():
set_param('backend_theme_infinito_plus.animation_plus',
vals['infinitoAnimation'])
@http.route(['/theme_studio/set_advanced_plus_data_user'], type="json")
def set_advanced_plus_data_user(self, vals):
""""updating the user inifnito data"""
request.env.user.write({
'is_refresh': vals['infinitoRefresh'],
'chatbox_position': vals['chatBoxPosition'],
'animation_plus': vals['infinitoAnimation']
})
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_read_file = open(animation_file_path, 'r')
animation_css = animation_read_file.read()
animation_file = open(animation_file_path, 'w')
for line in animation_css.split('\n'):
if 'ease-in' in line:
animation_file.write(animation_css.replace(line.strip(),
'animation:' + 'infinito_kanban_shake' + ' #{$tr * .1}s ease-in !important;'))
chat_file = open(chat_file_path, 'w')
chat_file.write('')
request.env['ir.config_parameter'].sudo().set_param(
'backend_theme_infinito_plus.is_refresh', False)
return True

6
backend_theme_infinito_plus/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <backend_theme_infinito_plus>
#### 05.10.2023
#### Version 15.0.1.0.0
#### ADD
- Initial Commit for Infinito Backend Theme Plus

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: Cybrosys Techno Solutions(<https://www.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 infinito_google_font
from . import ir_http
from . import res_config_settings
from . import res_users

92
backend_theme_infinito_plus/models/infinito_google_font.py

@ -0,0 +1,92 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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, _
class GoogleFont(models.Model):
"""Model for storing Google fonts.
This class is used to add and manage Google fonts in the Odoo
application."""
_name = 'infinito.google.font'
_description = 'Add Google Fonts'
name = fields.Char(string='Name', help='Google font name')
font_url = fields.Text(string='Url',
help='Add the url for downloading the '
'google fons')
font = fields.Text(string='Font', help='Used for css file writing purpose')
@api.model
def save_google_fonts(self, g_font):
"""Function to store fonts in the database"""
record = self.search([('font_url', '=', g_font[1])])
if not record:
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')
open(working_dir, "r")
with open(working_dir, 'w') as file:
file.write('')

57
backend_theme_infinito_plus/models/ir_http.py

@ -0,0 +1,57 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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):
"""Inhering ir.http class for storing data in session."""
_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.is_user_edit', default=False)
res['userEdit'] = user_edit
if user_edit:
res['infinitoRefresh'] = self.env.user.is_refresh
res['chatBoxPosition'] = self.env.user.chatbox_position
res['infinitoAnimation'] = self.env.user.animation_plus
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)
res['infinitoGoogleFont'] = \
get_param('backend_theme_infinito_plus.google_font',
default=0)
return res

65
backend_theme_infinito_plus/models/res_config_settings.py

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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):
"""Inhering res.config.settings class for adding new fields."""
_inherit = 'res.config.settings'
is_refresh = fields.Boolean(string='Tree,Kanban Refresh mode Enabled',
help='To check refresh button enabled or not',
default=False)
chatbox_position = fields.Char(string='Chat box position',
help='To set chat box position')
animation_plus = fields.Char(string='Animation',
help='To set animation position')
google_font = fields.Integer(string='Google font',
help='To set google font')
@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')
res['google_font'] = get_param(
'backend_theme_infinito_plus.google_font')
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)
set_param('backend_theme_infinito_plus.google_font',
self.google_font)
super(ResConfigSettings, self).set_values()

35
backend_theme_infinito_plus/models/res_users.py

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
###############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Cybrosys Techno Solutions(<https://www.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 Users(models.Model):
"""Inhering 'res.users' for adding new fields"""
_inherit = 'res.users'
is_refresh = fields.Boolean(string='Tree,Kanban Refresh mode Enabled',
help="Refreshing feature for specific users",
default=False)
chatbox_position = fields.Char(string="ChatBox position",
help="different layouts for chatBox")
animation_plus = fields.Char(stirng="Animation",
help="Different Animations", defult='Default')

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_user,access.infinito.google.font.user,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_user access.infinito.google.font.user model_infinito_google_font base.group_user 1 1 1 1

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/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 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: 1.1 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
backend_theme_infinito_plus/static/description/banner.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
backend_theme_infinito_plus/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

526
backend_theme_infinito_plus/static/description/index.html

@ -0,0 +1,526 @@
<div class="container"
style="padding: 1rem !important; margin-bottom: 1rem !important;">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between"
style="border-bottom: 1px solid #d5d5d5;">
<div class="my-3">
<img src="./assets/icons/logo.png"
style="width: auto !important; height: 40px !important;">
</div>
<div class="my-3 d-flex align-items-center">
<div
style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;">
<i class="fa fa-check mr-1"></i>Community
</div>
</div>
</div>
</div>
</div>
<!-- HERO -->
<div class="container">
<div class="row"
style="padding: 4rem 2.5rem 0 !important; background-color: #fff !important;">
<div class="col-sm-12 col-md-12 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 15</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 V15.
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 acts as a studio-based theme.
It Is A Perfect Choice For Your Odoo Backend And An Attractive
Theme For Your Odoo 15.
</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 V15 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 V15 ensures stunning themes for your
Odoo
15 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/gif/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_font.gif" width="100%"
height="auto" class="img-responsive">
</div>
</div>
</div>
<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>
<!-- 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>
<!-- 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.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

0
backend_theme_infinito_plus/static/src/css/chatter.css

28
backend_theme_infinito_plus/static/src/css/font.css

@ -0,0 +1,28 @@
/* latin-ext */
@font-face {
font-family: 'Titan One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/titanone/v15/mFTzWbsGxbbS_J5cQcjCmjgm6Es.woff2) format('woff2');
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Titan One';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/titanone/v15/mFTzWbsGxbbS_J5cQcjClDgm.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, 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: 'Titan One' !important;
}
.fa {
font: normal normal normal 14px/1 FontAwesome !important;}
.oi {
font-family: 'odoo_ui_icons' !important;}

165
backend_theme_infinito_plus/static/src/js/AdvancedFeautres.js

@ -0,0 +1,165 @@
odoo.define('backend_theme_infinito_plus.AdvancedFeatures', function (require) {
"use strict";
var AdvancedFeatures = require('backend_theme_infinito.AdvancedFeatures');
var session = require('web.session');
var ajax = require('web.ajax');
var Dialog = require('web.Dialog');
var core = require('web.core');
var rpc = require('web.rpc');
var _t = core._t;
//Overriding the AdvancedFeatures component for adding new features to module
AdvancedFeatures.include({
events: _.extend({}, AdvancedFeatures.prototype.events, {
'change #chatBoxPosition': 'onPositionChange',
'change #infinito_font_select': 'onFontChange',
'click #infinito_font_select_google': '_onAddGoogleFontClick',
'change #animatedView': 'onAnimationChange'
}),
//Initializes the Chat Widget settings.
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']; },
//This function is responsible for rendering the Chat Widget data and initializing the settings.
async renderData() {
this._super.apply(this, arguments);
this.chat_style = [];
rpc.query({
model: "infinito.google.font",
method: 'search_read',
args: [],
}).then((res) =>{
var selectElement = this.$el.find('#infinito_font_select');
var font_id = session.infinitoGoogleFont
res.forEach(function(option){
var newOption = $("<option>").text(option['name']).val(option['id']).addClass('form-select infinito-form-select google-font');
selectElement.find("option:eq(1)").before(newOption);
if (font_id == option['id']){
newOption.prop('selected', true);
}
})
});
if (this.type == 'user'){
this.$el.find("#fonts_container").prop("class","button_properties d-none");
}
else{
this.$el.find("#fonts_container").prop("class","button_properties d-block");
}
this.$el.find('#infinito_font_select').val(session.infinitoGoogleFont);
let position_content = '';
for (let position of this.chatBoxPosition) {
position_content += `<option value="${position}">${position}</option>`;
}
this.$el.find('#chatBoxPosition').html(position_content);
this.$el.find('#chatBoxPosition').val(session.chatBoxPosition);
let animationContent = '';
let index = 0
for (let animation of this.infinitoAnimation) {
animationContent += `<option value="${index}">${animation}</option>`;
index +=1;
}
this.$el.find('#animatedView').html(animationContent);
this.$el.find('#animatedView').val(session.infinitoAnimation)
this.$el.find('#navbarRefreshToggler').prop('checked', session.infinitoRefresh);
},
//This function is responsible for saving the changes made to the Chat Widget settings.
async _SaveChanges() {
this._super.apply(this, arguments);
let vals = {
'infinitoRefresh': this.$el.find('#navbarRefreshToggler').is(':checked'),
'chatBoxPosition': this.$el.find('#chatBoxPosition').val(),
'infinitoAnimation': this.$el.find('#animatedView').val(),
'animations' : this.animated_id,
'infinitoGoogleFont' : this.font_id ? this.font_id : 0,
};
var chat_style = this.chat_style;
session.chatBoxPosition = vals.chatBoxPosition;
session.infinitoAnimation = vals.infinitoAnimation;
session.infinitoRefresh = vals.infinitoRefresh
var style = [];
if (vals.animations === '1') {
style.push('infinito_kanban_scale');
} else if (vals.animations === '0') {
style.push('infinito_kanban_shake');
} else if (vals.animations === '2') {
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 (vals.infinitoGoogleFont.length !== 0){
await ajax.jsonRpc('/theme_studio/font_style', 'call', { font_id: vals.infinitoGoogleFont });}
if (this.type == 'global'){
await ajax.jsonRpc('/theme_studio/set_advanced_plus_data', 'call', {vals})
}
if(this.type == 'user'){
await ajax.jsonRpc('/theme_studio/set_advanced_plus_data_user', 'call', {vals}).then((_) => {
this._Close(); })
}
},
//ChatBox position change function.
async onPositionChange(ev) {
let val = ev.target.value;
const positionMap = {
'Top Right': { 'top': '10px', 'left': 'auto' },
'Top Left': { 'top': '10px', 'left': '10px', 'right': 'auto' },
'Bottom Left': { 'left': '10px', 'bottom': '10px', 'top': 'auto', 'right': 'auto' },
'Bottom Right': { 'right': '10px', 'bottom': '10px', 'top': 'auto', 'left': 'auto' }
};
this.chat_style = [positionMap[val]] || [];
},
//Animation change function.
onAnimationChange: function(ev) {
this.animated_id = ev.target.value;
},
//Font change function.
onFontChange: function(ev){
let options = ev.target.options
let selected = this.$(options[options.selectedIndex])
if(selected.hasClass('add-font')){
this.addGoogleFont()
}
else if(selected.hasClass('system-font')){
this.font_id = 0}
else {
this.font_id = parseInt(selected.val())}
},
//AddGoogleFont - Function to open a dialog for adding a Google Font and save it to the backend.
addGoogleFont: function(){
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();
}
});
return AdvancedFeatures;
});

12
backend_theme_infinito_plus/static/src/js/ThemeStudioMenu.js

@ -0,0 +1,12 @@
odoo.define('backend_theme_infinito_plus.ThemeStudioMenu', function (require) {
"use strict";
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', {});
},
})
});

15
backend_theme_infinito_plus/static/src/js/navbar.js

@ -0,0 +1,15 @@
/** @odoo-module **/
import ControlPanel from "web.ControlPanel";
import { patch } from 'web.utils';
var session = require('web.session');
//Patching the ControlPanel for adding new clicks
patch(ControlPanel.prototype, 'backend_theme_infinito_plus/static/src/js/navbar.js', {
//Function to refresh the model data.
onRefreshClick(){
this.model.dispatch()
},
//Function for enable and disable the refresh button in navbar.
RefreshOn(){
return session.infinitoRefresh;
}
})

32
backend_theme_infinito_plus/static/src/js/systray.js

@ -0,0 +1,32 @@
/** @odoo-module **/
import SystrayMenu from 'web.SystrayMenu';
import Widget from 'web.Widget';
import session from "web.session";
var rpc = require('web.rpc');
var ExampleWidget = Widget.extend({
template: 'LanguageSwitch',
events: {
'click .dropdown-menu': '_onLanguageSelect',
},
// Initializes the object by copying the current language and available languages
// from the session object.
init: function () {
this.currentLang = [session.currentLang[0], session.currentLang[1]];
this.availableLanguages = session.availableLanguages
},
// Handle the selection of language.
_onLanguageSelect: function (ev) {
var lang = ev.target.dataset.langKey
rpc.query({
model: 'res.users',
method: 'write',
args: [[session.uid], {
"lang": lang
}],
}).then(() => {
window.location.reload();
});
}
});
SystrayMenu.Items.push(ExampleWidget);
export default ExampleWidget;

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

17
backend_theme_infinito_plus/static/src/xml/AddGoogleFonts_templates.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates id="template" xml:space="preserve">
<!-- Google font popup template-->
<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>

9
backend_theme_infinito_plus/static/src/xml/refresh_templates.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<!-- Refresh Button-->
<t t-inherit="web.Legacy.ControlPanel" t-inherit-mode="extension" owl="1">
<xpath expr="//div[hasclass('o_cp_bottom')]//div[hasclass('o_cp_bottom_right')]/div[1]" position="before">
<button type="button" t-if="RefreshOn()" class="btn btn-refresh fa fa-refresh" t-on-click="onRefreshClick"/>
</xpath>
</t>
</templates>

104
backend_theme_infinito_plus/static/src/xml/sidebar_templates.xml

@ -0,0 +1,104 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<!-- Extending the Infinito ControlPanel sidebar for adding new options-->
<t t-inherit="backend_theme_infinito.theme_editor_sidebar_advanced" t-inherit-mode="extension">
<xpath expr="//div[hasclass('sidebar_content')]//div[hasclass('button_properties')][4]" position="after">
<div class="button_properties">
<p>
<a class="btn btn-primary_style" data-toggle="collapse" href="#chatBox" role="button"
aria-expanded="false" aria-controls="chatox">
Chat Box
</a>
</p>
<div class="collapse" id="chatBox">
<div class="card card-body">
<div class="sidebar_left">
<div class="wrapper">
<div>
<h6 class="info-infinito" data-toggle="popover" data-placement="right"
data-content="All internal users can edit their Advanced features for themself"
title="" data-original-title="Help">Position
</h6>
<div class="sub_style">
<select class="form-select infinito-form-select" id="chatBoxPosition"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="button_properties">
<p>
<a class="btn btn-primary_style" data-toggle="collapse" href="#animation" role="button"
aria-expanded="false" aria-controls="animation">
Animation
</a>
</p>
<div class="collapse" id="animation">
<div class="card card-body">
<div class="sidebar_left">
<div class="wrapper">
<div>
<h6 class="info-infinito" data-toggle="popover" data-placement="right"
data-content="All internal users can edit their Advanced features for themself"
title="" data-original-title="Help">Type
</h6>
<div class="sub_style">
<select class="form-select infinito-form-select" id="animatedView"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="button_properties" id="fonts_container">
<p>
<a class="btn btn-primary_style" data-toggle="collapse" href="#googleFont" role="button"
aria-expanded="false" aria-controls="googleFont">
Fonts
</a>
</p>
<div class="collapse" id="googleFont">
<div class="card card-body">
<div class="sidebar_left">
<div class="wrapper">
<div>
<h6 class="info-infinito" data-toggle="popover" data-placement="right"
data-content="All internal users can edit their Advanced features for themself"
title="" data-original-title="Help">Font Style
</h6>
<div class="sub_style">
<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>
<option href="#"
class="form-select infinito-form-sele ct add-font infinito_font_select_google"
t-att-data-variable="variable">Add a Google Font
</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
<xpath expr="//div[@id='other']//div[hasclass('wrapper')]" position="inside">
<div class="sub_style">
<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"/>
<span class="slider round"/>
</label>
</div>
</xpath>
</t>
</templates>

20
backend_theme_infinito_plus/static/src/xml/systray_templates.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t t-name="LanguageSwitch">
<div class="dropdown">
<button class="dropdown-toggle" type="button"
id="dropdownMenuButton" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<span class="current-language" style="font-size: small;" t-esc="widget.currentLang[1]"/>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<t t-foreach="widget.availableLanguages" t-as="lang">
<a class="dropdown-item" href="#"
t-att-data-lang-key="lang[0]">
<t t-esc="lang[1]"/>
</a>
</t>
</div>
</div>
</t>
</templates>
Loading…
Cancel
Save