Ayant eu besoin de réaliser une synchronisation unidirectionnelle de Google Contacts vers Odoo 9, j'ai trouvé le module vuente_google_contacts_sync qui apparemment répondait à mon besoin.
Le chargement initial dans Odoo des contacts google fonctionnait très bien mais une erreur se produisait à chaque mise à jour automatique.
N'ayant pas eu de réponse de l'auteur à ma déclaration de bug dans github, je me suis décidé à faire un fork du repository dans lequel se trouvait ce module et de faire moi-même le correctif.
J'en ai profité pour ajouter une fonctionnalité : "ajout de la société dans Odoo si le contact google est lié à une société"
Voici donc ce fork avec des modifications faites uniquement sur le fichier google_contacts.py
Limite du connecteur
- /!\ Il connecte une base Odoo avec un seul compte Google
- Il ne gère pas les suppressions : un contact supprimé dans Google n'est pas supprimé dans Odoo
Description de l'installation et de la configuration
- il faut tout d'abord appliquer la procédure de configuration des API google puis récupérer les informations Client ID et Client secret
- télécharger le repository "forké"
git clone https://github.com/mayjo79/NonPaid.git -b 9.0
- copier le répertoire vuente_google_contacts_sync dans votre répertoire des addons tiers (chez moi : /home/odoo/extra-addons )
- activer le mode développeur dans Odoo
- effectuer une mise à jour des applications Odoo
- installer le module
- saisir les informations Client ID et Client secret dans le menu Configuration > General settings
- aller ensuite dans le menu Configuration > Google contact sync puis cliquer sur Authenticate
- après une page de demande d'autorisation Google, le chargement initial se fait et les contacts chargés apparaissent dans un nouveau menu
- pour terminer, vous pouvez modifier si besoin la fréquence de mise à jour (par défaut de 1 heure)
Bonjour,
Merci d’avoir réalisé un fork des NonPaid, qui ne sont plus disponibles dans le repo d’origine,
pour la version 12 de Odoo, malheureusement le fork ne fonctionne plus
il semble qu’il manque un champ des la table res_partner : google_contacts_account
Il retourne cette erreur lors de l’installation
une idée de comment corriger ce problème ?
Merci
Amaury
Erreur:
Odoo Server Error
Traceback (most recent call last):
File « /usr/lib/python3/dist-packages/odoo/models.py », line 1108, in _validate_fields
check(self)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 351, in _check_xml
self.postprocess_and_fields(view.model, view_doc, view.id)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 1106, in postprocess_and_fields
self.raise_view_error(message, view_id)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 548, in raise_view_error
raise ValueError(message)
ValueError: Le champ `google_contacts_account` n’existe pas
Contexte de l’erreur :
Vue `res.partner.google.contacts.view.tree`
[view_id: 2155, xml_id: n/a, model: res.partner, parent_id: n/a]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == ‘update’)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3865, in _load_records
records = self._load_records_create([data[‘values’] for data in to_create])
File « /usr/lib/python3/dist-packages/odoo/addons/website/models/ir_ui_view.py », line 129, in _load_records_create
records = super(View, self)._load_records_create(values)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3779, in _load_records_create
return self.create(values)
File « », line 2, in create
File « /usr/lib/python3/dist-packages/odoo/api.py », line 452, in _model_create_multi
return create(self, arg)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 428, in create
return super(View, self).create(vals_list)
File « », line 2, in create
File « /usr/lib/python3/dist-packages/odoo/api.py », line 452, in _model_create_multi
return create(self, arg)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3596, in create
fields[0].determine_inverse(batch_recs)
File « /usr/lib/python3/dist-packages/odoo/fields.py », line 1117, in determine_inverse
getattr(records, self.inverse)()
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 275, in _inverse_arch
view.write(data)
File « /usr/lib/python3/dist-packages/odoo/addons/website/models/ir_ui_view.py », line 41, in write
return super(View, self).write(vals)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 444, in write
return super(View, self).write(self._compute_defaults(vals))
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3321, in write
self._write(store_vals)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3457, in _write
self._validate_fields(vals)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 1112, in _validate_fields
raise ValidationError(« %s\n\n%s » % (_(« Error while validating constraint »), tools.ustr(e)))
odoo.exceptions.ValidationError: (« Erreur lors de la validation de la contrainte\n\nLe champ `google_contacts_account` n’existe pas\n\nContexte de l’erreur :\nVue `res.partner.google.contacts.view.tree`\n[view_id: 2155, xml_id: n/a, model: res.partner, parent_id: n/a] », None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File « /usr/lib/python3/dist-packages/odoo/http.py », line 656, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File « /usr/lib/python3/dist-packages/odoo/http.py », line 314, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File « /usr/lib/python3/dist-packages/odoo/tools/pycompat.py », line 87, in reraise
raise value
File « /usr/lib/python3/dist-packages/odoo/http.py », line 698, in dispatch
result = self._call_function(**self.params)
File « /usr/lib/python3/dist-packages/odoo/http.py », line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File « /usr/lib/python3/dist-packages/odoo/service/model.py », line 97, in wrapper
return f(dbname, *args, **kwargs)
File « /usr/lib/python3/dist-packages/odoo/http.py », line 339, in checked_call
result = self.endpoint(*a, **kw)
File « /usr/lib/python3/dist-packages/odoo/http.py », line 941, in __call__
return self.method(*args, **kw)
File « /usr/lib/python3/dist-packages/odoo/http.py », line 519, in response_wrap
response = f(*args, **kw)
File « /usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py », line 966, in call_button
action = self._call_kw(model, method, args, {})
File « /usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py », line 954, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File « /usr/lib/python3/dist-packages/odoo/api.py », line 749, in call_kw
return _call_kw_multi(method, model, args, kwargs)
File « /usr/lib/python3/dist-packages/odoo/api.py », line 736, in _call_kw_multi
result = method(recs, *args, **kwargs)
File « », line 2, in button_immediate_install
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py », line 74, in check_and_log
return method(self, *args, **kwargs)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py », line 445, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py », line 561, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File « /usr/lib/python3/dist-packages/odoo/modules/registry.py », line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File « /usr/lib/python3/dist-packages/odoo/modules/loading.py », line 421, in load_modules
loaded_modules, update_module, models_to_check)
File « /usr/lib/python3/dist-packages/odoo/modules/loading.py », line 313, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File « /usr/lib/python3/dist-packages/odoo/modules/loading.py », line 222, in load_module_graph
load_data(cr, idref, mode, kind=’data’, package=package, report=report)
File « /usr/lib/python3/dist-packages/odoo/modules/loading.py », line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 802, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 865, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 755, in parse
self.parse(rec, mode)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 764, in parse
exc_info[2]
File « /usr/lib/python3/dist-packages/odoo/tools/pycompat.py », line 86, in reraise
raise value.with_traceback(tb)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 758, in parse
self._tags[rec.tag](rec, de, mode=mode)
File « /usr/lib/python3/dist-packages/odoo/tools/convert.py », line 663, in _tag_record
record = model.with_context(rec_context)._load_records([data], self.mode == ‘update’)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3865, in _load_records
records = self._load_records_create([data[‘values’] for data in to_create])
File « /usr/lib/python3/dist-packages/odoo/addons/website/models/ir_ui_view.py », line 129, in _load_records_create
records = super(View, self)._load_records_create(values)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3779, in _load_records_create
return self.create(values)
File « », line 2, in create
File « /usr/lib/python3/dist-packages/odoo/api.py », line 452, in _model_create_multi
return create(self, arg)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 428, in create
return super(View, self).create(vals_list)
File « », line 2, in create
File « /usr/lib/python3/dist-packages/odoo/api.py », line 452, in _model_create_multi
return create(self, arg)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3596, in create
fields[0].determine_inverse(batch_recs)
File « /usr/lib/python3/dist-packages/odoo/fields.py », line 1117, in determine_inverse
getattr(records, self.inverse)()
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 275, in _inverse_arch
view.write(data)
File « /usr/lib/python3/dist-packages/odoo/addons/website/models/ir_ui_view.py », line 41, in write
return super(View, self).write(vals)
File « /usr/lib/python3/dist-packages/odoo/addons/base/models/ir_ui_view.py », line 444, in write
return super(View, self).write(self._compute_defaults(vals))
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3321, in write
self._write(store_vals)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 3457, in _write
self._validate_fields(vals)
File « /usr/lib/python3/dist-packages/odoo/models.py », line 1112, in _validate_fields
raise ValidationError(« %s\n\n%s » % (_(« Error while validating constraint »), tools.ustr(e)))
odoo.tools.convert.ParseError: « Erreur lors de la validation de la contrainte
Le champ `google_contacts_account` n’existe pas
Contexte de l’erreur :
Vue `res.partner.google.contacts.view.tree`
[view_id: 2155, xml_id: n/a, model: res.partner, parent_id: n/a]
None » while parsing /var/lib/univention-appcenter/apps/odoo/data/extra-addons/vuente_google_contacts_sync/views/res_partner_views.xml:5, near
res.partner.google.contacts.view.tree
res.partner
Au vu des changements intervenus dans le « coeur » d’Odoo, un module v9 n’a aucune chance de fonctionner en version 12. Il faut obligatoirement le migrer.
Bonjour,
merci de votre retour
sauriez vous où je peux trouver de l’aide pour le migrer ?
Une alternative open source ?
Je vous remercie
Amaury