selection multiple des photos à uploader
This commit is contained in:
@@ -131,7 +131,7 @@ def insert_suivi(request, nodossier, comment):
|
|||||||
|
|
||||||
query = """
|
query = """
|
||||||
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, USERMAJ) VALUES
|
INSERT INTO dem_lig (societe, NO_ID, DATE, COMMENT, USERMAJ) VALUES
|
||||||
(:societe, :no_id, CURRENT_DATE(), :comment, 'MAIL');"""
|
(:societe, :no_id, CURRENT_DATE(), :comment, 'EMAIL');"""
|
||||||
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment})
|
execute_query(request, query, {'societe': societe, 'no_id': no_id, 'comment': comment})
|
||||||
|
|
||||||
def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE):
|
def get_similaires_byChantier(request, societe, C_NOM, C_ADR, C_CP, C_VILLE):
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<h3 class="text-primary">ADRESSE</h3>
|
<h3 class="text-primary">ADRESSE</h3>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-4" for="C_ADR">Adresse</label>
|
<label class="col-xs-3 control-label" for="C_ADR">Adresse</label>
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
<input class="form-control" type="text" id="C_ADR" name="C_ADR" value="${dossier.C_ADR}"
|
<input class="form-control" type="text" id="C_ADR" name="C_ADR" value="${dossier.C_ADR}"
|
||||||
placeholder="40 caractères maximum"
|
placeholder="40 caractères maximum"
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-4" for="C_ADR2">Adresse 2</label>
|
<label class="col-xs-3 control-label" for="C_ADR2">Adresse 2</label>
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
<input class="form-control" type="text" id="C_ADR2" name="C_ADR2" value="${dossier.C_ADR2}"
|
<input class="form-control" type="text" id="C_ADR2" name="C_ADR2" value="${dossier.C_ADR2}"
|
||||||
placeholder="40 caractères maximum"
|
placeholder="40 caractères maximum"
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-xs-4" for="code_postal">Code postal</label>
|
<label class="col-xs-3 control-label" for="code_postal">Code postal</label>
|
||||||
<div class="col-xs-8">
|
<div class="col-xs-8">
|
||||||
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
|
<input class="form-control" type="text" id="code_postal" name="code_postal" value="${code_postal}"
|
||||||
placeholder="5 caractères maximum"
|
placeholder="5 caractères maximum"
|
||||||
@@ -41,23 +41,23 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Etage</label>
|
<label class="col-xs-3 control-label">Etage</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_ETAGE"
|
<input class="form-control" type="text" name="C_ETAGE"
|
||||||
value="${dossier.C_ETAGE}" placeholder="10 caractères maximum"
|
value="${dossier.C_ETAGE}" placeholder="10 caractères maximum"
|
||||||
data-fv-stringlength="true"
|
data-fv-stringlength="true"
|
||||||
data-fv-stringlength-max="10"
|
data-fv-stringlength-max="10"
|
||||||
data-fv-stringlength-message="10 caractères maximum" />
|
data-fv-stringlength-message="10 caractères maximum" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 checkbox">
|
<div class="col-xs-3 checkbox">
|
||||||
<label><input type="checkbox" name="ascenseur" value="dossier.c_ascenseur" id="ascenseur"
|
<label><input type="checkbox" name="ascenseur" value="dossier.c_ascenseur" id="ascenseur"
|
||||||
tal:attributes="checked dossier.c_ascenseur != 0 and 'checked' or None">Ascenceur
|
tal:attributes="checked dossier.c_ascenseur != 0 and 'checked' or None">Ascenseur
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Code d'accès</label>
|
<label class="col-xs-3 control-label">Code d'accès</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_CODE"
|
<input class="form-control" type="text" name="C_CODE"
|
||||||
value="${dossier.C_CODE}" placeholder="20 caractères maximum"
|
value="${dossier.C_CODE}" placeholder="20 caractères maximum"
|
||||||
data-fv-stringlength="true"
|
data-fv-stringlength="true"
|
||||||
@@ -68,8 +68,8 @@
|
|||||||
|
|
||||||
<h3 class="text-primary">EMAIL et TELEPHONES</h3>
|
<h3 class="text-primary">EMAIL et TELEPHONES</h3>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Adresse email</label>
|
<label class="col-xs-3 control-label">Adresse email</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-xs-8">
|
||||||
<input class="form-control" type="text" name="C_EMAIL"
|
<input class="form-control" type="text" name="C_EMAIL"
|
||||||
value="${dossier.C_EMAIL}" placeholder="50 caractères maximum"
|
value="${dossier.C_EMAIL}" placeholder="50 caractères maximum"
|
||||||
data-fv-emailaddress="true"
|
data-fv-emailaddress="true"
|
||||||
@@ -77,8 +77,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Téléphone fixe</label>
|
<label class="col-xs-3 control-label">Téléphone fixe</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_TEL1"
|
<input class="form-control" type="text" name="C_TEL1"
|
||||||
value="${dossier.C_TEL1}" placeholder="20 caractères maximum"
|
value="${dossier.C_TEL1}" placeholder="20 caractères maximum"
|
||||||
data-fv-phone="true"
|
data-fv-phone="true"
|
||||||
@@ -87,8 +87,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Téléphone prof.</label>
|
<label class="col-xs-3 control-label">Téléphone prof.</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_TEL2"
|
<input class="form-control" type="text" name="C_TEL2"
|
||||||
value="${dossier.C_TEL2}" placeholder="20 caractères maximum"
|
value="${dossier.C_TEL2}" placeholder="20 caractères maximum"
|
||||||
data-fv-phone="true"
|
data-fv-phone="true"
|
||||||
@@ -97,8 +97,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Téléphone mobile</label>
|
<label class="col-xs-3 control-label">Portable 1</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_TELP"
|
<input class="form-control" type="text" name="C_TELP"
|
||||||
value="${dossier.C_TELP}" placeholder="20 caractères maximum"
|
value="${dossier.C_TELP}" placeholder="20 caractères maximum"
|
||||||
data-fv-phone="true"
|
data-fv-phone="true"
|
||||||
@@ -107,26 +107,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-sm-4 control-label">Téléphone fax</label>
|
<label class="col-xs-3 control-label">Portable 2</label>
|
||||||
<div class="col-sm-5">
|
<div class="col-xs-5">
|
||||||
<input class="form-control" type="text" name="C_FAX"
|
<input class="form-control" type="text" name="C_FAX"
|
||||||
value="${dossier.C_FAX}" placeholder="20 caractères maximum"
|
value="${dossier.C_FAX}" placeholder="20 caractères maximum"
|
||||||
data-fv-phone="true"
|
data-fv-phone="true"
|
||||||
data-fv-phone-country="FR"
|
data-fv-phone-country="FR"
|
||||||
data-fv-phone-message="Ce numéro de téléphone n'est pas vailde" />
|
data-fv-phone-message="Ce numéro de téléphone n'est pas vailde" />
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-4">
|
||||||
|
<input class="form-control" type="text" name="C_FAX_CMT"
|
||||||
|
value="${dossier.C_FAX_CMT}" placeholder="20 caractères maximum" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 class="text-primary">CABINET / EXPERT</h3>
|
<h3 class="text-primary">CABINET / EXPERT</h3>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-4">Cabinet</label>
|
<label class="col-xs-3 control-label">Cabinet</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-xs-8">
|
||||||
<p class="form-control-static">${dossier.nom_cabinet}</p>
|
<p class="form-control-static">${dossier.nom_cabinet}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-4" for="EXPERT">Expert</label>
|
<label class="col-xs-3 control-label" for="EXPERT">Expert</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-xs-8">
|
||||||
<select class="form-control" id="EXPERT" name="EXPERT">
|
<select class="form-control" id="EXPERT" name="EXPERT">
|
||||||
<div tal:repeat="item experts">
|
<div tal:repeat="item experts">
|
||||||
<option value="${item.CODE_EXP}" tal:attributes="selected dossier.EXPERT==item.CODE_EXP and 'selected' or None">${item.NOM}</option>
|
<option value="${item.CODE_EXP}" tal:attributes="selected dossier.EXPERT==item.CODE_EXP and 'selected' or None">${item.NOM}</option>
|
||||||
@@ -136,7 +140,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-sm-offset-4 col-sm-8">
|
<div class="col-xs-offset-3 col-xs-8">
|
||||||
<a class="btn btn-default" href="${request.application_url}/dossier_view/${nodossier}">
|
<a class="btn btn-default" href="${request.application_url}/dossier_view/${nodossier}">
|
||||||
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
<span class="glyphicon glyphicon-chevron-left"></span> Annuler</a>
|
||||||
<button class="btn btn-primary" type="submit" name="form.submitted">
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
|||||||
@@ -26,14 +26,14 @@
|
|||||||
Etage - Code<br />
|
Etage - Code<br />
|
||||||
Ascenseur<br />
|
Ascenseur<br />
|
||||||
Tél. domicile - prof.<br />
|
Tél. domicile - prof.<br />
|
||||||
Tél. mobile - fax
|
Portable 1 - Portable 2
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
${dossier.C_ETAGE} - ${dossier.C_CODE}<br />
|
${dossier.C_ETAGE} - ${dossier.C_CODE}<br />
|
||||||
<span tal:condition="dossier.c_ascenseur==0">NON<br /></span>
|
<span tal:condition="dossier.c_ascenseur==0">NON<br /></span>
|
||||||
<span tal:condition="dossier.c_ascenseur!=0">OUI<br /></span>
|
<span tal:condition="dossier.c_ascenseur!=0">OUI<br /></span>
|
||||||
${dossier.C_TEL1} - ${dossier.C_TEL2}<br />
|
${dossier.C_TEL1} - ${dossier.C_TEL2}<br />
|
||||||
${dossier.C_TELP} - ${dossier.C_FAX}
|
${dossier.C_TELP} - ${dossier.C_FAX} (${dossier.C_FAX_CMT})
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -16,8 +16,10 @@
|
|||||||
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="uploadfile">Veuillez séléctionner un fichier</label>
|
<label for="uploadfile">Veuillez séléctionner un ou plusieurs fichiers</label>
|
||||||
<input id="uploadfile" name="filename" type="file" value="" required />
|
<span class="btn btn-default btn-file">
|
||||||
|
<input class="file" id="uploadfile" name="files" type="file" required multiple />
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<a class="btn btn-default" href="${url_retour}">
|
<a class="btn btn-default" href="${url_retour}">
|
||||||
|
|||||||
@@ -380,20 +380,22 @@ def upload_img(request):
|
|||||||
|
|
||||||
|
|
||||||
if 'form.submitted' in request.params:
|
if 'form.submitted' in request.params:
|
||||||
# récupère le fichier download dans le dossier /tmp
|
# récupère le(s) fichier(s) download dans le dossier /tmp
|
||||||
input_file = request.POST['filename'].file
|
fileslist = request.POST.getall('files')
|
||||||
input_name = request.POST['filename'].filename
|
for f in fileslist:
|
||||||
ext_allowed = ['jpeg','jpg','png']
|
input_file = f.file
|
||||||
temp_file = downloadFile2Temp(input_file, input_name, ext_allowed)
|
input_name = f.filename
|
||||||
if temp_file[:8] == 'ERREUR: ':
|
ext_allowed = ['jpeg','jpg','png']
|
||||||
request.session.flash(temp_file, 'danger')
|
temp_file = downloadFile2Temp(input_file, input_name, ext_allowed)
|
||||||
return HTTPFound(location=url)
|
if temp_file[:8] == 'ERREUR: ':
|
||||||
|
request.session.flash(temp_file, 'danger')
|
||||||
# fabriquer le nom du rapport
|
return HTTPFound(location=url)
|
||||||
filename = '%s-DD%s-%s-%s' % (societe, nochantier, norapport, input_name)
|
|
||||||
tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_file, filename, logged_in)
|
# fabriquer le nom du rapport
|
||||||
|
filename = '%s-DD%s-%s-%s' % (societe, nochantier, norapport, input_name)
|
||||||
request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success')
|
tempFile2Dossier(request, societe, nochantier, norapport, nosection, temp_file, filename, logged_in)
|
||||||
|
|
||||||
|
request.session.flash('%s : Ce fichier est téléchargé avec succès.' % input_name, 'success')
|
||||||
|
|
||||||
# lire tous les photos attachées
|
# lire tous les photos attachées
|
||||||
photos = get_photos(request, nodossier, int(norapport), int(nosection))
|
photos = get_photos(request, nodossier, int(norapport), int(nosection))
|
||||||
@@ -967,50 +969,60 @@ def demandes(request):
|
|||||||
return HTTPFound(location=request.route_url('home'))
|
return HTTPFound(location=request.route_url('home'))
|
||||||
|
|
||||||
raw_email = msg_data[0][1]
|
raw_email = msg_data[0][1]
|
||||||
|
import pdb;pdb.set_trace()
|
||||||
# converts byte literal to string removing b''
|
# converts byte literal to string removing b''
|
||||||
raw_email_string = raw_email.decode('utf-8')
|
try:
|
||||||
email_message = email.message_from_string(raw_email_string)
|
raw_email_string = raw_email.decode('utf-8')
|
||||||
|
except:
|
||||||
# get the message's body
|
|
||||||
body = ''
|
|
||||||
for part in email_message.walk():
|
|
||||||
ctype = part.get_content_type()
|
|
||||||
cdispo = str(part.get('Content-Disposition'))
|
|
||||||
|
|
||||||
# skip any text/plain (txt) attachments
|
|
||||||
if ctype == 'text/html' and 'attachment' not in cdispo:
|
|
||||||
body = part.get_payload(decode=True) # decode
|
|
||||||
break
|
|
||||||
# downloading attachment
|
|
||||||
temp_file_path = download_pdf_to_tmp(email_message)
|
|
||||||
|
|
||||||
# convertir le fichier pdf en texte
|
|
||||||
texte, extracted_file = pdf_convert_to_txt(temp_file_path)
|
|
||||||
|
|
||||||
nbLus = nbLus + 1
|
|
||||||
# mission annulée ?
|
|
||||||
if 'Objet : ANNULATION MISSION' in texte :
|
|
||||||
# genere ANNULATION mission MAIF
|
|
||||||
# import pdb;pdb.set_trace()
|
|
||||||
n = generer_annul_maif(request, societe, extracted_file, temp_file_path)
|
|
||||||
nbAnnules = nbAnnules + n
|
|
||||||
# déplacer le message dans la poubelle
|
|
||||||
conn.store(num, '+FLAGS', '\\Deleted')
|
|
||||||
elif 'ANNULATION ORDRE DE MISSION' in texte:
|
|
||||||
# genere ANNULATION mission DOMUS
|
|
||||||
nosin = str(body)[84:95]
|
|
||||||
# import pdb;pdb.set_trace()
|
|
||||||
n = generer_annul_domus(request, societe, nosin, temp_file_path)
|
|
||||||
nbAnnules = nbAnnules + n
|
|
||||||
# déplacer le message dans la poubelle
|
# déplacer le message dans la poubelle
|
||||||
conn.store(num, '+FLAGS', '\\Deleted')
|
conn.store(num, '+FLAGS', '\\Deleted')
|
||||||
|
conn.expunge()
|
||||||
else:
|
else:
|
||||||
# genere le dossier d'après le mail
|
email_message = email.message_from_string(raw_email_string)
|
||||||
n = generer_mission(request, societe, criteria, extracted_file, temp_file_path)
|
|
||||||
nbCrees = nbCrees + n
|
# get the message's body
|
||||||
# déplacer le message dans la poubelle
|
body = ''
|
||||||
conn.store(num, '+FLAGS', '\\Deleted')
|
for part in email_message.walk():
|
||||||
conn.expunge()
|
ctype = part.get_content_type()
|
||||||
|
cdispo = str(part.get('Content-Disposition'))
|
||||||
|
|
||||||
|
# skip any text/plain (txt) attachments
|
||||||
|
if ctype == 'text/html' and 'attachment' not in cdispo:
|
||||||
|
body = part.get_payload(decode=True) # decode
|
||||||
|
break
|
||||||
|
# downloading attachment
|
||||||
|
temp_file_path = download_pdf_to_tmp(email_message)
|
||||||
|
|
||||||
|
# convertir le fichier pdf en texte
|
||||||
|
texte, extracted_file = pdf_convert_to_txt(temp_file_path)
|
||||||
|
|
||||||
|
nbLus = nbLus + 1
|
||||||
|
# mission annulée ?
|
||||||
|
if 'Objet : ANNULATION MISSION' in texte :
|
||||||
|
# genere ANNULATION mission MAIF
|
||||||
|
# import pdb;pdb.set_trace()
|
||||||
|
n = generer_annul_maif(request, societe, extracted_file, temp_file_path)
|
||||||
|
nbAnnules = nbAnnules + n
|
||||||
|
# déplacer le message dans la poubelle
|
||||||
|
conn.store(num, '+FLAGS', '\\Deleted')
|
||||||
|
conn.expunge()
|
||||||
|
elif 'ANNULATION ORDRE DE MISSION' in texte:
|
||||||
|
# genere ANNULATION mission DOMUS
|
||||||
|
nosin = str(body)[84:95]
|
||||||
|
# import pdb;pdb.set_trace()
|
||||||
|
n = generer_annul_domus(request, societe, nosin, temp_file_path)
|
||||||
|
nbAnnules = nbAnnules + n
|
||||||
|
# déplacer le message dans la poubelle
|
||||||
|
conn.store(num, '+FLAGS', '\\Deleted')
|
||||||
|
conn.expunge()
|
||||||
|
else:
|
||||||
|
# genere le dossier d'après le mail
|
||||||
|
n = generer_mission(request, societe, criteria, extracted_file, temp_file_path)
|
||||||
|
nbCrees = nbCrees + n
|
||||||
|
# déplacer le message dans la poubelle
|
||||||
|
conn.store(num, '+FLAGS', '\\Deleted')
|
||||||
|
conn.expunge()
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
# deconnexion du serveur
|
# deconnexion du serveur
|
||||||
conn.logout()
|
conn.logout()
|
||||||
|
|||||||
Reference in New Issue
Block a user