diff --git a/crm_check_approve_limiter/README.rst b/crm_check_approve_limiter/README.rst new file mode 100644 index 000000000..0485a20e2 --- /dev/null +++ b/crm_check_approve_limiter/README.rst @@ -0,0 +1,44 @@ +CheckList and Approval Process in CRM v15 +========================================= + +* Check lists are assigned per each opportunity stage. +* The app lets assign security groups for each check list point. +* To move a CRM lead forward in your funnel, its check list should be fully confirmed. +* Check list actions are saved in history. + +Installation +============ + - www.odoo.com/documentation/15.0/setup/install.html + - Install our custom addon + +Configuration +============= +* No additional configurations needed + +Company +------- +* 'Cybrosys Techno Solutions `__ + +Credits +------- +* Developer: +(v15) Naveen Krishna T ( odoo@cybrosys.com) + + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +Further information +=================== +HTML Description: __ diff --git a/crm_check_approve_limiter/__init__.py b/crm_check_approve_limiter/__init__.py new file mode 100644 index 000000000..4fb05c293 --- /dev/null +++ b/crm_check_approve_limiter/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +from . import models diff --git a/crm_check_approve_limiter/__manifest__.py b/crm_check_approve_limiter/__manifest__.py new file mode 100644 index 000000000..93e4e84b5 --- /dev/null +++ b/crm_check_approve_limiter/__manifest__.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +{ + 'name': 'CheckList and Approval Process in CRM', + 'category': 'Sales/CRM', + 'version': '15.0.1.0.0', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'summary': 'Manage CRM based on CheckList and Team/Stage and' + 'Approval Process to Make Sure Everything Completed In ' + 'Each Stage', + 'description': """ + CheckList and Approve Process in CRM + ===================================== + Module to manage CRM and CheckLists. + This module will helps to manage CRM efficiently + by managing checklists and approval system for CRM data. """, + 'depends': [ + 'base', + 'crm', + ], + 'data': [ + 'security/security.xml', + 'views/crm_stage_views.xml', + 'security/ir.model.access.csv', + 'views/crm_lead_views.xml', + ], + 'images': [ + 'static/description/banner.png' + ], + 'license': 'AGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/crm_check_approve_limiter/doc/RELEASE_NOTES.md b/crm_check_approve_limiter/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..897cdd395 --- /dev/null +++ b/crm_check_approve_limiter/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 06.09.2022 +#### Version 15.0.1.0.0 +#### ADD +- Initial commit crm_check_approve_limiter diff --git a/crm_check_approve_limiter/models/__init__.py b/crm_check_approve_limiter/models/__init__.py new file mode 100644 index 000000000..be68a58d5 --- /dev/null +++ b/crm_check_approve_limiter/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +from . import crm_stage, crm_stage_checklist, crm_lead diff --git a/crm_check_approve_limiter/models/crm_lead.py b/crm_check_approve_limiter/models/crm_lead.py new file mode 100644 index 000000000..a4e4d6745 --- /dev/null +++ b/crm_check_approve_limiter/models/crm_lead.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +"""Module Containing CRM lead and CheckList History Models""" +from datetime import datetime + +from odoo import models, fields, api +from odoo.exceptions import ValidationError + + +class LeadCheckList(models.Model): + _inherit = "crm.lead" + + check_list_ids = fields.Many2many('stage.check.list', + domain="['&'," + " ('stage_id', '=', stage_id)," + "'|',('s_team_id','=',team_id)," + "('s_team_id', '=', False)]", + string="Checklist", tracking=True) + check_stage_ids = fields.One2many(related="stage_id.stage_check_list_lines") + + @api.depends('check_list_ids') + def checklist_progress(self): + """Method for Computing CheckList progress value based on selected + checklist items """ + for rec in self: + total_len = rec.env['stage.check.list']. \ + search_count(['&', ('stage_id', '=', rec.stage_id.id), '|', + ('s_team_id', '=', rec.team_id.id), + ('s_team_id', '=', False)]) + if total_len != 0: + check_list_len = len(rec.check_list_ids.filtered( + lambda r: r.s_team_id == rec.team_id or not r.s_team_id)) + rec.checklist_progress = (check_list_len * 100) / total_len + else: + rec.checklist_progress = 0 + + checklist_progress = fields.Float(compute=checklist_progress, + string='Progress', + default=0.0) + + check_list_history = fields.One2many('crm.lead.check.history', 'lead_id', + string="History", readonly=True) + + def write(self, vals_set): + """Super the write method for data validation.Here we check + Progression and regression of stages and based on checklist + completion stage progression can be blocked from here """ + if 'stage_id' in vals_set.keys(): + new_stage_id = self.env['crm.stage'].browse([vals_set['stage_id']]) + if new_stage_id \ + and self.stage_id.sequence < new_stage_id.sequence \ + and not self.stage_id.pre_checking \ + and self.stage_id.stage_check_list_lines \ + and int(self.checklist_progress) != 100 \ + and not self.env.user. \ + has_group('crm_check_approve_limiter.' + 'crm_check_approve_manager'): + raise ValidationError("You cannot move this case forward until " + "all the check list items are done for " + "this " + " stage.") + self.check_list_ids = False + for item in self.stage_id.stage_check_list_lines: + if item.stage_recover: + history = self.check_list_history.search([( + 'check_item', '=', item.id)], order='id desc', + limit=1) or False + if history and history.list_action == 'complete' \ + and item not in self.check_list_ids: + self.check_list_ids += item + if 'check_list_ids' in vals_set.keys(): + group_check = self.env.user.\ + has_group('crm_check_approve_limiter.' + 'crm_check_approve_manager') + user_groups = self.env.user.groups_id + new_ids = self.env['stage.check.list']. \ + search([('id', 'in', vals_set['check_list_ids'][-1][-1])]) + old_ids = self.check_list_ids + check_item = (old_ids - new_ids) + check_item2 = (new_ids - old_ids) + for ch_lst in check_item2: + if ch_lst.approve_groups and not ch_lst. \ + approve_groups.filtered(lambda f: f in user_groups)\ + and not group_check: + grp_string_t = '\n'.join(map(str, ch_lst.approve_groups. + mapped('full_name'))) + raise ValidationError(f'Only the below specified group' + f' members can complete this task' + f' : {grp_string_t}') + for ch_lst in check_item: + if ch_lst.approve_groups and not ch_lst. \ + approve_groups.filtered(lambda f: f in user_groups)\ + and not group_check: + grp_string_t = '\n'.join(map(str, ch_lst.approve_groups. + mapped('full_name'))) + raise ValidationError(f'Only the below specified group' + f' members can undo this task' + f' : {grp_string_t}') + if 'stage_id' not in vals_set.keys() and check_item: + for c_item in check_item: + vals = { + 'lead_id': self.id, + 'check_item': c_item.id, + 'list_action': 'not_complete', + 'change_date': datetime.now(), + 'user_id': self.env.user.id, + 'stage_id': self.stage_id.id + } + self.env['crm.lead.check.history'].sudo().create(vals) + elif 'stage_id' not in vals_set.keys() and check_item2: + for c_item in check_item2: + vals = { + 'lead_id': self.id, + 'check_item': c_item.id, + 'list_action': 'complete', + 'change_date': datetime.now(), + 'user_id': self.env.user.id, + 'stage_id': self.stage_id.id + } + self.env['crm.lead.check.history'].sudo().create(vals) + res = super().write(vals_set) + return res + + @api.onchange('stage_id') + def _onchange_state_id(self): + old_stage_id = self._origin.stage_id + if old_stage_id.sequence < self.stage_id.sequence \ + and not old_stage_id.pre_checking \ + and old_stage_id.stage_check_list_lines \ + and int(self.checklist_progress) != 100 and not self.env.user.\ + has_group('crm_check_approve_limiter.' + 'crm_check_approve_manager'): + raise ValidationError("You cannot move this case forward until " + "all the check list items are done for this" + " stage.") + if old_stage_id.sequence > self.stage_id.sequence \ + and self.stage_id.disable_regress and not self.env.user.\ + has_group('crm_check_approve_limiter.' + 'crm_check_approve_manager'): + raise ValidationError("Regression to the selected stage is " + "blocked. " + "Please contact Administrators for " + "required permission") + self.check_list_ids = False + for item in self.stage_id.stage_check_list_lines: + if item.stage_recover: + history = self.check_list_history.search([( + 'check_item', '=', item.id)], order='id desc', + limit=1) or False + if history and history.list_action == 'complete' \ + and item not in self.check_list_ids: + self.check_list_ids += item + + +class StageCheckHistory(models.Model): + _name = "crm.lead.check.history" + + check_item = fields.Many2one('stage.check.list', string="Check Item") + list_action = fields.Selection([ + ('complete', 'Complete'), ('not_complete', 'Not Complete')], + required=True, string="Action") + user_id = fields.Many2one('res.users', string="User") + change_date = fields.Datetime(string="Date") + stage_id = fields.Many2one('crm.stage', string="Stage") + lead_id = fields.Many2one('crm.lead', string="Lead") diff --git a/crm_check_approve_limiter/models/crm_stage.py b/crm_check_approve_limiter/models/crm_stage.py new file mode 100644 index 000000000..dca943994 --- /dev/null +++ b/crm_check_approve_limiter/models/crm_stage.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +"""Module containing Stage-based checklist Models""" +from odoo import models, fields + + +class StageCheckList(models.Model): + _inherit = "crm.stage" + + stage_check_list_lines = fields.One2many('stage.check.list', + 'stage_id', + string="CheckList") + pre_checking = fields.Boolean(default=False, + string="No Need for checklist", + help="If checked,moving to next stage doesn't" + "require checklist done.") + disable_regress = fields.Boolean(default=False, + string="Prohibit Regress to this stage", + help="If checked, It would not be " + "possible to move a lead back to" + " this stage") diff --git a/crm_check_approve_limiter/models/crm_stage_checklist.py b/crm_check_approve_limiter/models/crm_stage_checklist.py new file mode 100644 index 000000000..51753d1c3 --- /dev/null +++ b/crm_check_approve_limiter/models/crm_stage_checklist.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2022-TODAY Cybrosys Technologies(). +# Author: Naveen K (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 . +# +############################################################################# + +"""Module Containing Checklist data""" +from odoo import models, fields + + +class StageCheckListLines(models.Model): + _name = "stage.check.list" + _description = "Stage Based CheckList" + _rec_name = 'check_task' + + check_task = fields.Char(string="Task", required=True) + s_team_id = fields.Many2one('crm.team', string="Selected Teams") + approve_groups = fields.Many2many('res.groups', + string="User Groups", + help="only these user groups may " + "approve the item") + stage_recover = fields.Boolean(default=False, + string="Saved", + help="If checked the item will be " + "recoverable for leads on this " + "stage.Otherwise the item must be " + "approved each time when lead is on " + "this stage") + stage_id = fields.Many2one('crm.stage', string="Stage") diff --git a/crm_check_approve_limiter/security/ir.model.access.csv b/crm_check_approve_limiter/security/ir.model.access.csv new file mode 100644 index 000000000..8eef197a2 --- /dev/null +++ b/crm_check_approve_limiter/security/ir.model.access.csv @@ -0,0 +1,6 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_crm_stage_checklist,crm.stage,model_stage_check_list,,1,0,0,0 +access_crm_stage_check_list_manager,crm.stage,model_stage_check_list,sales_team.group_sale_manager,1,1,1,1 +access_crm_lead_check_history,crm.lead.check.history,model_crm_lead_check_history,,1,0,0,0 +access_crm_lead_check_history_manager,crm.lead.check.history,model_crm_lead_check_history,sales_team.group_sale_manager,1,1,1,1 + diff --git a/crm_check_approve_limiter/security/security.xml b/crm_check_approve_limiter/security/security.xml new file mode 100644 index 000000000..5d74b6e57 --- /dev/null +++ b/crm_check_approve_limiter/security/security.xml @@ -0,0 +1,9 @@ + + + + + CRM Checklist Manager + + + + \ No newline at end of file diff --git a/crm_check_approve_limiter/static/description/assets/icons/check.png b/crm_check_approve_limiter/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/check.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/chevron.png b/crm_check_approve_limiter/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/chevron.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/cogs.png b/crm_check_approve_limiter/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/cogs.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/consultation.png b/crm_check_approve_limiter/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/consultation.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/ecom-black.png b/crm_check_approve_limiter/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/ecom-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/education-black.png b/crm_check_approve_limiter/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/education-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/hotel-black.png b/crm_check_approve_limiter/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/hotel-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/license.png b/crm_check_approve_limiter/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/license.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/lifebuoy.png b/crm_check_approve_limiter/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/lifebuoy.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/logo.png b/crm_check_approve_limiter/static/description/assets/icons/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/logo.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/manufacturing-black.png b/crm_check_approve_limiter/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/manufacturing-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/pos-black.png b/crm_check_approve_limiter/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/pos-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/puzzle.png b/crm_check_approve_limiter/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/puzzle.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/restaurant-black.png b/crm_check_approve_limiter/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/restaurant-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/service-black.png b/crm_check_approve_limiter/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/service-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/trading-black.png b/crm_check_approve_limiter/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/trading-black.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/training.png b/crm_check_approve_limiter/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/training.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/update.png b/crm_check_approve_limiter/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/update.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/user.png b/crm_check_approve_limiter/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/user.png differ diff --git a/crm_check_approve_limiter/static/description/assets/icons/wrench.png b/crm_check_approve_limiter/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/icons/wrench.png differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/1.png b/crm_check_approve_limiter/static/description/assets/modules/1.png new file mode 100644 index 000000000..6547c3081 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/1.png differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/2.png b/crm_check_approve_limiter/static/description/assets/modules/2.png new file mode 100644 index 000000000..0bbad468d Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/2.png differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/3.png b/crm_check_approve_limiter/static/description/assets/modules/3.png new file mode 100644 index 000000000..8793336c0 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/3.png differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/4.png b/crm_check_approve_limiter/static/description/assets/modules/4.png new file mode 100644 index 000000000..f5174ab22 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/4.png differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/5.gif b/crm_check_approve_limiter/static/description/assets/modules/5.gif new file mode 100644 index 000000000..c51b9eb07 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/5.gif differ diff --git a/crm_check_approve_limiter/static/description/assets/modules/6.png b/crm_check_approve_limiter/static/description/assets/modules/6.png new file mode 100644 index 000000000..b58f04eb3 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/modules/6.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/1.png b/crm_check_approve_limiter/static/description/assets/screenshots/1.png new file mode 100644 index 000000000..99510130d Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/1.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/10.png b/crm_check_approve_limiter/static/description/assets/screenshots/10.png new file mode 100644 index 000000000..1d7ffe933 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/10.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/11.png b/crm_check_approve_limiter/static/description/assets/screenshots/11.png new file mode 100644 index 000000000..8efad75b7 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/11.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/12.png b/crm_check_approve_limiter/static/description/assets/screenshots/12.png new file mode 100644 index 000000000..8df8c17eb Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/12.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/13.png b/crm_check_approve_limiter/static/description/assets/screenshots/13.png new file mode 100644 index 000000000..ed2c307ec Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/13.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/14.png b/crm_check_approve_limiter/static/description/assets/screenshots/14.png new file mode 100644 index 000000000..e99400124 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/14.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/15.png b/crm_check_approve_limiter/static/description/assets/screenshots/15.png new file mode 100644 index 000000000..19f6bab94 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/15.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/2.png b/crm_check_approve_limiter/static/description/assets/screenshots/2.png new file mode 100644 index 000000000..975d97ead Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/2.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/3.png b/crm_check_approve_limiter/static/description/assets/screenshots/3.png new file mode 100644 index 000000000..c6fe5eee4 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/3.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/4.png b/crm_check_approve_limiter/static/description/assets/screenshots/4.png new file mode 100644 index 000000000..6ad123aee Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/4.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/5.png b/crm_check_approve_limiter/static/description/assets/screenshots/5.png new file mode 100644 index 000000000..941a99e05 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/5.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/6.png b/crm_check_approve_limiter/static/description/assets/screenshots/6.png new file mode 100644 index 000000000..14f1b5f38 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/6.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/7.png b/crm_check_approve_limiter/static/description/assets/screenshots/7.png new file mode 100644 index 000000000..8798c0bf8 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/7.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/8.png b/crm_check_approve_limiter/static/description/assets/screenshots/8.png new file mode 100644 index 000000000..017fd03de Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/8.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/9.png b/crm_check_approve_limiter/static/description/assets/screenshots/9.png new file mode 100644 index 000000000..74d8dd984 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/9.png differ diff --git a/crm_check_approve_limiter/static/description/assets/screenshots/hero.gif b/crm_check_approve_limiter/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..b5c75a761 Binary files /dev/null and b/crm_check_approve_limiter/static/description/assets/screenshots/hero.gif differ diff --git a/crm_check_approve_limiter/static/description/banner.png b/crm_check_approve_limiter/static/description/banner.png new file mode 100644 index 000000000..1fdaa3ab2 Binary files /dev/null and b/crm_check_approve_limiter/static/description/banner.png differ diff --git a/crm_check_approve_limiter/static/description/icon.png b/crm_check_approve_limiter/static/description/icon.png new file mode 100644 index 000000000..39143de67 Binary files /dev/null and b/crm_check_approve_limiter/static/description/icon.png differ diff --git a/crm_check_approve_limiter/static/description/index.html b/crm_check_approve_limiter/static/description/index.html new file mode 100644 index 000000000..cefe2b80c --- /dev/null +++ b/crm_check_approve_limiter/static/description/index.html @@ -0,0 +1,828 @@ +
+
+
+
+ +
+
+
+ Community +
+
+ Enterprise +
+ +
+
+
+
+ +
+
+
+

+ CheckList and Approval Process in CRM

+

+ This module will provide check list for each pipeline stage to + control requirements, fulfillment and to make sure that each + action is fully approved by responsible users. +

+ +
+
+ + + +
+
+

+ Overview +

+
+ +
+

+ Making a customer from an opportunity is the goal of the CRM + pipeline. + To achieve that goal sales staff needs to undertake a specific + sequence of actions or tasks. + Each of those actions is important on the defined stage. + For working as an efficient company The CRM is an important + part. + This app provides a checklist for each pipeline stage to control + requirements, + fulfillment and to make sure that each action/checklist item is + fully approved by responsible users. + So that it will be easier to manage through CRM pipelines. +

+
+ +
+ + +
+
+

+ Features +

+
+ +
+
+ +
+
+

+ Check lists are assigned per each opportunity stage.

+
+
+ +
+
+ +
+
+

+ The app lets assign security groups for each check list + point.

+
+
+ +
+
+ +
+
+

+ To move a CRM lead forward in your funnel, its checklist + should be fully confirmed.

+
+
+ +
+
+ +
+
+

+ Check list actions are saved in history.

+
+
+ + +
+ +
+
+

+ Screenshots +

+
+
+

+ Configure Stage data

+

+ Open stage configuration by activating developer mode

+ +
+ +
+

+ check list per stages

+

+ By configuring each stages we can set checklist per Stages for + the opportunities. +

+ +
+ +
+

+ Check list Completion

+

+ Assigned check list items for each opportunity in their + specified stage can be opened in managed in the Checklist page + section. +

+ +
+ +
+

+ Progression Status

+

+ Check list completed progress can be viewed in the checklist + section of each opportunity. +

+ +
+ +
+

+ Kanban View

+

+ Check list completed progress can also be viewed in the Kanban + view for easy management. +

+ +
+ +
+

+ Sales Team

+

+ Assign check list items to specific sales team. +

+ +
+ +
+

+ User groups

+

+ We can make sure that the checklist is completed by responsible + users by user group specified item assigning. +

+ +
+ +
+

+ Unauthorised blocking

+

+ Unauthorised users will be blocked from marking the checklist + items. +

+ +
+ +
+

+ Status Recover

+

+ By activating the saved column for an item,the item will regain + the previous status in that stage if the opportunity reach that + specific stage again. +

+ +
+ +
+

+ Check List

+

+ The opportunity can be only progress to upper stages if the + checklist items are fully completed to the selected user/team. +

+ +
+ +
+

+ No need Check list

+

+ If this option checked in a stage, opportunity progressing from + this stage does not require check list to be completed. +

+ +
+ +
+

+ Regression Blocking

+

+ If this option checked in a stage, opportunities cannot be + regressed to this stage. +

+ +
+ +
+

+ If the user tries to regress the opportunity to the specified + stage, warning will be displayed

+ +
+ +
+

+ Checklist History

+

+ The history of checklist items can be viewed in the Checklist + page of the opportunity. +

+ +
+ +
+

+ Checklist Manager

+

+ The Checklist Manager group can approve any check items and move + opportunities without checklist restrictions. +

+ +
+ +
+ +
+
+

Suggested Products

+
+ + +
+
+ + + +
+
+
+

Our Services

+
+
+ +
+
+ +
+
+ Odoo + Customization
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Support
+
+ + +
+
+ +
+
+ Hire + Odoo + Developer
+
+ +
+
+ +
+
+ Odoo + Integration
+
+ +
+
+ +
+
+ Odoo + Migration
+
+ + +
+
+ +
+
+ Odoo + Consultancy
+
+ +
+
+ +
+
+ Odoo + Implementation
+
+ +
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + + +
+
+
+

Our Industries

+
+
+ +
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+ +
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+ +
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+ +
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+ +
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+ +
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+ +
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+ +
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+ +
+
+ + + + + +
+
+
+

Need Help?

+
+
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + +
diff --git a/crm_check_approve_limiter/views/crm_lead_views.xml b/crm_check_approve_limiter/views/crm_lead_views.xml new file mode 100644 index 000000000..5bc627dbc --- /dev/null +++ b/crm_check_approve_limiter/views/crm_lead_views.xml @@ -0,0 +1,46 @@ + + + + + crm.lead.form.inherit + crm.lead + + + + + + + + + + + + + + + + + + + + + + + + + crm.lead.kanban.lead.inherit + crm.lead + + + + + + + + + + + + \ No newline at end of file diff --git a/crm_check_approve_limiter/views/crm_stage_views.xml b/crm_check_approve_limiter/views/crm_stage_views.xml new file mode 100644 index 000000000..53876ae6a --- /dev/null +++ b/crm_check_approve_limiter/views/crm_stage_views.xml @@ -0,0 +1,51 @@ + + + + + crm.stage.form.inherit + crm.stage + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+
+
+
\ No newline at end of file