Beispiel #1
0
 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
Beispiel #3
0
 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
Beispiel #4
0
    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')
Beispiel #6
0
    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