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
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):
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):
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]
]
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:
}
)
- #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(
settings.CIVICRM_KEY,
)
-@task(ignore_result=True)
+@shared_task(ignore_result=True)
def report_activity(*args, **kwargs):
civicrm.report_activity(*args, **kwargs)