@ -0,0 +1,48 @@ |
|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
Conditional Formatting in Pivot View |
|||
==================================== |
|||
This module helps you to setup conditional formatting in the pivot view of a |
|||
model. |
|||
|
|||
Configuration |
|||
============= |
|||
* No additional configurations needed |
|||
|
|||
Company |
|||
------- |
|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ |
|||
|
|||
License |
|||
------- |
|||
General Public License, Version 3 (AGPL v3). |
|||
(http://www.gnu.org/licenses/agpl-3.0-standalone.html) |
|||
|
|||
Credits |
|||
------- |
|||
* Developers: (V17) Shikhil Raj |
|||
* Contact: odoo@cybrosys.com |
|||
|
|||
Contacts |
|||
-------- |
|||
* Mail Contact : odoo@cybrosys.com |
|||
* Website : https://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 `Our Website <https://cybrosys.com/>`__ |
|||
|
|||
Further information |
|||
=================== |
|||
HTML Description: `<static/description/index.html>`__ |
@ -0,0 +1,22 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-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 (AGPL 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 (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from . import models |
@ -0,0 +1,55 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-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 (AGPL 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 (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
{ |
|||
"name": "Conditional Formatting in Pivot View", |
|||
"version": "17.0.1.0.0", |
|||
"category": "Extra Tools", |
|||
"summary": "This Module allows to setup conditional formatting in " |
|||
"the pivot view of models", |
|||
"description": "The module is used for using conditional formatting option" |
|||
"in the pivot view of different models, you can setup" |
|||
" default formatting rules in the settings or add new rules" |
|||
" from the UI.", |
|||
"author": "Cybrosys Techno Solutions", |
|||
"company": "Cybrosys Techno Solutions", |
|||
"maintainer": "Cybrosys Techno Solutions", |
|||
"website": "https://www.cybrosys.com", |
|||
"depends": ["base", "web"], |
|||
"data": [ |
|||
"security/pivot_conditional_formatting_groups.xml", |
|||
"security/pivot_conditional_settings_security.xml", |
|||
"security/ir.model.access.csv", |
|||
"views/pivot_conditional_settings_views.xml", |
|||
], |
|||
"assets": { |
|||
"web.assets_backend": [ |
|||
"pivot_conditional_formatting/static/src/xml/pivot_conditional_formatting.xml", |
|||
"pivot_conditional_formatting/static/src/css/pivot_conditional_formatting.css", |
|||
"pivot_conditional_formatting/static/src/js/pivot_conditional_formatting.js", |
|||
], |
|||
}, |
|||
"images": ["static/description/banner.jpg"], |
|||
"license": "AGPL-3", |
|||
"installable": True, |
|||
"auto_install": False, |
|||
"application": False, |
|||
} |
@ -0,0 +1,6 @@ |
|||
## Module <pivot_conditional_formatting> |
|||
|
|||
#### 09.04.2025 |
|||
#### Version 17.0.1.0.0 |
|||
#### ADD |
|||
- Initial Commit for Conditional Formatting in Pivot View |
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-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 (AGPL 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 (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
"""init file""" |
|||
from . import conditional_rules |
|||
from . import pivot_conditional_settings |
@ -0,0 +1,57 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-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 (AGPL 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 (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
from odoo import fields, models |
|||
|
|||
|
|||
class ConditionalRules(models.Model): |
|||
"""Model Class for the different Pivot view table, conditional formatting |
|||
rules""" |
|||
_name = 'conditional.rules' |
|||
_description = 'Conditional formatting' |
|||
_rec_name = "rule" |
|||
|
|||
rule = fields.Selection(string='Rule', selection=([ |
|||
('greater_than', 'Greater than'), ('less_than', 'Less Than'), |
|||
('is_empty', 'Is Empty'), ('in_between', 'In Between')]), |
|||
help="Different conditions for rules") |
|||
|
|||
value = fields.Float(string='Value', help="Value for comparing the rule") |
|||
second_value = fields.Float(string='Second Value', help="Second Value for " |
|||
"comparing the " |
|||
"inbetween rule") |
|||
color = fields.Char(string='Color', required=True, help="Background " |
|||
"Color For the " |
|||
"Cells") |
|||
text_color = fields.Char(string='Text Color', |
|||
required=True, help="Text " |
|||
"Color for the cells") |
|||
model_id = fields.Many2one('ir.model', related='conditional_id.model_id', |
|||
help="model related to the rule", |
|||
string="Model") |
|||
view_id = fields.Many2one('ir.ui.view', related='conditional_id.view_id', |
|||
help="view related to the rule", string="View") |
|||
conditional_id = fields.Many2one('pivot.conditional.settings', |
|||
help="Pivot Condition setting related to" |
|||
" the rule", string="Condition") |
|||
company_id = fields.Many2one('res.company', string='Company', |
|||
default=lambda self: self.env.company, |
|||
help="Company id related to rule") |
@ -0,0 +1,57 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################# |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2025-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 (AGPL 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 (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################# |
|||
"""Models for setting conditional formatting rules in settings""" |
|||
from odoo import api, fields, models |
|||
|
|||
|
|||
class PivotConditionalSetting(models.Model): |
|||
"""Model Class for choosing the model and view to set the default rules""" |
|||
_name = 'pivot.conditional.settings' |
|||
_description = 'Pivot conditional setting' |
|||
_rec_name = "model_id" |
|||
|
|||
model_id = fields.Many2one('ir.model', help="The model to set the rules " |
|||
"for", string="Model") |
|||
view_id = fields.Many2one('ir.ui.view', help="Pivot view of the model", |
|||
string="View") |
|||
rules_ids = fields.One2many('conditional.rules', 'conditional_id', |
|||
help="List View Showing details of different" |
|||
" rules", string="Rules") |
|||
company_id = fields.Many2one('res.company', string='Company', |
|||
default=lambda self: self.env.company, |
|||
help="Company id related to the " |
|||
"Pivot Condition setting") |
|||
view_id_domain = fields.Binary(string="view domain", compute="_compute_view_id_domain") |
|||
|
|||
@api.depends('model_id') |
|||
def _compute_view_id_domain(self): |
|||
""" |
|||
This method is called when the 'model_id' field is changed. It |
|||
updates the domain of the 'view_id' field to filter records based |
|||
on the selected model and view type as 'pivot'. |
|||
|
|||
:return: Dictionary containing the updated domain for the 'view_id' |
|||
field. |
|||
:rtype: dict |
|||
""" |
|||
for rec in self: |
|||
rec.view_id_domain = [('model', '=', rec.model_id.model), ('type', '=', 'pivot')] |
|
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<!-- Groups for Pivot Conditional Rules --> |
|||
<record id="pivot_conditional_settings_group_user" model="res.groups"> |
|||
<field name="name">Allow to Set Pivot Conditional Rules</field> |
|||
<field name="category_id" ref="base.module_category_hidden"/> |
|||
</record> |
|||
</odoo> |
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<odoo> |
|||
<!-- Multi Company Rule for pivot.conditional.settings Model --> |
|||
<record id="pivot_conditional_settings_rule_multi_company" model="ir.rule" > |
|||
<field name="name">Pivot Conditional Formatting Rule</field> |
|||
<field name="model_id" ref="model_pivot_conditional_settings"/> |
|||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field> |
|||
</record> |
|||
<!-- Multi Company Rule for conditional Rules Model --> |
|||
<record id="conditional_rules_rule_multi_company" model="ir.rule"> |
|||
<field name="name">Pivot Conditional Formatting Rule2</field> |
|||
<field name="model_id" ref="model_conditional_rules"/> |
|||
<field name="domain_force">['|',('company_id','=',False),('company_id', 'in', company_ids)]</field> |
|||
</record> |
|||
</odoo> |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 310 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 733 B |
After Width: | Height: | Size: 911 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 673 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 878 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 905 B |
After Width: | Height: | Size: 839 B |
After Width: | Height: | Size: 427 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 988 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 589 B |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 967 B |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 4.0 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 912 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 68 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 76 KiB |
After Width: | Height: | Size: 345 KiB |
After Width: | Height: | Size: 126 KiB |
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,673 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<title>Conditional Formatting in Pivot View</title> |
|||
<!-- Bootstrap CSS --> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" |
|||
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.1/css/all.min.css"> |
|||
<link rel="preconnect" href="https://fonts.googleapis.com"> |
|||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
|||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> |
|||
</head> |
|||
<body> |
|||
<section> |
|||
<div class="container" style="font-family: 'Inter', sans-serif !important;background-color: #fff !important;"> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between flex-wrap align-items-sm-center" |
|||
style="border-bottom:1px solid rgba(0, 0, 0, 0.22)"> |
|||
<div class="my-3"> |
|||
<img src="assets/misc/Cybrosys R.png" style="width:auto !important; height:40px !important"> |
|||
</div> |
|||
<div class="my-3 d-flex align-items-center"> |
|||
<div class="text-center" |
|||
style="background-color:#017E84 !important;font-size: 0.8rem !important; color:#fff !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
|||
Community |
|||
</div> |
|||
<div class="text-center" |
|||
style="background-color:#875A7B !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important;min-width: 120px !important;"> |
|||
Enterprise |
|||
</div> |
|||
<div class="text-center" |
|||
style="background-color:#7C7BAD !important; color:#fff !important;font-size: 0.8rem !important; font-weight:500 !important; padding:4px !important; margin:0 3px !important; border-radius:50px !important; min-width: 120px !important;"> |
|||
Odoo.sh |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-sm-12 col-md-12 col-lg-12 text-center d-flex align-items-center flex-column" |
|||
style="margin: 80px 0px !important;"> |
|||
<h1 style="font-size: 2.8rem;font-weight: 700; color: |
|||
#1A202C;"> |
|||
Conditional Formatting in Pivot View</h1> |
|||
<p class="my-3 mb-4" |
|||
style="max-width: 80%; font-weight: 400 !important; line-height: 32px; color: #718096;"> |
|||
Conditional Formatting in pivot view according to different rules. |
|||
</p> |
|||
<div style="width: 80%; margin-top: 3rem;"> |
|||
<img src="assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5 mb-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#714b67 !important">Key Highlights |
|||
</p> |
|||
</div> |
|||
<div class="row py-4"> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Showcase difference between cells, according to the |
|||
rules.</p> |
|||
<p class="m-0" style="color:#718096"> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Predefinable default rules for specific models and |
|||
views.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Community & Enterprise support.</p> |
|||
<p class="m-0" style="color:#718096"> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 col-sm-12 p-3"> |
|||
<div class="d-flex h-100" style="padding: 30px;border-radius: 12px; |
|||
background: #FFF; |
|||
box-shadow: 1px 2px 3px 0px rgba(0, 0, 0, 0.25); "> |
|||
<div style="width: 36px; height: 36px; border-radius: 50%; background: #714B67; |
|||
display: flex; justify-content: center; align-items: center; |
|||
margin-right: 10px; flex-shrink: 0;"> |
|||
<i class="fa-solid fa-star " style="color: #fff;font-size:14px;"></i> |
|||
</div> |
|||
<div> |
|||
<p style="color: #1A202C;font-weight: 600; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Showcase difference between cells, according to the |
|||
rules.</p> |
|||
<p class="m-0" style="color:#718096"> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container rounded" > |
|||
<ul class="nav nav-tabs d-flex" style="width: fit-content;margin: 0 auto;gap: 1rem;"> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
class="active show" data-toggle="tab" href="#tab1" |
|||
style="color: #fff;font-weight: 500; background-color: #714B67; text-decoration: none;"> |
|||
<i class="fa-regular fa-image pr-2" style="color: #fff;"></i> |
|||
Screenshots</a></li> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
data-toggle="tab" href="#tab2" |
|||
style="color: #fff;font-weight: 500; text-decoration: none;"><i |
|||
class="fa-solid fa-star pr-2" style="color: #fff;"></i>Features</a></li> |
|||
<li class="col text-center py-2 text-nowrap " |
|||
style="color: #fff; background-color: #714B67;border-radius: 6px 6px 0px 0px;"><a |
|||
data-toggle="tab" href="#tab3" |
|||
style="color: #fff;font-weight: 500; text-decoration: none; background-color: #714B67;"><i |
|||
class="fa-solid fa-book-open pr-2" style="color: #fff;"></i>Released Notes</a></li> |
|||
</ul> |
|||
<div class="tab-content" style="background-color: rgba(121, 113, 119, 0.04);"> |
|||
<div id="tab1" class="tab-pane fade in active show"> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/1.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Enable option for setting conditional rules on pivot views |
|||
</h4> |
|||
<h8 style="color: #888888;"> |
|||
Go to Settings -> Users & Companies -> Users -> |
|||
under "Technical" section in your user, enable "Allow to |
|||
Set Pivot Conditional Rules option". |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/2.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
</h4> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/3.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
Setup rules from the pivot view.</h4> |
|||
<h8 style="color: #888888;"> |
|||
When you go to a pivot view with Default Rules, You will see the changes in the pivot according to the Default Rules. |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/4.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
</h4> |
|||
<h8 style="color: #888888;"> |
|||
Drag along the pivot cells to select the cells you want to apply the rules on. |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/5.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
|
|||
</h4> |
|||
<h8 style="color: #888888;"> |
|||
Click on the Conditional Formatting button for setting the Rule, |
|||
then select the Condition and enter the Value to base the condition |
|||
on, choose the Background color and Text color and click the Save |
|||
button to apply the rule. |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/6.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
|
|||
</h4> |
|||
<h8 style="color: #888888;"> |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-lg-12 py-2" style="padding: 1rem 4rem !important;"> |
|||
<div |
|||
style="border: 1px solid #d8d6d6; border-radius: 4px; background: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="row justify-content-center p-3 w-100 m-0"> |
|||
<img src="assets/screenshots/7.png" class="img-responsive" width="100%" height="auto"> |
|||
</div> |
|||
<div class="px-3"> |
|||
<h4 class="mt-2" |
|||
style=" font-weight:600 !important; color:#282F33 !important; font-size:1.3rem !important"> |
|||
</h4> |
|||
<h8 style="color: #888888;"> |
|||
</h8> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
</div> |
|||
<div id="tab2" class="tab-pane fade"> |
|||
<div class="col-mg-12" style="padding: 1rem 4rem;"> |
|||
<ul style="list-style: none; padding: 1rem 0;font-weight: 500;"> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Community & Enterprise support. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Showcase difference between cells, according to the rules. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Predefinable default rules for specific models and views. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Select cells and add rules dynamically. |
|||
</li> |
|||
<li class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; margin-bottom: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<span style="margin-right: 12px;"><img src="assets/misc/star (1) 2.svg" alt="" |
|||
width="16px"></span>Define background and text colors for the cells. |
|||
</li> |
|||
|
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<div id="tab3" class="tab-pane fade"> |
|||
<div class="col-mg-12 active" style="padding: 1rem 4rem;"> |
|||
<div class="py-3" |
|||
style="font-weight: 500;background-color: #fff; border-radius: 4px; padding: 1rem; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"> |
|||
<div class="d-flex mb-3" style="font-size: 0.8rem; font-weight: 500;"><span>Version |
|||
17.0.1.0.0</span><span class="px-2">|</span><span |
|||
style="color: #714B67;font-weight: 600;">Released on:08th Nov 2025</span> |
|||
</div> |
|||
<p class="m-0" |
|||
style=" color:#718096!important; font-size:1rem !important;line-height: 28px;"> |
|||
Initial Commit for Conditional Formatting in Pivot View.</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Related Products</p> |
|||
</div> |
|||
</div> |
|||
<div id="myCarousel" class="carousel slide py-3" data-ride="carousel"> |
|||
<div class="carousel-inner"> |
|||
<div class="carousel-item active"> |
|||
<div class="row p-4"> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/base_accounting_kit/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/1.gif" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Odoo 17 Full Accounting Kit</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/invoice_format_editor/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/2.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Invoice Format Editor</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/inventory_barcode_scanning/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/3.png" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Barcode scanning in Inventory</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="carousel-item"> |
|||
<div class="row p-4"> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/whatsapp_redirect/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px; "> |
|||
<img src="assets/modules/4.jpg" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Send Whatsapp Message</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/base_account_budget/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px;"> |
|||
<img src="assets/modules/5.jpg" alt="" width="100%" height="auto"> |
|||
|
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Budget Management</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
<div class="col"> |
|||
<div class="p-3"> |
|||
<a href="https://apps.odoo.com/apps/modules/17.0/product_barcode/" style="color: #000; text-decoration: none;"> |
|||
<div style="border:1px solid #CBCBCB !important;border-radius: 4px;"> |
|||
<div style="width: 300px;"> |
|||
<img src="assets/modules/6.png" alt="" width="100%" height="auto"> |
|||
</div> |
|||
<p class="text-center pt-2 text-black font-weight-bold">Product Barcode Generator</p> |
|||
</div> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a class="carousel-control-prev" href="#myCarousel" data-slide="prev" style="width: 35px; color: #000;"> |
|||
<span class="carousel-control-prev-icon"> |
|||
<i class="fa fa-chevron-left" style="font-size: 24px;"></i> |
|||
</span> |
|||
</a> |
|||
<a class="carousel-control-next" href="#myCarousel" data-slide="next" style="width: 35px; color: #000;"> |
|||
<span class="carousel-control-next-icon"> |
|||
<i class="fa fa-chevron-right" style="font-size: 24px;"></i> |
|||
</span> |
|||
</a> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Services</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row py-3"> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#13EA36 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/cogs.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Customization</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#DBC711; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/wrench.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#FF6B6B ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/lifebuoy.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Support</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#FFA801 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/user.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Hire Odoo Developer</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative; border-radius: 4px;"> |
|||
|
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#54A0FF; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/puzzle.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Integration</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#6D7680 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/update.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Migration</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#786FA6 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/consultation.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Consultancy</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#F8A5C2 ; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/training.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Implementation</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-4 col-sm-6 px-4 py-4"> |
|||
<div |
|||
style="background-color: #fff; padding: 25px; text-align: center; box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px; position: relative;border-radius: 4px;"> |
|||
<div style="position: absolute; top: 0%; left: 50%; transform: translate(-50%, -50%);"> |
|||
<div style="background-color:#E6BE26; border-radius: 50%; padding: 15px; width: 68px; |
|||
height: 68px; display: inline-block; box-shadow:0px 4px 4px rgba(0, 0, 0, 0.25);"> |
|||
<img src="assets/icons/license.png" alt="service-icon" width="38px" height="auto"> |
|||
</div> |
|||
</div> |
|||
<p style="margin-top: 20px; font-weight: bold;">Odoo Licensing Consultancy</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-4"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Our Industries</p> |
|||
|
|||
</div> |
|||
</div> |
|||
<div class="container"> |
|||
<div class="row my-5 py-4"> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100 " |
|||
style="border-right: 1px solid rgb(209, 209, 209); border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; box-shadow: 6px 0 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/trading-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Trading</p> |
|||
<p>Easily procure and sell your products</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgb(209, 209, 209); padding: 30px;"> |
|||
<img src="assets/icons/pos-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">POS</p> |
|||
<p>Easy configuration and convivial experience</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209);border-bottom: 1px solid rgba(0, 0, 0, 0.2); padding: 30px; box-shadow: 0 5px 10px rgba(228, 227, 227, 0.373)"> |
|||
<img src="assets/icons/education-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Education</p> |
|||
<p>A platform for educational management</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-bottom: 1px solid rgb(209, 209, 209); padding: 30px; "> |
|||
<img src="assets/icons/manufacturing-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Manufacturing</p> |
|||
<p>Plan, track and schedule your operations</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;"> |
|||
<img src="assets/icons/ecom-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">E-commerce & Website</p> |
|||
<p>Mobile friendly, awe-inspiring product pages</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px;box-shadow: 0 -5px 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/service-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Service Management</p> |
|||
<p>Keep track of services and invoice</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style="border-right: 1px solid rgb(209, 209, 209); padding: 30px; "> |
|||
<img src="assets/icons/restaurant-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Restaurant</p> |
|||
<p>Run your bar or restaurant methodically</p> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-3 col-sm-6 p-0"> |
|||
<div class="d-flex flex-column h-100" |
|||
style=" padding: 30px;box-shadow: -5px 0 10px rgba(228, 227, 227, 0.373);"> |
|||
<img src="assets/icons/hotel-black.png" width="42px" height="auto" alt=""> |
|||
<p style="color: #714B67;font-weight: 600; margin-top: 10px; |
|||
font-size: 1.2rem; margin-bottom: 2px;">Hotel Management</p> |
|||
<p>An all-inclusive hotel management application</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="container mt-5"> |
|||
<div class="col-lg-12 d-flex flex-column justify-content-center align-items-center mt-5"> |
|||
<p class="m-0" style="font-weight: 600; font-size: 24px; color:#000 !important">Support</p> |
|||
</div> |
|||
</div> |
|||
<div class="container my-5"> |
|||
<div class="row" style="background-color: #FFFAFE;"> |
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center" |
|||
style="border-right: 1px solid #D9D9D9;"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="assets/misc/support (1) 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
|||
<div style="padding: 0px 8px;"> |
|||
<span |
|||
style="color: #714B67;font-size: 24px;font-weight: 600;padding-bottom: 1rem;">Need |
|||
Help?</span> |
|||
<p class="m-0" style="color:#718096;">Got questions or need help? Get in touch.</p> |
|||
<div style="font-weight: 400;"><span><img src="assets/misc/support-email.svg" alt="" |
|||
width="18px" |
|||
style="filter: invert(1);margin-right: 0.8rem;"></span>odoo@cybrosys.com |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="col-md-6 pb-4 d-flex align-items-center justify-content-center"> |
|||
<div style="padding: 30px;"> |
|||
<div class="d-flex align-items-center"> |
|||
<img src="assets/misc/whatsapp 1.svg" alt="" width="60px" style="margin-right: 12px;"> |
|||
<div> |
|||
<span style="color: #714B67;font-size: 24px;font-weight: 600;">WhatsApp</span> |
|||
<p class="m-0" style="color:#718096;">Say hi to us on WhatsApp!</p> |
|||
<div style="font-weight: 400; font-size: 16px;"><span><img src="assets/misc/phone.svg" |
|||
alt="" width="14px" |
|||
style="filter: invert(1); margin-right: 0.8rem;"></span>+91 |
|||
99456767686</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
<!-- Optional JavaScript --> |
|||
<!-- jQuery first, then Popper.js, then Bootstrap JS --> |
|||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> |
|||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,107 @@ |
|||
.selected_cell{ |
|||
border: 4px solid red !important; |
|||
opacity: 0.75; |
|||
} |
|||
.prevent-select { |
|||
-webkit-user-select: none; /* Safari */ |
|||
-ms-user-select: none; /* IE 10 and IE 11 */ |
|||
user-select: none; /* Standard syntax */ |
|||
} |
|||
.conditional_container{ |
|||
display: flex; |
|||
width: 30vw; |
|||
min-height:20vh; |
|||
background: #e3eaf0; |
|||
position: relative; |
|||
padding: 5px; |
|||
margin-top: 1vh; |
|||
box-shadow: 3px 3px 5px 0px rgb(0 0 0 / 32%); |
|||
margin-left: 1vw; |
|||
margin-bottom: 1vh; |
|||
border-radius: 5px; |
|||
} |
|||
|
|||
.sub_container1{ |
|||
height: 100%; |
|||
background: #e3eaf0; |
|||
display: flex; |
|||
justify-content: space-evenly; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
width: 100%; |
|||
} |
|||
|
|||
.condition_select{ |
|||
width: 30%; |
|||
background: #71639e; |
|||
color: black; |
|||
font-weight: 500; |
|||
margin: 3%; |
|||
text-align: center; |
|||
padding: 1%; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.condition_val{ |
|||
width: 61%; |
|||
height: 29px; |
|||
margin: 2%; |
|||
border: 2px solid #71639e; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.condition_button{ |
|||
border: none; |
|||
background: #8b93d2; |
|||
margin: 4% 0; |
|||
padding: 1% 6%; |
|||
border-radius: 3px; |
|||
font-size: 16px; |
|||
} |
|||
.condition_button:hover{ |
|||
background: #5b64ad; |
|||
} |
|||
|
|||
.rule_container{ |
|||
background: #e3eaf0; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
height: 100px; |
|||
border: 1px solid black; |
|||
} |
|||
.input_container{ |
|||
display:flex; |
|||
} |
|||
|
|||
.sub_input_container{ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
color: black; |
|||
} |
|||
.sub_color_container{ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
padding: 0px 30px; |
|||
color: black; |
|||
} |
|||
.color_container{ |
|||
display: flex; |
|||
} |
|||
|
|||
.color-input{ |
|||
width: 34px; |
|||
height: 32px; |
|||
border: none; |
|||
outline: none; |
|||
} |
|||
|
|||
.validation-error{ |
|||
display: none; |
|||
color: red; |
|||
} |
@ -0,0 +1,249 @@ |
|||
/** @odoo-module **/ |
|||
import { PivotRenderer } from "@web/views/pivot/pivot_renderer"; |
|||
import { useService } from "@web/core/utils/hooks"; |
|||
import { patch } from '@web/core/utils/patch'; |
|||
import { useExternalListener, useEffect } from "@odoo/owl"; |
|||
|
|||
patch(PivotRenderer.prototype,{ |
|||
setup() { |
|||
super.setup(); |
|||
this.orm = useService("orm"); |
|||
this.isMouseDown = false; |
|||
this.startRowIndex = null; |
|||
this.startCellIndex = null; |
|||
useExternalListener(document, 'mouseup', this.mouse_up_function) |
|||
useEffect(() => { |
|||
this.set_default_rules() |
|||
}) |
|||
}, |
|||
|
|||
async set_default_rules(){ |
|||
// function for default rules to be applied on the pivot table
|
|||
var self = this |
|||
var viewId = this.env.config.viewId |
|||
var model = this.env.searchModel.resModel |
|||
await this.orm.call("conditional.rules","search_read", [],{ |
|||
domain: [['model_id','=',model],['view_id','=',viewId]], |
|||
}).then(function(res){ |
|||
self.conditional_rules = res |
|||
}) |
|||
var cells = this.__owl__.bdom.parentEl.querySelectorAll('td') |
|||
cells.forEach(function(data){ |
|||
data.style.backgroundColor = "#f8f9fa" |
|||
data.style.color = "black" |
|||
}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.o_pivot.table-responsive table')).find( |
|||
".selected_cell").removeClass("selected_cell"); |
|||
$(this.__owl__.bdom.parentEl.parentElement).find( |
|||
'.conditional_button').css({display:"none"}) |
|||
$(this.__owl__.bdom.parentEl.parentElement).find( |
|||
'.conditional_container').css({display:"none"}) |
|||
|
|||
for (let i = 0, len = this.conditional_rules.length; i < len; i++){ |
|||
var condition = this.conditional_rules[i].rule |
|||
var condition_val = this.conditional_rules[i].value |
|||
var second_condition_val = this.conditional_rules[i].second_value |
|||
var color_val = this.conditional_rules[i].color |
|||
var text_color_val = this.conditional_rules[i].text_color |
|||
|
|||
for (let j = 0, len = cells.length; j < len; j++){ |
|||
var cell_val = cells[j].innerText |
|||
if(cell_val){ |
|||
cell_val = cell_val.replace(',','') |
|||
} |
|||
if(condition == 'less_than'){ |
|||
if(parseFloat(condition_val)>parseFloat(cell_val)){ |
|||
cells[j].classList.remove("bg-100") |
|||
cells[j].style.backgroundColor = color_val |
|||
cells[j].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == "greater_than"){ |
|||
if(parseFloat(condition_val)< parseFloat(cell_val)){ |
|||
cells[j].classList.remove("bg-100") |
|||
cells[j].style.backgroundColor = color_val |
|||
cells[j].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == "is_empty"){ |
|||
if(cells[j].innerText == ""){ |
|||
cells[j].classList.remove("bg-100") |
|||
cells[j].style.backgroundColor = color_val |
|||
cells[j].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == "in_between"){ |
|||
if(parseFloat(cell_val)> parseFloat(condition_val) && parseFloat(cell_val)< parseFloat(second_condition_val)){ |
|||
cells[j].classList.remove("bg-100") |
|||
cells[j].style.backgroundColor = color_val |
|||
cells[j].style.color = text_color_val |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
async conditional_format_tab(){ |
|||
// This function is called to display the conditional formatting
|
|||
// window/wizard in the UI.
|
|||
$(this.__owl__.bdom.parentEl.querySelectorAll(".conditional_container")).css({display:"block"}) |
|||
this.__owl__.bdom.parentEl.querySelectorAll("#condition_val")[0].value = '' |
|||
this.__owl__.bdom.parentEl.querySelectorAll("#secondcondition_val")[0].value = '' |
|||
if(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.validation-error')[0].style.display == "inline"){ |
|||
this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.validation-error')[0].style.display = "none"; |
|||
} |
|||
}, |
|||
|
|||
conditional_formattoo(e){ |
|||
// function for selecting table columns and adding and removing
|
|||
// classes
|
|||
if (e.target.localName == 'td' || e.target.className == 'o_value'){ |
|||
this.isMouseDown = true; |
|||
var cell; |
|||
if(e.target.className == 'o_value'){ |
|||
cell = e.target.parentElement; |
|||
}else{ |
|||
cell = e.target |
|||
} |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.o_pivot.table-responsive table')).find(".selected_cell" |
|||
).removeClass("selected_cell"); // deselect everything
|
|||
cell.className = 'selected_cell prevent-select' |
|||
this.startCellIndex = cell.cellIndex; |
|||
this.startRowIndex = cell.parentElement.cellIndex; |
|||
return false; |
|||
} |
|||
}, |
|||
|
|||
|
|||
mouse_over_function(e){ |
|||
// function for selecting table columns
|
|||
if (!this.isMouseDown) return; |
|||
if (e.target.localName == 'td' || e.target.className == 'o_value'){ |
|||
var cell = e.target.parentElement; |
|||
if(e.target.className == 'o_value'){ |
|||
cell = e.target.parentElement; |
|||
}else{ |
|||
cell = e.target |
|||
} |
|||
cell.classList.add("selected_cell") |
|||
$(this.__owl__.bdom.parentEl.parentElement).find( |
|||
'.conditional_button').css({display:'block'}) |
|||
} |
|||
}, |
|||
|
|||
mouse_up_function(){ |
|||
// function for changing variable value to stop table cell selection
|
|||
this.isMouseDown = false; |
|||
}, |
|||
|
|||
display_field(){ |
|||
// function for hiding and showing input fields inside popup window
|
|||
var condition = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.condition_select')).val() |
|||
if(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.validation-error')[0].style.display == "inline"){ |
|||
this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.validation-error')[0].style.display = "none"; |
|||
} |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#condition_val'))[0].value = '' |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#secondcondition_val'))[0].value = '' |
|||
if(condition == 'in between'){ |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#secondcondition_val')).css({display:'block'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#value_label')).css({display:'block'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#sub_input_container2')).css({display:'flex'}) |
|||
}else{ |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#secondcondition_val')).css({display:'none'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#value_label')).css({display:'none'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#sub_input_container2')).css({display:'none'}) |
|||
} |
|||
if(condition === 'null'){ |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#condition_val')).css({display:'none'}) |
|||
|
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#value_label1')).css({display:'none'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#sub_input_container1')).css({display:'none'}) |
|||
}else{ |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#condition_val')).css({display:'block'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#value_label1')).css({display:'block'}) |
|||
$(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#sub_input_container1')).css({display:'flex'}) |
|||
} |
|||
}, |
|||
set_rule(){ |
|||
// function for applying rules through popup window
|
|||
var condition = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.condition_select')).val() |
|||
var color_val = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.colorpicker')).val() |
|||
var text_color_val = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.text_color')).val() |
|||
var cells = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'.selected_cell')) |
|||
var condition_val = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#condition_val')).val() |
|||
var second_condition_val = $(this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#secondcondition_val')).val() |
|||
this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#condition_val')[0].value = '' |
|||
this.__owl__.bdom.parentEl.querySelectorAll( |
|||
'#secondcondition_val')[0].value = '' |
|||
if(condition == 'in between'){ |
|||
if(condition_val > second_condition_val){ |
|||
$(this.__owl__.bdom.el.querySelectorAll( |
|||
'.validation-error')).css({display:'inline'}) |
|||
return |
|||
} |
|||
} |
|||
for (let i = 0, len = cells.length; i < len; i++){ |
|||
var cell_val = cells[i].innerText |
|||
if(cell_val){ |
|||
cell_val = cell_val.replace(',','') |
|||
} |
|||
if(condition == 'less than'){ |
|||
if(parseFloat(condition_val)>parseFloat(cell_val)){ |
|||
cells[i].classList.remove("bg-100") |
|||
cells[i].style.backgroundColor = color_val |
|||
cells[i].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == 'greater than'){ |
|||
if(parseFloat(condition_val)< parseFloat(cell_val)){ |
|||
cells[i].classList.remove("bg-100") |
|||
cells[i].style.backgroundColor = color_val |
|||
cells[i].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == "null"){ |
|||
if(cells[i].innerText == ""){ |
|||
cells[i].classList.remove("bg-100") |
|||
cells[i].classList.remove("bg-100") |
|||
cells[i].style.backgroundColor = color_val |
|||
cells[i].style.color = text_color_val |
|||
} |
|||
} |
|||
if(condition == 'in between'){ |
|||
if(parseFloat(cell_val)> parseFloat(condition_val) && parseFloat(cell_val)< parseFloat(second_condition_val)){ |
|||
cells[i].classList.remove("bg-100") |
|||
cells[i].style.backgroundColor = color_val |
|||
cells[i].style.color = text_color_val |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
|
|||
}); |
@ -0,0 +1,85 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!--XML Template for Pivot Conditional Formatting |
|||
|
|||
This XML code represents a template for implementing conditional formatting functionality in a pivot view. It defines a set of elements and attributes that can be used to create a user interface for setting conditional formatting rules in a pivot table. |
|||
|
|||
The template includes options for selecting the type of condition (e.g., "greater than," "less than"), entering the condition values, selecting colors for highlighting, and saving the formatting rule. |
|||
|
|||
Usage: |
|||
1. Include this XML template in the appropriate location in your application's codebase. |
|||
2. Customize the template as needed to match the desired user interface and functionality. |
|||
3. Use the defined elements and attributes to implement the conditional formatting feature in your pivot view. |
|||
|
|||
Note: This code is a template and may require integration with the rest of your application's code to fully function. It provides a starting point for implementing conditional formatting but may need additional logic and event handlers to make it work seamlessly within your application. |
|||
--> |
|||
<templates id="template" xml:space="preserve"> |
|||
<!-- PivotConditions template --> |
|||
<t t-name="pivot_conditional_formatting.PivotConditions" |
|||
t-inherit="web.PivotRenderer" t-inherit-mode="extension" |
|||
owl="1"> |
|||
<xpath expr="//table" position="before"> |
|||
<!-- Conditional formatting container --> |
|||
<div class="conditional_container" style="display:none"> |
|||
<div class="sub_container1"> |
|||
<!-- Dropdown for selecting condition --> |
|||
<select class="condition_select" |
|||
t-on-change="display_field"> |
|||
<option value="greater than">Greater Than</option> |
|||
<option value="in between">In Between</option> |
|||
<option value="null">Is Empty</option> |
|||
<option value="less than">Less Than</option> |
|||
</select> |
|||
<div class="input_container"> |
|||
<div class="sub_input_container" |
|||
id="sub_input_container1"> |
|||
<label for="condition_val" id="value_label1">Value :</label> |
|||
<input type="number" class="condition_val" |
|||
id="condition_val"/> |
|||
</div> |
|||
<div class="sub_input_container" |
|||
id="sub_input_container2" style="display:none"> |
|||
<label for="secondcondition_val" id="value_label" |
|||
style="display:none">Second Value :</label> |
|||
<input type="number" class="condition_val" |
|||
id="secondcondition_val" |
|||
style="display:none"/> |
|||
</div> |
|||
</div> |
|||
<span class="validation-error" > |
|||
First input should be greater than Second</span> |
|||
<div class="color_container"> |
|||
<div class="sub_color_container"> |
|||
<label for="colorpicker">Color :</label> |
|||
<input type="color" class="colorpicker color-input" |
|||
id="colorpicker"/> |
|||
</div> |
|||
<div class="sub_color_container"> |
|||
<label for="text_color">Text-Color :</label> |
|||
<input type="color" class="text_color color-input" |
|||
id="text_color"/> |
|||
</div> |
|||
</div> |
|||
<!-- Button to save the conditional formatting rule --> |
|||
<button class="condition_button" |
|||
t-on-click="set_rule">save</button> |
|||
</div> |
|||
</div> |
|||
</xpath> |
|||
<xpath expr="//table" position="attributes"> |
|||
<attribute name="t-on-mousedown">conditional_formattoo</attribute> |
|||
<attribute name="t-on-mouseover">mouse_over_function</attribute> |
|||
</xpath> |
|||
</t> |
|||
<!-- PivotConditionButton template --> |
|||
<t t-name="pivot_conditional_formatting.PivotConditionButton" |
|||
t-inherit="web.PivotView.Buttons" t-inherit-mode="extension" |
|||
owl="1"> |
|||
<xpath expr="//div[hasclass('btn-group')]" position="after"> |
|||
<!-- Conditional formatting button --> |
|||
<div class='conditional_button' style="display:none"> |
|||
<button class='btn btn-primary' |
|||
t-on-click="conditional_format_tab">Conditional Formatting</button> |
|||
</div> |
|||
</xpath> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,103 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!-- |
|||
This XML configuration file defines views and menus for the Pivot Conditional module in Odoo. It includes view definitions for conditional rules and settings, as well as menu items to access the settings. The views are used to customize the appearance and behavior of pivot tables in Odoo. |
|||
--> |
|||
<odoo> |
|||
<!-- Form view for conditional.rules Model--> |
|||
<record id="conditional_rules_view_form" model="ir.ui.view"> |
|||
<field name="name">conditional.rules.view.form</field> |
|||
<field name="model">conditional.rules</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<group> |
|||
<field name="rule"/> |
|||
<field name="value" |
|||
invisible="rule == 'is_empty'"/> |
|||
<field name="second_value" |
|||
invisible="rule != 'in_between'"/> |
|||
<field name="color" widget="color"/> |
|||
<field name="text_color" widget="color"/> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Tree view for conditional.rules Model--> |
|||
<record id="conditional_rules_view_tree" model="ir.ui.view"> |
|||
<field name="name">conditional.rule.view.tree</field> |
|||
<field name="model">conditional.rules</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="rule"/> |
|||
<field name="value" required="True" |
|||
invisible="rule == 'is_empty'"/> |
|||
<field name="second_value" |
|||
invisible="rule != 'in_between'"/> |
|||
<field name="color" widget="color"/> |
|||
<field name="text_color" widget="color"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Tree view for pivot.conditional.settings Model--> |
|||
<record id="pivot_conditional_settings_view_tree" model="ir.ui.view"> |
|||
<field name="name">pivot.conditional.settings.view.tree</field> |
|||
<field name="model">pivot.conditional.settings</field> |
|||
<field name="arch" type="xml"> |
|||
<tree> |
|||
<field name="model_id"/> |
|||
<field name="view_id"/> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Form view for pivot.conditional.settings Model--> |
|||
<record id="pivot_conditional_settings_view_form" model="ir.ui.view"> |
|||
<field name="name">pivot.conditional.settings.view.form</field> |
|||
<field name="model">pivot.conditional.settings</field> |
|||
<field name="arch" type="xml"> |
|||
<form> |
|||
<sheet> |
|||
<group> |
|||
<field name="model_id" required="True"/> |
|||
<field name="view_id_domain" invisible="True"/> |
|||
<field name="view_id" required="True" |
|||
invisible="model_id == False" |
|||
options='{"no_open": True, "no_create": True}' |
|||
domain="view_id_domain"/> |
|||
<field name="rules_ids"> |
|||
<tree editable="bottom"> |
|||
<field name="rule"/> |
|||
<field name="value" |
|||
invisible="rule == 'is_empty'"/> |
|||
<field name="second_value" |
|||
invisible = "rule != 'in_between'"/> |
|||
<field name="color" widget="color" |
|||
string="Cell Color"/> |
|||
<field name="text_color" widget="color" |
|||
string="Text Color"/> |
|||
</tree> |
|||
</field> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<!-- Action for pivot.conditional.settings Model--> |
|||
<record id="pivot_conditional_settings_action" |
|||
model="ir.actions.act_window"> |
|||
<field name="name">Pivot Conditional Settings Action</field> |
|||
<field name="res_model">pivot.conditional.settings</field> |
|||
<field name="view_mode">list,form</field> |
|||
</record> |
|||
|
|||
<!-- Menu for pivot.conditional.settings Model--> |
|||
<menuitem id="pivot_conditional_settings_menu" name="Pivot Settings" |
|||
parent="base.menu_administration" sequence="1"/> |
|||
<menuitem id="pivot_conditional_settings_sub_menu" name="Settings" |
|||
parent="pivot_conditional_settings_menu" |
|||
action="pivot_conditional_settings_action"/> |
|||
</odoo> |