X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/1249091e84840ca27aa6047db36c8e899328f15c..refs/heads/master:/src/club/civicrm.py diff --git a/src/club/civicrm.py b/src/club/civicrm.py index c44f6f893..dffeaa766 100644 --- a/src/club/civicrm.py +++ b/src/club/civicrm.py @@ -1,6 +1,6 @@ from datetime import datetime import json -from celery.task import task +from celery import shared_task from django.conf import settings import requests import yaml @@ -9,8 +9,8 @@ import yaml class CiviCRM: def __init__(self, base, key): self.base = base - self.api_base = base + 'civicrm/ajax/api4/' self.key = key + self.api_base = (base or '') + 'civicrm/ajax/api4/' self.enabled = bool(self.base and self.key) def request(self, resource, method, params): @@ -27,12 +27,12 @@ class CiviCRM: d = response.json() return d - def create_or_update_contact(self, email, key): + def create_or_update_contact(self, email, fields=None): contact_id = self.get_contact_id(email) if contact_id is None: - contact_id = self.create_contact(email, key) - else: - self.update_contact(contact_id, key) + contact_id = self.create_contact(email, fields) + elif fields: + self.update_contact(contact_id, fields) return contact_id def get_contact_id(self, email): @@ -49,38 +49,38 @@ class CiviCRM: if result: return result[0]['id'] - def create_contact(self, email, key): - result = self.request( - 'Contact', - 'create', - { - 'values': { - 'WL.TPWL_key': key, - }, - 'chain': { - 'email': [ - 'Email', - 'create', - { - 'values': { - 'email': email, - 'contact_id': '$id' - } + def create_contact(self, email, fields): + data = { + 'values': {}, + 'chain': { + 'email': [ + 'Email', + 'create', + { + 'values': { + 'email': email, + 'contact_id': '$id' } - ] - } + } + ] } - ) - return result[0]['id'] - - def update_contact(self, contact_id, key): + } + if fields: + data['values'].update(fields) + result = self.request('Contact', 'create', data) + return result['values'][0]['id'] + + def update_phone(self, contact_id, phone): + if self.request('Phone', 'get', {'where': [['phone', "=", phone], ['contact_id', "=", contact_id]]})['count']: + return + self.request('Phone', 'create', {'values': {'phone': phone, 'contact_id': contact_id}}) + + def update_contact(self, contact_id, fields): return self.request( 'Contact', 'update', { - 'values': { - 'WL.TPWL_key': key, - }, + 'values': fields, 'where': [ ['id', '=', contact_id] ] @@ -89,7 +89,11 @@ class CiviCRM: def report_activity(self, email, tpwl_key, key, name, datetime, details): - contact_id = self.create_or_update_contact(email, tpwl_key) + if not self.enabled: + return + + fields = {'WL.TPWL_key': tpwl_key} + contact_id = self.create_or_update_contact(email, fields) activity_id = self.get_activity_id(key) if activity_id is None: @@ -160,7 +164,21 @@ class CiviCRM: } ) - #do we create a civicontribution? + def add_email_to_group(self, email, group_id): + contact_id = self.create_or_update_contact(email) + self.add_contact_to_group(contact_id, group_id) + + def add_contact_to_group(self, contact_id, group_id): + self.request( + 'GroupContact', + 'create', + { + "values": { + "group_id": group_id, + "contact_id": contact_id, + } + } + ) civicrm = CiviCRM( @@ -168,7 +186,7 @@ civicrm = CiviCRM( settings.CIVICRM_KEY, ) -@task(ignore_result=True) +@shared_task(ignore_result=True) def report_activity(*args, **kwargs): civicrm.report_activity(*args, **kwargs)