@ -0,0 +1,50 @@ | 
				
			|||
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg | 
				
			|||
   :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | 
				
			|||
   :alt: License: AGPL-3 | 
				
			|||
 | 
				
			|||
All in One Multi Followers | 
				
			|||
========================== | 
				
			|||
The module is used to add or remove the multi followers in the whole odoo model | 
				
			|||
by dynamic actions. If you want to set multiple followers in your model, | 
				
			|||
it is helpful to select multiple followers when clicking the action. | 
				
			|||
After adding or removing the followers, it will affect the model. | 
				
			|||
So in this way, you can add or remove multiple followers | 
				
			|||
from the whole odoo quickly. | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============= | 
				
			|||
* No additional configurations needed | 
				
			|||
 | 
				
			|||
Company | 
				
			|||
------- | 
				
			|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
License | 
				
			|||
------- | 
				
			|||
Affero General Public License v3.0 (AGPL v3) | 
				
			|||
(https://www.gnu.org/licenses/agpl-3.0-standalone.html) | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
------- | 
				
			|||
* Developer : (V16) Junaidul Ansar M , 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,23 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
from . import models | 
				
			|||
from . import wizard | 
				
			|||
@ -0,0 +1,51 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
{ | 
				
			|||
    'name': 'All in One Multi Followers', | 
				
			|||
    'version': '16.0.1.0.0', | 
				
			|||
    'category': 'Extra Tools', | 
				
			|||
    'summary': 'The module used to add or remove the multi followers in the ' | 
				
			|||
               'whole odoo models by dynamic actions.', | 
				
			|||
    'description': ' The module used to add or remove the multi followers in ' | 
				
			|||
                   'the whole odoo models by dynamic actions.If you want to set' | 
				
			|||
                   ' a multi followers in your model this is helpful you to ' | 
				
			|||
                   'select the multi followers when clicking the action. ' | 
				
			|||
                   'After adding or removing the followers it will affect' | 
				
			|||
                   ' the model. So in this way you can add or remove multiple' | 
				
			|||
                   ' followers in the whole odoo quickly.', | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'maintainer': 'Cybrosys Techno Solutions', | 
				
			|||
    'website': 'https://www.cybrosys.com', | 
				
			|||
    'depends': ['base'], | 
				
			|||
    'data': [ | 
				
			|||
        'security/ir.model.access.csv', | 
				
			|||
        'views/multi_follower_views.xml', | 
				
			|||
        'views/res_config_settings_views.xml', | 
				
			|||
        'wizard/follower_adding_removing_views.xml', | 
				
			|||
    ], | 
				
			|||
    'images': ['static/description/banner.jpg'], | 
				
			|||
    'license': 'AGPL-3', | 
				
			|||
    'installable': True, | 
				
			|||
    'application': False, | 
				
			|||
    'auto_install': False | 
				
			|||
} | 
				
			|||
@ -0,0 +1,7 @@ | 
				
			|||
## Module <all_in_one_multi_followers> | 
				
			|||
 | 
				
			|||
#### 24.12.2023 | 
				
			|||
#### Version 16.0.1.0.0 | 
				
			|||
#### ADD | 
				
			|||
 | 
				
			|||
- Initial Commit All in One Multi Followers. | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
from . import multi_follower | 
				
			|||
@ -0,0 +1,106 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
from odoo import api, fields, models | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MultiFollower(models.Model): | 
				
			|||
    """Creating multi follower creation model""" | 
				
			|||
    _name = 'multi.follower' | 
				
			|||
    _description = 'Multi Follower' | 
				
			|||
    _rec_name = 'action_name' | 
				
			|||
 | 
				
			|||
    action_name = fields.Char(string="Action Name", | 
				
			|||
                              help='This is the  action name. So this name is ' | 
				
			|||
                                   'visible under the the appropriate' | 
				
			|||
                                   ' model action.', | 
				
			|||
                              required=True) | 
				
			|||
    applied_to_ids = fields.Many2many('ir.model', | 
				
			|||
                                      string='Applied To', | 
				
			|||
                                      help='Select the model in which you ' | 
				
			|||
                                           'want to apply this action.', | 
				
			|||
                                      required=True) | 
				
			|||
    enabled_value = fields.Boolean(string="Create Action", | 
				
			|||
                                   help="Enabling and hiding the " | 
				
			|||
                                        "create action button.", default=True, | 
				
			|||
                                   copy=False) | 
				
			|||
    created_action_names = fields.Char(string="Created Action Names", | 
				
			|||
                                       compute="_compute_created_action_names", | 
				
			|||
                                       help='If the name is visible to the line' | 
				
			|||
                                            ' its created the action. If its ' | 
				
			|||
                                            'not its deleted the action.') | 
				
			|||
    states = fields.Selection([('draft', 'Draft'), | 
				
			|||
                               ('running', 'Running'), ('cancel', 'Cancelled')], | 
				
			|||
                              string='State', help='State of the action', | 
				
			|||
                              default="draft", copy=False) | 
				
			|||
    window_action_ids = fields.Many2many('ir.actions.act_window', | 
				
			|||
                                         string="Window Actions", | 
				
			|||
                                         helps="Related Window Actions") | 
				
			|||
 | 
				
			|||
    @api.depends('action_name') | 
				
			|||
    def _compute_created_action_names(self): | 
				
			|||
        """Computation of adding the action names""" | 
				
			|||
        for follower in self: | 
				
			|||
            actions = self.env['ir.actions.act_window'].search( | 
				
			|||
                [('id', 'in', follower.window_action_ids.ids)]) | 
				
			|||
            follower.created_action_names = ', '.join(actions.mapped('name')) | 
				
			|||
 | 
				
			|||
    def action_create(self): | 
				
			|||
        """When clicking the Add Action button to crete the action in | 
				
			|||
        appropriate model""" | 
				
			|||
        self.enabled_value = False | 
				
			|||
        self.states = 'running' | 
				
			|||
        # Check if action_name has changed and update existing actions | 
				
			|||
        for model_id in self.applied_to_ids: | 
				
			|||
            res = self.env['ir.actions.act_window'].create({ | 
				
			|||
                'name': self.action_name, | 
				
			|||
                'res_model': 'follower.adding.removing', | 
				
			|||
                'type': 'ir.actions.act_window', | 
				
			|||
                'view_mode': 'form', | 
				
			|||
                'binding_model_id': model_id.id, | 
				
			|||
                'target': 'new', | 
				
			|||
                'view_id': self.env.ref( | 
				
			|||
                    'all_in_one_multi_followers.' | 
				
			|||
                    'follower_adding_removing_view_form').id, | 
				
			|||
                'binding_view_types': 'list' | 
				
			|||
            }) | 
				
			|||
            self.window_action_ids += res | 
				
			|||
        return { | 
				
			|||
            'type': 'ir.actions.client', | 
				
			|||
            'tag': 'reload', | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    def action_unlink(self): | 
				
			|||
        """ Remove the contextual actions created for the server actions. """ | 
				
			|||
        self.states = 'cancel' | 
				
			|||
        self.window_action_ids.unlink() | 
				
			|||
        self.window_action_ids = False | 
				
			|||
        self.enabled_value = True | 
				
			|||
        return { | 
				
			|||
            'type': 'ir.actions.client', | 
				
			|||
            'tag': 'reload', | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    def unlink(self): | 
				
			|||
        """Super the unlink method to remove the active action""" | 
				
			|||
        for rec in self: | 
				
			|||
            rec.action_unlink() | 
				
			|||
        super().unlink() | 
				
			|||
		
		
			
  | 
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
| 
		 After Width: | Height: | Size: 310 B  | 
| 
		 After Width: | Height: | Size: 1.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
| 
		 After Width: | Height: | Size: 576 B  | 
| 
		 After Width: | Height: | Size: 733 B  | 
| 
		 After Width: | Height: | Size: 911 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 673 B  | 
| 
		 After Width: | Height: | Size: 878 B  | 
| 
		 After Width: | Height: | Size: 653 B  | 
| 
		 After Width: | Height: | Size: 905 B  | 
| 
		 After Width: | Height: | Size: 839 B  | 
| 
		 After Width: | Height: | Size: 427 B  | 
| 
		 After Width: | Height: | Size: 627 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 988 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 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: 589 B  | 
| 
		 After Width: | Height: | Size: 3.4 KiB  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 2.3 KiB  | 
| 
		 After Width: | Height: | Size: 967 B  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
| 
		 After Width: | Height: | Size: 5.0 KiB  | 
| 
		 After Width: | Height: | Size: 81 KiB  | 
| 
		 After Width: | Height: | Size: 85 KiB  | 
| 
		 After Width: | Height: | Size: 82 KiB  | 
| 
		 After Width: | Height: | Size: 92 KiB  | 
| 
		 After Width: | Height: | Size: 83 KiB  | 
| 
		 After Width: | Height: | Size: 67 KiB  | 
| 
		 After Width: | Height: | Size: 84 KiB  | 
| 
		 After Width: | Height: | Size: 129 KiB  | 
| 
		 After Width: | Height: | Size: 461 KiB  | 
| 
		 After Width: | Height: | Size: 236 KiB  | 
| 
		 After Width: | Height: | Size: 98 KiB  | 
| 
		 After Width: | Height: | Size: 196 KiB  | 
| 
		 After Width: | Height: | Size: 195 KiB  | 
| 
		 After Width: | Height: | Size: 191 KiB  | 
| 
		 After Width: | Height: | Size: 103 KiB  | 
| 
		 After Width: | Height: | Size: 150 KiB  | 
| 
		 After Width: | Height: | Size: 211 KiB  | 
| 
		 After Width: | Height: | Size: 344 KiB  | 
| 
		 After Width: | Height: | Size: 96 KiB  | 
| 
		 After Width: | Height: | Size: 14 KiB  | 
@ -0,0 +1,736 @@ | 
				
			|||
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;"> | 
				
			|||
    <!-- TITLE BAR --> | 
				
			|||
    <div class="d-flex align-items-center justify-content-between" | 
				
			|||
         style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> | 
				
			|||
        <img src="assets/misc/cybrosys-logo.png" width="42" height="42" | 
				
			|||
             style="width: 42px; height: 42px;"/> | 
				
			|||
        <div> | 
				
			|||
            <div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                    class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Community | 
				
			|||
            </div> | 
				
			|||
            <div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                    class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Enterprise | 
				
			|||
            </div> | 
				
			|||
            <div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                    class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Odoo.sh | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
    <!-- END OF TITLE BAR --> | 
				
			|||
    <div class="container"> | 
				
			|||
        <div class="row"> | 
				
			|||
            <div class="col-sm-12 col-md-12 col-lg-12"> | 
				
			|||
                <!-- APP HERO --> | 
				
			|||
                <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> | 
				
			|||
                    All in One Multi Followers</h1> | 
				
			|||
                <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> | 
				
			|||
                    Setting Multi-Followers in the Whole Odoo Model by Using | 
				
			|||
                    Dynamic Actions</p> | 
				
			|||
                <!-- END OF APP HERO --> | 
				
			|||
                <img src="assets/screenshots/v16-hero.gif" | 
				
			|||
                     class="img-responsive" | 
				
			|||
                     style="width: 100%; margin-left: auto; margin-right: auto;"/> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- NAVIGATION SECTION --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/compass.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Explore This | 
				
			|||
        Module</h2> | 
				
			|||
</div> | 
				
			|||
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#overview"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                 style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> | 
				
			|||
                    <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">Learn | 
				
			|||
            more about this | 
				
			|||
            module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36"/> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#features"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                 style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> | 
				
			|||
                    <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | 
				
			|||
            features of this | 
				
			|||
            module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36"/> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#screenshots"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                 style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> | 
				
			|||
                    <span style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | 
				
			|||
            screenshots for this | 
				
			|||
            module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36"/> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF NAVIGATION SECTION --> | 
				
			|||
<!-- OVERVIEW SECTION --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/pie-chart.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Overview | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row" | 
				
			|||
     style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | 
				
			|||
    <div class="col-sm-12 py-4"> | 
				
			|||
        The module is used to add or remove the multi-followers in the whole | 
				
			|||
        odoo | 
				
			|||
        model by Dynamic Actions. If you want to set Multiple Followers in your | 
				
			|||
        model, | 
				
			|||
        it is helpful to select Multiple Followers when clicking the Action. | 
				
			|||
        After | 
				
			|||
        Adding or Removing the Followers, it will affect the model. So in this | 
				
			|||
        way, | 
				
			|||
        you can add or remove multiple followers from the whole odoo quickly. | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF OVERVIEW SECTION --> | 
				
			|||
<!-- FEATURES SECTION --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/features.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Features | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row" | 
				
			|||
     style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | 
				
			|||
    <div class="col-sm-12 col-md-6"> | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 40px; margin-bottom: 40px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Community & | 
				
			|||
        Enterprise Support.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can Add/Remove Multiple Followers using Dynamic Action.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can Add/Remove Multiple Followers in any odoo model.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can apply Dynamic Action in the particular models. | 
				
			|||
      </span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">You can apply different Dynamic Actions in the different | 
				
			|||
        odoo models. | 
				
			|||
      </span> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">No special Configuration required just install | 
				
			|||
        it and cheers! | 
				
			|||
      </span> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">This module saves your important time. | 
				
			|||
      </span> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="d-flex align-items-center" | 
				
			|||
             style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2"/> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">It reduces human efforts. | 
				
			|||
      </span> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF FEATURES SECTION --> | 
				
			|||
<!-- SCREENSHOTS SECTION --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;" | 
				
			|||
     id="screenshots"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/pictures.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Screenshots | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row"> | 
				
			|||
    <div class="col-sm-12"> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Setting a Session and Field Inside the General Settings. | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
                Go to Settings -> General Settings | 
				
			|||
                -> | 
				
			|||
                Under Settings, we can see the Dynamic Followers | 
				
			|||
                session under | 
				
			|||
                the session, the model creation link. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/Settings.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Follower Dynamic Action | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
                Dynamic Action list view with different Action. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/model.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Action Creation | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
                Add an Action Name and select the model in which you want to | 
				
			|||
                apply. | 
				
			|||
                After that, click 'CREATE ACTION' to add this Action to the | 
				
			|||
                model. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/action-creation.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                After Creation. | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
               After clicking the 'CREATE ACTION' button, the state changed to the 'RUNNING' state, with a visible 'REMOVE ACTION' button to remove the action. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/after-creation.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Action | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
                Action applied in the selected model. | 
				
			|||
                Select the order line in which you want to Add/Remove Multiple | 
				
			|||
                Followers, then go to Action and click on that Action. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/action.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Wizard to Add or Remove the Followers. | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
                Then after one wizard opens, choose the action type, choose the | 
				
			|||
                Partner/Followers' Name whom you want to Add/Remove, then click | 
				
			|||
                the 'SUBMIT' button. Here we add Followers. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/adding_follower.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Before Adding Followers. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/before_adding_follower.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Followers are Added. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/after_adding.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Followers Removing Popup. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/removing_follower.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Before Removing Followers. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/after_adding.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                Followers are Removed. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/after_removing.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                REMOVE ACTION. | 
				
			|||
            </h3> | 
				
			|||
            <img src="assets/screenshots/after-creation.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
         <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | 
				
			|||
                After Removing. | 
				
			|||
            </h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;"> | 
				
			|||
               After clicking the button, the state changed to the 'CANCELLED' state and the 'CREATE ACTION' button appeared. | 
				
			|||
            </p> | 
				
			|||
            <img src="assets/screenshots/delete.png" | 
				
			|||
                 class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF SCREENSHOTS SECTION --> | 
				
			|||
<!-- RELATED PRODUCTS --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/categories.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Related | 
				
			|||
        Products | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row"> | 
				
			|||
    <div class="col-sm-12"> | 
				
			|||
        <div id="demo1" class="row carousel slide" data-ride="carousel"> | 
				
			|||
            <!-- The slideshow --> | 
				
			|||
            <div class="carousel-inner" style="padding: 30px;"> | 
				
			|||
                <div class="carousel-item" style="min-height: 198.656px;"> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/hide_menu_user/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/1.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/access_restriction_by_ip/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/2.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/odoo_dynamic_dashboard/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/3.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
                <div class="carousel-item active" | 
				
			|||
                     style="min-height: 198.656px;"> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/customer_product_qrcode/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/4.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/list_view_sticky_header/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/5.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | 
				
			|||
                         style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/16.0/field_timepicker/" | 
				
			|||
                           target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" | 
				
			|||
                                     style="border-radius: 0px;" | 
				
			|||
                                     src="assets/modules/6.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
            <!-- Left and right controls --> | 
				
			|||
            <a class="carousel-control-prev" href="#demo1" 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="#demo1" | 
				
			|||
                    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> | 
				
			|||
</div> | 
				
			|||
<!-- END OF RELATED PRODUCTS --> | 
				
			|||
<!-- OUR SERVICES --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/star.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Our Services | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="container my-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <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> | 
				
			|||
</div> | 
				
			|||
<!-- END OF OUR SERVICES --> | 
				
			|||
<!-- OUR INDUSTRIES --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/corporate.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Our | 
				
			|||
        Industries | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="container my-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                 style="background-color: #f6f8f9 !important; border-radius: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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: 0px; 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> | 
				
			|||
</div> | 
				
			|||
<!-- END OF OUR INDUSTRIES --> | 
				
			|||
<!-- SUPPORT --> | 
				
			|||
<div class="d-flex align-items-center" | 
				
			|||
     style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
         style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/customer-support.png"/> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" | 
				
			|||
        style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | 
				
			|||
        Support | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="container mt-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-sm-12 col-md-6"> | 
				
			|||
            <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | 
				
			|||
                <div class="mr-4 d-flex justify-content-center align-items-center" | 
				
			|||
                     style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | 
				
			|||
                    <img src="assets/misc/support.png" height="48" width="48" | 
				
			|||
                         style="width: 42px; height: 42px;"/> | 
				
			|||
                </div> | 
				
			|||
                <div> | 
				
			|||
                    <h4>Need Help?</h4> | 
				
			|||
                    <p style="line-height: 100%;">Got questions or need help? | 
				
			|||
                        Get in touch.</p> | 
				
			|||
                    <a href="mailto:odoo@cybrosys.com"> | 
				
			|||
                        <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | 
				
			|||
                            odoo@cybrosys.com</p> | 
				
			|||
                    </a> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="col-sm-12 col-md-6"> | 
				
			|||
            <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | 
				
			|||
                <div class="mr-4 d-flex justify-content-center align-items-center" | 
				
			|||
                     style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | 
				
			|||
                    <img src="assets/misc/whatsapp.png" height="52" width="52" | 
				
			|||
                         style="width: 52px; height: 52px;"/> | 
				
			|||
                </div> | 
				
			|||
                <div> | 
				
			|||
                    <h4>WhatsApp</h4> | 
				
			|||
                    <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | 
				
			|||
                    <a href="https://api.whatsapp.com/send?phone=918606827707"> | 
				
			|||
                        <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | 
				
			|||
                            +91 86068 | 
				
			|||
                            27707</p> | 
				
			|||
                    </a> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | 
				
			|||
            <img src="assets/misc/logo.png" width="144" height="31" | 
				
			|||
                 style="width:144px; height: 31px; margin-top: 40px;"/> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF SUPPORT --> | 
				
			|||
@ -0,0 +1,55 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8" ?> | 
				
			|||
<odoo> | 
				
			|||
    <!--  Multi follower action--> | 
				
			|||
    <record id="multi_follower_action" model="ir.actions.act_window"> | 
				
			|||
        <field name="name">Multi Follower</field> | 
				
			|||
        <field name="type">ir.actions.act_window</field> | 
				
			|||
        <field name="res_model">multi.follower</field> | 
				
			|||
        <field name="view_mode">tree,form</field> | 
				
			|||
        <field name="help" type="html"> | 
				
			|||
            <p class="oe_view_nocontent_create"> | 
				
			|||
                Click to add the followers dynamic action | 
				
			|||
            </p> | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
    <!-- Multi follower form view --> | 
				
			|||
    <record id="multi_follower_view_form" model="ir.ui.view"> | 
				
			|||
        <field name="name">multi.follower.view.form</field> | 
				
			|||
        <field name="model">multi.follower</field> | 
				
			|||
        <field name="arch" type="xml"> | 
				
			|||
            <form> | 
				
			|||
                <header> | 
				
			|||
                    <field name="enabled_value" invisible="1"/> | 
				
			|||
                    <button name="action_create" string="Create Action" | 
				
			|||
                            type="object" class="btn-primary" | 
				
			|||
                            attrs="{'invisible':[('enabled_value','=',False)]}"/> | 
				
			|||
                    <button name="action_unlink" string="Remove Action" | 
				
			|||
                            type="object" class="btn-primary" | 
				
			|||
                            attrs="{'invisible':[('enabled_value','=',True)]}"/> | 
				
			|||
                    <field name="states" widget="statusbar" | 
				
			|||
                           statusbar_visible="draft,running"/> | 
				
			|||
                </header> | 
				
			|||
                <sheet> | 
				
			|||
                    <group> | 
				
			|||
                        <field name="action_name" | 
				
			|||
                               attrs="{'readonly': [('states', '=', 'running')]}"/> | 
				
			|||
                        <field name="created_action_names" invisible="1"/> | 
				
			|||
                        <field name="applied_to_ids" widget="many2many_tags" | 
				
			|||
                               attrs="{'readonly': [('states', '=', 'running')]}"/> | 
				
			|||
                    </group> | 
				
			|||
                </sheet> | 
				
			|||
            </form> | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
    <!--Multi follower tree view--> | 
				
			|||
    <record id="multi_follower_view_tree" model="ir.ui.view"> | 
				
			|||
        <field name="name">multi.follower.view.tree</field> | 
				
			|||
        <field name="model">multi.follower</field> | 
				
			|||
        <field name="arch" type="xml"> | 
				
			|||
            <tree string="Channel"> | 
				
			|||
                <field name="action_name"/> | 
				
			|||
                <field name="applied_to_ids"/> | 
				
			|||
            </tree> | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,54 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8" ?> | 
				
			|||
<odoo> | 
				
			|||
    <!--        Adding a link to the general settings. that link navigates the model--> | 
				
			|||
    <record id="res_config_settings_view_form" model="ir.ui.view"> | 
				
			|||
        <field name="name"> | 
				
			|||
            res.config.settings.view.form.inherit.all.in.one.multi.followers | 
				
			|||
        </field> | 
				
			|||
        <field name="model">res.config.settings</field> | 
				
			|||
        <field name="inherit_id" ref="base.res_config_settings_view_form"/> | 
				
			|||
        <field name="arch" type="xml"> | 
				
			|||
            <xpath expr="//div[hasclass('settings')]" position="inside"> | 
				
			|||
                <div class="app_settings_block" | 
				
			|||
                     data-string="Dynamic" | 
				
			|||
                     string="Dynamic Followers" | 
				
			|||
                     data-key="all_in_one_multi_followers"> | 
				
			|||
                    <h2>Dynamic Followers</h2> | 
				
			|||
                    <div class="row mt16 o_settings_container" | 
				
			|||
                         id="end_contract_setting"> | 
				
			|||
                        <div class="col-12 col-lg-6 o_setting_box"> | 
				
			|||
                            <div class="o_setting_left_pane"/> | 
				
			|||
                            <div class="o_setting_right_pane"> | 
				
			|||
                                <div class="content-group mt16"> | 
				
			|||
                                    <span class="fw-bold">Create a Dynamic | 
				
			|||
                                        Action | 
				
			|||
                                    </span> | 
				
			|||
                                    <div class="mt8" | 
				
			|||
                                         groups="base.group_user"> | 
				
			|||
                                        <button name="%(all_in_one_multi_followers.multi_follower_action)d" | 
				
			|||
                                                icon="fa-arrow-right" | 
				
			|||
                                                type="action" | 
				
			|||
                                                string="Go to Model" | 
				
			|||
                                                class="btn-link"/> | 
				
			|||
                                    </div> | 
				
			|||
                                </div> | 
				
			|||
                            </div> | 
				
			|||
                        </div> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </xpath> | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
<!--    Res config settings action--> | 
				
			|||
    <record id="res_config_settings_action" | 
				
			|||
            model="ir.actions.act_window"> | 
				
			|||
        <field name="name">Settings</field> | 
				
			|||
        <field name="type">ir.actions.act_window</field> | 
				
			|||
        <field name="res_model">res.config.settings</field> | 
				
			|||
        <field name="view_mode">form</field> | 
				
			|||
        <field name="target">inline</field> | 
				
			|||
        <field name="context">{'module' : 'all_in_one_multi_followers', | 
				
			|||
            'bin_size': False} | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,22 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
from . import follower_adding_removing | 
				
			|||
@ -0,0 +1,117 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################### | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | 
				
			|||
#    Author: Junaidul Ansar M (odoo@cybrosys.com) | 
				
			|||
# | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################### | 
				
			|||
from lxml import etree | 
				
			|||
from lxml.html import builder as html | 
				
			|||
from odoo import api, fields, models, _ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class FollowerAddingRemoving(models.TransientModel): | 
				
			|||
    """Creating a popup wizard to adding or removing the followers in to | 
				
			|||
     the model""" | 
				
			|||
    _name = 'follower.adding.removing' | 
				
			|||
    _description = 'Follower Adding Removing' | 
				
			|||
 | 
				
			|||
    res_id = fields.Integer('Related Document ID', | 
				
			|||
                            help='Id of the followed resource') | 
				
			|||
    type = fields.Selection( | 
				
			|||
        [('add', 'Add Followers'), ('remove', 'Remove Followers')], | 
				
			|||
        string="Action Type", help='Select the action type', | 
				
			|||
        default='add') | 
				
			|||
    partner_ids = fields.Many2many('res.partner', string='Partners', | 
				
			|||
                                   help='Select the partners to add or' | 
				
			|||
                                        ' remove to the followers') | 
				
			|||
    send_mail = fields.Boolean(string='Send Email', default=True, | 
				
			|||
                               help="If checked, the partners will receive an " | 
				
			|||
                                    "email warning they have been added in " | 
				
			|||
                                    "the document's followers.") | 
				
			|||
    message = fields.Html(string='Message', help='Invite/ Remove mailing ' | 
				
			|||
                                                 'message.') | 
				
			|||
 | 
				
			|||
    def action_submit(self): | 
				
			|||
        """Adding or removing the followers when clicking the submit button""" | 
				
			|||
        model_info = self.env['ir.model'].search( | 
				
			|||
            [('model', '=', self.env.context.get('active_model'))], | 
				
			|||
            limit=1) | 
				
			|||
        email_from = self.env.user.email_formatted | 
				
			|||
        title = [active_model.display_name for active_model in | 
				
			|||
                 self.env[self.env.context.get('active_model')].browse( | 
				
			|||
                     self.env.context.get('active_ids'))] | 
				
			|||
        for record_id in self.env.context.get('active_ids'): | 
				
			|||
            record = self.env[self.env.context.get('active_model')].browse( | 
				
			|||
                record_id) | 
				
			|||
            if self.type == 'add': | 
				
			|||
                record.message_subscribe(partner_ids=self.partner_ids.ids) | 
				
			|||
            elif self.type == 'remove': | 
				
			|||
                record.message_unsubscribe(partner_ids=self.partner_ids.ids) | 
				
			|||
        new_partners = self.partner_ids | 
				
			|||
        model_name = model_info.display_name | 
				
			|||
        if self.send_mail and self.message and not self.message == '<br>': | 
				
			|||
            self.env['mail.mail'].create( | 
				
			|||
                self._prepare_message_values(title, model_name, email_from, | 
				
			|||
                                             new_partners) | 
				
			|||
            ).send() | 
				
			|||
 | 
				
			|||
    @api.onchange('type') | 
				
			|||
    def _onchange_type(self): | 
				
			|||
        """Update a message based on the selected type. | 
				
			|||
 | 
				
			|||
    This method is triggered when the 'type' field is changed. It generates | 
				
			|||
    a message to inform the user about the type change, and the message is | 
				
			|||
    displayed in the 'message' field of the current record. | 
				
			|||
    """ | 
				
			|||
        user_name = self.env.user.display_name | 
				
			|||
        model = self.env.context.get('active_model') | 
				
			|||
        document = self.env['ir.model']._get(model).display_name | 
				
			|||
        title = [active_model.display_name for active_model in | 
				
			|||
                 self.env[model].browse(self.env.context.get('active_ids'))] | 
				
			|||
        if self.type == 'add': | 
				
			|||
            msg_fmt = _( | 
				
			|||
                f'{user_name} has invited you to follow the {document} ' | 
				
			|||
                f'document: {title}') | 
				
			|||
        else: | 
				
			|||
            msg_fmt = _( | 
				
			|||
                f'{user_name} has removed you from following the {document} ' | 
				
			|||
                f'document: {title}') | 
				
			|||
        text = msg_fmt % locals() | 
				
			|||
        message = html.DIV( | 
				
			|||
            html.P(_('Hello,')), | 
				
			|||
            html.P(text) | 
				
			|||
        ) | 
				
			|||
        self.message = etree.tostring(message) | 
				
			|||
 | 
				
			|||
    def _prepare_message_values(self, title, model_name, email_from, | 
				
			|||
                                new_partners): | 
				
			|||
        """Prepares the message values to send in the email""" | 
				
			|||
        email_values = { | 
				
			|||
            'subject': _( | 
				
			|||
                'The Document follow %(document_model)s: %(document_name)s', | 
				
			|||
                document_model=model_name, | 
				
			|||
                document_name=title), | 
				
			|||
            'body_html': self.message, | 
				
			|||
            'record_name': title, | 
				
			|||
            'email_from': email_from, | 
				
			|||
            'email_to': ','.join(new_partners.mapped('email')), | 
				
			|||
            'reply_to': email_from, | 
				
			|||
            'reply_to_force_new': True, | 
				
			|||
            'email_add_signature': True, | 
				
			|||
        } | 
				
			|||
        return email_values | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8" ?> | 
				
			|||
<odoo> | 
				
			|||
    <!--    When clicking the action it show this wizard to add or remove | 
				
			|||
                 the followers in particular model--> | 
				
			|||
    <record id="follower_adding_removing_view_form" model="ir.ui.view"> | 
				
			|||
        <field name="name">follower.adding.removing.view.form</field> | 
				
			|||
        <field name="model">follower.adding.removing</field> | 
				
			|||
        <field name="arch" type="xml"> | 
				
			|||
            <form> | 
				
			|||
                <group> | 
				
			|||
                    <field name="type" widget="radio"/> | 
				
			|||
                    <field name="send_mail"/> | 
				
			|||
                    <field name="partner_ids" widget="many2many_tags"/> | 
				
			|||
                    <field name="message" attrs="{'invisible': [('send_mail', '=', False)]}"/> | 
				
			|||
                </group> | 
				
			|||
                <footer> | 
				
			|||
                    <button name="action_submit" string="Submit" type="object" | 
				
			|||
                            class="btn-primary"/> | 
				
			|||
                    <button string="Cancel" class="btn-default" | 
				
			|||
                            special="cancel"/> | 
				
			|||
                </footer> | 
				
			|||
            </form> | 
				
			|||
        </field> | 
				
			|||
    </record> | 
				
			|||
</odoo> | 
				
			|||