| @ -0,0 +1,50 @@ | |||||
|  | .. 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 | ||||
|  | 
 | ||||
|  | Chameleon Multi color Backend Theme | ||||
|  | =================================== | ||||
|  | * Configurable multi color backend theme for Odoo 16,Only Admin can have the role to create, update, and removing the themes | ||||
|  | 
 | ||||
|  | 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 | ||||
|  | ------- | ||||
|  | * Developer: | ||||
|  |     Linto CT @ Cybrosys | ||||
|  |     Sanjith Rashin  @ Cybrosys | ||||
|  |     V14 Dino  @ Cybrosys | ||||
|  |     V15 Sigha Ck  @ Cybrosys | ||||
|  |     V16 Sigha Ck  @ Cybrosys | ||||
|  | 
 | ||||
|  | Contacts | ||||
|  | -------- | ||||
|  | * Mail Contact : odoo@cybrosys.com | ||||
|  | 
 | ||||
|  | Bug Tracker | ||||
|  | ----------- | ||||
|  | Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | ||||
|  | 
 | ||||
|  | Maintainer | ||||
|  | ========== | ||||
|  | .. image:: https://cybrosys.com/images/logo.png | ||||
|  |    :target: https://cybrosys.com | ||||
|  | This module is maintained by Cybrosys Technologies. | ||||
|  | 
 | ||||
|  | For support and more information, please visit https://www.cybrosys.com | ||||
|  | 
 | ||||
|  | Further information | ||||
|  | =================== | ||||
|  | HTML Description: `<static/description/index.html>`__ | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | ||||
|  | #    Author: 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 models | ||||
|  | from . import controllers | ||||
| @ -0,0 +1,71 @@ | |||||
|  | # -*- 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": "Chameleon Multi Color Backend Theme", | ||||
|  |     "summary": "Configurable multi color backend theme for Odoo 16", | ||||
|  |     "version": "16.0.1.0.0", | ||||
|  |     "category": "Themes/Backend", | ||||
|  |     "website": "https://www.cybrosys.com", | ||||
|  |     "description": """ | ||||
|  |         Configurable multi color backend theme for Odoo 16,  | ||||
|  |         Only Admin can have the role to create, update, and removing the themes. | ||||
|  |     """, | ||||
|  |     'images': [ | ||||
|  |         'static/description/banner.png', | ||||
|  |         'static/description/theme_screenshot.png', | ||||
|  |     ], | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'maintainer': 'Cybrosys Techno Solutions', | ||||
|  |     "depends": [ | ||||
|  |         'website', | ||||
|  |         'portal', | ||||
|  |         'mail' | ||||
|  |     ], | ||||
|  |     "data": [ | ||||
|  |         'security/security_groups.xml', | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |         'data/theme_data.xml', | ||||
|  |         'views/login_templates.xml', | ||||
|  |     ], | ||||
|  |     "assets": { | ||||
|  |         'web.assets_backend': [ | ||||
|  |             '/multicolor_backend_theme/static/src/xml/sidebar_menu_icon.xml', | ||||
|  |             '/multicolor_backend_theme/static/src/xml/systray_ext.xml', | ||||
|  |             '/multicolor_backend_theme/static/src/scss/theme_style_backend.scss', | ||||
|  |             '/multicolor_backend_theme/static/src/css/backend.css', | ||||
|  |             '/multicolor_backend_theme/static/src/wcolpick/wcolpick.css', | ||||
|  |             '/multicolor_backend_theme/static/src/js/sidebar_menu.js', | ||||
|  |             '/multicolor_backend_theme/static/src/wcolpick/wcolpick.js', | ||||
|  |             '/multicolor_backend_theme/static/src/js/systray_theme_menu.js', | ||||
|  |             '/multicolor_backend_theme/static/src/js/search_apps.js' | ||||
|  |         ], | ||||
|  |         'web.assets_frontend': [ | ||||
|  |             '/multicolor_backend_theme/static/src/scss/theme_style.scss', | ||||
|  |             '/multicolor_backend_theme/static/src/js/login_page.js' | ||||
|  |         ], | ||||
|  |     }, | ||||
|  |     'license': 'LGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': False, | ||||
|  | } | ||||
| @ -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 main | ||||
| @ -0,0 +1,42 @@ | |||||
|  | # -*- 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 | ||||
|  | 
 | ||||
|  | from odoo import http | ||||
|  | from odoo.http import request | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class LoginPage(http.Controller): | ||||
|  |     """Controller for the login page. This controller provides methods for | ||||
|  |     retrieving the active theme's main color, view font color, and theme font | ||||
|  |     color and updating the theme of the login page. | ||||
|  |     """ | ||||
|  |     @http.route(['/active_theme'], auth='public', type='http') | ||||
|  |     def find_active_theme(self): | ||||
|  |         """find the active theme for updating theme of login page""" | ||||
|  |         active_theme = request.env['theme.config'].sudo().search_read( | ||||
|  |             domain=[('theme_active', '=', True)], | ||||
|  |             fields=['theme_main_color', | ||||
|  |                     'view_font_color', | ||||
|  |                     'theme_font_color']) | ||||
|  |         active_theme = active_theme[0] if active_theme else [] | ||||
|  |         return json.dumps(active_theme) | ||||
| @ -0,0 +1,26 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data noupdate="1"> | ||||
|  |         <record id="theme_01" model="theme.config"> | ||||
|  |             <field name="name">Theme 1</field> | ||||
|  |             <field name="theme_main_color">#6fb702</field> | ||||
|  |             <field name="theme_font_color">#fff</field> | ||||
|  |             <field name="view_font_color">#333</field> | ||||
|  |             <field name="theme_active">true</field> | ||||
|  |         </record> | ||||
|  |         <record id="theme_02" model="theme.config"> | ||||
|  |             <field name="name">Theme 2</field> | ||||
|  |             <field name="theme_main_color">#404a5e</field> | ||||
|  |             <field name="theme_font_color">#fff</field> | ||||
|  |             <field name="view_font_color">#404a5e</field> | ||||
|  |             <field name="theme_active">false</field> | ||||
|  |         </record> | ||||
|  |         <record id="theme_03" model="theme.config"> | ||||
|  |             <field name="name">Theme 3</field> | ||||
|  |             <field name="theme_main_color">#f39b12</field> | ||||
|  |             <field name="theme_font_color">#000</field> | ||||
|  |             <field name="view_font_color">#333</field> | ||||
|  |             <field name="theme_active">false</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,6 @@ | |||||
|  | ## Module <multicolor_backend_theme> | ||||
|  | 
 | ||||
|  | #### 05.05.2023 | ||||
|  | #### Version 16.0.1.0.0 | ||||
|  | #### ADD | ||||
|  | - Initial Commit for Chameleon Multi color Backend Theme | ||||
| @ -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 theme_config | ||||
| @ -0,0 +1,104 @@ | |||||
|  | # -*- 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 ThemeConfig(models.Model): | ||||
|  |     """Model for storing configuration settings related to the theme""" | ||||
|  |     _name = 'theme.config' | ||||
|  |     _description = "Model for storing configuration settings related to the " \ | ||||
|  |                    "theme" | ||||
|  | 
 | ||||
|  |     name = fields.Char(string="Name") | ||||
|  |     theme_main_color = fields.Char( | ||||
|  |         string="Theme main color", help="main theme color") | ||||
|  |     view_font_color = fields.Char( | ||||
|  |         string="View font color", help="backend font color") | ||||
|  |     theme_font_color = fields.Char( | ||||
|  |         string="Font color", help="backend view font color") | ||||
|  |     theme_active = fields.Boolean(string="Active") | ||||
|  | 
 | ||||
|  |     def write(self, vals_data): | ||||
|  |         """only one theme can be active at a time""" | ||||
|  |         if ('theme_active' in vals_data.keys() and | ||||
|  |                 vals_data['theme_active']): | ||||
|  |             for theme_rec in self.search([]): | ||||
|  |                 theme_rec.theme_active = False | ||||
|  |         res = super(ThemeConfig, self).write(vals_data) | ||||
|  |         return res | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def create_new_theme(self): | ||||
|  |         """create a new theme""" | ||||
|  |         theme_data = self.theme_defaults() | ||||
|  |         theme_obj = self.create(theme_data) | ||||
|  |         theme_data = self.search_read([]) | ||||
|  |         return [theme_obj.id, theme_data] | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def update_color(self, vals): | ||||
|  |         """update the color""" | ||||
|  |         vals_data = { | ||||
|  |             vals['key']: '#' + vals['value'] | ||||
|  |         } | ||||
|  |         self.browse(int(vals['theme_id'])).write(vals_data) | ||||
|  |         return | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def find_active(self): | ||||
|  |         """find the active theme""" | ||||
|  |         active_theme = self.search_read([('theme_active', '=', True)]) | ||||
|  |         return active_theme[0] if active_theme else False | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def update_active_theme(self, theme_id): | ||||
|  |         """update active theme """ | ||||
|  |         for theme_obj in self.search([]): | ||||
|  |             if theme_obj.theme_active and theme_obj.id != int(theme_id): | ||||
|  |                 theme_obj.theme_active = False | ||||
|  |             elif not theme_obj.theme_active and theme_obj.id == int(theme_id): | ||||
|  |                 theme_obj.theme_active = True | ||||
|  |         return | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def check_for_removal(self, theme_id): | ||||
|  |         """removal of a theme""" | ||||
|  |         theme_rec = self.browse(int(theme_id)) | ||||
|  |         if not theme_rec: | ||||
|  |             return False | ||||
|  |         if not theme_rec.theme_active: | ||||
|  |             theme_rec.unlink() | ||||
|  |         theme_data = self.search_read([]) | ||||
|  |         return theme_data | ||||
|  | 
 | ||||
|  |     def theme_defaults(self): | ||||
|  |         """set default theme""" | ||||
|  |         cr = self._cr | ||||
|  |         cr.execute("select count(*) from theme_config") | ||||
|  |         max_id = cr.fetchone() | ||||
|  |         return { | ||||
|  |             'name': 'Theme ' + str(max_id[0] + 1 if max_id else 1), | ||||
|  |             'theme_main_color': '#6fb702', | ||||
|  |             'view_font_color': '#333', | ||||
|  |             'theme_font_color': '#fff', | ||||
|  |             'theme_active': False, | ||||
|  |         } | ||||
| 
 | 
| @ -0,0 +1,15 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |      <data> | ||||
|  |          <record model="ir.module.category" id="multicolor_theme_module_access"> | ||||
|  |              <field name="name">Multicolor Backend Theme </field> | ||||
|  |              <field name="description">User access levels for Theme selection</field> | ||||
|  |              <field name="sequence">10</field> | ||||
|  |         </record> | ||||
|  |         <record id="multicolor_theme_manager_access" model="res.groups"> | ||||
|  |             <field name="name">Administrator</field> | ||||
|  |             <field name="category_id" ref="multicolor_theme_module_access"/> | ||||
|  |             <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|  |         </record> | ||||
|  |      </data> | ||||
|  | </odoo> | ||||
| After Width: | Height: | Size: 180 KiB | 
| After Width: | Height: | Size: 715 KiB | 
| After Width: | Height: | Size: 504 KiB | 
| After Width: | Height: | Size: 24 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 1.8 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 404 B | 
| After Width: | Height: | Size: 492 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 4.0 KiB | 
| After Width: | Height: | Size: 766 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 405 KiB | 
| After Width: | Height: | Size: 414 KiB | 
| After Width: | Height: | Size: 102 KiB | 
| After Width: | Height: | Size: 152 KiB | 
| After Width: | Height: | Size: 212 KiB | 
| After Width: | Height: | Size: 150 KiB | 
| After Width: | Height: | Size: 166 KiB | 
| After Width: | Height: | Size: 396 KiB | 
| After Width: | Height: | Size: 392 KiB | 
| After Width: | Height: | Size: 185 KiB | 
| After Width: | Height: | Size: 165 KiB | 
| After Width: | Height: | Size: 72 KiB | 
| After Width: | Height: | Size: 168 KiB | 
| After Width: | Height: | Size: 165 KiB | 
| After Width: | Height: | Size: 147 KiB | 
| After Width: | Height: | Size: 298 KiB | 
| After Width: | Height: | Size: 259 KiB | 
| After Width: | Height: | Size: 34 KiB | 
| @ -0,0 +1,680 @@ | |||||
|  | <!-- 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-weight: bolder !important; font-size: 2.5rem !important; color: #212121;"> | ||||
|  |                 Chameleon Backend theme | ||||
|  |             </h1> | ||||
|  |             <p class="my-1 text-center text-uppercase" | ||||
|  |                style="letter-spacing: 4px !important; color: #74788D !important;"> | ||||
|  |                 Choose your color by yourself.</p> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12 d-flex justify-content-center align-items-center" | ||||
|  |              style="margin: 2rem 0;"> | ||||
|  |             <img src="./assets/hero.gif" 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;"> | ||||
|  |                 Enables a user friendly backend theme for Odoo 16.0 community | ||||
|  |                 edition. | ||||
|  |             </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"> | ||||
|  |             <hr class="position-absolute" | ||||
|  |                 style="border: 1px solid #c4c6cc !important; width: 40% !important; z-index: 0 !important;"> | ||||
|  |             <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 w-50" style="margin: 3rem auto;"> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-4 my-2 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <div | ||||
|  |                         style="height: 100px; width: 100px; border: 8px solid #e4e3fe; border-radius: 50%; background-color: #d9d7fe; box-shadow: 0px 0px 0px 8px #f0efff;" | ||||
|  |                         class="d-flex justify-content-center align-items-center"> | ||||
|  |                     <img height="60px" src="./assets/icons/design.png"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="my-4 text-center">Carefully Crafted</h6> | ||||
|  |             </div> | ||||
|  |             <div class="col-lg-4 my-2 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <div | ||||
|  |                         style="height: 100px; width: 100px; border: 8px solid #e4e3fe; border-radius: 50%; background-color: #d9d7fe; box-shadow: 0px 0px 0px 8px #f0efff;" | ||||
|  |                         class="d-flex justify-content-center align-items-center"> | ||||
|  |                     <img height="60px" src="./assets/icons/responsive.png"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="my-4 text-center">Responsive Design</h6> | ||||
|  |             </div> | ||||
|  |             <div class="col-lg-4 my-2 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                 <div | ||||
|  |                         style="height: 100px; width: 100px; border: 8px solid #e4e3fe; border-radius: 50%; background-color: #d9d7fe; box-shadow: 0px 0px 0px 8px #f0efff;" | ||||
|  |                         class="d-flex justify-content-center align-items-center"> | ||||
|  |                     <img height="60px" src="./assets/icons/quality.png"> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="my-4 text-center">Quality Checked</h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | <!-- END OF RESPONSIVE --> | ||||
|  | <!-- FEATURE --> | ||||
|  | <div class="container" style="margin-top: 3rem;"> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #556EE6 !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2.5rem 1.5rem!important;"> | ||||
|  |             <div class="row mt-4"> | ||||
|  |                 <div class="col-lg-6"> | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>Modified Font</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>New Color Combination</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>Full Screen View</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <div class="col-lg-6"> | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>Stages are Seperated in View</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>Clean Layout</p> | ||||
|  |                     </div> | ||||
|  | 
 | ||||
|  |                     <div class="d-flex"> | ||||
|  |                         <i class="fa fa-check-square mr-2" | ||||
|  |                            style="color:#556EE6 !important; margin-top: 5px !important;"></i> | ||||
|  |                         <p>Buttons with New Colors</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | <!-- SCREENSHOTS --> | ||||
|  | <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"> | ||||
|  |             <hr class="position-absolute" | ||||
|  |                 style="border: 1px solid #c4c6cc !important; width: 40% !important; z-index: 0 !important;"> | ||||
|  |             <h2 | ||||
|  |                     style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> | ||||
|  |                 Screenshots</h2> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         1</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2">Login Page</h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/login1.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         2</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Expanded side bar </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/exp_sidebar1.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         3</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Minimized side bar </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/min_sidebar1.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         4</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Tree view </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/tree.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         5</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Kanban view </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/kanban.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         6</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Form view </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/form.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         7</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Color picker </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/color_picker.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         8</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Control panel | ||||
|  |                 </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/control_panel.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         8</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Chat Box | ||||
|  |                 </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/chatbot.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         8</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Advanced Search | ||||
|  |                 </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/adv_search.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         8</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Only Administrator can create, update and | ||||
|  |                     remove theme. | ||||
|  |                 </h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/access.png" width="100%" height="auto" | ||||
|  |                  class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <div class="row shadow" | ||||
|  |          style="margin: 2rem; padding: 0rem !important; background-color: #fff !important; border-top:  3px solid #74788D !important; min-width: 100% !important;"> | ||||
|  |         <div class="col-lg-12" style="padding: 2rem 1.5rem!important;"> | ||||
|  |             <div class="d-flex my-3"> | ||||
|  |                 <div class="d-flex justify-content-center align-items-center" | ||||
|  |                      style="background-color: #556EE6 !important; border: 4px solid #D4DAF9 !important; color: #fff !important; height: 35px; width: 35px; border-radius: 50% !important; font-size: 1.1rem !important;"> | ||||
|  |                     <h6 style="margin-top: 0.3rem; color: #fff !important;"> | ||||
|  |                         8</h6> | ||||
|  |                 </div> | ||||
|  |                 <h6 class="mt-2 ml-2"> Responsive</h6> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-12" | ||||
|  |              style="padding-left: 0 !important; padding-right: 0!important;"> | ||||
|  |             <img src="assets/screenshots/responsive_screenshot.png" width="100%" | ||||
|  |                  height="auto" class="img-responsive"> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | <!-- 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"> | ||||
|  |             <hr class="position-absolute" | ||||
|  |                 style="border: 1px solid #c4c6cc !important; width: 40% !important; z-index: 0 !important;"> | ||||
|  |             <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 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"> | ||||
|  |             <hr class="position-absolute" | ||||
|  |                 style="border: 1px solid #c4c6cc !important; width: 40% !important; z-index: 0 !important;"> | ||||
|  |             <h2 | ||||
|  |                     style="font-weight: 300 !important; background-color: #fff !important; z-index: 1 !important; padding: 0 1rem !important;"> | ||||
|  |                 Our Industries</h2> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/trading-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Trading | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Easily | ||||
|  |                     procure | ||||
|  |                     and | ||||
|  |                     sell your products</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/pos-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     POS | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Easy | ||||
|  |                     configuration | ||||
|  |                     and convivial experience</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/education-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" | ||||
|  |                      width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Education | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     A | ||||
|  |                     platform for | ||||
|  |                     educational management</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/manufacturing-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" | ||||
|  |                      width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Manufacturing | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Plan, | ||||
|  |                     track and | ||||
|  |                     schedule your operations</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/ecom-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     E-commerce & Website | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Mobile | ||||
|  |                     friendly, | ||||
|  |                     awe-inspiring product pages</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/service-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Service Management | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Keep | ||||
|  |                     track of | ||||
|  |                     services and invoice</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/restaurant-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" | ||||
|  |                      width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Restaurant | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     Run | ||||
|  |                     your bar or | ||||
|  |                     restaurant methodically</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <div class="col-lg-3"> | ||||
|  |             <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                  style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                 <img src="./assets/icons/hotel-black.png" | ||||
|  |                      class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                 <h5 | ||||
|  |                         style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                     Hotel Management | ||||
|  |                 </h5> | ||||
|  |                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                     An | ||||
|  |                     all-inclusive | ||||
|  |                     hotel management application</p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <!--END OF 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"> | ||||
|  |             <hr class="position-absolute" | ||||
|  |                 style="border: 1px solid #c4c6cc !important; width: 40% !important; z-index: 0 !important;"> | ||||
|  |             <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-4"> | ||||
|  |                     <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-4"> | ||||
|  |                     <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>WhatsApp</a> | ||||
|  |                 </div> | ||||
|  |                 <div class="col-lg-4"> | ||||
|  |                     <a href="skype:cybrosystechnologies?chat" target="_blank" | ||||
|  |                        class="btn btn-block deep_hover" | ||||
|  |                        style="text-decoration: none; background-color: #4d4d4d; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                             class="fa fa-envelope mr-2"></i>cybrosystechnologies</a> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  |     <!-- End of Contact Cards --> | ||||
|  | </section> | ||||
|  | <!-- Footer --> | ||||
|  | <section class="oe_container" | ||||
|  |          style="padding: 2rem 3rem 1rem; background-color: #fff !important;"> | ||||
|  |     <div class="row" | ||||
|  |          style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> | ||||
|  |         <!-- Logo --> | ||||
|  |         <div class="col-lg-12 d-flex justify-content-center align-items-center" | ||||
|  |              style="margin-top: 3rem;"> | ||||
|  |             <img src="https://www.cybrosys.com/images/logo.png" width="200px" | ||||
|  |                  height="auto"/> | ||||
|  |         </div> | ||||
|  |         <!-- End of Logo --> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <!-- END OF FOOTER --> | ||||
| After Width: | Height: | Size: 259 KiB | 
| @ -0,0 +1,5 @@ | |||||
|  | :root{ | ||||
|  |     --theme_main_color: #AD7B90 !default; | ||||
|  |     --theme_font_color: black !default; | ||||
|  |     --view_font_color | ||||
|  |     } | ||||
| After Width: | Height: | Size: 106 KiB | 
| @ -0,0 +1,25 @@ | |||||
|  | odoo.define('multicolor_backend_theme.LoginPage', function(require) { | ||||
|  |     "use strict"; | ||||
|  |     var publicWidget = require('web.public.widget'); | ||||
|  |     // change the theme of login page according to the active backend theme
 | ||||
|  |     publicWidget.registry.LoginPage = publicWidget.Widget.extend({ | ||||
|  |         selector: '.oe_login_buttons', | ||||
|  |         start: function() { | ||||
|  |             $.ajax({ | ||||
|  |                 url: '/active_theme', | ||||
|  |                 type: 'get', | ||||
|  |             }).then(function(result) { | ||||
|  |                 var colors = JSON.parse(result); | ||||
|  |                 $('.cybro-login-btn').css({ | ||||
|  |                     'background-color': colors.theme_main_color, | ||||
|  |                     'color': colors.theme_font_color | ||||
|  |                 }); | ||||
|  |                 $('.cybro-super-btn').css({ | ||||
|  |                     'color': colors.view_font_color | ||||
|  |                 }); | ||||
|  |             }); | ||||
|  |             return this._super(...arguments); | ||||
|  |         }, | ||||
|  |     }); | ||||
|  |     return publicWidget.registry.LoginPage; | ||||
|  | }); | ||||
| @ -0,0 +1,84 @@ | |||||
|  | /** @odoo-module */ | ||||
|  | import {NavBar} from "@web/webclient/navbar/navbar"; | ||||
|  | import {registry} from "@web/core/registry"; | ||||
|  | const {fuzzyLookup} = require('@web/core/utils/search'); | ||||
|  | import {computeAppsAndMenuItems} from "@web/webclient/menus/menu_helpers"; | ||||
|  | import core from 'web.core'; | ||||
|  | const {onMounted} = owl; | ||||
|  | import {patch} from 'web.utils'; | ||||
|  | 
 | ||||
|  | // patch NavaBar for searching apps and contents by extending navbar
 | ||||
|  | patch(NavBar.prototype, 'multicolor_backend_theme/static/src/js/search_apps.js', { | ||||
|  |     //--------------------------------------------------------------------------
 | ||||
|  |     // Public
 | ||||
|  |     // For advance search bar feature, and this will enable a global search for apps and related content
 | ||||
|  |     //--------------------------------------------------------------------------
 | ||||
|  |     /** | ||||
|  |      * @override | ||||
|  |      */ | ||||
|  |     setup() { | ||||
|  |         this._super(); | ||||
|  |         this._search_def = $.Deferred(); | ||||
|  |         let { | ||||
|  |             apps, | ||||
|  |             menuItems | ||||
|  |         } = computeAppsAndMenuItems(this.menuService.getMenuAsTree("root")); | ||||
|  |         this._apps = apps; | ||||
|  |         this._searchableMenus = menuItems; | ||||
|  |         onMounted(this.onMounted); | ||||
|  |     }, | ||||
|  |     onMounted() { | ||||
|  |         this.$search_container = $(".search-container"); | ||||
|  |         this.$search_input = $(".search-input input"); | ||||
|  |         this.$search_results = $(".search-results"); | ||||
|  |         this.$app_menu = $(".app-menu"); | ||||
|  |         this.$dropdown_menu = $(".dropdown-menu"); | ||||
|  |     }, | ||||
|  |     // to show the search results
 | ||||
|  |     _searchMenusSchedule: function() { | ||||
|  |         this.$search_results.removeClass("o_hidden") | ||||
|  |         this.$app_menu.addClass("o_hidden"); | ||||
|  |         this._search_def.reject(); | ||||
|  |         this._search_def = $.Deferred(); | ||||
|  |         setTimeout(this._search_def.resolve.bind(this._search_def), 50); | ||||
|  |         this._search_def.done(this._searchMenus.bind(this)); | ||||
|  |     }, | ||||
|  |     // function for searching all apps and content
 | ||||
|  |     _searchMenus: function() { | ||||
|  |         var query = this.$search_input.val(); | ||||
|  |         if (query === "") { | ||||
|  |             this.$search_container.removeClass("has-results"); | ||||
|  |             this.$app_menu.removeClass("o_hidden"); | ||||
|  |             this.$search_results.empty(); | ||||
|  |             return; | ||||
|  |         } | ||||
|  |         // search for all apps
 | ||||
|  |         var results = []; | ||||
|  |         fuzzyLookup(query, this._apps, (menu) => menu.label) | ||||
|  |             .forEach((menu) => { | ||||
|  |                 results.push({ | ||||
|  |                     category: "apps", | ||||
|  |                     name: menu.label, | ||||
|  |                     actionID: menu.actionID, | ||||
|  |                     id: menu.id, | ||||
|  |                     webIconData: menu.webIconData, | ||||
|  |                 }); | ||||
|  |             }); | ||||
|  |         // search for all content
 | ||||
|  |         fuzzyLookup(query, this._searchableMenus, (menu) => | ||||
|  |             (menu.parents + " / " + menu.label).split("/").reverse().join("/") | ||||
|  |         ).forEach((menu) => { | ||||
|  |             results.push({ | ||||
|  |                 category: "menu_items", | ||||
|  |                 name: menu.parents + " / " + menu.label, | ||||
|  |                 actionID: menu.actionID, | ||||
|  |                 id: menu.id, | ||||
|  |             }); | ||||
|  |         }); | ||||
|  |         this.$search_container.toggleClass("has-results", Boolean(results.length)); | ||||
|  |         this.$search_results.html(core.qweb.render("multicolor_backend_theme.SearchResults", { | ||||
|  |             results: results, | ||||
|  |             widget: this, | ||||
|  |         })); | ||||
|  |     }, | ||||
|  | }); | ||||
| @ -0,0 +1,84 @@ | |||||
|  | odoo.define('multicolor_backend_theme.sidebar', function (require) { | ||||
|  |     'use strict'; | ||||
|  |     //sidebar toggle effect
 | ||||
|  |     $(document).on("click", "#closeSidebar", function(event){ | ||||
|  |         $("#closeSidebar").hide(); | ||||
|  |         $("#openSidebar").show(); | ||||
|  |     }); | ||||
|  |     $(document).on("click", "#openSidebar", function(event){ | ||||
|  |         $("#openSidebar").hide(); | ||||
|  |         $("#closeSidebar").show(); | ||||
|  |     }); | ||||
|  |     $(document).on("click", "#openSidebar", function(event){ | ||||
|  |         $("#sidebar_panel").css({'display':'block'}); | ||||
|  |         $(".o_action_manager").css({'margin-left': '320px','transition':'all .1s linear'}); | ||||
|  | 
 | ||||
|  |         //add class in navbar
 | ||||
|  |         var navbar = $(".o_main_navbar"); | ||||
|  |         var navbar_id = navbar.data("id"); | ||||
|  |         $("nav").addClass(navbar_id); | ||||
|  |         navbar.addClass("small_nav"); | ||||
|  | 
 | ||||
|  |         //add class in action-manager
 | ||||
|  |         var action_manager = $(".o_action_manager"); | ||||
|  |         var action_manager_id = action_manager.data("id"); | ||||
|  |         $("div").addClass(action_manager_id); | ||||
|  |         action_manager.addClass("sidebar_margin"); | ||||
|  | 
 | ||||
|  |         //add class in top_heading
 | ||||
|  |         var top_head = $(".top_heading"); | ||||
|  |         var top_head_id = top_head.data("id"); | ||||
|  |         $("div").addClass(top_head_id); | ||||
|  |         top_head.addClass("sidebar_margin"); | ||||
|  |     }); | ||||
|  |     $(document).on("click", "#closeSidebar", function(event){ | ||||
|  |         $("#sidebar_panel").css({'display':'none'}); | ||||
|  |         $(".o_action_manager").css({'margin-left': '0px'}); | ||||
|  | 
 | ||||
|  |         //remove class in navbar
 | ||||
|  |         var navbar = $(".o_main_navbar"); | ||||
|  |         var navbar_id = navbar.data("id"); | ||||
|  |         $("nav").removeClass(navbar_id); | ||||
|  |         navbar.removeClass("small_nav"); | ||||
|  | 
 | ||||
|  |         //remove class in action-manager
 | ||||
|  |         var action_manager = $(".o_action_manager"); | ||||
|  |         var action_manager_id = action_manager.data("id"); | ||||
|  |         $("div").removeClass(action_manager_id); | ||||
|  |         action_manager.removeClass("sidebar_margin"); | ||||
|  | 
 | ||||
|  |     }); | ||||
|  | 
 | ||||
|  |     $(document).on("click", ".sidebar a", function(event){ | ||||
|  |         var menu = $(".sidebar a"); | ||||
|  |         var $this = $(this); | ||||
|  |         var id = $this.data("id"); | ||||
|  |         $("header").removeClass().addClass(id); | ||||
|  |         menu.removeClass("active"); | ||||
|  |         $this.addClass("active"); | ||||
|  | 
 | ||||
|  |         //sidebar close on menu-item click
 | ||||
|  |         $("#sidebar_panel").css({'display':'none'}); | ||||
|  |         $(".o_action_manager").css({'margin-left': '0px'}); | ||||
|  |         $("#closeSidebar").hide(); | ||||
|  |         $("#openSidebar").show(); | ||||
|  | 
 | ||||
|  |         //remove class in navbar
 | ||||
|  |         var navbar = $(".o_main_navbar"); | ||||
|  |         var navbar_id = navbar.data("id"); | ||||
|  |         $("nav").removeClass(navbar_id); | ||||
|  |         navbar.removeClass("small_nav"); | ||||
|  | 
 | ||||
|  |         //remove class in action-manager
 | ||||
|  |         var action_manager = $(".o_action_manager"); | ||||
|  |         var action_manager_id = action_manager.data("id"); | ||||
|  |         $("div").removeClass(action_manager_id); | ||||
|  |         action_manager.removeClass("sidebar_margin"); | ||||
|  | 
 | ||||
|  |         //remove class in top_heading
 | ||||
|  |         var top_head = $(".top_heading"); | ||||
|  |         var top_head_id = top_head.data("id"); | ||||
|  |         $("div").removeClass(top_head_id); | ||||
|  |         top_head.removeClass("sidebar_margin"); | ||||
|  |     }); | ||||
|  | }); | ||||
| @ -0,0 +1,480 @@ | |||||
|  | /** @odoo-module **/ | ||||
|  | import SystrayMenu from 'web.SystrayMenu'; | ||||
|  | import Widget from 'web.Widget'; | ||||
|  | import Session from 'web.session'; | ||||
|  | import {patch} from 'web.utils'; | ||||
|  | import {Discuss} from "@mail/components/discuss/discuss"; | ||||
|  | var core = require('web.core'); | ||||
|  | var session = require('web.session'); | ||||
|  | var QWeb = core.qweb; | ||||
|  | var rpc = require('web.rpc'); | ||||
|  | var ControlPanel = require('web.ControlPanel'); | ||||
|  | var DropdownMenu = require('web.DropdownMenu'); | ||||
|  | var FormRenderer = require('web.FormRenderer'); | ||||
|  | var ListRenderer = require('web.ListRenderer'); | ||||
|  | var KanbanRenderer = require('web.KanbanRenderer'); | ||||
|  | var KanbanRecord = require('web.KanbanRecord'); | ||||
|  | var AbstractController = require('web.AbstractController'); | ||||
|  | var utils = require('web.utils'); | ||||
|  | var selected_theme = {}; | ||||
|  | var themes_to_update = {}; | ||||
|  | var Temple = Widget.extend({ | ||||
|  |     name: 'activity_menu', | ||||
|  |     template: 'multicolor_backend_theme.systray.ThemeMenu', | ||||
|  |     events: { | ||||
|  |         'click .themes_selector_button': '_onThemeSelectorClick', | ||||
|  |         'change .theme_select': '_onThemeClick', | ||||
|  |         'click .button-create': '_onThemeCreate', | ||||
|  |         'click .button-remove': '_onThemeRemove', | ||||
|  |         'click .button-apply': '_onThemeApply', | ||||
|  |         'click .row.name i.fa-pencil': '_onNameEdit', | ||||
|  |         'click .row.name i.fa-check': '_onNameSave', | ||||
|  |         'change .row.name input#name': '_onNameSave', | ||||
|  |         'keyup .row.name input#name': '_onNameChange', | ||||
|  |         'click .color': '_colorPick' | ||||
|  |     }, | ||||
|  |     start: function() { | ||||
|  |         this._loadDefaults(); | ||||
|  |         this._apply_theme(); | ||||
|  |         return this._super(); | ||||
|  |     }, | ||||
|  |     init: function(parent) { | ||||
|  |         this.theme_data = {}; | ||||
|  |         this.selected_theme = {}; | ||||
|  |         this.themes_by_id = {}; | ||||
|  |         return this._super.apply(this, arguments); | ||||
|  |     }, | ||||
|  |     willStart: function() { | ||||
|  |         var self = this; | ||||
|  |         var get_them_data = rpc.query({ | ||||
|  |             model: 'theme.config', | ||||
|  |             method: 'search_read', | ||||
|  |             args: [] | ||||
|  |         }); | ||||
|  |         session.user_has_group('multicolor_backend_theme.multicolor_theme_manager_access').then(hasGroup => { | ||||
|  |             this.administrator = hasGroup; | ||||
|  |         }); | ||||
|  |         return $.when(get_them_data).then(function(theme_data) { | ||||
|  |             self.theme_data = theme_data; | ||||
|  |             for (var i in theme_data) { | ||||
|  |                 if (theme_data[i].theme_active == true) { | ||||
|  |                     self.selected_theme = theme_data[i]; | ||||
|  |                     selected_theme = theme_data[i]; | ||||
|  |                 } | ||||
|  |                 self.themes_by_id[theme_data[i].id] = theme_data[i]; | ||||
|  |             } | ||||
|  |             if (!self.selected_theme) { | ||||
|  |                 self.selected_theme = theme_data[0]; | ||||
|  |             } | ||||
|  |         }); | ||||
|  |     }, | ||||
|  |     //load default theme
 | ||||
|  |     _loadDefaults: function() { | ||||
|  |         var self = this; | ||||
|  |         var item_theme = '' | ||||
|  |         var theme = '' | ||||
|  |         if (self.themes_by_id[$('.theme_select').val()] != undefined) { | ||||
|  |             item_theme = self.themes_by_id[$('.theme_select').val()] | ||||
|  |         } | ||||
|  |         self.active_theme = item_theme | ||||
|  |         var color_el = [ | ||||
|  |             'theme_main_color', | ||||
|  |             'theme_font_color', | ||||
|  |             'view_font_color' | ||||
|  |         ]; | ||||
|  |         for (var color in color_el) { | ||||
|  |             var el_color = self.selected_theme[color_el[color]]; | ||||
|  |             $('#' + color_el[color]).loads({ | ||||
|  |                 layout: 'hex', | ||||
|  |                 flat: false, | ||||
|  |                 enableAlpha: false, | ||||
|  |                 color: el_color, | ||||
|  |                 onSubmit: function(ev) { | ||||
|  |                     var el_id = $(ev.el).attr('id'); | ||||
|  |                     $('#' + el_id).css('background-color', '#' + ev.hex); | ||||
|  |                     $('#' + el_id).val("#" + ev.hex); | ||||
|  |                     $('#' + el_id).hides(); | ||||
|  |                     self._onchangeColor($(ev.el), ev.hex); | ||||
|  |                 }, | ||||
|  | 
 | ||||
|  |                 onLoaded: function(ev) { | ||||
|  |                     $('.picker').css('color', 'green'); | ||||
|  |                 }, | ||||
|  |                 onChange: function(ev) { | ||||
|  |                     var el_id = $(ev.el).attr('id'); | ||||
|  |                     $('#' + el_id).setColor(ev.hex, false); | ||||
|  |                     $('.picker').css('color', 'red'); | ||||
|  |                 } | ||||
|  |             }); | ||||
|  |         } | ||||
|  |         return; | ||||
|  |     }, | ||||
|  |     //function to edit the name
 | ||||
|  |     _onNameEdit: function() { | ||||
|  |         $('.row.name #name').removeAttr('readonly'); | ||||
|  |         $('.row.name #name').css('background-color', 'rgb(238, 250, 239)'); | ||||
|  |     }, | ||||
|  |     //function for saving the name and theme
 | ||||
|  |     _onNameSave: function() { | ||||
|  |         var name_inp = $('.row.name input#name').val().trim(); | ||||
|  |         if (this.themes_by_id[$('.theme_select').val()].theme_active == true) { | ||||
|  |             this.selected_theme.name = name_inp; | ||||
|  |         } | ||||
|  |         this.themes_by_id[$('.theme_select').val()].name = name_inp; | ||||
|  |         rpc.query({ | ||||
|  |             model: 'theme.config', | ||||
|  |             method: 'write', | ||||
|  |             args: [ | ||||
|  |                 parseInt($('.theme_select').val()), | ||||
|  |                 { | ||||
|  |                     'name': name_inp | ||||
|  |                 } | ||||
|  |             ] | ||||
|  |         }).then(function() { | ||||
|  |             $('.button-apply.fa-check').css('color', 'green'); | ||||
|  |             themes_to_update[$('.theme_select').val()] = true; | ||||
|  |         }); | ||||
|  |         $('.row.name #name').attr('readonly', 'readonly'); | ||||
|  |         $('.row.name #name').css('background-color', 'white'); | ||||
|  |         $('.row.name i').replaceWith( | ||||
|  |             "<i class='fa fa-pencil'/>" | ||||
|  |         ); | ||||
|  |         $('option#' + $('.theme_select').val()).text(name_inp); | ||||
|  |     }, | ||||
|  |     _onNameChange: function() { | ||||
|  |         $('.button-apply.fa-check').css('color', 'red'); | ||||
|  |         delete themes_to_update[$('.theme_select').val()]; | ||||
|  |         var name_inp = $('.row.name input#name').val().trim(); | ||||
|  |         if (name_inp && (this.themes_by_id[$('.theme_select').val()].name != name_inp)) { | ||||
|  |             $('.row.name i').replaceWith( | ||||
|  |                 "<i class='fa fa-check'/>" | ||||
|  |             ); | ||||
|  |         } | ||||
|  |     }, | ||||
|  |     // click function for color select
 | ||||
|  |     _colorPick: function(){ | ||||
|  |     this._loadDefaults(); | ||||
|  |     }, | ||||
|  | 
 | ||||
|  |     // function for selecting theme from the selection
 | ||||
|  |     _onThemeSelectorClick: function() { | ||||
|  |         this._loadDefaults(); | ||||
|  |         $('.themes_selector').toggleClass('show'); | ||||
|  |         $('.row.name #name').attr('readonly', 'readonly'); | ||||
|  |         $('.row.name #name').css('background-color', 'white'); | ||||
|  |     }, | ||||
|  |     // function for customizing the color
 | ||||
|  |     _onchangeColor: function(element, data) { | ||||
|  |         var $apply = $('.button-apply.fa-check'); | ||||
|  |         var current_theme = this.themes_by_id[$('.theme_select').val()]; | ||||
|  |         if ('#' + data != current_theme[element.attr('id')]) { | ||||
|  |             $apply.css('color', 'red'); | ||||
|  |             current_theme[element.attr('id')] = '#' + data; | ||||
|  |             this.themes_by_id[current_theme.id][element.attr('id')] = '#' + data; | ||||
|  |             var el_id = element.attr('id'); | ||||
|  |             var vals = { | ||||
|  |                 'theme_id': current_theme.id, | ||||
|  |                 'key': el_id, | ||||
|  |                 'value': data | ||||
|  |             }; | ||||
|  |             rpc.query({ | ||||
|  |                 model: 'theme.config', | ||||
|  |                 method: 'update_color', | ||||
|  |                 args: [vals] | ||||
|  |             }).then(function() { | ||||
|  |                 $apply.css('color', 'green'); | ||||
|  |             }); | ||||
|  |         } | ||||
|  |         return; | ||||
|  |     }, | ||||
|  |     //  theme change function
 | ||||
|  |     _onThemeClick: function() { | ||||
|  |         var $theme_el = QWeb.render( | ||||
|  |             'multicolor_backend_theme.selected_theme', { | ||||
|  |                 widget: { | ||||
|  |                     selected_theme: this.themes_by_id[$('.theme_select').val()] | ||||
|  |                 } | ||||
|  |             }); | ||||
|  |         $('div.theme_data').replaceWith($($theme_el)); | ||||
|  |         this._loadDefaults(); | ||||
|  |         if (themes_to_update[$('.theme_select').val()] == true) { | ||||
|  |             $('.button-apply.fa-check').css('color', 'green'); | ||||
|  |         } else { | ||||
|  |             $('.button-apply.fa-check').css('color', '#4c4c4c'); | ||||
|  |         } | ||||
|  |     }, | ||||
|  |     // create new theme
 | ||||
|  |     _onThemeCreate: function() { | ||||
|  |         var self = this; | ||||
|  |         rpc.query({ | ||||
|  |             model: 'theme.config', | ||||
|  |             method: 'create_new_theme' | ||||
|  |         }).then(function(result) { | ||||
|  |             self._updateThemeData(result[1]); | ||||
|  |             var theme_el = QWeb.render( | ||||
|  |                 'multicolor_backend_theme.selected_theme', { | ||||
|  |                     widget: { | ||||
|  |                         selected_theme: self.themes_by_id[result[0]] | ||||
|  |                     } | ||||
|  |                 }); | ||||
|  |             $('div.theme_data').replaceWith($(theme_el)); | ||||
|  | 
 | ||||
|  |             var opt_el = "<option value='" + result[0] + "' >" + | ||||
|  |                 self.themes_by_id[result[0]].name + "</option>"; | ||||
|  |             $('.theme_select').append($(opt_el)); | ||||
|  |             $('.theme_select').val(result[0]); | ||||
|  |             self._loadDefaults(); | ||||
|  |         }); | ||||
|  |     }, | ||||
|  |     // remove the theme from the inactive themes
 | ||||
|  |     _onThemeRemove: function() { | ||||
|  |         var self = this; | ||||
|  |         var curr_theme = $('.theme_select').val(); | ||||
|  |         var theme_rec = this.themes_by_id[curr_theme]; | ||||
|  |         if (theme_rec.theme_active == true) { | ||||
|  |             alert("You cannot delete an active theme.") | ||||
|  |         } else { | ||||
|  |             rpc.query({ | ||||
|  |                 model: 'theme.config', | ||||
|  |                 method: 'check_for_removal', | ||||
|  |                 args: [curr_theme] | ||||
|  |             }).then(function(theme_data) { | ||||
|  |                 if (theme_data) { | ||||
|  |                     self._updateThemeData(theme_data); | ||||
|  |                     var theme_el = QWeb.render( | ||||
|  |                         'multicolor_backend_theme.selected_theme', { | ||||
|  |                             widget: self | ||||
|  |                         }); | ||||
|  |                     $('div.theme_data').replaceWith($(theme_el)); | ||||
|  |                     $(".theme_select option[value='" + theme_rec.id + "']").remove(); | ||||
|  |                     $(".theme_select").val(self.selected_theme.id); | ||||
|  |                     self._loadDefaults(); | ||||
|  |                 } | ||||
|  |             }); | ||||
|  |         } | ||||
|  |     }, | ||||
|  |     // apply the selected theme and make it active
 | ||||
|  |     _onThemeApply: function() { | ||||
|  |         var curr_theme_id = $('.theme_select').val(); | ||||
|  |         rpc.query({ | ||||
|  |             model: 'theme.config', | ||||
|  |             method: 'update_active_theme', | ||||
|  |             args: [curr_theme_id] | ||||
|  |         }).then(function() { | ||||
|  |             window.location.reload(); | ||||
|  |         }); | ||||
|  |     }, | ||||
|  |     //For updating the theme
 | ||||
|  |     _updateThemeData: function(theme_data) { | ||||
|  |         this.themes_by_id = {}; | ||||
|  |         this.theme_data = theme_data; | ||||
|  |         for (var theme in theme_data) { | ||||
|  |             this.themes_by_id[theme_data[theme].id] = theme_data[theme]; | ||||
|  |         } | ||||
|  |         return; | ||||
|  |     }, | ||||
|  |     // apply the selected theme
 | ||||
|  |     _apply_theme: function() { | ||||
|  |         if (this.selected_theme) { | ||||
|  |             document.documentElement.style.setProperty("--theme_main_color", this.selected_theme.theme_main_color); | ||||
|  |             document.documentElement.style.setProperty("--theme_font_color", this.selected_theme.theme_font_color); | ||||
|  |             document.documentElement.style.setProperty("--view_font_color", this.selected_theme.view_font_color); | ||||
|  |             $('.cybro-main-menu .input-group-text').css({ | ||||
|  |                 'background-color': this.selected_theme.theme_main_color, | ||||
|  |                 'border-color': this.selected_theme.theme_main_color, | ||||
|  |                 'color': this.selected_theme.theme_font_color, | ||||
|  |             }); | ||||
|  |             $('.o_loading').css({ | ||||
|  |                 'background-color': this.selected_theme.theme_main_color, | ||||
|  |                 'color': this.selected_theme.theme_font_color, | ||||
|  |             }); | ||||
|  |             $('.btn-primary').css({ | ||||
|  |                 'background-color': this.selected_theme.theme_main_color, | ||||
|  |                 'color': this.selected_theme.theme_font_color, | ||||
|  |             }); | ||||
|  |         } | ||||
|  |     }, | ||||
|  | }); | ||||
|  | patch(Discuss.prototype, 'multicolor_backend_theme/static/src/js/systray_theme_menu.js', { | ||||
|  |     _onDiscussItemClicked: function(ev) { | ||||
|  |         this._super(ev); | ||||
|  |         this.$('.o_mail_discuss_title_main').css({ | ||||
|  |             'box-shadow': 'none', | ||||
|  |         }); | ||||
|  |         this.$('.o_mail_discuss_title_main.o_active').css({ | ||||
|  |             'box-shadow': 'inset 3px 0 0 ' + selected_theme.theme_main_color, | ||||
|  |         }); | ||||
|  |     }, | ||||
|  |     _renderSidebar: function(options) { | ||||
|  |         var res = this._super(options); | ||||
|  |         res.find('.o_mail_discuss_title_main').css({ | ||||
|  |             'box-shadow': 'none', | ||||
|  |         }); | ||||
|  |         res.find('.o_mail_discuss_title_main.o_active').css({ | ||||
|  |             'box-shadow': 'inset 3px 0 0 ' + selected_theme.theme_main_color, | ||||
|  |         }); | ||||
|  |         return res; | ||||
|  |     }, | ||||
|  | }); | ||||
|  | // add the brush icon into systray
 | ||||
|  | SystrayMenu.Items.push(Temple); | ||||
|  | patch(ControlPanel.prototype, 'multicolor_backend_theme/static/src/js/systray_theme_menu.js', { | ||||
|  |     _update_search_view: function(searchview, isHidden, groupable, enableTimeRangeMenu) { | ||||
|  |         this._super(searchview, isHidden, groupable, enableTimeRangeMenu); | ||||
|  |         if (selected_theme) { | ||||
|  |             this.$('span.o_searchview_more').css({ | ||||
|  |                 background: selected_theme.theme_main_color, | ||||
|  |                 color: selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |             document.documentElement.style.setProperty("--theme_main_color", this.selected_theme.theme_main_color); | ||||
|  |             this.$('.o_searchview .o_searchview_facet .o_searchview_facet_label').css({ | ||||
|  |                 'background-color': selected_theme.theme_main_color | ||||
|  |             }); | ||||
|  |             this.$('.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label').css({ | ||||
|  |                 'color': selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |             // button properties
 | ||||
|  |             this.$('.btn-primary').css({ | ||||
|  |                 'background-color': selected_theme.theme_main_color, | ||||
|  |                 'border-color': selected_theme.theme_main_color, | ||||
|  |                 'color': selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |             this.$('.btn-primary:hover').css({ | ||||
|  |                 'background-color': selected_theme.theme_main_color, | ||||
|  |                 'border-color': selected_theme.theme_main_color, | ||||
|  |                 'color': selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |         } | ||||
|  |     }, | ||||
|  |     update: function(status, options) { | ||||
|  |         this._super(status, options); | ||||
|  |         this.$('button.o_dropdown_toggler_btn.btn.btn-secondary.dropdown-toggle').css({ | ||||
|  |             'background-color': selected_theme.theme_main_color, | ||||
|  |             'border-color': selected_theme.theme_main_color, | ||||
|  |             'color': selected_theme.theme_font_color | ||||
|  |         }); | ||||
|  |     }, | ||||
|  |     /** | ||||
|  |      * Private function that renders a breadcrumbs' li Jquery element | ||||
|  |      */ | ||||
|  |     _render_breadcrumbs_li: function(bc, index, length) { | ||||
|  |         var $bc = this._super(bc, index, length); | ||||
|  |         $bc.find('a').css({ | ||||
|  |             'color': selected_theme.view_font_color | ||||
|  |         }); | ||||
|  |         return $bc; | ||||
|  |     } | ||||
|  | }); | ||||
|  | // apply theme colors in form view
 | ||||
|  | FormRenderer.include({ | ||||
|  |     _renderTagSheet: function(node) { | ||||
|  |         var sheet = this._super(node); | ||||
|  |         sheet.find('.fa, .o_stat_value').css( | ||||
|  |             'color', selected_theme.view_font_color); | ||||
|  |         return sheet; | ||||
|  |     }, | ||||
|  |     _renderHeaderButtons: function(node) { | ||||
|  |         var buttons_obj = this._super(node); | ||||
|  |         buttons_obj.find('.btn-primary').css({ | ||||
|  |             'background-color': selected_theme.theme_main_color, | ||||
|  |             'border-color': selected_theme.theme_main_color, | ||||
|  |             'color': selected_theme.theme_font_color | ||||
|  |         }); | ||||
|  |         buttons_obj.find('.btn-primary:hover').css({ | ||||
|  |             'background-color': selected_theme.theme_main_color, | ||||
|  |             'border-color': selected_theme.theme_main_color, | ||||
|  |             'color': selected_theme.theme_font_color | ||||
|  |         }); | ||||
|  |         return buttons_obj; | ||||
|  |     }, | ||||
|  |     _renderTagHeader: function(node) { | ||||
|  |         var statusbar_el = this._super(node); | ||||
|  |         statusbar_el.find('button.btn.o_arrow_button.btn-primary.disabled').css({ | ||||
|  |             'color': selected_theme.view_font_color | ||||
|  |         }); | ||||
|  |         return statusbar_el; | ||||
|  |     }, | ||||
|  |     _renderTagForm: function(node) { | ||||
|  |         var $res = this._super(node); | ||||
|  |         $res.find('a').css( | ||||
|  |             'color', selected_theme.view_font_color); | ||||
|  |         $res.find('.o_field_widget.o_field_many2one .o_external_button').css( | ||||
|  |             'color', selected_theme.view_font_color); | ||||
|  |         $res.find('.btn-primary').css( | ||||
|  |             'background-color', selected_theme.theme_main_color); | ||||
|  |         $res.find('.btn-primary').css( | ||||
|  |             'color', selected_theme.theme_font_color); | ||||
|  |         return $res; | ||||
|  |     }, | ||||
|  | }); | ||||
|  | // apply changes in listview
 | ||||
|  | ListRenderer.include({ | ||||
|  |     setRowMode: function(recordID, mode) { | ||||
|  |         var self = this; | ||||
|  |         return this._super(recordID, mode).then(function() { | ||||
|  |             self.$('.o_external_button').css('color', selected_theme.view_font_color); | ||||
|  |         }); | ||||
|  |     } | ||||
|  | }); | ||||
|  | // apply theme changes in kanban view
 | ||||
|  | KanbanRenderer.include({ | ||||
|  |     _renderView: function() { | ||||
|  |         return this._super().then(function() { | ||||
|  |             $('.btn-primary').css('background-color', | ||||
|  |                 selected_theme.theme_main_color); | ||||
|  |             $('.btn-primary').css('color', | ||||
|  |                 selected_theme.theme_font_color); | ||||
|  |         }); | ||||
|  |     } | ||||
|  | }); | ||||
|  | KanbanRecord.include({ | ||||
|  |     _render: function() { | ||||
|  |         var self = this; | ||||
|  |         return this._super().then(function() { | ||||
|  |             self.$el.find('.o_kanban_image_fill_left.d-none.d-md-block').css({ | ||||
|  |                 'border': '2px solid ' + selected_theme.theme_main_color | ||||
|  |             }); | ||||
|  |             self.$el.find('.o_field_widget.badge.badge-primary').css({ | ||||
|  |                 'background': selected_theme.theme_main_color | ||||
|  |             }); | ||||
|  |         }); | ||||
|  |     } | ||||
|  | }); | ||||
|  | // change the theme of the dropdown menus according to the current theme
 | ||||
|  | patch(DropdownMenu.prototype, 'multicolor_backend_theme/static/src/js/systray_theme_menu.js', { | ||||
|  |     _renderMenuItems: function() { | ||||
|  |         this._super(); | ||||
|  |         if (selected_theme) { | ||||
|  |             $('span.o_searchview_more').css({ | ||||
|  |                 background: selected_theme.theme_main_color, | ||||
|  |                 color: selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |             $('.o_searchview .o_searchview_facet .o_searchview_facet_label').css({ | ||||
|  |                 'background-color': selected_theme.theme_main_color | ||||
|  |             }); | ||||
|  |             $('.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label').css({ | ||||
|  |                 'color': selected_theme.theme_font_color | ||||
|  |             }); | ||||
|  |         } | ||||
|  |     }, | ||||
|  | }); | ||||
|  | // change the theme of the onboarding panel according to the current theme
 | ||||
|  | patch(AbstractController.prototype, 'multicolor_backend_theme/static/src/js/systray_theme_menu.js', { | ||||
|  |     _renderBanner: function() { | ||||
|  |         var self = this; | ||||
|  |         return this._super().then(function() { | ||||
|  |             if (selected_theme) { | ||||
|  |                 self.$('.o_onboarding_wrap').css({ | ||||
|  |                     'background-color': selected_theme.theme_main_color | ||||
|  |                 }); | ||||
|  |                 var color_val = 'color:' + | ||||
|  |                     selected_theme.theme_font_color + | ||||
|  |                     ' !important;'; | ||||
|  |                 self.$('.o_onboarding_wrap a,.o_onboarding_wrap p').attr( | ||||
|  |                     'style', color_val | ||||
|  |                 ); | ||||
|  |             } | ||||
|  |         }); | ||||
|  |     }, | ||||
|  | }); | ||||
|  | return Temple; | ||||
| @ -0,0 +1,202 @@ | |||||
|  | @import url('https://fonts.googleapis.com/css?family=Poppins'); | ||||
|  | body { | ||||
|  |   font-size: 14px; | ||||
|  |   font-family: lato, sans-serif | ||||
|  | } | ||||
|  | 
 | ||||
|  | h1, h2, h3, h4, h5, h6 { | ||||
|  |   margin: 0; | ||||
|  |   font-family: poppins, sans-serif | ||||
|  | } | ||||
|  | 
 | ||||
|  | p { | ||||
|  |   font-family: lato, sans-serif; | ||||
|  |   font-size: 15px; | ||||
|  |   line-height: 26px; | ||||
|  |   color: #444; | ||||
|  |   margin-bottom: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | p img { | ||||
|  |   margin: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | a, a:visited { | ||||
|  |   text-decoration: none; | ||||
|  |   transition: all .3s ease-in-out; | ||||
|  |   -webkit-transition: all .3s ease-in-out; | ||||
|  |   -moz-transition: all .3s ease-in-out; | ||||
|  |   -o-transition: all .3s ease-in-out; | ||||
|  |   outline: 0; | ||||
|  |   font-family: poppins, sans-serif | ||||
|  | } | ||||
|  | 
 | ||||
|  | a:hover { | ||||
|  |   text-decoration: none | ||||
|  | } | ||||
|  | 
 | ||||
|  | a:focus { | ||||
|  |   text-decoration: none; | ||||
|  |   outline: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | p a, p a:visited { | ||||
|  |   line-height: inherit; | ||||
|  |   outline: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul, ol { | ||||
|  |   margin-bottom: 0; | ||||
|  |   margin-top: 0; | ||||
|  |   padding: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul { | ||||
|  |   margin: 0; | ||||
|  |   list-style-type: none | ||||
|  | } | ||||
|  | 
 | ||||
|  | ol { | ||||
|  |   list-style: decimal | ||||
|  | } | ||||
|  | 
 | ||||
|  | ol, ul.square, ul.circle, ul.disc { | ||||
|  |   margin-left: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul.square { | ||||
|  |   list-style: square outside | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul.circle { | ||||
|  |   list-style: circle outside | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul.disc { | ||||
|  |   list-style: disc outside | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul ul, ul ol, ol ol, ol ul { | ||||
|  |   margin: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | ul ul li, ul ol li, ol ol li, ol ul li { | ||||
|  |   margin-bottom: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | button { | ||||
|  |   cursor: pointer; | ||||
|  |   outline: none !important; | ||||
|  |   letter-spacing: 0 | ||||
|  | } | ||||
|  | 
 | ||||
|  | blockquote { | ||||
|  |   padding: 60px; | ||||
|  |   position: relative; | ||||
|  |   background: #853bfa | ||||
|  | } | ||||
|  | 
 | ||||
|  | blockquote:before { | ||||
|  |   content: '\f10d'; | ||||
|  |   font-family: fontawesome; | ||||
|  |   color: #fff; | ||||
|  |   font-size: 32px; | ||||
|  |   position: absolute; | ||||
|  |   left: 16px; | ||||
|  |   top: 46px | ||||
|  | } | ||||
|  | 
 | ||||
|  | blockquote p { | ||||
|  |   font-size: 17px; | ||||
|  |   color: #fff | ||||
|  | } | ||||
|  | 
 | ||||
|  | .blockquote-footer { | ||||
|  |   color: #fff | ||||
|  | } | ||||
|  | /*==============login================*/ | ||||
|  | .oe_website_login_container { | ||||
|  |     padding: 1rem 5rem 5rem; | ||||
|  |     background: #f1f4f5; | ||||
|  | } | ||||
|  | .oe_login_form, .oe_signup_form, .oe_reset_password_form { | ||||
|  |   color: #fff !important; | ||||
|  | } | ||||
|  | .oe_login_form, .oe_signup_form, .oe_reset_password_form { | ||||
|  |     max-width: 360px; | ||||
|  |     position: relative; | ||||
|  |     margin: 50px auto; | ||||
|  |     border-radius: 7px; | ||||
|  |     padding: 3rem; | ||||
|  |     background: #ffffff; | ||||
|  |     box-shadow: 0 0 11px 0px #4477d4; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .oe_login_form input { | ||||
|  |     height: 40px !important; | ||||
|  |     border-radius: 0 !important; | ||||
|  |     background: #fff !important; | ||||
|  |     border: 1px solid #ffffff; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .oe_login_form i.fa.fa-database { | ||||
|  |   margin-left: 6px; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .oe_login_form a.btn.btn-secondary { | ||||
|  |   display: flex; | ||||
|  |   justify-content: space-between; | ||||
|  |   align-items: center; | ||||
|  |   border-radius: 0 !important; | ||||
|  | } | ||||
|  | .cybro-login-btn { | ||||
|  |     height: 47px; | ||||
|  |     border-radius: 0; | ||||
|  |     //background: #3e8df7 !important; | ||||
|  |     border: none; | ||||
|  |     //color: #ffffff !important; | ||||
|  |     font-size: 16px; | ||||
|  | } | ||||
|  | .cybro-super-btn { | ||||
|  |     //color: #fff; | ||||
|  |     font-size: 14px; | ||||
|  |   text-decoration: none; | ||||
|  | } | ||||
|  | .cybro-super-btn:hover { | ||||
|  |     color: black !important; | ||||
|  |     text-decoration: none; | ||||
|  | } | ||||
|  | .cybro-bg footer{ | ||||
|  |     background: #303641 !important; | ||||
|  |     color: #fff; | ||||
|  |     padding-top: 2rem; | ||||
|  | } | ||||
|  | .cybro-bg .navbar { | ||||
|  |     background: #303641 !important; | ||||
|  |     color: #fff; | ||||
|  | } | ||||
|  | .cybro-bg footer a,.cybro-bg footer p,.cybro-bg header a,.cybro-bg header p { | ||||
|  |     color: #fff; | ||||
|  | } | ||||
|  | .cybro-bg .navbar-light .navbar-nav .nav-link { | ||||
|  |     color: #ffffff !important; | ||||
|  | } | ||||
|  | .homepage .dropdown-menu.js_usermenu.dropdown-menu-right.show { | ||||
|  |     background: #303641; | ||||
|  | } | ||||
|  | .oe_website_login_container .btn-secondary { | ||||
|  |     color: #FFFFFF; | ||||
|  |     background-color: #afafaf; | ||||
|  |     border-color: #afafae; | ||||
|  | } | ||||
|  | input { | ||||
|  |     border: 1px solid #e4eaec !important; | ||||
|  | } | ||||
|  | .oe_login_form, .oe_signup_form, .oe_reset_password_form { | ||||
|  |     color: #37474f !important; | ||||
|  |     font-weight: 300 !important; | ||||
|  | } | ||||
|  | form label { | ||||
|  |     font-weight: 300 !important; | ||||
|  | } | ||||
|  | /*==============//login================*/ | ||||
| @ -0,0 +1,107 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||
|  | <templates id="template" xml:space="preserve"> | ||||
|  | <!--    Advanced sidebar view--> | ||||
|  |     <t t-inherit="web.NavBar" t-inherit-mode="extension" owl="1"> | ||||
|  |         <xpath expr="//nav[hasclass('o_main_navbar')]" position="after"> | ||||
|  |             <t t-name="AppsMenuSidebar"> | ||||
|  |                 <div class="cybro-sidebar-qweb"> | ||||
|  |                     <div class="sidebar-menus" role="menu"> | ||||
|  |                         <t t-foreach="menuService.getApps()" t-as="app" | ||||
|  |                            t-key="app_index"> | ||||
|  |                          <a t-attf-href="#menu_id={{app.id}}"> | ||||
|  |                             <img t-if="app.webIcon.includes('.png')" | ||||
|  |                                  t-att-title="app.name" | ||||
|  |                                  style="width: 40px !important;height: 40px !important; border-radius: 10px !important;margin: 5px 5px 5px 5px;" | ||||
|  |                                  t-attf-src="data:image/png;base64,{{app.webIconData}}"/> | ||||
|  |                              <img t-if="app.webIcon.includes('.svg')" | ||||
|  |                                   t-att-title="app.name" | ||||
|  |                                   style="width: 40px !important;height: 40px !important; border-radius: 10px !important;margin: 5px 5px 5px 5px;" | ||||
|  |                                   t-attf-src="data:image/svg+xml;base64,{{app.webIconData}}"/> | ||||
|  |                             </a> | ||||
|  |                         </t> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <div class="sidebar_panel" id="sidebar_panel"> | ||||
|  |                     <div class="sidebar"> | ||||
|  | 			            <div class="sidebar_close"> | ||||
|  | 				            <a id="closeSidebar" style="cursor: pointer;"> | ||||
|  |                             </a> | ||||
|  |                         </div> | ||||
|  |                         <div class="search-container form-row align-items-center m-auto mb-5 col-12" | ||||
|  |                              style="padding-top: 32px;"> | ||||
|  |                             <div class="search-input col-md-10 ml-auto mr-auto mb-5" | ||||
|  |                                  t-on-input="_searchMenusSchedule"> | ||||
|  |                                     <div class="input-group"> | ||||
|  |                                         <div class="input-group-prepend"> | ||||
|  |                                             <div class="input-group-text"> | ||||
|  |                                                 <i class="fa fa-search"/> | ||||
|  |                                             </div> | ||||
|  |                                         </div> | ||||
|  |                                         <input type="search" | ||||
|  |                                                autocomplete="off" | ||||
|  |                                                placeholder="Search menus..." | ||||
|  |                                                class="form-control"/> | ||||
|  |                                     </div> | ||||
|  |                                 </div> | ||||
|  |                             <div class="search-results col-md-10 ml-auto mr-auto"/> | ||||
|  |                         </div> | ||||
|  |                         <ul class="sidebar_menu"> | ||||
|  | 	                         <t t-foreach="menuService.getApps()" t-as="app" | ||||
|  |                                 t-key="app_index"> | ||||
|  | 		                    <li> | ||||
|  | 		            	        <a role="menuitem" | ||||
|  |                                    t-attf-href="#menu_id={{app.id}}" | ||||
|  |                                    class="dropdown-item o_app mt0" | ||||
|  |                                    t-att-data-menu-id="app.menuID" | ||||
|  |                                    t-att-data-menu-xmlid="app.xmlID" | ||||
|  |                                    t-att-data-action-id="app.actionID"> | ||||
|  | 		                            <img t-if="app.webIcon.includes('.png')" | ||||
|  |                                          t-att-title="app.name" | ||||
|  |                                          style="width: 40px !important;height: 40px !important; | ||||
|  |                                          border-radius: 10px !important;margin: 5px 5px 5px 5px;" | ||||
|  |                                          t-attf-src="data:image/png;base64,{{app.webIconData}}"/> | ||||
|  |                                     <img t-if="app.webIcon.includes('.svg')" | ||||
|  |                                          t-att-title="app.name" | ||||
|  |                                          style="width: 40px !important;height: 40px !important; | ||||
|  |                                          border-radius: 10px !important;margin: 5px 5px 5px 5px;" | ||||
|  |                                          t-attf-src="data:image/svg+xml;base64,{{app.webIconData}}"/> | ||||
|  |                                     <b class="a_app_menu_title"><t t-esc="app.name"/></b> | ||||
|  | 		            	        </a> | ||||
|  | 		                    </li> | ||||
|  | 		    	        </t> | ||||
|  | 	                </ul> | ||||
|  | 	            </div> | ||||
|  |             </div> | ||||
|  |         </t> | ||||
|  |         </xpath> | ||||
|  |      </t> | ||||
|  |     <!--    Toggle icon for Advanced sidebar--> | ||||
|  |     <t t-inherit="web.NavBar.AppsMenu" t-inherit-mode="extension" owl="1"> | ||||
|  |             <xpath expr="//Dropdown" position="replace"> | ||||
|  |                 <li class="dropdown"> | ||||
|  |                     <a id="openSidebar" | ||||
|  |                        style="display: block; cursor: pointer; margin-left: 10px;"> | ||||
|  |                         <i class="fa fa-bars fa-lg"/> | ||||
|  |                     </a> | ||||
|  |                     <a id="closeSidebar" | ||||
|  |                        style="display: none; cursor: pointer; margin-left: 10px;"> | ||||
|  |                         <i class="fa fa-bars fa-lg"/> | ||||
|  |                     </a> | ||||
|  |                 </li> | ||||
|  |             </xpath> | ||||
|  |         </t> | ||||
|  |     <!--    Show search result apps--> | ||||
|  |     <t t-name="multicolor_backend_theme.SearchResults"> | ||||
|  |         <t t-foreach="results" t-as="result"> | ||||
|  |             <div class="search_icons"> | ||||
|  |             <a t-attf-class="o-menu-search-result dropdown-item col-12 ml-auto mr-auto #{result_first ? 'active' : ''}" | ||||
|  |                t-attf-style="background-image:url('data:image/png;base64,#{result.webIconData}')" | ||||
|  |                t-attf-href="#menu_id=#{result.id}&action_id=#{result.actionID}" | ||||
|  |                t-att-data-menu-id="result.id" | ||||
|  |                t-att-data-action-id="result.actionID" | ||||
|  |                t-raw="result.name" | ||||
|  |                onclick="$('.dropdown-menu').removeClass('show'); $('.search-results').addClass('o_hidden'); $('.app-menu').removeClass('o_hidden'); $('.search-input input').val('');"/> | ||||
|  |             </div> | ||||
|  |         </t> | ||||
|  |     </t> | ||||
|  | </templates> | ||||
| @ -0,0 +1,115 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <templates> | ||||
|  |     <!--    Systray view--> | ||||
|  |     <t t-name="multicolor_backend_theme.systray.ThemeMenu"> | ||||
|  |         <li class="themes_selector_li"> | ||||
|  |             <a class="themes_selector_button" | ||||
|  |                data-display="static" aria-expanded="false" title="Themes" | ||||
|  |                role="button"> | ||||
|  |                 <t t-if="widget.administrator"> | ||||
|  |                     <i class="fa fa-paint-brush" role="img" | ||||
|  |                        aria-label="Themes Configuration"/> | ||||
|  |                 </t> | ||||
|  |             </a> | ||||
|  |             <!--            Theme customization --> | ||||
|  |             <div class="themes_selector dropdown-menu-right" | ||||
|  |                  role="menu"> | ||||
|  |                 <div class="row"> | ||||
|  |                     <div class="themes_list"> | ||||
|  |                         <div class="row theme_obj"> | ||||
|  |                             <select class="theme_select"> | ||||
|  |                                 <t t-foreach="widget.theme_data" | ||||
|  |                                    t-as="theme_data"> | ||||
|  |                                     <t t-if="widget.selected_theme.id == theme_data.id"> | ||||
|  |                                         <option t-att-id="theme_data.id" | ||||
|  |                                                 selected="selected" | ||||
|  |                                                 t-att-value="theme_data.id"> | ||||
|  |                                             <span t-esc="theme_data.name"/> | ||||
|  |                                         </option> | ||||
|  |                                     </t> | ||||
|  |                                     <t t-else="widget.selected_theme.id == theme_data.id"> | ||||
|  |                                         <option t-att-id="theme_data.id" | ||||
|  |                                                 t-att-value="theme_data.id"> | ||||
|  |                                             <span t-esc="theme_data.name"/> | ||||
|  |                                         </option> | ||||
|  |                                     </t> | ||||
|  |                                 </t> | ||||
|  |                             </select> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  | 
 | ||||
|  |                     <div class="selected_theme"> | ||||
|  |                         <t t-call="multicolor_backend_theme.selected_theme"/> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <!--View for Theme create, remove and apply buttons--> | ||||
|  |                 <div class="header_buttons row"> | ||||
|  |                     <div class="button-create cell"> | ||||
|  |                         Create | ||||
|  |                     </div> | ||||
|  |                     <div class="button-remove cell"> | ||||
|  |                         Remove | ||||
|  |                     </div> | ||||
|  |                     <div class="button-apply cell fa fa-check"> | ||||
|  |                         Apply | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |             </div> | ||||
|  |         </li> | ||||
|  |     </t> | ||||
|  |     <t t-name="multicolor_backend_theme.selected_theme"> | ||||
|  |         <div class="theme_data"> | ||||
|  |             <t t-set="selected_theme" t-value="widget.selected_theme"/> | ||||
|  |             <div class="theme_extra"> | ||||
|  |                 <t t-if="selected_theme.theme_active==true"> | ||||
|  |                     <div class="theme-active"> | ||||
|  |                         <p>Active</p> | ||||
|  |                     </div> | ||||
|  |                 </t> | ||||
|  |             </div> | ||||
|  |             <div class="row name"> | ||||
|  |                 <div class="cell"> | ||||
|  |                     <p>Name</p> | ||||
|  |                 </div> | ||||
|  |                 <div class="cell"> | ||||
|  |                     <input type="text" | ||||
|  |                            id="name" | ||||
|  |                            readonly="readonly" | ||||
|  |                            t-att-value="selected_theme.name"/> | ||||
|  |                     <i class="fa fa-pencil"></i> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |             <!--            Color selector --> | ||||
|  |             <div class="color_selector"> | ||||
|  |                 <div class="row theme_main_color"> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <p>Base color</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <div class="color" id="theme_main_color" | ||||
|  |                              t-att-style="'background-color:'+selected_theme.theme_main_color"/> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <div class="row theme_font_color"> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <p>Font color</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <div class="color" id="theme_font_color" | ||||
|  |                              t-att-style="'background-color:'+selected_theme.theme_font_color"/> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <div class="row view_font_color"> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <p>View font color</p> | ||||
|  |                     </div> | ||||
|  |                     <div class="cell"> | ||||
|  |                         <div class="color" id="view_font_color" | ||||
|  |                              t-att-style="'background-color:'+selected_theme.view_font_color"/> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </t> | ||||
|  | </templates> | ||||
| @ -0,0 +1,34 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  | <!--    Login page view--> | ||||
|  |     <template id="login_templated_ext" inherit_id="web.login" | ||||
|  |               name="Login Ext"> | ||||
|  |         <xpath expr="//button[@type='submit'][1]" position="replace"> | ||||
|  |             <button type="submit" | ||||
|  |                     class="btn btn-primary btn-block cybro-login-btn">Log | ||||
|  |                 in | ||||
|  |             </button> | ||||
|  |         </xpath> | ||||
|  |         <xpath expr="//t[@t-if='debug']/button" position="replace"> | ||||
|  |             <button type="submit" name="redirect" | ||||
|  |                     value="/web/become" | ||||
|  |                     class="btn btn-link btn-sm btn-block cybro-super-btn">Log in | ||||
|  |                 as | ||||
|  |                 superuser | ||||
|  |             </button> | ||||
|  |         </xpath> | ||||
|  |     </template> | ||||
|  |     <template id="layout" name="Main layout Ext" | ||||
|  |               inherit_id="portal.frontend_layout"> | ||||
|  |         <xpath expr="//div[@id='wrapwrap']" position="attributes"> | ||||
|  |             <attribute name="t-attf-class" | ||||
|  |                        add="cybro-bg #{pageName or ''} #{direction == 'rtl' and 'o_rtl' or ''} #{'o_portal' if is_portal else ''}" | ||||
|  |                        separator=" "/> | ||||
|  |         </xpath> | ||||
|  |     </template> | ||||
|  |     <template id="webclient_bootstrap_ext" inherit_id="web.webclient_bootstrap"> | ||||
|  |         <xpath expr="//t[@t-set='head']" position="after"> | ||||
|  |             <div class="cybro-sidebar"></div> | ||||
|  |         </xpath> | ||||
|  |     </template> | ||||
|  | </odoo> | ||||