From 9fef05c3eba05cf227c4e56aec61d29e89c652d2 Mon Sep 17 00:00:00 2001 From: Olivier Sarrat Date: Wed, 18 Apr 2018 17:20:24 +0200 Subject: [PATCH] groupeurd_crm v0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Version 0.2 du module groupeurd_crm avec les nouveaux besoins couverts suivants: - Publier en webpage des listes de nom/id_externe pour les Listes de diffusion, les Catégories de contact, et les Civilités de contact - Ajouter une liste de 0 à 5 "Pays d'expertise" - Ajouter un lien direct vers profil LinkedIn pour pâlier défaut plugin existant - Rendre le champ "Relation interne principale" accessible comme champ de recherche avancé, et le remplir par défaut par le créateur du contact - Renommer "Nom" en "Nom de famille" pour distinguer le nom de famille du "Nom" qui est l'association Prénom + Nom de famille --- groupeurd_crm/__openerp__.py | 18 +++-- groupeurd_crm/controllers.py | 71 ++++++++++++++----- groupeurd_crm/data.xml | 81 ++++++++++++++++++++++ groupeurd_crm/i18n/fr.po | 14 +++- groupeurd_crm/models.py | 28 +++++++- groupeurd_crm/security/ir.model.access.csv | 2 +- groupeurd_crm/views.xml | 29 ++++---- 7 files changed, 202 insertions(+), 41 deletions(-) diff --git a/groupeurd_crm/__openerp__.py b/groupeurd_crm/__openerp__.py index d824eab..d5d2aa9 100644 --- a/groupeurd_crm/__openerp__.py +++ b/groupeurd_crm/__openerp__.py @@ -6,19 +6,23 @@ Paramétrage d'Odoo pour correspondre aux besoins CRM du Groupe URD.""", 'description': """ - - Ajout de champs personnalisés (note 20/02/2017: fait pour les contacts, pas pour les organisations) + - Ajout de champs personnalisés - Personnalisation des listes d’affichage (tri, colonnes, filtres) - Personnalisation des écrans d’affichage des entités : position des champs, organisation par groupe des champs, champs obligatoires/facultatifs - Masquer les éléments "Clients" et "Pistes" du sous-menu "Ventes" jusqu'à ce que le besoin de suivi de pistes soit remonté + - Publier en webpage des listes de nom/id_externe pour les Listes de diffusion, les Catégories de contact, et les Civilités de contact + - Ajouter une liste de 0 à 5 "Pays d'expertise" + - Ajouter un lien direct vers profil LinkedIn pour pâlier défaut plugin existant + - Rendre le champ "Relation interne principale" accessible comme champ de recherche avancé, et le remplir par défaut par le créateur du contact + - Renommer "Nom" en "Nom de famille" pour distinguer le nom de famille du "Nom" qui est l'association Prénom + Nom de famille Contacts, ajout des champs: - Compte de réseau social (Skype, Twitter, LinkedIn, Facebook), Langue principale, langue(s) secondaires(s), Publications (liste d’URL). + Compte de réseau social (Skype, Twitter, LinkedIn, Facebook), Langue principale, langues secondaires, Publications (liste d’URL). Organisation, ajout des champs: - budget annuel, langue principale, langue(s) secondaire(s), état d’adoption de Sigmah (Prise d’information, Souhait d’adoption, Adoption démarrée, Utilisation partielle, Utilisation complète, Non), zone de commentaires. + budget annuel, langue principale, langues secondaires, état d’adoption de Sigmah (Prise d’information, Souhait d’adoption, Adoption démarrée, Utilisation partielle, Utilisation complète, Non), zone de commentaires. Installation: - Aller dans Configuration > Configuration > Ventes pour configuer le module 'web_linkedin' Pour avoir un Mail de rappel pour compléter organisation après opportunité Sigmah gagnée, créer une "Action automatisée" en utilisant le domaine suivant comme filtre: [('categ_ids.name', '=','Adoption Sigmah'),('stage_id.name','=','Gagné')] @@ -31,14 +35,14 @@ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml # for the full list 'category': 'Uncategorized', - 'version': '0.1', + 'version': '0.2', # any module necessary for this one to work correctly - 'depends': ['base', 'calendar_ics', 'groupeurd_newsletter', 'crm', 'partner_social_fields', 'web_linkedin'], + 'depends': ['base', 'calendar_ics', 'groupeurd_newsletter', 'crm', 'partner_social_fields'], # always loaded 'data': [ - # 'security/ir.model.access.csv', + 'security/ir.model.access.csv', 'templates.xml', 'actions-menus.xml', 'views.xml', diff --git a/groupeurd_crm/controllers.py b/groupeurd_crm/controllers.py index feb79df..5ac45a6 100644 --- a/groupeurd_crm/controllers.py +++ b/groupeurd_crm/controllers.py @@ -1,20 +1,59 @@ # -*- coding: utf-8 -*- -from openerp import http +from openerp import http, SUPERUSER_ID +from openerp.http import request -# class GroupeurdCrm(http.Controller): -# @http.route('/groupeurd_crm/groupeurd_crm/', auth='public') -# def index(self, **kw): -# return "Hello, world" +from openerp.tools.translate import _ -# @http.route('/groupeurd_crm/groupeurd_crm/objects/', auth='public') -# def list(self, **kw): -# return http.request.render('groupeurd_crm.listing', { -# 'root': '/groupeurd_crm/groupeurd_crm', -# 'objects': http.request.env['groupeurd_crm.groupeurd_crm'].search([]), -# }) +import logging +_logger = logging.getLogger(__name__) -# @http.route('/groupeurd_crm/groupeurd_crm/objects//', auth='public') -# def object(self, obj, **kw): -# return http.request.render('groupeurd_crm.object', { -# 'object': obj -# }) \ No newline at end of file +class GroupeURD_CRM(http.Controller): + + #Example: /crm/list_mailing_lists?db=groupeurd-openacademy + @http.route('/crm/list_mailing_lists', auth='public') + def view_mailing_lists(self, db): + http.request.session.db = db + http.request.cr.execute(""" +select mmml.name as mailing_list, imd.name as external_id +from ir_model_data imd +inner join mail_mass_mailing_list mmml on mmml.id = imd.res_id +where imd.model = 'mail.mass_mailing.list'; + """) + mailing_lists = http.request.cr.dictfetchall() + output = "" + for i, val in enumerate(mailing_lists): + output = output + val['mailing_list'] + "\t" + val['external_id'] + "\n" + return output + + #Example: /crm/list_partner_categories?db=groupeurd-openacademy + @http.route('/crm/list_partner_categories', auth='public') + def view_partner_categories(self, db): + http.request.session.db = db + http.request.cr.execute(""" +select rpc.name as category, imd.name as external_id +from ir_model_data imd +inner join res_partner_category rpc on rpc.id = imd.res_id +where imd.model = 'res.partner.category'; + """) + partner_categories = http.request.cr.dictfetchall() + output = "" + for i, val in enumerate(partner_categories): + output = output + val['category'] + "\t" + val['external_id'] + "\n" + return output + + + #Example: /crm/list_partner_titles?db=groupeurd-openacademy + @http.route('/crm/list_partner_titles', auth='public') + def view_partner_titles(self, db): + http.request.session.db = db + http.request.cr.execute(""" +select rpt.name as title, imd.name as external_id +from ir_model_data imd +inner join res_partner_title rpt on rpt.id = imd.res_id +where imd.model = 'res.partner.title'; + """) + partner_titles = http.request.cr.dictfetchall() + output = "" + for i, val in enumerate(partner_titles): + output = output + val['title'] + "\t" + val['external_id'] + "\n" + return output diff --git a/groupeurd_crm/data.xml b/groupeurd_crm/data.xml index dd24447..107d1de 100644 --- a/groupeurd_crm/data.xml +++ b/groupeurd_crm/data.xml @@ -5,5 +5,86 @@ Adoption Sigmah + + + am_ET Amharic / አምሃርኛ + ar_SY Arabic / الْعَرَبيّة + bg_BG Bulgarian / български език + bs_BA Bosnian / bosanski jezik + ca_ES Catalan / Català + cs_CZ Czech / Čeština + da_DK Danish / Dansk + de_DE German / Deutsch + de_CH German (CH) / Deutsch (CH) + el_GR Greek / Ελληνικά + en_AU English (AU) + en_GB English (UK) + en_US English (US) + es_AR Spanish (AR) / Español (AR) + es_BO Spanish (BO) / Español (BO) + es_CL Spanish (CL) / Español (CL) + es_CO Spanish (CO) / Español (CO) + es_CR Spanish (CR) / Español (CR) + es_DO Spanish (DO) / Español (DO) + es_EC Spanish (EC) / Español (EC) + es_ES Spanish / Español + es_GT Spanish (GT) / Español (GT) + es_MX Spanish (MX) / Español (MX) + es_PA Spanish (PA) / Español (PA) + es_PE Spanish (PE) / Español (PE) + es_PY Spanish (PY) / Español (PY) + es_UY Spanish (UY) / Español (UY) + es_VE Spanish (VE) / Español (VE) + et_EE Estonian / Eesti keel + eu_ES Basque / Euskara + fa_IR Persian / فارس + fi_FI Finnish / Suomi + fr_BE French (BE) / Français (BE) + fr_CA French (CA) / Français (CA) + fr_CH French (CH) / Français (CH) + fr_CA French (CA) / Français (CA) + fr_FR French / Français + gl_ES Galician / Galego + gu_IN Gujarati / ગુજરાતી + he_IL Hebrew / עִבְרִי + hi_IN Hindi / हिंदी + hr_HR Croatian / hrvatski jezik + hu_HU Hungarian / Magyar + id_ID Indonesian / Bahasa Indonesia + it_IT Italian / Italiano + ja_JP Japanese / 日本語 + ka_GE Georgian / ქართული ენა + kab_DZ Kabyle / Taqbaylit + ko_KP Korean (KP) / 한국어 (KP) + ko_KR Korean (KR) / 한국어 (KR) + lo_LA Lao / ພາສາລາວ + lt_LT Lithuanian / Lietuvių kalba + lv_LV Latvian / latviešu valoda + mk_MK Macedonian / македонски јазик + mn_MN Mongolian / монгол + my_MM Burmese / မြန်မာဘာသာ + nb_NO Norwegian Bokmål / Norsk bokmål + nl_NL Dutch / Nederlands + nl_BE Dutch (BE) / Nederlands (BE) + pl_PL Polish / Język polski + pt_BR Portuguese (BR) / Português (BR) + pt_PT Portuguese / Português + ro_RO Romanian / română + ru_RU Russian / русский язык + sl_SI Slovenian / slovenščina + sk_SK Slovak / Slovenský jazyk + sq_AL Albanian / Shqip + sr_RS Serbian (Cyrillic) / српски + sr@latin Serbian (Latin) / srpski + sv_SE Swedish / svenska + te_IN Telugu / తెలుగు + tr_TR Turkish / Türkçe + vi_VN Vietnamese / Tiếng Việt + uk_UA Ukrainian / українська + zh_CN Chinese (CN) / 简体中文 + zh_HK Chinese (HK) + zh_TW Chinese (TW) / 正體字 + th_TH Thai / ภาษาไทย + \ No newline at end of file diff --git a/groupeurd_crm/i18n/fr.po b/groupeurd_crm/i18n/fr.po index 138ff4b..d6b18e8 100644 --- a/groupeurd_crm/i18n/fr.po +++ b/groupeurd_crm/i18n/fr.po @@ -32,4 +32,16 @@ msgstr "Cochez si ce contact est une organisation (appelée société ailleurs d #: view:res.partner:base.view_partner_form #: view:res.partner:base.view_partner_simple_form msgid "Is a Company?" -msgstr "Est une organisation ?" \ No newline at end of file +msgstr "Est une organisation ?" + + +#. module: base +#: view:res.partner:base.view_res_partner_filter field:res.partner,user_id:0 +msgid "Salesperson" +msgstr "Relation interne principale" + + +#. module: partner_firstname +#: field:res.partner,lastname:0 +msgid "Last name" +msgstr "Nom de famille" \ No newline at end of file diff --git a/groupeurd_crm/models.py b/groupeurd_crm/models.py index 7180e51..f5a3076 100644 --- a/groupeurd_crm/models.py +++ b/groupeurd_crm/models.py @@ -22,7 +22,12 @@ class contact(models.Model): if new_id.list_id not in new_id.partner_id.list_ids: new_id.partner_id.list_ids |= new_id.list_id return new_id + +class languagelist(models.Model): + _name = "groupeurd_crm.languagelist" + locale = fields.Char(required = True, string="Locale") + name = fields.Char(required = True, string="Nom de la langue") # Surcharge l'objet "Contact" pour ajouter les liens vers les objets "Abonné" et "Liste de diffusion" class partner(models.Model): @@ -31,9 +36,10 @@ class partner(models.Model): list_ids = fields.Many2many("mail.mass_mailing.list", string="Listes de diffusion") contact_ids = fields.One2many("mail.mass_mailing.contact", "partner_id", string="Abonnements") - secondary_language1 = fields.Selection(tools.scan_languages(), string="Langue secondaire 1") - secondary_language2 = fields.Selection(tools.scan_languages(), string="Langue secondaire 2") - secondary_language3 = fields.Selection(tools.scan_languages(), string="Langue secondaire 3") + secondary_languages = fields.Many2many("groupeurd_crm.languagelist", string="Langues secondaires") + country_experiences = fields.Many2many("res.country", string="Pays d'expertise") + linkedin = fields.Char(string="LinkedIn") + yearly_budget = fields.Integer(string="Budget annuel de l'organisation (M€)") sigmah_adoption_status = fields.Selection([('no',"Non"),('engaged',"Adoption engagée"),('partial',"Utilisation partielle"),('complete',"Utilisation complète")], default='no', string="Adoption de Sigmah", required=True) sigmah_package = fields.Selection([('basic',"socle"),('full',"complet")], string="Forfait de services") @@ -81,6 +87,22 @@ class partner(models.Model): return res + def goto_linkedin(self, cr, uid, ids, context=None): + partner_obj = self.pool.get('res.partner') + partner = partner_obj.browse(cr, uid, ids, context=context)[0] + if partner.linkedin: + good_starting_urls = ['https://linkedin.com/', 'https://www.linkedin.com/', \ + 'http://linkedin.com/', 'http://www.linkedin.com/'] + non_protocol_starting_urls = ['linkedin.com/', 'www.linkedin.com/'] + + if any(map(lambda x: partner.linkedin.startswith(x), good_starting_urls)): + url = partner.linkedin + elif any(map(lambda x: partner.linkedin.startswith(x), non_protocol_starting_urls)): + url = 'https://' + partner.linkedin + else: + url = 'https://www.linkedin.com/' + partner.linkedin + + return {'type': 'ir.actions.act_url', 'url': url, 'target': 'new'} # A FAIRE diff --git a/groupeurd_crm/security/ir.model.access.csv b/groupeurd_crm/security/ir.model.access.csv index 9013b09..f070f4b 100644 --- a/groupeurd_crm/security/ir.model.access.csv +++ b/groupeurd_crm/security/ir.model.access.csv @@ -1,2 +1,2 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_groupeurd_crm_groupeurd_crm,groupeurd_crm.groupeurd_crm,model_groupeurd_crm_groupeurd_crm,,1,0,0,0 \ No newline at end of file +access_groupeurd_crm_languagelist,access_groupeurd_crm_languagelist,model_groupeurd_crm_languagelist,,1,1,1,0 \ No newline at end of file diff --git a/groupeurd_crm/views.xml b/groupeurd_crm/views.xml index c851d3e..b428afe 100644 --- a/groupeurd_crm/views.xml +++ b/groupeurd_crm/views.xml @@ -28,26 +28,27 @@ - + Autres - - - Relation interne principale - + - + + + + - - - - - - - + + + + + + + + @@ -139,6 +140,8 @@