class sfdc(): def __init__(self, options): self.options = options self.sf = Salesforce(username=options["username"], password=options["password"], security_token=options["token"]) def getRecords(self, query): self.query = query print "Searching SFDC for %s" % self.query self.contacts = [] self.accounts = [] self.users = [] self.leads = [] results = self.sf.quick_search(self.query) if not results: return False for record in results: if record['attributes']['type'] == 'Contact': self.contacts.append(self.sf.Contact.get(record["Id"])) elif record['attributes']['type'] == 'User': self.users.append(self.sf.User.get(record["Id"])) elif record['attributes']['type'] == 'Account': self.accounts.append(self.sf.Account.get(record["Id"])) elif record['attributes']['type'] == 'Lead': self.leads.append(self.sf.Lead.get(record["Id"])) return True
# sf.Contact.create({'LastName':'Smith','Email':'*****@*****.**'}) # sf.Contact.create({'LastName':'Smith','Email':'*****@*****.**'}) # contact = sf.Contact.get('0038A00000YfgVEQAZ') # contact = sf.Contact.get_by_custom_id('My_Custom_ID__c', '22') # sfresult = sf.Contact.update('0038A00000YfgVEQAZ',{'LastName': 'Jones', 'FirstName': 'John'}) # sfresult = 204 (succeded, no content) # sf.Contact.delete('0038A00000YfgVEQAZ') # result = sf.Contact.create( # {'Email':attendee['profile']['email']+"3", # 'FirstName':attendee['profile']['first_name']+"3", # 'LastName':attendee['profile']['last_name']+"3", # 'Title':attendee['profile']['job_title']+"3"}) # contactID = result['id'] # result = sf.Opportunity.create({'AccountId':"", 'npsp__Primary_Contact__c':contactID, 'EventbriteSync__Buyer__c':contactID, 'amount':attendee['costs']['gross']['major_value'], 'StageName':'posted', 'CloseDate':attendee['created'], 'CampaignId':campaignID, 'Order_Number__c':attendee['order_id'], 'Ticket_Type__c':attendee['ticket_class_name'], 'RecordTypeId':'012f4000000JdASAA0', 'Name':'tempName'}) # print(result) # sf.Payment.create({}) # result = sf.Opportunity.create({'AccountId':'0017h00000XpNWPAA3', 'npsp__Primary_Contact__c':'0037h00000RkN8TAAV', 'EventbriteSync__Buyer__c':'0037h00000RkN8TAAV', 'StageName':'posted', 'CloseDate':"2021-03-25T19:23:04Z", 'CampaignId':'7017h000000xOe6AAE', 'Order_Number__c':'1686870425', 'Ticket_Type__c':"Nonmember Ticket", 'RecordTypeId':'012f4000000JdASAA0', 'Name':'tempName', 'amount':'20.00'}) # print(result) # opID = result['id'] # result = sf.npe01__OppPayment__c.create({'npe01__Opportunity__c':opID, 'npe01__Paid__c':True, 'Payment_Contact__c':'0038A00000ZVhpbQAD', 'Ready_for_Invoice__c':True, 'npe01__Payment_Amount__c':'50.00'}) #print(result) # sfCM = sf.query("SELECT Id FROM CampaignMember WHERE Eventbrite_Attendee_ID__c = '{ebAttendee}'".format(ebEventID=attendee['event_id'])) searchterm = "Mobile Loaves & Fishes, Inc." qs = sf.quick_search(format_soql("{{Mobile Loaves & Fishes, Inc.}}")) print(qs)
class SFAccess: session = None instance = None def __init__(self, settings): self.sf_user = settings["sfUser"] self.sf_pswd = settings["sfPsw"] self.sf_token = settings["sfToken"] def login(self): self.sf = Salesforce(username=self.sf_user, password=self.sf_pswd, security_token=self.sf_token) # these can be stored and reused for faster authentication self.instance = self.sf.sf_instance self.session = self.sf.session_id def quick_search(self, name): return self.sf.quick_search(name) @gen.coroutine def get_report(self, report_id=None): if report_id is not None: # check if we have logged in if self.session is None: self.login() # do the call http_client = AsyncHTTPClient() future = http_client.fetch( "https://%s/services/data/v34.0/analytics/reports/%s" % (self.instance, report_id), headers={ "Authorization": "Bearer %s" % self.session} ) result = yield future # result here brings whole report and you need to decode it then # https://developer.salesforce.com/docs/atlas.en-us.api_analytics.meta/api_analytics/sforce_analytics_rest_api_factmap_example.htm data = json.loads(result.body.decode("utf-8")) return data else: raise ValueError("You must provide report_id") @gen.coroutine def get_utilisation_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting employee names and keys employee_key_dict = get_employee_names(data) # getting final report final_report = create_final_util_report(raw_report=data, time_dict=date_range_dict, employee_dict=employee_key_dict) return final_report @gen.coroutine def get_billability_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting employee names and keys employee_key_dict = get_employee_names(data) # getting final report final_report = create_final_billability_report(raw_report=data, time_dict=date_range_dict, employee_dict=employee_key_dict) return final_report @gen.coroutine def get_billability_groupings_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting final report groups = get_groups(data) final_report = create_sub_totals_report(raw_report=data, time_dict=date_range_dict, group_dict=groups) return final_report
class SFAccess: session = None instance = None def __init__(self, settings): self.sf_user = settings["sfUser"] self.sf_pswd = settings["sfPsw"] self.sf_token = settings["sfToken"] def login(self): self.sf = Salesforce(username=self.sf_user, password=self.sf_pswd, security_token=self.sf_token) # these can be stored and reused for faster authentication self.instance = self.sf.sf_instance self.session = self.sf.session_id def quick_search(self, name): return self.sf.quick_search(name) @gen.coroutine def get_report(self, report_id=None): if report_id is not None: # check if we have logged in if self.session is None: self.login() # do the call http_client = AsyncHTTPClient() future = http_client.fetch( "https://%s/services/data/v34.0/analytics/reports/%s" % (self.instance, report_id), headers={"Authorization": "Bearer %s" % self.session}) result = yield future # result here brings whole report and you need to decode it then # https://developer.salesforce.com/docs/atlas.en-us.api_analytics.meta/api_analytics/sforce_analytics_rest_api_factmap_example.htm data = json.loads(result.body.decode("utf-8")) return data else: raise ValueError("You must provide report_id") @gen.coroutine def get_utilisation_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting employee names and keys employee_key_dict = get_employee_names(data) # getting final report final_report = create_final_util_report( raw_report=data, time_dict=date_range_dict, employee_dict=employee_key_dict) return final_report @gen.coroutine def get_billability_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting employee names and keys employee_key_dict = get_employee_names(data) # getting final report final_report = create_final_billability_report( raw_report=data, time_dict=date_range_dict, employee_dict=employee_key_dict) return final_report @gen.coroutine def get_billability_groupings_report(self, report_id): data = yield self.get_report(report_id) # getting useful date range dictionary date_range_dict = get_time_range(data) # getting final report groups = get_groups(data) final_report = create_sub_totals_report(raw_report=data, time_dict=date_range_dict, group_dict=groups) return final_report