ODOO 9 CE – synchronisation avec Google Contacts

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)

3 réflexions sur « ODOO 9 CE – synchronisation avec Google Contacts »

  1. 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

    1. 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.

      1. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *