add SIH support

This commit is contained in:
Marlène Simondant 2019-12-09 15:20:22 +01:00
parent 776fac623a
commit 01d86b9a28
2 changed files with 205 additions and 14 deletions

View File

@ -183,7 +183,9 @@
margin: 0 0 15px 0;
}
.formdef-suivi-dossier-ph ul#evolutions ul.demande li,
.formdef-suivi-dossier-pa ul#evolutions ul.demande li {
.formdef-suivi-dossier-pa ul#evolutions ul.demande li,
.formdef-suivi-dossier-ph ul#evolutions ul.Recevabilité li,
.formdef-suivi-dossier-pa ul#evolutions ul.Recevabilité li {
margin: 0;
}
.formdef-suivi-dossier-ph ul#evolutions span.step,
@ -256,12 +258,22 @@
/* Opinions */
.formdef-suivi-dossier-ph ul#evolutions div.Accord,
.formdef-suivi-dossier-pa ul#evolutions div.Accord,
.formdef-suivi-dossier-ph ul#evolutions div.Attribution,
.formdef-suivi-dossier-pa ul#evolutions div.Attribution,
.formdef-suivi-dossier-ph ul#evolutions div.Rejet,
.formdef-suivi-dossier-pa ul#evolutions div.Rejet,
.formdef-suivi-dossier-ph ul#evolutions div.Non,
.formdef-suivi-dossier-pa ul#evolutions div.Non,
.formdef-suivi-dossier-ph ul#evolutions div.Refus,
.formdef-suivi-dossier-pa ul#evolutions div.Refus,
.formdef-suivi-dossier-ph ul#evolutions div.suspension,
.formdef-suivi-dossier-pa ul#evolutions div.suspension {
.formdef-suivi-dossier-pa ul#evolutions div.suspension,
.formdef-suivi-dossier-ph ul#evolutions div.sursis,
.formdef-suivi-dossier-pa ul#evolutions div.sursis,
.formdef-suivi-dossier-ph ul#evolutions div.Sursis,
.formdef-suivi-dossier-pa ul#evolutions div.Sursis,
.formdef-suivi-dossier-ph ul#evolutions div.NAS,
.formdef-suivi-dossier-pa ul#evolutions div.NAS {
width: 20px;
height: 30px;
float: left;
@ -270,17 +282,41 @@
margin-right: 10px;
}
.formdef-suivi-dossier-ph ul#evolutions div.suspension,
.formdef-suivi-dossier-pa ul#evolutions div.suspension {
.formdef-suivi-dossier-pa ul#evolutions div.suspension,
.formdef-suivi-dossier-ph ul#evolutions div.sursis,
.formdef-suivi-dossier-pa ul#evolutions div.sursis,
.formdef-suivi-dossier-ph ul#evolutions div.Sursis,
.formdef-suivi-dossier-pa ul#evolutions div.Sursis,
.formdef-suivi-dossier-ph ul#evolutions div.NAS,
.formdef-suivi-dossier-pa ul#evolutions div.NAS {
height: 15px;
}
.formdef-suivi-dossier-ph ul#evolutions div.Accord:before,
.formdef-suivi-dossier-pa ul#evolutions div.Accord:before,
.formdef-suivi-dossier-ph ul#evolutions div.Attribution:before,
.formdef-suivi-dossier-pa ul#evolutions div.Attribution:before {
content: "✔";
border: solid 1px #48b24e;
width: 11px;
height: 8px;
color: #48b24e;
}
.formdef-suivi-dossier-ph ul#evolutions div.Rejet:before,
.formdef-suivi-dossier-pa ul#evolutions div.Rejet:before,
.formdef-suivi-dossier-ph ul#evolutions div.Refus:before,
.formdef-suivi-dossier-pa ul#evolutions div.Refus:before,
.formdef-suivi-dossier-ph ul#evolutions div.suspension:before,
.formdef-suivi-dossier-pa ul#evolutions div.suspension:before,
.formdef-suivi-dossier-ph ul#evolutions div.sursis:before,
.formdef-suivi-dossier-pa ul#evolutions div.sursis:before,
.formdef-suivi-dossier-ph ul#evolutions div.Sursis:before,
.formdef-suivi-dossier-pa ul#evolutions div.Sursis:before,
.formdef-suivi-dossier-ph ul#evolutions div.NAS:before,
.formdef-suivi-dossier-pa ul#evolutions div.NAS:before,
.formdef-suivi-dossier-ph ul#evolutions div.Accord:before,
.formdef-suivi-dossier-pa ul#evolutions div.Accord:before {
.formdef-suivi-dossier-pa ul#evolutions div.Accord:before,
.formdef-suivi-dossier-ph ul#evolutions div.Non:before,
.formdef-suivi-dossier-pa ul#evolutions div.Non:before {
content: "✖";
margin: 0;
border: none;
@ -295,23 +331,21 @@
color:#e20612;
border: solid 1px #e20612;
}
.formdef-suivi-dossier-ph ul#evolutions div.Accord:before,
.formdef-suivi-dossier-pa ul#evolutions div.Accord:before {
content: "✔";
border: solid 1px #48b24e;
width: 11px;
height: 8px;
color: #48b24e;
}
.formdef-suivi-dossier-ph ul#evolutions div.suspension:before,
.formdef-suivi-dossier-pa ul#evolutions div.suspension:before,
.formdef-suivi-dossier-ph ul#evolutions div.sursis:before,
.formdef-suivi-dossier-pa ul#evolutions div.sursis:before,
.formdef-suivi-dossier-ph ul#evolutions div.Sursis:before,
.formdef-suivi-dossier-pa ul#evolutions div.Sursis:before,
.formdef-suivi-dossier-ph ul#evolutions div.NAS:before,
.formdef-suivi-dossier-pa ul#evolutions div.NAS:before,
.formdef-suivi-dossier-ph ul#evolutions div.mais:before,
.formdef-suivi-dossier-pa ul#evolutions div.mais:before {
content: "...";
border: solid 1px #ff782a;
padding: 7px 4px 0 3px;
height: 10px;
color:#ff782a;
border: solid 1px #ff782a;
}
.formdef-suivi-dossier-ph ul#evolutions span.noOpinion,
.formdef-suivi-dossier-pa ul#evolutions span.noOpinion {
@ -481,6 +515,18 @@
.formdef-suivi-dossier-ph div.form-link:hover h4 a {
color: #fff;
}
.formdef-suivi-dossier-ph div#rub_service form div.buttons,
.formdef-suivi-dossier-ph div#rub_service form div.buttons {
position: relative;
z-index: 99999;
}
.formdef-suivi-dossier-ph div#rub_service span#msgpieces,
.formdef-suivi-dossier-ph div#rub_service span#msgpieces {
left: -40px;
position: relative;
}
/* PA specific */
.formdef-suivi-dossier-pa ul#evolutions ul.modalites li {
margin:0;

View File

@ -87,7 +87,7 @@ class grandlyonIodas(BaseResource):
@endpoint(perm='can_access')
def getProcedures(self, request, nom, pren, datenais, dpap, typepro):
# Params in the order required by the WSDL from stambia
resp = self.get_client().service.ODA_getProcedures(dpap, typepro, datenais, nom, pren)
resp = self.get_client().service.ODA_getProceduresSIH(dpap, typepro, datenais, nom, pren)
data = sudsobject_to_dict(resp)
# Counts procedures to get the last procedure
nbProc = (len(data['procedures']['procedures']['procedure']) - 1) if 'procedures' in data else ''
@ -107,6 +107,46 @@ class grandlyonIodas(BaseResource):
'libl': data['procedures']['procedures']['procedure'][nbProc]['libl'] if 'procedures' in data else '',
'etapes': sorted(data['procedures']['procedures']['procedure'][nbProc]['etapes']['etape'], key=lambda x: x['id'], reverse=True) if 'procedures' in data else '',
'droits': droits,
'recevabilite': data['procedures']['procedures']['procedure'][nbProc]['recevabilite'] if 'recevabilite' in data['procedures']['procedures']['procedure'][nbProc] else '',
'found': 1 if 'procedures' in data else 0}
@endpoint(perm='can_access')
def getProceduresInt(self, request, nom, pren, datenais, dpap, typepro):
# Tests
#print >> open('/home/grandlyon/marln/debug.test', 'a+'), " * * * * * "
#resp1 = self.get_client().service.ODA_getProcedures(dpap, typepro, datenais, nom, pren)
#resp2 = self.get_client().service.ODA_getProceduresInt(dpap, typepro, datenais, nom, pren)
#if resp1 :
#print >> open('/home/grandlyon/marln/debug.test', 'a+'), "resp1"
#if resp2 :
#print >> open('/home/grandlyon/marln/debug.test', 'a+'), "resp2"
#data1 = sudsobject_to_dict(resp1)
#data2 = sudsobject_to_dict(resp2)
# Params in the order required by the WSDL from stambia
resp = self.get_client().service.ODA_getProceduresInt(dpap, typepro, datenais, nom, pren)
data = sudsobject_to_dict(resp)
# Counts procedures to get the last procedure
nbProc = (len(data['procedures']['procedures']['procedure']) - 1) if 'procedures' in data else ''
# recupere la liste des droits en cours de toutes les procedures d'un individu
droits = []
if 'procedures' in data :
for procedure in data['procedures']['procedures']['procedure'] :
for etape in procedure['etapes']['etape'] :
if 'taches' in etape :
for tache in etape['taches']['tache'] :
if tache['idtypetache'] == 2 and datetime.strptime(tache['datearret'], "%d/%m/%Y") > datetime.now():
for nb in [3,6] :
deltafindroit = nb if (datetime.strptime(tache['datearret'], "%d/%m/%Y") - dateutil.relativedelta.relativedelta(months=nb)) == datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) else 0
droits.append({"libl":tache['produit']['libl'], "dateproposition":tache['dateproposition'], "datearret":tache['datearret'], "dateeffet":tache['dateeffet'], "deltafindroit":deltafindroit})
return {'hash': hashlib.sha224(json.dumps(data)).hexdigest(),
#'libl': data['procedures']['procedures']['procedure'][nbProc]['libl'] if 'procedures' in data else '',
'libl': data['procedures']['procedures']['procedure'][nbProc]['libl'] if 'procedures' in data else '',
'etapes': sorted(data['procedures']['procedures']['procedure'][nbProc]['etapes']['etape'], key=lambda x: x['id'], reverse=True) if 'procedures' in data else '',
'droits': droits,
#'test': data['procedures']['procedures']['procedure'][0],
'found': 1 if 'procedures' in data else 0}
@endpoint(perm='can_access')
@ -133,3 +173,108 @@ class grandlyonIodas(BaseResource):
'procedures': procedures,
#'etapes': sorted(data['procedurespa']['procedurespa']['procedurepa'][nbProc]['etapes']['etape'], key=lambda x: x['id'], reverse=True) if 'procedures' in data else '',
'found': 1 if 'procedurespa' in data else 0}
@endpoint(perm='can_access')
def getTest(self, request, container):
import urllib2
import base64
import dateutil.parser
from collections import defaultdict
from xml.etree import cElementTree as ET
# Convert XML to dict
def etree_to_dict(t):
d = {t.tag: {} if t.attrib else None}
children = list(t)
if children:
dd = defaultdict(list)
for dc in map(etree_to_dict, children):
for k, v in dc.items():
dd[k.replace('{http://www.opengroup.org/xsd/omi/1.0/}','').replace('{http://www.opengroup.org/xsd/odf/1.0/}','')].append(v)
d = {t.tag: {k: v[0] if len(v) == 1 else v for k, v in dd.items()}}
if t.attrib:
d[t.tag].update((k, v) for k, v in t.attrib.items())
if t.text:
text = t.text.strip()
if children or t.attrib:
if text:
d[t.tag]['text'] = text
else:
d[t.tag] = text
return d
url = 'https://biotope-omi.alpha.grandlyon.com'
# Get container and sensor from csv file with ID from data.grandlyon.com
reqContainer = requests.get('https://passerelle.guichet-dev.grandlyon.com/csvdatasource/biotope/data?q='+container)
container = reqContainer.json()
# Get container
containerDict={}
if container['data'][0]['id'] and container['data'][0]['id'] != '' and len(container['data'][0]['id']) > 14 :
payload='<omiEnvelope xmlns="http://www.opengroup.org/xsd/omi/1.0/" version="1.0" ttl="0">'
payload+='<read msgformat="odf">'
payload+='<msg>'
payload+='<Objects xmlns="http://www.opengroup.org/xsd/odf/1.0/">'
payload+='<Object>'
payload+='<id>Organization:Mineris-V1.0.0</id>'
payload+='<Object>'
payload+='<id>Deployment:Bottle_Bank</id>'
payload+='<Object>'
payload+='<id>'+container['data'][0]['id']+'</id>'
payload+='</Object>'
payload+='</Object>'
payload+='</Object>'
payload+='</Objects>'
payload+='</msg>'
payload+='</read>'
payload+='</omiEnvelope>'
head = {"Content-type": "application/xml"}
req = requests.post(url, headers=head, data=payload)
# XML result to dict
containerRes = ET.XML(req.text.encode('utf8'))
containerDict = etree_to_dict(containerRes)
# Get sensor
sensorDict={}
if container['data'][0]['sensor'] and container['data'][0]['sensor'] != '' :
payloadSensor='<omiEnvelope xmlns="http://www.opengroup.org/xsd/omi/1.0/" version="1.0" ttl="0">'
payloadSensor+='<read msgformat="odf">'
payloadSensor+='<msg>'
payloadSensor+='<Objects xmlns="http://www.opengroup.org/xsd/odf/1.0/">'
payloadSensor+='<Object>'
payloadSensor+='<id>Organization:SigrenEa-V1.1.0</id>'
payloadSensor+='<Object>'
payloadSensor+='<id>Deployment:Bottle_Bank:1edd171c-5f2d-11e8-a6ab-10604b7fb2e7</id>'
payloadSensor+='<Object>'
payloadSensor+='<id>'+container['data'][0]['sensor']+'</id>'
payloadSensor+='</Object>'
payloadSensor+='</Object>'
payloadSensor+='</Object>'
payloadSensor+='</Objects>'
payloadSensor+='</msg>'
payloadSensor+='</read>'
payloadSensor+='</omiEnvelope>'
headSensor = {"Content-type": "application/xml"}
reqSensor = requests.post(url, headers=headSensor, data=payloadSensor)
# XML result to dict
sensRes = ET.XML(reqSensor.text.encode('utf8'))
sensorDict = etree_to_dict(sensRes)
# Build result dict
result = {}
if containerDict :
# Container info
for item in containerDict["{http://www.opengroup.org/xsd/omi/1.0/}omiEnvelope"]["response"]["result"]["msg"]["Objects"]["Object"]["Object"]["Object"]["InfoItem"] :
result.update({ item["name"].replace('schema:','') : dateutil.parser.parse(item["value"]["text"]).strftime("%d/%m/%Y") if "date" in item["name"] else item["value"]["text"] })
if sensorDict :
# Id Container
result.update({'idContainer':sensorDict["{http://www.opengroup.org/xsd/omi/1.0/}omiEnvelope"]["response"]["result"]["msg"]["Objects"]["Object"]["Object"]["Object"]["Object"]["Object"]['id']})
# Sensor info
for item in sensorDict["{http://www.opengroup.org/xsd/omi/1.0/}omiEnvelope"]["response"]["result"]["msg"]["Objects"]["Object"]["Object"]["Object"]["Object"]["Object"]["InfoItem"] :
result.update({ item["name"].replace('schema:','').replace('FIWARE:','') : item["value"]["text"] })
for subItem in sensorDict["{http://www.opengroup.org/xsd/omi/1.0/}omiEnvelope"]["response"]["result"]["msg"]["Objects"]["Object"]["Object"]["Object"]["Object"]["Object"]["Object"] :
if 'InfoItem' in subItem :
result.update({subItem['id'].replace('Container:',''):subItem['InfoItem']})
return result