From 6c81ee556fa7a8037769ef2c906a820931e28e97 Mon Sep 17 00:00:00 2001 From: nounoubensebia Date: Thu, 11 Feb 2021 11:17:17 +0000 Subject: [PATCH] [REF] [crm_]mail_client_extension, base_setup, crm[_iap_lead_enrich], iap: split mail specific and crm specific code - split the mail_client_extension module onto two modules: 1) module mail_client_extension having mail/contact specific code, depends on iap and contacts only 2) module crm_mail_client_extension having crm specific code, depends on CRM and mail_client_extension. Purpose is to allow the user to use the mail_client_extension without needing to install CRM, this will also allow the usage of the mail connector in other modules without the need for CRM. - add the module_mail_client_extension field to the res_config_settings model of the base_setup module in order to enable the user to install the mail_client_extension module directly from the settings - move the crm_lead model from the mail_client_extension_module to the newly created crm_mail_client_extension_module, as this model is no longer needed by the mail_client_extension module because it no longer not implemants CRM functionality - move the iap_enrich_api model from the crm_iap_lead_enrich module onto the iap module as it is only related to contacts and not to CRM, this way it can be used in other modules such as the mail_client_extension module without the need for CRM module Task-2382870 UPG-PR: https://github.com/odoo/upgrade/pull/2156 COM-PR: https://github.com/odoo/odoo/pull/66139 --- .../base_setup/models/res_config_settings.py | 3 ++ .../views/res_config_settings_views.xml | 26 +++++++++---- addons/crm/models/res_config_settings.py | 1 - .../crm/views/res_config_settings_views.xml | 13 ------- addons/crm_iap_lead_enrich/models/__init__.py | 1 - addons/crm_iap_lead_enrich/tests/__init__.py | 1 - .../tests/test_lead_enrich.py | 2 +- addons/crm_mail_client_extension/__init__.py | 5 +++ .../crm_mail_client_extension/__manifest__.py | 22 +++++++++++ .../controllers/__init__.py | 4 ++ .../controllers/mail_plugin.py | 37 +++++++++++++++++++ .../models/__init__.py | 4 ++ .../models/crm_lead.py | 0 .../views/crm_mail_client_extension_lead.xml} | 0 addons/iap/models/__init__.py | 1 + .../models/iap_enrich_api.py | 0 addons/iap/tests/__init__.py | 1 + .../tests/common.py | 2 +- addons/mail_client_extension/__init__.py | 5 ++- addons/mail_client_extension/__manifest__.py | 10 ++--- .../controllers/mail_plugin.py | 25 ------------- .../mail_client_extension/models/__init__.py | 6 ++- 22 files changed, 110 insertions(+), 59 deletions(-) create mode 100644 addons/crm_mail_client_extension/__init__.py create mode 100644 addons/crm_mail_client_extension/__manifest__.py create mode 100644 addons/crm_mail_client_extension/controllers/__init__.py create mode 100644 addons/crm_mail_client_extension/controllers/mail_plugin.py create mode 100644 addons/crm_mail_client_extension/models/__init__.py rename addons/{mail_client_extension => crm_mail_client_extension}/models/crm_lead.py (100%) rename addons/{mail_client_extension/views/mail_client_extension_lead.xml => crm_mail_client_extension/views/crm_mail_client_extension_lead.xml} (100%) rename addons/{crm_iap_lead_enrich => iap}/models/iap_enrich_api.py (100%) rename addons/{crm_iap_lead_enrich => iap}/tests/common.py (96%) diff --git a/addons/base_setup/models/res_config_settings.py b/addons/base_setup/models/res_config_settings.py index f1fd84be745..ff6dc35bc3c 100644 --- a/addons/base_setup/models/res_config_settings.py +++ b/addons/base_setup/models/res_config_settings.py @@ -22,6 +22,9 @@ class ResConfigSettings(models.TransientModel): string='Allow the users to synchronize their calendar with Google Calendar') module_microsoft_calendar = fields.Boolean( string='Allow the users to synchronize their calendar with Outlook Calendar') + module_mail_client_extension = fields.Boolean( + string='Allow integration with the mail plugins' + ) module_google_drive = fields.Boolean("Attach Google documents to any record") module_google_spreadsheet = fields.Boolean("Google Spreadsheet") module_auth_oauth = fields.Boolean("Use external authentication providers (OAuth)") diff --git a/addons/base_setup/views/res_config_settings_views.xml b/addons/base_setup/views/res_config_settings_views.xml index 1063f056842..ecc361dc8fd 100644 --- a/addons/base_setup/views/res_config_settings_views.xml +++ b/addons/base_setup/views/res_config_settings_views.xml @@ -210,17 +210,15 @@

Integrations

-
+
- +
-
@@ -239,6 +237,20 @@
+
+
+ +
+
+
+
diff --git a/addons/crm/models/res_config_settings.py b/addons/crm/models/res_config_settings.py index f9165f22188..70e3ca98420 100644 --- a/addons/crm/models/res_config_settings.py +++ b/addons/crm/models/res_config_settings.py @@ -39,7 +39,6 @@ class ResConfigSettings(models.TransientModel): module_crm_iap_lead = fields.Boolean("Generate new leads based on their country, industries, size, etc.") module_crm_iap_lead_website = fields.Boolean("Create Leads/Opportunities from your website's traffic") module_crm_iap_lead_enrich = fields.Boolean("Enrich your leads automatically with company data based on their email address.") - module_mail_client_extension = fields.Boolean("See and manage users, companies, and leads from our mail client extensions.") lead_enrich_auto = fields.Selection([ ('manual', 'Enrich leads on demand only'), ('auto', 'Enrich all leads automatically'), diff --git a/addons/crm/views/res_config_settings_views.xml b/addons/crm/views/res_config_settings_views.xml index 5bd0de10945..e3623f7a5c4 100644 --- a/addons/crm/views/res_config_settings_views.xml +++ b/addons/crm/views/res_config_settings_views.xml @@ -119,19 +119,6 @@

Lead Generation

-
-
- -
- -
-
-
diff --git a/addons/crm_iap_lead_enrich/models/__init__.py b/addons/crm_iap_lead_enrich/models/__init__.py index dcb5aa3d8a4..7ac0406ee23 100644 --- a/addons/crm_iap_lead_enrich/models/__init__.py +++ b/addons/crm_iap_lead_enrich/models/__init__.py @@ -2,5 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import crm_lead -from . import iap_enrich_api from . import res_config_settings diff --git a/addons/crm_iap_lead_enrich/tests/__init__.py b/addons/crm_iap_lead_enrich/tests/__init__.py index 19c6636d158..33ab21b0da9 100644 --- a/addons/crm_iap_lead_enrich/tests/__init__.py +++ b/addons/crm_iap_lead_enrich/tests/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import common from . import test_lead_enrich diff --git a/addons/crm_iap_lead_enrich/tests/test_lead_enrich.py b/addons/crm_iap_lead_enrich/tests/test_lead_enrich.py index 9d90189322c..9b7efb0f895 100644 --- a/addons/crm_iap_lead_enrich/tests/test_lead_enrich.py +++ b/addons/crm_iap_lead_enrich/tests/test_lead_enrich.py @@ -2,7 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.crm.tests.common import TestCrmCommon -from odoo.addons.crm_iap_lead_enrich.tests.common import MockIAPEnrich +from odoo.addons.iap.tests.common import MockIAPEnrich from odoo.tests.common import users diff --git a/addons/crm_mail_client_extension/__init__.py b/addons/crm_mail_client_extension/__init__.py new file mode 100644 index 00000000000..8c67f893b37 --- /dev/null +++ b/addons/crm_mail_client_extension/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models +from . import controllers diff --git a/addons/crm_mail_client_extension/__manifest__.py b/addons/crm_mail_client_extension/__manifest__.py new file mode 100644 index 00000000000..8cc78874c2d --- /dev/null +++ b/addons/crm_mail_client_extension/__manifest__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'CRM Mail Client Extension', + 'version': '1.0', + 'category': 'Sales/CRM', + 'sequence': 5, + 'summary': 'Turn emails received in your mailbox into leads and log their content as internal notes.', + 'description': "Turn emails received in your mailbox into leads and log their content as internal notes.", + 'website': 'https://www.odoo.com/page/crm', + 'depends': [ + 'crm', + 'mail_client_extension', + ], + 'data': [ + 'views/crm_mail_client_extension_lead.xml' + ], + 'installable': True, + 'application': False, + 'auto_install': True +} diff --git a/addons/crm_mail_client_extension/controllers/__init__.py b/addons/crm_mail_client_extension/controllers/__init__.py new file mode 100644 index 00000000000..01119c1c5a2 --- /dev/null +++ b/addons/crm_mail_client_extension/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import mail_plugin diff --git a/addons/crm_mail_client_extension/controllers/mail_plugin.py b/addons/crm_mail_client_extension/controllers/mail_plugin.py new file mode 100644 index 00000000000..df21e0c7a7d --- /dev/null +++ b/addons/crm_mail_client_extension/controllers/mail_plugin.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging +import werkzeug + +from odoo import http +from odoo.http import request +from odoo.tools.misc import formatLang + +_logger = logging.getLogger(__name__) + + +class MailPluginController(http.Controller): + + @http.route('/mail_client_extension/log_single_mail_content', type="json", auth="outlook", cors="*") + def log_single_mail_content(self, lead, message, **kw): + crm_lead = request.env['crm.lead'].browse(lead) + crm_lead.message_post(body=message) + + @http.route('/mail_client_extension/lead/get_by_partner_id', type="json", auth="outlook", cors="*") + def crm_lead_get_by_partner_id(self, partner, limit, offset, **kwargs): + partner_leads = request.env['crm.lead'].search([('partner_id', '=', partner)], offset=offset, limit=limit) + leads = [] + for lead in partner_leads: + leads.append({ + 'id': lead.id, + 'name': lead.name, + 'expected_revenue': formatLang(request.env, lead.expected_revenue, monetary=True, currency_obj=lead.company_currency), + }) + + return {'leads': leads} + + @http.route('/mail_client_extension/lead/create_from_partner', type='http', auth='user', methods=['GET']) + def crm_lead_redirect_form_view(self, partner_id): + server_action = http.request.env.ref("crm_mail_client_extension.lead_creation_prefilled_action") + return werkzeug.utils.redirect('/web#action=%s&model=crm.lead&partner_id=%s' % (server_action.id, int(partner_id))) diff --git a/addons/crm_mail_client_extension/models/__init__.py b/addons/crm_mail_client_extension/models/__init__.py new file mode 100644 index 00000000000..00140f99c9f --- /dev/null +++ b/addons/crm_mail_client_extension/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import crm_lead diff --git a/addons/mail_client_extension/models/crm_lead.py b/addons/crm_mail_client_extension/models/crm_lead.py similarity index 100% rename from addons/mail_client_extension/models/crm_lead.py rename to addons/crm_mail_client_extension/models/crm_lead.py diff --git a/addons/mail_client_extension/views/mail_client_extension_lead.xml b/addons/crm_mail_client_extension/views/crm_mail_client_extension_lead.xml similarity index 100% rename from addons/mail_client_extension/views/mail_client_extension_lead.xml rename to addons/crm_mail_client_extension/views/crm_mail_client_extension_lead.xml diff --git a/addons/iap/models/__init__.py b/addons/iap/models/__init__.py index d148377834f..2e95fd52ee5 100644 --- a/addons/iap/models/__init__.py +++ b/addons/iap/models/__init__.py @@ -3,3 +3,4 @@ from . import iap_account from . import res_config_settings +from . import iap_enrich_api diff --git a/addons/crm_iap_lead_enrich/models/iap_enrich_api.py b/addons/iap/models/iap_enrich_api.py similarity index 100% rename from addons/crm_iap_lead_enrich/models/iap_enrich_api.py rename to addons/iap/models/iap_enrich_api.py diff --git a/addons/iap/tests/__init__.py b/addons/iap/tests/__init__.py index 3c032a13d8b..4a6cacf0f89 100644 --- a/addons/iap/tests/__init__.py +++ b/addons/iap/tests/__init__.py @@ -2,3 +2,4 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import test_iap +from . import common diff --git a/addons/crm_iap_lead_enrich/tests/common.py b/addons/iap/tests/common.py similarity index 96% rename from addons/crm_iap_lead_enrich/tests/common.py rename to addons/iap/tests/common.py index fb4b40e4269..1abed724698 100644 --- a/addons/crm_iap_lead_enrich/tests/common.py +++ b/addons/iap/tests/common.py @@ -6,7 +6,7 @@ from unittest.mock import patch from odoo import exceptions from odoo.addons.iap.tools import iap_tools -from odoo.addons.crm_iap_lead_enrich.models.iap_enrich_api import IapEnrichAPI +from odoo.addons.iap.models.iap_enrich_api import IapEnrichAPI from odoo.tests import common diff --git a/addons/mail_client_extension/__init__.py b/addons/mail_client_extension/__init__.py index 38718f0843b..8c67f893b37 100644 --- a/addons/mail_client_extension/__init__.py +++ b/addons/mail_client_extension/__init__.py @@ -1,2 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + from . import models -from . import controllers \ No newline at end of file +from . import controllers diff --git a/addons/mail_client_extension/__manifest__.py b/addons/mail_client_extension/__manifest__.py index 9c2f8417118..62f19489363 100644 --- a/addons/mail_client_extension/__manifest__.py +++ b/addons/mail_client_extension/__manifest__.py @@ -6,17 +6,15 @@ 'version': '1.0', 'category': 'Sales/CRM', 'sequence': 5, - 'summary': 'Turn emails received in your Outlook mailbox into leads and log their content as internal notes.', - 'description': "Turn emails received in your Outlook mailbox into leads and log their content as internal notes.", - 'website': 'https://www.odoo.com/page/crm', + 'summary': 'Allows integration with mail plugins.', + 'description': "Integrate Odoo with your mailbox, get information about contacts directly inside your mailbox, log content of emails as internal notes", 'depends': [ 'web', - 'crm', - 'crm_iap_lead_enrich' + 'contacts', + 'iap' ], 'data': [ 'views/mail_client_extension_login.xml', - 'views/mail_client_extension_lead.xml', ], 'installable': True, 'application': False, diff --git a/addons/mail_client_extension/controllers/mail_plugin.py b/addons/mail_client_extension/controllers/mail_plugin.py index f6bd179755c..ff7184d0ef0 100644 --- a/addons/mail_client_extension/controllers/mail_plugin.py +++ b/addons/mail_client_extension/controllers/mail_plugin.py @@ -5,12 +5,10 @@ import base64 import json import logging import requests -import werkzeug from odoo import http, tools from odoo.addons.iap.tools import iap_tools from odoo.http import request -from odoo.tools.misc import formatLang _logger = logging.getLogger(__name__) @@ -175,26 +173,3 @@ class MailPluginController(http.Controller): response = {'id': partner.id} return response - - @http.route('/mail_client_extension/log_single_mail_content', type="json", auth="outlook", cors="*") - def log_single_mail_content(self, lead, message, **kw): - crm_lead = request.env['crm.lead'].browse(lead) - crm_lead.message_post(body=message) - - @http.route('/mail_client_extension/lead/get_by_partner_id', type="json", auth="outlook", cors="*") - def crm_lead_get_by_partner_id(self, partner, limit, offset, **kwargs): - partner_leads = request.env['crm.lead'].search([('partner_id', '=', partner)], offset=offset, limit=limit) - leads = [] - for lead in partner_leads: - leads.append({ - 'id': lead.id, - 'name': lead.name, - 'expected_revenue': formatLang(request.env, lead.expected_revenue, monetary=True, currency_obj=lead.company_currency), - }) - - return {'leads': leads} - - @http.route('/mail_client_extension/lead/create_from_partner', type='http', auth='user', methods=['GET']) - def crm_lead_redirect_form_view(self, partner_id): - server_action = http.request.env.ref("mail_client_extension.lead_creation_prefilled_action") - return werkzeug.utils.redirect('/web#action=%s&model=crm.lead&partner_id=%s' % (server_action.id, int(partner_id))) diff --git a/addons/mail_client_extension/models/__init__.py b/addons/mail_client_extension/models/__init__.py index 47f7bea7264..4d45ab6ee21 100644 --- a/addons/mail_client_extension/models/__init__.py +++ b/addons/mail_client_extension/models/__init__.py @@ -1,3 +1,5 @@ -from . import crm_lead +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import ir_http from . import res_partner -from . import ir_http \ No newline at end of file