diff --git a/crm_duplicates_real_time_search/README.rst b/crm_duplicates_real_time_search/README.rst new file mode 100644 index 000000000..a5de08e93 --- /dev/null +++ b/crm_duplicates_real_time_search/README.rst @@ -0,0 +1,46 @@ +.. image:: https://img.shields.io/badge/licence-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +CRM Duplicates Real Time Search +================================ +This Module Allows us to prevent making duplicated contacts +and leads as well as display message regarding the duplication. + +Configuration +============ +- No Configuration needed. + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Credits +------- +* Developer: V(16) Dhanya Babu , 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 `__ + +Further information +=================== +HTML Description: ``__ diff --git a/crm_duplicates_real_time_search/__init__.py b/crm_duplicates_real_time_search/__init__.py new file mode 100644 index 000000000..d2ec13f0f --- /dev/null +++ b/crm_duplicates_real_time_search/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import models diff --git a/crm_duplicates_real_time_search/__manifest__.py b/crm_duplicates_real_time_search/__manifest__.py new file mode 100644 index 000000000..20f79c379 --- /dev/null +++ b/crm_duplicates_real_time_search/__manifest__.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + 'name': 'CRM Duplicates Real Time Search', + 'version': '16.0.1.0.0', + 'summary': """This Module Allows us to prevent making duplicated contacts + and leads as well as display message regarding the duplication.""", + 'description': 'This module facilitates the prevention of creating' + ' duplicate contacts and leads within the system. ' + 'It achieves this by implementing mechanisms to identify' + ' potential duplicates based on fields. When a user ' + 'attempts to create a new contact or lead that matches an' + ' existing record, the module triggers a notification ' + 'alerting the user about the potential duplication.' + 'This message prompts the user to review the existing ' + 'records before proceeding, ensuring data integrity and ' + 'minimizing redundancy in the database.that are attached to' + 'the products from website', + 'category': 'CRM', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': "https://www.cybrosys.com", + 'depends': ['crm', 'contacts', 'account'], + 'data': [ + 'views/res_config_settings_views.xml', + 'views/crm_lead_views.xml', + 'views/res_partner_views.xml', + ], + 'images': ['static/description/banner.jpg'], + 'license': 'LGPL-3', + 'installable': True, + 'auto_install': True, + 'application': False, +} diff --git a/crm_duplicates_real_time_search/doc/RELEASE_NOTES.md b/crm_duplicates_real_time_search/doc/RELEASE_NOTES.md new file mode 100755 index 000000000..a1ea1c4a6 --- /dev/null +++ b/crm_duplicates_real_time_search/doc/RELEASE_NOTES.md @@ -0,0 +1,7 @@ +## Module + +#### 22.07.2024 +#### Version 16.0.1.0.0 +#### ADD + +-Initial Commit for CRM Duplicates Real Time Search diff --git a/crm_duplicates_real_time_search/models/__init__.py b/crm_duplicates_real_time_search/models/__init__.py new file mode 100644 index 000000000..3ccde3f3c --- /dev/null +++ b/crm_duplicates_real_time_search/models/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import res_config_settings +from . import res_partner +from . import crm_lead diff --git a/crm_duplicates_real_time_search/models/crm_lead.py b/crm_duplicates_real_time_search/models/crm_lead.py new file mode 100644 index 000000000..6f429d2a2 --- /dev/null +++ b/crm_duplicates_real_time_search/models/crm_lead.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import ast +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class CRMLead(models.Model): + """ + Extend CRM Lead Model to handle duplicate values. + """ + _inherit = 'crm.lead' + + is_duplicate_lead = fields.Boolean(String='Is Duplicate', + help='Enable this to show the duplicate' + ' leads') + + def _get_crm_fields(self, param_key): + param_value = self.env['ir.config_parameter'].sudo().get_param( + param_key) + return ast.literal_eval(param_value) if param_value else [] + + def _check_duplicate_fields(self, vals, fields_list, strict=False): + for field in fields_list: + crm_field = self.env['ir.model.fields'].browse(field) + field_name = crm_field.name + if field_name in vals: + lead = self.env['crm.lead'].search( + [(field_name, '=', vals[field_name])], limit=1) + if lead: + if strict: + raise ValidationError( + _("The %s is already used for opportunity %s.") % ( + crm_field.field_description, lead.name)) + else: + return crm_field.field_description + return None + + @api.model + def create(self, vals): + crm_fields_rigid = self._get_crm_fields( + 'crm_duplicates_real_time_search.crm_fields_rigid_ids') + crm_fields_soft = self._get_crm_fields( + 'crm_duplicates_real_time_search.crm_fields_soft_ids') + duplicate_field = self._check_duplicate_fields(vals, crm_fields_rigid, + strict=True) + if not duplicate_field: + duplicate_field = self._check_duplicate_fields(vals, + crm_fields_soft) + res = super(CRMLead, self).create(vals) + if duplicate_field: + res.write({'is_duplicate_lead': True}) + res.message_post( + body=_('created duplicate values for %s.') % duplicate_field) + + return res + + def write(self, vals): + crm_fields_rigid = self._get_crm_fields( + 'crm_duplicates_real_time_search.crm_fields_rigid_ids') + crm_fields_soft = self._get_crm_fields( + 'crm_duplicates_real_time_search.crm_fields_soft_ids') + duplicate_field = self._check_duplicate_fields(vals, crm_fields_rigid, + strict=True) + if not duplicate_field: + duplicate_field = self._check_duplicate_fields(vals, + crm_fields_soft) + res = super(CRMLead, self).write(vals) + if duplicate_field: + self.write({'is_duplicate_lead': True}) + self.message_post( + body=_('created duplicate values for %s.') % duplicate_field) + return res diff --git a/crm_duplicates_real_time_search/models/res_config_settings.py b/crm_duplicates_real_time_search/models/res_config_settings.py new file mode 100644 index 000000000..94278ea1b --- /dev/null +++ b/crm_duplicates_real_time_search/models/res_config_settings.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import xml.etree.ElementTree as xee +from ast import literal_eval +from odoo import models, api, fields + + +class ResConfigSettings(models.TransientModel): + """ + Settings for handling duplicate records in Odoo. + """ + _inherit = 'res.config.settings' + + company_id = fields.Many2one('res.company', + 'Company', + help='Name of the company.') + opportunity_duplicates = fields.Boolean( + 'Consider only Opportunity as Duplicates', help='Enable this' + 'boolean for to display' + 'the duplicates in ' + 'opportunities.') + leads_duplicates = fields.Boolean('Consider only Opportunity ' + 'as Leads', help='Enable this' + 'boolean for to display' + 'the duplicates in ' + 'leads.') + duplicate_count_tree_kanban = fields.Boolean(string='Duplicates Count', + help='To show the duplicates' + 'count in tree and kanban' + ' view.') + duplicate_count_form = fields.Boolean(string='Duplicates Count in Form', + help='To show the duplicates' + 'count in form' + ' view.') + + def set_domain_crm(self): + """Return the domain for CRM fields.""" + crm_view_id = self.env.ref('crm.crm_lead_view_form') + view_arch = str(crm_view_id.arch_base) + doc = xee.fromstring(view_arch) + field_list = [] + for tag in doc.findall('.//field'): + field_list.append(tag.attrib['name']) + crm_lead_fields = self.env['crm.lead']._fields + filtered_field_list = [ + field for field in field_list + if not isinstance(crm_lead_fields[field], ( + fields.Many2one, fields.One2many, fields.Many2many)) + ] + model_id = self.env['ir.model'].sudo().search( + [('model', '=', 'crm.lead')]) + return [('model_id', '=', model_id.id), ('state', '=', 'base'), + ('name', 'in', filtered_field_list)] + + def set_domain_partner(self): + """Return the domain for partner fields.""" + partner_view_id = self.env.ref('base.view_partner_form') + view_arch = str(partner_view_id.arch_base) + doc = xee.fromstring(view_arch) + field_list = [] + for tag in doc.findall('.//field'): + field_list.append(tag.attrib['name']) + partner_fields = self.env['res.partner']._fields + filtered_field_list = [ + field for field in field_list + if not isinstance(partner_fields[field], + (fields.Many2one, fields.One2many, + fields.Many2many)) + ] + model_id = self.env['ir.model'].sudo().search( + [('model', '=', 'res.partner')]) + + return [('model_id', '=', model_id.id), ('state', '=', 'base'), + ('name', 'in', filtered_field_list)] + + partner_fields_soft_ids = fields.Many2many('ir.model.fields', + 'partner_fields_rel', + domain=set_domain_partner, + help='Soft fields in partner ' + 'model.') + partner_fields_rigid_ids = fields.Many2many('ir.model.fields', + 'partner_fields_rigid_rel', + domain=set_domain_partner, + help='Rigid fields in partner ' + 'model.') + crm_fields_soft_ids = fields.Many2many('ir.model.fields', + 'crm_fields_rel', + domain=set_domain_crm, + help='Soft fields in CRM model.' + ) + crm_fields_rigid_ids = fields.Many2many('ir.model.fields', + 'crm_fields_rigid_rel', + domain=set_domain_crm, + help='Rigid fields in CRM model.' + ) + + @api.model + def get_values(self): + """Get values for the settings.""" + icp_sudo = self.env['ir.config_parameter'].sudo() + crm_soft_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.crm_fields_soft_ids') + crm_rigid_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.crm_fields_rigid_ids') + partner_soft_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.partner_fields_soft_ids') + partner_rigid_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.partner_fields_rigid_ids') + opportunity_duplicates_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.opportunity_duplicates') + leads_duplicates_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.leads_duplicates') + duplicate_count_tree_kanban_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.duplicate_count_tree_kanban') + duplicate_count_form_parameter = icp_sudo.get_param( + 'crm_duplicates_real_time_search.duplicate_count_form') + res = super(ResConfigSettings, self).get_values() + res.update(opportunity_duplicates=opportunity_duplicates_parameter, + leads_duplicates=leads_duplicates_parameter, + duplicate_count_tree_kanban=duplicate_count_tree_kanban_parameter, + duplicate_count_form=duplicate_count_form_parameter, + crm_fields_soft_ids=[(6, 0, literal_eval(crm_soft_parameter)) + ] if crm_soft_parameter else False, + crm_fields_rigid_ids=[ + (6, 0, literal_eval(crm_rigid_parameter)) + ] if crm_rigid_parameter else False, + partner_fields_soft_ids=[ + (6, 0, literal_eval(partner_soft_parameter)) + ] if partner_soft_parameter else False, + partner_fields_rigid_ids=[ + (6, 0, literal_eval(partner_rigid_parameter)) + ] if partner_rigid_parameter else False, + ) + return res + + def set_values(self): + """Set values for the settings.""" + res = super(ResConfigSettings, self).set_values() + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.crm_fields_soft_ids', + self.crm_fields_soft_ids.ids) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.crm_fields_rigid_ids', + self.crm_fields_rigid_ids.ids) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.partner_fields_soft_ids', + self.partner_fields_soft_ids.ids) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.partner_fields_rigid_ids', + self.partner_fields_rigid_ids.ids) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.opportunity_duplicates', + self.opportunity_duplicates) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.leads_duplicates', + self.leads_duplicates) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.duplicate_count_tree_kanban', + self.duplicate_count_tree_kanban) + self.env['ir.config_parameter'].sudo().set_param( + 'crm_duplicates_real_time_search.duplicate_count_form', + self.duplicate_count_form) + return res diff --git a/crm_duplicates_real_time_search/models/res_partner.py b/crm_duplicates_real_time_search/models/res_partner.py new file mode 100644 index 000000000..ba1361c9e --- /dev/null +++ b/crm_duplicates_real_time_search/models/res_partner.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies() +# Author:Dhanya B() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +import ast +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + is_duplicate_contact = fields.Boolean(String='Is Duplicate', + help='Enable this to show the ' + 'duplicate leads') + + def _get_partner_fields(self, param_key): + param_value = self.env['ir.config_parameter'].sudo().get_param( + param_key) + return ast.literal_eval(param_value) if param_value else [] + + def _check_duplicates(self, vals, fields_list, model, strict=False): + for field_id in fields_list: + contact_field = self.env['ir.model.fields'].browse(field_id) + field_name = contact_field.name + if vals.get(field_name): + domain = [(field_name, '=', vals.get(field_name))] + if not strict: + domain.append(('id', '!=', self.id)) + existing_partner = self.env[model].search(domain, limit=1) + if existing_partner: + if strict: + raise ValidationError( + _("The %s is already used for contact %s.") % + (contact_field.field_description, + existing_partner.name) + ) + return True + return False + + @api.model + def create(self, vals): + partner_fields_rigid = self._get_partner_fields( + 'crm_duplicates_real_time_search.partner_fields_rigid_ids') + partner_fields_soft = self._get_partner_fields( + 'crm_duplicates_real_time_search.partner_fields_soft_ids') + self._check_duplicates(vals, partner_fields_rigid, 'res.partner', + strict=True) + flag = self._check_duplicates(vals, partner_fields_soft, 'res.partner') + res = super(ResPartner, self).create(vals) + if flag: + res.write({'is_duplicate_contact': True}) + res.message_post(body=_('created duplicate values.')) + return res + + def write(self, vals): + partner_fields_rigid = self._get_partner_fields( + 'crm_duplicates_real_time_search.partner_fields_rigid_ids') + partner_fields_soft = self._get_partner_fields( + 'crm_duplicates_real_time_search.partner_fields_soft_ids') + self._check_duplicates(vals, partner_fields_rigid, 'res.partner', + strict=True) + flag = self._check_duplicates(vals, partner_fields_soft, 'res.partner') + res = super(ResPartner, self).write(vals) + if flag: + self.write({'is_duplicate_contact': True}) + self.message_post(body=_('Created duplicate values.')) + return res diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/check.png b/crm_duplicates_real_time_search/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/check.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/chevron.png b/crm_duplicates_real_time_search/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/chevron.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/cogs.png b/crm_duplicates_real_time_search/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/cogs.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/consultation.png b/crm_duplicates_real_time_search/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/consultation.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/ecom-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/ecom-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/education-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/education-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/hotel-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/hotel-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/license.png b/crm_duplicates_real_time_search/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/license.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/lifebuoy.png b/crm_duplicates_real_time_search/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/lifebuoy.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/manufacturing-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/manufacturing-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/pos-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/pos-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/puzzle.png b/crm_duplicates_real_time_search/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/puzzle.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/restaurant-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/restaurant-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/service-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/service-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/trading-black.png b/crm_duplicates_real_time_search/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/trading-black.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/training.png b/crm_duplicates_real_time_search/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/training.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/update.png b/crm_duplicates_real_time_search/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/update.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/user.png b/crm_duplicates_real_time_search/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/user.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/icons/wrench.png b/crm_duplicates_real_time_search/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/icons/wrench.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/categories.png b/crm_duplicates_real_time_search/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/categories.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/check-box.png b/crm_duplicates_real_time_search/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/check-box.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/compass.png b/crm_duplicates_real_time_search/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/compass.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/corporate.png b/crm_duplicates_real_time_search/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/corporate.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/customer-support.png b/crm_duplicates_real_time_search/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/customer-support.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/cybrosys-logo.png b/crm_duplicates_real_time_search/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/cybrosys-logo.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/features.png b/crm_duplicates_real_time_search/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/features.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/logo.png b/crm_duplicates_real_time_search/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/logo.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/pictures.png b/crm_duplicates_real_time_search/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/pictures.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/pie-chart.png b/crm_duplicates_real_time_search/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/pie-chart.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/right-arrow.png b/crm_duplicates_real_time_search/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/right-arrow.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/star.png b/crm_duplicates_real_time_search/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/star.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/support.png b/crm_duplicates_real_time_search/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/support.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/misc/whatsapp.png b/crm_duplicates_real_time_search/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/misc/whatsapp.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/1.png b/crm_duplicates_real_time_search/static/description/assets/modules/1.png new file mode 100644 index 000000000..359d3e4d6 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/1.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/2.png b/crm_duplicates_real_time_search/static/description/assets/modules/2.png new file mode 100644 index 000000000..5c56f0bcd Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/2.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/3.png b/crm_duplicates_real_time_search/static/description/assets/modules/3.png new file mode 100644 index 000000000..c1f30354a Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/3.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/4.png b/crm_duplicates_real_time_search/static/description/assets/modules/4.png new file mode 100644 index 000000000..33372bdc1 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/4.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/5.gif b/crm_duplicates_real_time_search/static/description/assets/modules/5.gif new file mode 100644 index 000000000..d0f36b007 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/5.gif differ diff --git a/crm_duplicates_real_time_search/static/description/assets/modules/6.png b/crm_duplicates_real_time_search/static/description/assets/modules/6.png new file mode 100644 index 000000000..29d072e4b Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/modules/6.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duoplicate-1.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duoplicate-1.png new file mode 100644 index 000000000..4d57c3654 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duoplicate-1.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicare-1.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicare-1.png new file mode 100644 index 000000000..a04c83ce5 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicare-1.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-2.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-2.png new file mode 100644 index 000000000..109c29d77 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-2.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-3.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-3.png new file mode 100644 index 000000000..5e25b9336 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-3.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-4.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-4.png new file mode 100644 index 000000000..1e8ca527b Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-4.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-5.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-5.png new file mode 100644 index 000000000..0c7aee11e Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/duplicate-5.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/hero.gif b/crm_duplicates_real_time_search/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..361d3710c Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/hero.gif differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/risss.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/risss.png new file mode 100644 index 000000000..950388a09 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/risss.png differ diff --git a/crm_duplicates_real_time_search/static/description/assets/screenshots/rissssssss.png b/crm_duplicates_real_time_search/static/description/assets/screenshots/rissssssss.png new file mode 100644 index 000000000..fac2f7ae5 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/assets/screenshots/rissssssss.png differ diff --git a/crm_duplicates_real_time_search/static/description/banner.jpg b/crm_duplicates_real_time_search/static/description/banner.jpg new file mode 100644 index 000000000..ace0c4ef9 Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/banner.jpg differ diff --git a/crm_duplicates_real_time_search/static/description/icon.png b/crm_duplicates_real_time_search/static/description/icon.png new file mode 100644 index 000000000..c012156be Binary files /dev/null and b/crm_duplicates_real_time_search/static/description/icon.png differ diff --git a/crm_duplicates_real_time_search/static/description/index.html b/crm_duplicates_real_time_search/static/description/index.html new file mode 100644 index 000000000..09cad3065 --- /dev/null +++ b/crm_duplicates_real_time_search/static/description/index.html @@ -0,0 +1,619 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+ Odoo.sh +
+
+
+ +
+
+
+ +

+ CRM Duplicates Real Time Search

+

Allow Prevent + Duplication of Data.

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

Explore This + Module

+
+ + + + +
+
+ +
+

Overview +

+
+
+
+ This module helps to prevent and alert when creating duplicated datas in lead and contact module. +
+
+ + + +
+
+ +
+

Features +

+
+
+
+
+ + Community & Enterprise + Support. +
+
+ + Prevent Duplication of leads. +
+
+ + Prevent Duplication of contacts. +
+
+ + Alert Duplication of leads. +
+
+ + Alert Duplication of contacts. +
+
+
+
+ + Available in Odoo 16.0 + Community. +
+ +
+
+ + + +
+
+ +
+

Screenshots +

+
+
+
+ +
+

Set CRM Rigid Fields + and Soft Fields. +

+

+

+ +
+ +
+

For rigid fields it + will show validation error. +

+ +
+
+

For soft fields it + will add message in chat. +

+ +
+
+

Set Contact Rigid + Fields and Soft Fields +

+ + +
+
+

For rigid fields it + will show validation error. +

+ +
+
+

For soft fields it + will add message in chat. +

+ +
+
+

We can see the soft + duplicate leads. +

+ +
+
+

We can see the soft + duplicate contacts. +

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

Related + 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

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

Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/crm_duplicates_real_time_search/views/crm_lead_views.xml b/crm_duplicates_real_time_search/views/crm_lead_views.xml new file mode 100644 index 000000000..8a1dac920 --- /dev/null +++ b/crm_duplicates_real_time_search/views/crm_lead_views.xml @@ -0,0 +1,26 @@ + + + + + crm.lead.view.form.inherit.crm.duplicates.real.time.search + crm.lead + + + + + + + + + + crm.lead.view.filter.inherit.crm.duplicates.real.time.search + crm.lead + + + + + + + + \ No newline at end of file diff --git a/crm_duplicates_real_time_search/views/res_config_settings_views.xml b/crm_duplicates_real_time_search/views/res_config_settings_views.xml new file mode 100644 index 000000000..aa260a6d1 --- /dev/null +++ b/crm_duplicates_real_time_search/views/res_config_settings_views.xml @@ -0,0 +1,62 @@ + + + + + res.config.settings.view.form.inherit.custom.crm + res.config.settings + + + + +

CRM Duplicates

+
+ Lead and Opportunities Duplicates +
+
+

+
+ Select criteria for how to search opportunities duplicates. Odoo will show such + duplications on the special button and fields. It will be possible to save such records. +
+ +

+
+
+
+

+
+ Select criteria for how to fully avoid leads/opportunities duplicates. Odoo will not + allow saving a duplicate during a partner creation or update. +
+ +

+
+
+
+ Contact Duplicates +
+
+

+
+ Select criteria for how to search partner duplicates. Odoo will show such duplications + on + the special button and fields. It will be possible to save such records. +
+ +

+
+
+
+

+
+ Select criteria for how to fully avoid partner duplicates. Odoo will not allow saving a + duplicate during a partner creation or update. +
+ +

+
+
+
+
+
+
diff --git a/crm_duplicates_real_time_search/views/res_partner_views.xml b/crm_duplicates_real_time_search/views/res_partner_views.xml new file mode 100644 index 000000000..0b04e7bab --- /dev/null +++ b/crm_duplicates_real_time_search/views/res_partner_views.xml @@ -0,0 +1,31 @@ + + + + + res.partner.view.from.inherit.crm.duplicates.real.time.search + res.partner + + + + + + + + + + + + + res.partner.view.search.inherit.crm.duplicates.real.time.search + + res.partner + + + + + + + + + \ No newline at end of file