Skip to content

Commit fea21ee

Browse files
authored
Create bamboo_to_officespace.py
1 parent ddbe092 commit fea21ee

File tree

1 file changed

+165
-0
lines changed

1 file changed

+165
-0
lines changed

bamboo_to_officespace.py

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
#!/usr/bin/python
2+
import requests
3+
import json
4+
import math
5+
import sys
6+
7+
#####################
8+
# Bamboo API Config #
9+
#####################
10+
11+
Site = "<YOUR_BAMBOO_INSTANCE>"
12+
Key = "<YOUR_BAMBOO_API_KEY>"
13+
Auth = (Key, 'x')
14+
Headers = {"Accept": "application/json"}
15+
BaseUrl = "https://api.bamboohr.com/api/gateway.php/%s/v1/" % (Site)
16+
EmployeeDirectory = "employees/directory"
17+
18+
19+
##########################
20+
# OfficeSpace API Config #
21+
##########################
22+
Hostname = "<YOUR_OFFICESPACE_SUBDOMAIN>.officespacesoftware.com"
23+
Token = "<YOUR_OFFICESPACE_API_KEY>"
24+
BatchUrl = "/api/1/employee_batch_imports"
25+
ImportUrl = "/api/1/employee_directory"
26+
Protocol = "https://"
27+
Headers = {'Authorization': "Token token=%s" % Token}
28+
JsonHeaders = {'Authorization': "Token token=%s" % Token, 'Content-Type': 'application/json; charset=utf-8'}
29+
Source = "BambooHR"
30+
EmployeeBatchUrl = Protocol + Hostname + BatchUrl
31+
EmployeeBatchStagingUrl = Protocol + Hostname + ImportUrl + "/" + Source
32+
EmployeeImportUrl = Protocol + Hostname + ImportUrl
33+
BatchSize = 1000
34+
##########################
35+
36+
Response = requests.get(BaseUrl + EmployeeDirectory, auth=Auth, headers=Headers)
37+
38+
if Response.status_code == 200:
39+
Data = json.loads(Response.text)
40+
print("Got %d employees from Bamboo" % (len(Data['employees'])))
41+
42+
# OfficeSpace to BambooHR mapping
43+
EmployeeId = "id"
44+
FirstName = "firstName"
45+
LastName = "lastName"
46+
Title = "jobTitle"
47+
WorkPhone = "workPhone"
48+
Extension = "workPhoneExtension"
49+
Photo = "photoUrl"
50+
Department = "department"
51+
Bio = ""
52+
Email = "workEmail"
53+
StartDate = ""
54+
EndDate = ""
55+
ShowInVd = ""
56+
Udf0 = "location"
57+
Udf1 = "division"
58+
Udf2 = "mobilePhone"
59+
Udf3 = "preferredName"
60+
Udf4 = ""
61+
Udf5 = ""
62+
Udf6 = ""
63+
Udf7 = ""
64+
Udf8 = ""
65+
Udf9 = ""
66+
Udf10 = ""
67+
Udf11 = ""
68+
Udf12 = ""
69+
Udf13 = ""
70+
Udf14 = ""
71+
Udf15 = ""
72+
Udf16 = ""
73+
Udf17 = ""
74+
Udf18 = ""
75+
Udf19 = ""
76+
Udf20 = ""
77+
Udf21 = ""
78+
Udf22 = ""
79+
Udf23 = ""
80+
Udf24 = ""
81+
82+
BambooEmployees = Data['employees']
83+
84+
Batches = math.floor(len(BambooEmployees)/BatchSize) + 1
85+
Start = 0
86+
End = BatchSize - 1
87+
Batch = 1
88+
89+
print("Staging records in OfficeSpace...")
90+
try:
91+
Response = requests.delete(EmployeeBatchStagingUrl, headers=JsonHeaders)
92+
except Exception, e:
93+
print("Delete Staging Records Error: %s" % str(e))
94+
else:
95+
Array = []
96+
97+
while True:
98+
for BambooEmployee in BambooEmployees[Start:End]:
99+
Person = {}
100+
Person["EmployeeId"] = BambooEmployee[EmployeeId] if BambooEmployee.has_key(EmployeeId) else ''
101+
Person["Source"] = Source
102+
Person["FirstName"] = BambooEmployee[FirstName] if BambooEmployee.has_key(FirstName) else ''
103+
Person["LastName"] = BambooEmployee[LastName] if BambooEmployee.has_key(LastName) else ''
104+
Person["Title"] = BambooEmployee[Title] if BambooEmployee.has_key(Title) else ''
105+
Person["WorkPhone"] = BambooEmployee[WorkPhone] if BambooEmployee.has_key(WorkPhone) else ''
106+
Person["Extension"] = BambooEmployee[Extension] if BambooEmployee.has_key(Extension) else ''
107+
Person["Photo"] = BambooEmployee[Photo] if BambooEmployee.has_key(Photo) else ''
108+
Person["Department"] = BambooEmployee[Department] if BambooEmployee.has_key(Department) else ''
109+
Person["Bio"] = BambooEmployee[Bio] if BambooEmployee.has_key(Bio) else ''
110+
Person["Email"] = BambooEmployee[Email] if BambooEmployee.has_key(Email) else ''
111+
Person["StartDate"] = BambooEmployee[StartDate] if BambooEmployee.has_key(StartDate) else ''
112+
Person["EndDate"] = BambooEmployee[EndDate] if BambooEmployee.has_key(EndDate) else ''
113+
Person["ShowInVd"] = BambooEmployee[ShowInVd] if BambooEmployee.has_key(ShowInVd) else ''
114+
Person["Udf0"] = BambooEmployee[Udf0] if BambooEmployee.has_key(Udf0) else ''
115+
Person["Udf1"] = BambooEmployee[Udf1] if BambooEmployee.has_key(Udf1) else ''
116+
Person["Udf2"] = BambooEmployee[Udf2] if BambooEmployee.has_key(Udf2) else ''
117+
Person["Udf3"] = BambooEmployee[Udf3] if BambooEmployee.has_key(Udf3) else ''
118+
Person["Udf4"] = BambooEmployee[Udf4] if BambooEmployee.has_key(Udf4) else ''
119+
Person["Udf5"] = BambooEmployee[Udf5] if BambooEmployee.has_key(Udf5) else ''
120+
Person["Udf6"] = BambooEmployee[Udf6] if BambooEmployee.has_key(Udf6) else ''
121+
Person["Udf7"] = BambooEmployee[Udf7] if BambooEmployee.has_key(Udf7) else ''
122+
Person["Udf8"] = BambooEmployee[Udf8] if BambooEmployee.has_key(Udf8) else ''
123+
Person["Udf9"] = BambooEmployee[Udf9] if BambooEmployee.has_key(Udf9) else ''
124+
Person["Udf10"] = BambooEmployee[Udf10] if BambooEmployee.has_key(Udf10) else ''
125+
Person["Udf11"] = BambooEmployee[Udf11] if BambooEmployee.has_key(Udf11) else ''
126+
Person["Udf12"] = BambooEmployee[Udf12] if BambooEmployee.has_key(Udf12) else ''
127+
Person["Udf13"] = BambooEmployee[Udf13] if BambooEmployee.has_key(Udf13) else ''
128+
Person["Udf14"] = BambooEmployee[Udf14] if BambooEmployee.has_key(Udf14) else ''
129+
Person["Udf15"] = BambooEmployee[Udf15] if BambooEmployee.has_key(Udf15) else ''
130+
Person["Udf16"] = BambooEmployee[Udf16] if BambooEmployee.has_key(Udf16) else ''
131+
Person["Udf17"] = BambooEmployee[Udf17] if BambooEmployee.has_key(Udf17) else ''
132+
Person["Udf18"] = BambooEmployee[Udf18] if BambooEmployee.has_key(Udf18) else ''
133+
Person["Udf19"] = BambooEmployee[Udf19] if BambooEmployee.has_key(Udf19) else ''
134+
Person["Udf20"] = BambooEmployee[Udf20] if BambooEmployee.has_key(Udf20) else ''
135+
Person["Udf21"] = BambooEmployee[Udf21] if BambooEmployee.has_key(Udf21) else ''
136+
Person["Udf22"] = BambooEmployee[Udf22] if BambooEmployee.has_key(Udf22) else ''
137+
Person["Udf23"] = BambooEmployee[Udf23] if BambooEmployee.has_key(Udf23) else ''
138+
Person["Udf24"] = BambooEmployee[Udf24] if BambooEmployee.has_key(Udf24) else ''
139+
Array.append(Person)
140+
JSONArray = json.dumps(Array)
141+
JSONArrayUTF8 = JSONArray.encode()
142+
#print(JSONArrayUTF8)
143+
#print("")
144+
try:
145+
Response = requests.post(EmployeeBatchUrl, data=JSONArrayUTF8, headers=JsonHeaders)
146+
except Exception, e:
147+
print("Batch No. %d Update Records Error: %s" % (Batch, str(e)))
148+
sys.exit(1)
149+
else:
150+
Start+=BatchSize
151+
End+=BatchSize
152+
Batch=Batch+1
153+
if (Batch >= Batches):
154+
break
155+
print("Triggering migration")
156+
ImportUrlPostBody = '{ "Source" : "' + Source + '" }'
157+
print(ImportUrlPostBody)
158+
try:
159+
Response = requests.post(EmployeeImportUrl, data=ImportUrlPostBody, headers=Headers)
160+
except Exception, e:
161+
print("Trigger Migration Error: %s" % str(e))
162+
else:
163+
print("Completed")
164+
else:
165+
print("Error %s for request %s" % (str(Response.status_code), BaseUrl + EmployeeDirectory))

0 commit comments

Comments
 (0)