def addFeature(f): url = featureURL + requestDataURL['Assets'] + '/addFeatures' f['AssetRequestID'] = requestID data = { 'f': 'json', 'features': [{ 'attributes': f }], 'gdbVersion': 'GISUSER.Requests' } result = dghttpclient.postHttpRequestESRI(url, data) result = result['addResults'] result = checkSuccess(result) return result
def getEmployeeInfo(): eUrl = mapURL+requestDataURL['Employees']+'/query?' edenUrl = mapURL+requestDataURL['EmployeesEden']+'/query?' edenData = {'returnGeometry':'false','f':'json','outFields':'*'} eData = {'returnGeometry':'false','f':'json'} eData['where'] = "OBJECTID IS NOT NULL" eData['outFields'] = '*' emp = dghttpclient.postHttpRequestESRI(eUrl,eData) emp = emp['features'] empJson = {} for e in emp: e = e['attributes'] eID = e['EmployID'] edenData['where'] = 'EMP_NO = ' + str(eID) edenResult = dghttpclient.postHttpRequestESRI(edenUrl,edenData) edenResult = edenResult['features'] edenResult = edenResult[0] phone = e['Phone'] if phone is not None: phone = "("+phone[:3]+") "+phone[3:6]+"-"+phone[6:] else: phone = "(###)###-####" empJson[str(e['EmployID'])] = {'phone':phone,'email':e['Email'],'name':edenResult['FULL_NAME'],'title':edenResult['TITLE']} return empJson
def addAdditionalInfo(d): url = featureURL + requestDataURL['AdditionalInfo'] + '/addFeatures' featureArray = [] global requestID requestID = d['RelInfoRequestID'] for i in d: if i[0:4] == 'more': a = {'RelInfoRequestID': requestID, 'QuestionID': i[4:]} if len(d[i]) > 254: a['QuestionAnswer1'] = d[i][0:255] a['QuestionAnswer2'] = d[i][255:510] else: a['QuestionAnswer1'] = d[i] featureArray.append({'attributes': a}) data = { 'f': 'json', 'features': featureArray, 'gdbVersion': 'GISUSER.Requests' } #result = dghttpclient.postHttpRequest(url,data) result = dghttpclient.postHttpRequestESRI(url, data) result = result['addResults'] result = checkSuccess(result) return result
def addContact(d): # 2 Steps -- 1) Create Contact 2) Add relationship to relationship table t = 'contact' if 'cType' in d and d['cType'] is not None: t = d['cType'] contactInfo = (('Email' in d or 'Address' in d or 'Phone' in d or 'Name' in d) and (d['Email'] != 'None' or d['Address'] != 'None' or d['Phone'] != 'None' or d['Name'] != 'None')) if 'UserID' not in d and contactInfo is True: url = mapURL + requestDataURL['Contacts'] + '/query' data = { 'where': 'OBJECTID IS NOT NULL', 'orderByFields': 'ContactID DESC', 'outFields': 'ContactID', 'f': 'json' } uID = dghttpclient.getHttpRequest(url, data) uID = uID['features'][0]['attributes']['ContactID'] uID = uID + 1 url = featureURL + requestDataURL['Contacts'] + '/addFeatures' contact = { 'Type': t, 'Name': d['Name'], 'Address': d['Address'], 'City': 'Downers Grove', 'State': 'IL', 'Zip': '60515', 'Email': d['Email'], 'Phone': d['Phone'], 'Alt_Phone': 'None', 'Notes': 'None', 'ContactID': uID } data = { 'f': 'json', 'features': [{ 'attributes': contact }], 'gdbVersion': 'GISUSER.Requests' } #result = dghttpclient.postHttpRequest(url,data) result = dghttpclient.postHttpRequestESRI(url, data) result = result['addResults'] result = checkSuccess(result) elif 'UserID' in d: uID = d['UserID'] result = True else: return True if (result): url = featureURL + requestDataURL['ContactReqRel'] + '/addFeatures' contactRel = { 'ContactID': str(uID), 'RequestID': str(requestID), 'ContactType': t } data = { 'f': 'json', 'features': [{ 'attributes': contactRel }], 'gdbVersion': 'GISUSER.Requests' } #result = dghttpclient.postHttpRequest(url,data) result = dghttpclient.postHttpRequestESRI(url, data) result = result['addResults'] result = checkSuccess(result) return result else: return False
def getDataFromGIS(): requestdata = {} requestdata['departments'] = departments requestdata['statusCodes'] = statusCodes requestdata['actionCodes'] = actionCodes requestdata['timeFrames'] = timeFrames requestdata['dashboardViews'] = dashboardViews requestdata['dashboardTypes'] = dashboardTypes #requestdata['dashboardSubtypes'] = getDashboardSubTypes() requestcontacts = [] print dataURLs for d in dataURLs: print d data = {'returnGeometry':'false','f':'json','outFields':'*','where':'OBJECTID IS NOT NULL'} if d == 'employees': data['orderByFields'] = 'FULL_NAME ASC' elif d == 'locationfilter': data['returnGeometry'] = 'true' data['where'] = 'Type = \'Quadrant\'' url = mapURL+dataURLs[d]+query print url result = dghttpclient.postHttpRequestESRI(url, data) result = result['features'] if d == 'keywords': resultDict = {} for r in result: attr = r['attributes'] keywords = attr['Keywords1'] if attr['Keywords2']: keywords = keywords + "," + attr['Keywords2'] if keywords: keywords = keywords.split(',') else: keywords = [] resultDict[attr['Name']] = keywords requestdata[d] = resultDict elif d == 'employees': empUrl = mapURL+requestDataURL['Employees']+'/query?' empData = {'returnGeometry':'false','f':'json','outFields':'*'} empJson = {'9999':{'phone':'(630)434-5500','email':'*****@*****.**','name':'Unassigned','title':'Unassigned','dept':9999,'deptText':'Unassigned'}} empJson['un'] = {'phone':'(630)434-5500','email':'*****@*****.**','name':'Unassigned','title':'Unassigned','dept':9999,'deptText':'Unassigned'} for e in result: e = e['attributes'] eID = e['EMP_NO'] empData['where'] = 'EmployID = ' + str(eID) empResult = dghttpclient.postHttpRequestESRI(empUrl,empData) empResult = empResult['features'] if len(empResult)>0: empResult = empResult[0]['attributes'] else: empResult = {'Email':'None','Phone':None,'Active':0} phone = empResult['Phone'] if phone is not None: phone = "("+phone[:3]+") "+phone[3:6]+"-"+phone[6:] else: phone = "(###)###-####" empJson[str(eID)] = {'phone':phone,'email':empResult['Email'],'name':e['FULL_NAME'],'title':e['TITLE'],'dept':e['DEPT_NO'],'deptText':e['DEPT'],'active':empResult['Active']} #empJson = OrderedDict(sorted(resultDict.items(), key=lambda t: t[2])) requestdata[d] = empJson elif d == 'types': resultDict = {} for r in result: attr = r['attributes'] requestDict = {'DefaultAssigned':attr['DefaultAssigned'],'RequestID':attr['RequestID'],'MapColor':attr['MapColor']} if attr['RespondingEmployees']: requestDict['RespondingEmployees']= attr['RespondingEmployees'].split(',') else: requestDict['RespondingEmployees'] = 'None' keywords = attr['Keywords1'] if attr['Keywords2']: keywords = keywords + "," + attr['Keywords2'] if keywords: keywords = keywords.split(',') else: keywords = [] requestDict['keywords'] = keywords requestDict['category'] = attr['Category'] requestDict['geoLayer'] = attr['GeoLayer'] requestDict['geoField'] = attr['GeoField'] requestDict['geoRouteType'] = attr['GeoRouteType'] requestDict['description'] = attr['Description'] requestDict['status'] = attr['RequestStatus'] resultDict[attr['RequestName']] = requestDict resultDict = OrderedDict(sorted(resultDict.items(), key=lambda t: t[0])) requestdata[d] = resultDict elif d == 'contacts': for r in result: attr = r['attributes'] for a in attr: if attr[a] is None: attr[a] = '' attr['ContactName'] = attr['Name'] del attr['Name'] requestcontacts.append(attr) elif d == 'questions': resultDict = {} # Added second dictionary to look up question text for request that had their request type changed and # the new request type does not list the same question questionDict = {} for r in result: attr = r['attributes'] if attr['QuestionType'] == "List": if attr['QuestionAnswerList3'] is not None: questionAnswerList = attr['QuestionAnswerList1'] + "," + attr['QuestionAnswerList2'] + "," + attr['QuestionAnswerList3'] elif attr['QuestionAnswerList2'] is not None: questionAnswerList = attr['QuestionAnswerList1'] + "," + attr['QuestionAnswerList2'] elif attr['QuestionAnswerList1'] is not None: questionAnswerList = attr['QuestionAnswerList1'] else: questionAnswerList = 'None' else: questionAnswerList = 'None' question = {'QuestionType':attr['QuestionType'],'QuestionText':attr['QuestionText'],'QuestionAnswerList':questionAnswerList.split(','),'QuestionOrder':attr['QuestionOrder']} questionDict[attr['QuestionID']] = question question['QuestionID'] = attr['QuestionID'] if str(attr['RequestTypeID']) in resultDict: questions = resultDict[str(attr['RequestTypeID'])] questions.append(question) resultDict[str(attr['RequestTypeID'])] = questions else: resultDict[str(attr['RequestTypeID'])] = [question] requestdata['question_text'] = questionDict requestdata[d] = resultDict elif d == 'layers': resultDict = {} for r in result: attr = r['attributes'] resultDict[attr['Name']] = attr resultDict = OrderedDict(sorted(resultDict.items(), key=lambda t: t[0])) requestdata[d] = resultDict elif d == 'violationtypes': resultDict = {} for r in result: attr = r['attributes'] resultDict[attr['Name']] = attr resultDict = OrderedDict(sorted(resultDict.items(), key=lambda t: t[0])) requestdata[d] = resultDict elif d == 'locationfilter': resultDict = {} for r in result: attr = r['attributes'] resultDict[attr['EmployName']] = r resultDict = OrderedDict(sorted(resultDict.items(), key=lambda t: t[0])) requestdata[d] = resultDict else: requestdata[d] = result postDataToFTP(requestdata,'request_data') postDataToFTP(requestcontacts, 'request_contacts')
def createDeviceUser(): url = mapURL + requestDataURL['Devices'] + '/query' success = failed.copy() # Check for existing contact in CRC contact table # Build contact query emailQuery = '' if 'UserEmail' in parameters and parameters[ 'UserEmail'] != 'null' and len(parameters['UserEmail']) > 0: emailQuery = 'Email = \'{0}\''.format(parameters['UserEmail']) if len(emailQuery) > 0: contactUrl = mapURL + requestDataURL['Contacts'] + '/query' contactData = { 'f': 'json', 'where': emailQuery, 'outFields': 'ContactID', 'orderByFields': 'ContactID ASC' } results = dghttpclient.postHttpRequestESRI(contactUrl, contactData) if 'features' in results and len(results['features']) > 0: parameters['newUserID'] = results['features'][0]['attributes'][ 'ContactID'] # Process New or Updated information # If a CRC ID exists or if information has been updated on the app, check to see if a mobile app ID # has already been created and get the OBJECTID in order to update information. if ('newUserID' in parameters and parameters['type'] == 'new') or parameters['type'] == 'update': if parameters['type'] == 'new': parameters['UserID'] = parameters['newUserID'] del parameters['newUserID'] """data = {'where':'UserID = \'{0}\''.format(parameters['UserID']),'returnIdsOnly':'true','f':'json'} results = dghttpclient.postHttpRequestESRI(url,data) if 'objectIds' in results and len(results['objectIds']) > 0: #parameters['OBJECTID'] = results['objectIds'][0] parameters['type'] = 'update' else: parameters['type'] = 'new'""" if 'UserID' not in parameters and parameters['type'] == 'new': data = { 'where': 'OBJECTID IS NOT NULL', 'returnCountOnly': 'true', 'f': 'json' } results = dghttpclient.postHttpRequestESRI(url, data) if 'count' in results: parameters['UserID'] = results['count'] + 10001 else: return failed deviceData = parameters.copy() # App controls what data is submitted - If UserAddress is provided reverse geocode Address if 'UserAddress' in parameters: lng, lat = geocodeAddress(parameters['UserAddress']) if lng != 0 and lat != 0: deviceData['Address_Lng'], deviceData['Address_Lat'] = lng, lat else: success['outside'] = True if 'Mobile' in deviceData: deviceData['Mobile'] = deviceData['Mobile'].replace( " ", "").replace("<", "").replace(">", "") if 'EnabledNotificationTypes' in deviceData: if deviceData['EnabledNotificationTypes'].find('PI') == -1: deviceData['UserAddress'] = "null" deviceData['UserPhone'] = "null" deviceData['UserName'] = "******" if deviceData['EnabledNotificationTypes'].find('EN') == -1: deviceData['UserEmail'] = "null" del deviceData['type'] deviceData['LastUpdated'] = stringFullDate #print ("""Content-type:application/json\n""") requestData = { 'f': 'json', 'features': [{ "attributes": deviceData }], 'gdbVersion': 'GISUSER.Requests' } action = '/addFeatures' actionResults = 'addResults' """if parameters['type'] == 'update': action = '/updateFeatures' actionResults = 'updateResults'""" results = dghttpclient.postHttpRequestESRI( featureURL + requestDataURL['Devices'] + action, requestData) if actionResults in results: if 'success' in results[actionResults][0]: success['success'] = True success['UserID'] = deviceData['UserID'] success['action'] = actionResults else: return failed else: return failed return success