def post(self): i = Insightly(apikey = apikey) contactinfos = list() if len(self.request.get('EMAIL')) > 0: contactinfo = dict( TYPE = 'EMAIL', DETAIL = self.request.get('EMAIL'), ) contactinfos.append(contactinfo) if len(self.request.get('PHONE')) > 0: contactinfo = dict( TYPE = 'PHONE', DETAIL = self.request.get('PHONE'), ) contactinfos.append(contactinfo) contact = dict( SALUTATION = self.request.get('SALUTATION'), FIRST_NAME = self.request.get('FIRST_NAME'), LAST_NAME = self.request.get('LAST_NAME'), CONTACTINFOS = contactinfos, ) contact = i.addContact(contact) if self.request.get('addtask') == 'y': tasklinks = list() tl = dict( TASK_LINK_ID = 0, CONTACT_ID = contact['CONTACT_ID'], ) tasklinks.append(tl) task = dict( Title = 'Follow up with ' + self.request.get('FIRST_NAME') + ' ' + self.request.get('LAST_NAME'), PRIORITY = 2, STATUS = 'NOT STARTED', COMPLETED = False, OWNER_USER_ID = i.owner_id, VISIBLE_TO = 'EVERYONE', PUBLICLY_VISIBLE = True, RESPONSIBLE_USER_ID = i.owner_id, TASKLINKS = tasklinks, ) task = i.addTask(task) self.redirect('/thankyou')
class crm(): ################################ # data and methods for the crm # ################################ def __init__(self, insight_key): self.crm = Insightly(apikey=insight_key) self.load_insightly_contacts() self.load_insightly_orgs() def load_insightly_contacts(self): ################################### # load contact ids from insightly # ################################### self.ins_contacts = {} conns = self.crm.getContacts() for c in conns: self.ins_contacts["%s %s" % (c['FIRST_NAME'], c['LAST_NAME'])] = c['CONTACT_ID'] def addContact(self, dets, who): ################################### # add a new contact, also a new # # org if required # ################################### c = {} c['CONTACT_ID'] = 0 # id=0 means add a new one c['FIRST_NAME'] = dets["first-name"] c['LAST_NAME'] = dets["last-name"] c['BACKGROUND'] = dets["summary"] # Tags for location and who owns the contact in Linked-In c['TAGS'] = [] c['TAGS'].append( {"TAG_NAME": "Location-%s" % dets["location-country"].upper()}) c['TAGS'].append({"TAG_NAME": "LIContact-%s" % who}) c['IMAGE_URL'] = dets['pictureUrl'] linkedinurl = "https://www.linkedin.com/profile/view?%s" % dets['id'] c["CONTACTINFOS"] = [{ "SUBTYPE": "LinkedInPublicProfileUrl", "TYPE": "SOCIAL", "DETAIL": linkedinurl, "LABEL": "LinkedInPublicProfileUrl" }] # find org c['LINKS'] = [] l = {} if self.orgs.has_key(dets['company']): c['DEFAULT_LINKED_ORGANISATION'] = self.orgs[dets['company']] l['ORGANISATION_ID'] = self.orgs[dets['company']] else: c['DEFAULT_LINKED_ORGANISATION'] = self.addOrg(dets['company']) l['ORGANISATION_ID'] = self.addOrg(dets['company']) l['ROLE'] = dets['title'] c['LINKS'].append(l) print json.dumps(c, indent=3) self.crm.addContact(c) def addOrg(self, name): ################################### # add a new organisation # ################################### c = {} c['ORGANISATION_NAME'] = name resp = self.crm.addOrganization(c) return (resp['ORGANISATION_ID']) ################################### # load org ids from insightly # ################################### def load_insightly_orgs(self): o = self.crm.getOrganizations() self.orgs = {} for x in o: self.orgs[x['ORGANISATION_NAME']] = x['ORGANISATION_ID']
from insightly import Insightly import json i = Insightly(apikey='1b59c7a6-98cc-4788-b4ae-d063453e04ab') #users = i.test() #contacts = i.getContacts(orderby='DATE_UPDATED_UTC desc') #print json.dumps(contacts, indent=3 ) contact = i.addContact('sample') #contact = i.getContact(103192387) print json.dumps(contact, indent=3) #contact = i.addOrganization('sample') #print json.dumps(contact, indent=3) #org=i.getOrganizations() #print org #c={} ##c['CONTACT_ID']=0 #c['FIRST_NAME']="AAAAAAAAA" #c['LAST_NAME']="BBBBBBBBB" #i.addContact(c) #contact = i.getContact(103192436) #for x in contact.keys(): # print "%s: %s" % (x, contact[x]) #contact["BACKGROUND"]="Seedy Reidy\n\n1234\n"
class crm(): ################################ # data and methods for the crm # ################################ def __init__(self, insight_key): print "Connecting to Insightly..." # link to the crm self.crm = Insightly(apikey=insight_key) # load all contacts and orgs from crm self.load_insightly_contacts() self.load_insightly_orgs() def load_insightly_contacts(self): # load contact ids from insightly # self.ins_contacts = {} conns = self.crm.getContacts() for c in conns: self.ins_contacts["%s %s" % (c['FIRST_NAME'], c['LAST_NAME'])] = c['CONTACT_ID'] def addContact(self, dets, who): # add a new contact, also a new org if required c = {} c['CONTACT_ID'] = 0 # id=0 means add a new one c['FIRST_NAME'] = dets["first-name"] c['LAST_NAME'] = dets["last-name"] c['BACKGROUND'] = dets["summary"] # Tags for location and who owns the contact in Linked-In c['TAGS'] = [] if dets["location-country"] <> None: c['TAGS'].append( {"TAG_NAME": "Location-%s" % dets["location-country"].upper()}) c['TAGS'].append({"TAG_NAME": "LIContact-%s" % who}) # linkedIn URL c["CONTACTINFOS"] = [{ "SUBTYPE": "LinkedInPublicProfileUrl", "TYPE": "SOCIAL", "DETAIL": dets['linkedInUrl'], "LABEL": "linkedInPublicProfileUrl" }] # Add email address if we have one if dets['email'] <> None: c["CONTACTINFOS"].append({ "TYPE": "EMAIL", "DETAIL": dets['email'], "LABEL": "Work" }) # See if we can find a matching organisation c['LINKS'] = [] l = {} if self.orgs.has_key(dets['company']): c['DEFAULT_LINKED_ORGANISATION'] = self.orgs[dets['company']] l['ORGANISATION_ID'] = self.orgs[dets['company']] else: # no match, so add one l['ORGANISATION_ID'] = self.addOrg(dets['company']) # add job title l['ROLE'] = dets['title'] c['LINKS'].append(l) # add contact record to crm try: c = self.crm.addContact(c) except urllib2.HTTPError as e: print "Error adding contact." print e print json.dumps(c) sys.exit() # add to in memory list self.ins_contacts["%s %s" % (c['FIRST_NAME'], c['LAST_NAME'])] = c['CONTACT_ID'] # Update image if dets['pictureUrl'] <> None: img = urllib2.urlopen(dets['pictureUrl']).read() self.addPicture(c['CONTACT_ID'], img) def addPicture(self, id, picturestream): callREST("PUT", "/v2.1/Contacts/%s/Image/name.jpg" % str(id), picturestream) def addPicturetoName(self, name, picturestream): # add a picture to a name if self.ins_contacts.has_key(name): id = self.ins_contacts[name] self.addPicture(id, picturestream) else: print "%s - name not found in Insighly" % name def addEmailtoName(self, name, email, label="WORK"): # add an email to a name if self.ins_contacts.has_key(name): id = self.ins_contacts[name] self.addEmail(id, email, label) else: print "%s - name not found in Insighly" % name def addEmail(self, id, email, label="WORK"): # add email to an id # get the record c = self.crm.getContact(id) # add email c["CONTACTINFOS"].append({ "TYPE": "EMAIL", "DETAIL": email, "LABEL": label }) # save self.crm.addContact(c) def addPhonetoName(self, name, phone, label="WORK"): # add a phone number to a name if self.ins_contacts.has_key(name): id = self.ins_contacts[name] self.addPhone(id, phone, label) else: print "%s - name not found in Insighly" % name def addPhone(self, id, phone, label="WORK"): # add phone number to an id # get the record c = self.crm.getContact(id) # add email c["CONTACTINFOS"].append({ "TYPE": "PHONE", "DETAIL": phone, "LABEL": label }) # save self.crm.addContact(c) def addOrg(self, name): # add a new organisation c = {} c['ORGANISATION_NAME'] = name resp = self.crm.addOrganization(c) # add to list of organisations in memory self.orgs[name] = resp['ORGANISATION_ID'] # return id return (resp['ORGANISATION_ID']) def load_insightly_orgs(self): # load org ids from insightly o = self.crm.getOrganizations() self.orgs = {} for x in o: self.orgs[x['ORGANISATION_NAME']] = x['ORGANISATION_ID'] def checkDetails(self, id, name, who): # check for an existing entry if it is in step with linkedIn. # Extend later. For not it just appends a tag if missing # get contact details for supplied id contact = self.crm.getContact(id) # create tag to add for owner tag = {"TAG_NAME": "LIContact-%s" % who} # add tag if needed if contact.has_key("TAGS"): t = contact["TAGS"] if tag not in t: t.append(tag) print "Adding tag %s to %s %s" % (tag, contact['FIRST_NAME'], contact['LAST_NAME']) contact["TAGS"] = t self.crm.addContact(contact) # no Tags so add from scratch else: t = [tag] contacts["TAGS"] = t self.crm.addContact(contact)