Ajout pieces complementaire, DOC, DAACT
This commit is contained in:
parent
e1ee93e23f
commit
707900705e
|
@ -188,10 +188,10 @@ class CartADS(BaseResource):
|
|||
|
||||
|
||||
if formdata.attachments:
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "nb attach: ", len(formdata.attachments)
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "nb attach: ", len(formdata.attachments)
|
||||
for key, attachment in formdata.attachments.items():
|
||||
filename = attachment.get('filename') or 'file%s.bin' % num
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "key: ", key, " ; filename: ", filename
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "key: ", key, " ; filename: ", filename
|
||||
content = base64.b64decode(attachment.get('content') or '')
|
||||
|
||||
|
||||
|
@ -203,8 +203,10 @@ class CartADS(BaseResource):
|
|||
if "cerfa" in key:
|
||||
if (not formdata.values['cerfa_nom']) or formdata.values['cerfa_nom'] == '':
|
||||
return {'err': 1, 'message': 'Unknown cerfa_nom'}
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "cerfa_nom: ", formdata.values['cerfa_nom']
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "cerfa_nom: ", formdata.values['cerfa_nom']
|
||||
filenameInZip = formdata.values['cerfa_nom'] + ".pdf"
|
||||
elif "autres_demandeurs" in key:
|
||||
filenameInZip = "Fiches_complementaires/cerfa_"+ key + ".pdf"
|
||||
else:
|
||||
if len(key.split("_")) == 4:
|
||||
obj, idPiece, codePiece, noPiece = key.split("_")
|
||||
|
@ -214,7 +216,7 @@ class CartADS(BaseResource):
|
|||
filenameInZip = "Pieces/"+ idPiece + "-" + codePiece
|
||||
if "." in filename:
|
||||
filenameInZip += filename[filename.rfind("."):]
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "filenameInZip: ", filenameInZip
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "filenameInZip: ", filenameInZip
|
||||
zf.writestr(filenameInZip, content)
|
||||
|
||||
except ValueError as e:
|
||||
|
@ -242,7 +244,7 @@ class CartADS(BaseResource):
|
|||
# size_max doit etre un multiple de 4 pour avoir un nb de caracteres valide en base 64 (car 3 octets y sont encodes sur 4 caracteres)
|
||||
size_max = 16777216 # 16 mo, choisi arbitrairement pour ne pas envoyer trop d'un coup en http post
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le sendfile"
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le sendfile"
|
||||
|
||||
for x in range(0, len(b64_fileContent)/size_max + 1):
|
||||
#respHttp = self.requests.post('https://api-rec.grandlyon.com/ads-sendfile-dev/sendfile.aspx',
|
||||
|
@ -280,7 +282,7 @@ class CartADS(BaseResource):
|
|||
#headers = u'Content-Length: 844 | Accept-Encoding: gzip, deflate | SOAPAction: "http://tempuri.org/IServicePortail/NotifierDepotDossier" | Accept: */* | User-Agent: python-requests/2.4.3 CPython/2.7.9 Linux/3.16.0-4-amd64 | Connection: keep-alive | Content-Type: text/xml; charset=utf-8 | '
|
||||
#headers += u'Authorization: Bearer 458931e2-fbac-3087-875c-e0833d66f620' # + self.get_token()
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le NotifierDepotDossier"
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le NotifierDepotDossier"
|
||||
|
||||
#TODO: faire en soap comme les autres ou adapter url pour prod
|
||||
resp = self.requests.post('https://api-rec.grandlyon.com/ads-rec-portail/',
|
||||
|
@ -315,7 +317,7 @@ class CartADS(BaseResource):
|
|||
resp = client.service.NotifierDepotDossier(notifierDepotDossier)
|
||||
'''
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le return"
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le return"
|
||||
|
||||
#return {'data': sudsobject_to_dict(resp), 'respHttp': respHttp.content, 'length': len(b64_fileContent)}
|
||||
return {'respHttp': respHttp.content, 'length': len(b64_fileContent), 'err': 0}
|
||||
|
@ -400,7 +402,7 @@ class CartADS(BaseResource):
|
|||
|
||||
@endpoint(perm='can_access')
|
||||
def get_id_dossier(self, request, tracking_code, date_dossier):
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "date_dossier: ", date_dossier
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "date_dossier: ", date_dossier
|
||||
# TODO: faire plus simple si gfi explique comment obtenir l'IdDossier a partir de l'IdDossierExterne en pull (et pas qu'en push dans leur notif qui marche pas)
|
||||
# Renvoie les dossiers a la date demandee
|
||||
#TODO: faire param pour client1
|
||||
|
@ -426,7 +428,7 @@ class CartADS(BaseResource):
|
|||
nomDossierOut = dict_resp_dossier["NomDossier"]
|
||||
break;
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "idDossierOut: ", idDossierOut
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "idDossierOut: ", idDossierOut
|
||||
return {'data': {'IdDossier': idDossierOut, 'NomDossier': nomDossierOut} }
|
||||
|
||||
@endpoint(perm='can_access')
|
||||
|
@ -446,7 +448,6 @@ class CartADS(BaseResource):
|
|||
def get_pieces_dossier_a_completer(self, request, id_dossier):
|
||||
resp = self.get_client('cartads-piece.wsdl').service.GetPiecesDossierACompleter(self.get_token_cartads(), id_dossier)
|
||||
dict_resp = sudsobject_to_dict(resp)
|
||||
#return {'data': sudsobject_to_dict(resp)}
|
||||
|
||||
if not 'PieceDossier' in dict_resp:
|
||||
return {'data': None, 'err': 0}
|
||||
|
@ -460,6 +461,30 @@ class CartADS(BaseResource):
|
|||
out_item['Descriptif'] = objet["Descriptif"]
|
||||
out_item['IdDosPiece'] = objet["IdDosPiece"]
|
||||
out_item['CodePiece'] = objet["CodePiece"]
|
||||
out_item['IdPiece'] = objet["IdPiece"]
|
||||
out.append(out_item)
|
||||
|
||||
def getKey(objet):
|
||||
return objet['CodePiece']
|
||||
return {'data': sorted(out, key=getKey)}
|
||||
|
||||
@endpoint(perm='can_access')
|
||||
def get_pieces_daact(self, request, id_dossier):
|
||||
resp = self.get_client('cartads-piece.wsdl').service.GetPiecesDaact(self.get_token_cartads(), id_dossier)
|
||||
dict_resp = sudsobject_to_dict(resp)
|
||||
|
||||
if not 'PieceDossier' in dict_resp:
|
||||
return {'data': None, 'err': 0}
|
||||
|
||||
# On parcourt la liste pour la mettre sous la forme id, text, pour l'utiliser comme source de donnees dans le formulaire
|
||||
out = []
|
||||
for objet in dict_resp['PieceDossier']:
|
||||
out_item = {}
|
||||
out_item['id'] = objet["IdPiece"]
|
||||
out_item['text'] = objet["CodePiece"] + " - " + objet["LibellePiece"]
|
||||
out_item['Descriptif'] = objet["Descriptif"]
|
||||
out_item['CodePiece'] = objet["CodePiece"]
|
||||
out_item['IdPiece'] = objet["IdPiece"]
|
||||
out.append(out_item)
|
||||
|
||||
def getKey(objet):
|
||||
|
@ -474,47 +499,81 @@ class CartADS(BaseResource):
|
|||
except ValueError as e:
|
||||
raise ParameterTypeError(e.message)
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "piece_compl_var_fichier: ", formdata.values['piece_compl_var_fichier']
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "piece_compl_var_fichier_raw: ", formdata.values['piece_compl_var_fichier_raw']
|
||||
if not formdata.values['id_dossier']:
|
||||
return {'data': 'no id_dossier', 'err': 1}
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "id_dossier: ", formdata.values['id_dossier']
|
||||
|
||||
# si c'est une piece complementaire (pas doc ni daact)
|
||||
if formdata.values['docDaact'] == '':
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "piece_compl_var_fichier: ", formdata.values['piece_compl_var_fichier']
|
||||
fichier_raw = formdata.values['piece_compl_var_fichier_raw']
|
||||
filename_in = formdata.values['piece_compl_var_fichier']
|
||||
filename_out = formdata.values['piece_compl_var_infos_IdPiece'] + "-" + formdata.values['piece_compl_var_infos_CodePiece'] + "-" + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
||||
if "." in filename_in:
|
||||
filename_out += filename_in[filename_in.rfind("."):]
|
||||
elif formdata.values['docDaact'] == 'doc':
|
||||
fichier_raw = formdata.values['piece_doc_var_fichier_raw']
|
||||
filename_out = "cerfa.pdf"
|
||||
elif formdata.values['docDaact'] == 'daact':
|
||||
fichier_raw = formdata.values['piece_daact_var_fichier_raw']
|
||||
filename_out = "cerfa.pdf"
|
||||
elif formdata.values['docDaact'] == 'pieceDaact':
|
||||
fichier_raw = formdata.values['piece_pieceDaact_var_fichier_raw']
|
||||
filename_in = formdata.values['piece_pieceDaact_var_fichier']
|
||||
filename_out = formdata.values['piece_pieceDaact_var_infos_IdPiece'] + "-" + formdata.values['piece_pieceDaact_var_infos_CodePiece'] + "-" + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
|
||||
if "." in filename_in:
|
||||
filename_out += filename_in[filename_in.rfind("."):]
|
||||
else:
|
||||
return {'data': 'unknown docDaact: ' + formdata.values['docDaact'], 'err': 1}
|
||||
|
||||
|
||||
#TODO: faire un get de https://demarches.guichet-dev.grandlyon.com/permis-de-construire/21/files/form-piece_compl_depose-fichier/plan-situation.txt
|
||||
fichier_content_base64 = fichier_raw['content']
|
||||
|
||||
|
||||
message = u'<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:tem="http://tempuri.org/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">'
|
||||
message += u'<soapenv:Header>'
|
||||
message += u'<tem:Token>'+str(self.get_token_cartads()).decode('utf8')+'</tem:Token>'
|
||||
message += u'<tem:NomFichier>'+filename_out+'</tem:NomFichier>'
|
||||
#TODO: voir s'il faut passer la longueur du fichier source ou encode en base64
|
||||
message += u'<tem:Length>'+str(len(fichier_content_base64))+'</tem:Length>'
|
||||
message += u'<tem:InformationsComplementaires>'
|
||||
if formdata.values['docDaact'] == '':
|
||||
#piece complementaire
|
||||
message += u'<arr:KeyValueOfstringstring><arr:Key>idDosPiece</arr:Key><arr:Value>'+str(formdata.values['piece_compl_var_infos_IdDosPiece']).decode('utf8')+u'</arr:Value></arr:KeyValueOfstringstring>'
|
||||
else:
|
||||
#piece ouverture chantier (doc) ou achevement (daact) ou piece achevement (pieceDaact)
|
||||
message += u'<arr:KeyValueOfstringstring><arr:Key>docDaact</arr:Key><arr:Value>'+str(formdata.values['docDaact']).decode('utf8')+u'</arr:Value></arr:KeyValueOfstringstring>'
|
||||
if formdata.values['docDaact'] == 'pieceDaact':
|
||||
#piece daact
|
||||
message += u'<arr:KeyValueOfstringstring><arr:Key>idPieceDaact</arr:Key><arr:Value>'+str(formdata.values['piece_pieceDaact_var_infos_IdPiece']).decode('utf8')+u'</arr:Value></arr:KeyValueOfstringstring>'
|
||||
message += u'<arr:KeyValueOfstringstring><arr:Key>renameFile</arr:Key><arr:Value>true</arr:Value></arr:KeyValueOfstringstring>'
|
||||
message += u'</tem:InformationsComplementaires>'
|
||||
message += u'<tem:IdDossier>'+str(formdata.values['id_dossier']).decode('utf8')+u'</tem:IdDossier>'
|
||||
message += u'</soapenv:Header>'
|
||||
message += u'<soapenv:Body><tem:RemoteFileInfoUploadRequest>'
|
||||
message += u'<tem:FileByteStream>'+str(fichier_content_base64).decode('utf8')+u'</tem:FileByteStream>'
|
||||
#message += '<tem:FileByteStream>dGVzdA==</tem:FileByteStream>'
|
||||
message += u'</tem:RemoteFileInfoUploadRequest></soapenv:Body></soapenv:Envelope>'
|
||||
|
||||
if not formdata.values['piece_compl_var_fichier']:
|
||||
return {'data': 'no piece_compl_var_fichier', 'err': 1}
|
||||
|
||||
message = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:tem="http://tempuri.org/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:arr="http://schemas.microsoft.com/2003/10/Serialization/Arrays">'
|
||||
message += '<soapenv:Header>'
|
||||
message += '<tem:Token>'+self.get_token_cartads()+'</tem:Token>'
|
||||
message += '<tem:NomFichier>'+formdata.values['piece_compl_var_fichier']+'</tem:NomFichier>'
|
||||
message += '<tem:Length>'+length(formdata.values['piece_compl_var_fichier_raw'])+'</tem:Length>'
|
||||
message += '<tem:InformationsComplementaires>'
|
||||
message += '<arr:KeyValueOfstringstring><arr:Key>docDaact</arr:Key><arr:Value>doc</arr:Value></arr:KeyValueOfstringstring>'
|
||||
message += '</tem:InformationsComplementaires>'
|
||||
message += '<tem:IdDossier>'+'436205'+'</tem:IdDossier>'
|
||||
message += '</soapenv:Header>'
|
||||
message += '<soapenv:Body><tem:RemoteFileInfoUploadRequest>'
|
||||
message += '<tem:FileByteStream>'+formdata.values['piece_compl_var_fichier_raw']+'</tem:FileByteStream>'
|
||||
message += '</tem:RemoteFileInfoUploadRequest></soapenv:Body></soapenv:Envelope>'
|
||||
|
||||
headers = {'Authorization': self.get_token(),
|
||||
'SOAPAction':'"http://tempuri.org/IServiceDocumentation/UploadFile"',
|
||||
'Content-Type': 'text/xml; charset=UTF-8'}
|
||||
#headers and message must be str and not unicode to avoid SSL3_WRITE_PENDING : bad write retry error (cf. https://github.com/urllib3/urllib3/issues/855)
|
||||
headers = {'Authorization': self.get_token().encode('utf-8'),
|
||||
'SOAPAction':'"http://tempuri.org/IServiceDocumentation/UploadFile"'.encode('utf-8'),
|
||||
'Content-Type': 'text/xml; charset=UTF-8'.encode('utf-8')}
|
||||
|
||||
#headers = u'Content-Length: 844 | Accept-Encoding: gzip, deflate | SOAPAction: "http://tempuri.org/IServicePortail/NotifierDepotDossier" | Accept: */* | User-Agent: python-requests/2.4.3 CPython/2.7.9 Linux/3.16.0-4-amd64 | Connection: keep-alive | Content-Type: text/xml; charset=utf-8 | '
|
||||
#headers += u'Authorization: Bearer 458931e2-fbac-3087-875c-e0833d66f620' # + self.get_token()
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le UploadFile"
|
||||
|
||||
print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "message: " + message
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "test avant le UploadFile"
|
||||
#print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "message: " + message
|
||||
|
||||
#TODO: faire en soap comme les autres ou adapter url pour prod
|
||||
resp = self.requests.post('https://api-rec.grandlyon.com/ads-rec-documentation/',
|
||||
data=message,
|
||||
data=message.encode('utf-8'),
|
||||
headers=headers)
|
||||
|
||||
|
||||
###print >> open('/home/grandlyon/log/cartads.debug', 'a+'), datetime.datetime.now(), "resp.content: " + resp.content
|
||||
|
||||
return {'data': resp.content, 'err': 0}
|
||||
|
||||
|
||||
|
@ -596,7 +655,7 @@ class CartADS(BaseResource):
|
|||
@endpoint(perm='can_access')
|
||||
def write_wcs_files(self, request, type_dossier):
|
||||
h = HTMLParser.HTMLParser() # h.unescape(string) decode le html qui vient du web service en unicode : http://fredericiana.com/2010/10/08/decoding-html-entities-to-text-in-python/
|
||||
output_string = u"<!--#### A inserer a partir du field 'Pièces obligatoires' jusqu'a la fin des </fields> -->\n"
|
||||
output_string = u"<!--#### A inserer a partir du field 'Pièces obligatoires' jusqu'au field <label>Autres demandeurs</label> ou sinon la fin des </fields> -->\n"
|
||||
|
||||
# page en cours de construction : 0 = pieces obligatoires
|
||||
current_page = 0
|
||||
|
@ -677,6 +736,6 @@ class CartADS(BaseResource):
|
|||
output_string += u" </fields>\n"
|
||||
|
||||
output_string = output_string.encode('ascii', errors='xmlcharrefreplace')
|
||||
print >> open('/home/grandlyon/log/'+type_dossier+'_'+date_file.strftime('%Y%m%d%H%M%S')+'.wcs', 'a+'), output_string
|
||||
###print >> open('/home/grandlyon/log/'+type_dossier+'_'+date_file.strftime('%Y%m%d%H%M%S')+'.wcs', 'a+'), output_string
|
||||
|
||||
return {'data': output_string}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/* img commune */
|
||||
@media screen and (min-width: 1000px) {
|
||||
.formdef-permis-de-construire .imgCommune img,
|
||||
.formdef-certificat-d-urbanisme .imgCommune img {
|
||||
.formdef-category-logement .imgCommune img {
|
||||
position: absolute;
|
||||
top: 132px;
|
||||
left: 500px;
|
||||
|
@ -10,59 +9,59 @@
|
|||
}
|
||||
|
||||
/* File upload styling for permis de construire */
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget {
|
||||
.formdef-category-logement .FileWithPreviewWidget {
|
||||
display: flow-root;
|
||||
border-bottom: 0.1em solid #80808052;
|
||||
background-color: #d3d3d333;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .title,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .content,
|
||||
.formdef-permis-de-construire .FileWidget {
|
||||
.formdef-category-logement .FileWithPreviewWidget .title,
|
||||
.formdef-category-logement .FileWithPreviewWidget .content,
|
||||
.formdef-category-logement .FileWidget {
|
||||
display: inline-block;
|
||||
}
|
||||
.formdef-permis-de-construire .widget .title {
|
||||
.formdef-category-logement .widget .title {
|
||||
padding: 10px;
|
||||
}
|
||||
.formdef-permis-de-construire form.quixote div.widget {
|
||||
.formdef-category-logement form.quixote div.widget {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .content {
|
||||
.formdef-category-logement .FileWithPreviewWidget .content {
|
||||
position: relative;
|
||||
float: right;
|
||||
max-width: 258px;
|
||||
height: 35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.widget-required.has-no-file {
|
||||
.formdef-category-logement .FileWithPreviewWidget.widget-required.has-no-file {
|
||||
background-color: #ff000030;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file {
|
||||
background-color: #b9d4b9;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .fileprogress,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .fileinfo {
|
||||
.formdef-category-logement .FileWithPreviewWidget .fileprogress,
|
||||
.formdef-category-logement .FileWithPreviewWidget .fileinfo {
|
||||
position: relative;
|
||||
top: -35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.widget-readonly .fileinfo {
|
||||
.formdef-category-logement .FileWithPreviewWidget.widget-readonly .fileinfo {
|
||||
top: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint {
|
||||
.formdef-category-logement .FileWithPreviewWidget .hint {
|
||||
position: relative;
|
||||
color:#ffffff00;
|
||||
padding: 3px 8px 5px 8px;
|
||||
top: -10px;
|
||||
left: -270px;
|
||||
}
|
||||
/*.formdef-permis-de-construire .FileWithPreviewWidget .hint:hover,*/
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint:active {
|
||||
/*.formdef-category-logement .FileWithPreviewWidget .hint:hover,*/
|
||||
.formdef-category-logement .FileWithPreviewWidget .hint:active {
|
||||
position: relative;
|
||||
background-color: #d0e3ff;
|
||||
border: 0.01em solid #4e4e4e;
|
||||
color: #000;
|
||||
z-index: 99999;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget .hint:before {
|
||||
.formdef-category-logement .FileWithPreviewWidget .hint:before {
|
||||
position: relative;
|
||||
content: "ⓘ";
|
||||
font-size: 1.3em;
|
||||
|
@ -71,35 +70,35 @@
|
|||
top: -20px;
|
||||
cursor: help;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus label,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file .error,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file .hint,
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.plus {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus label,
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file .error,
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file .hint,
|
||||
.formdef-category-logement .FileWithPreviewWidget.plus {
|
||||
display: none;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus {
|
||||
display: flow-root;
|
||||
position: relative;
|
||||
top: -7px;
|
||||
background-color: #b9d4b9;
|
||||
height: 43px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus2 {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus2 {
|
||||
top: -14px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus3 {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus3 {
|
||||
top: -21px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus4 {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus4 {
|
||||
top: -28px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus5 {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-file + .FileWithPreviewWidget.plus5 {
|
||||
top: -35px;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.plus.widget-readonly.has-no-file {
|
||||
.formdef-category-logement .FileWithPreviewWidget.plus.widget-readonly.has-no-file {
|
||||
display: none;
|
||||
}
|
||||
.formdef-permis-de-construire .FileWithPreviewWidget.has-no-file .error {
|
||||
.formdef-category-logement .FileWithPreviewWidget.has-no-file .error {
|
||||
left: -180px;
|
||||
position: relative;
|
||||
line-height: 0px;
|
||||
|
@ -109,10 +108,10 @@
|
|||
}
|
||||
|
||||
/* case à cocher */
|
||||
.formdef-permis-de-construire .checkbox-cerfa .content,
|
||||
.formdef-permis-de-construire .checkbox-cerfa .title {
|
||||
.formdef-category-logement .checkbox-cerfa .content,
|
||||
.formdef-category-logement .checkbox-cerfa .title {
|
||||
display: inline;
|
||||
}
|
||||
.formdef-permis-de-construire .checkbox-cerfa .content {
|
||||
.formdef-category-logement .checkbox-cerfa .content {
|
||||
float: left;
|
||||
}
|
||||
|
|
Reference in New Issue