diff --git a/mondumas/templates/dossier/upload_om.pt b/mondumas/templates/dossier/upload_om.pt
new file mode 100644
index 0000000..a937d1b
--- /dev/null
+++ b/mondumas/templates/dossier/upload_om.pt
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+ - Seuls les documents au format PDF seront acceptés.
+ - La taille de chaque document ne doit pas dépasser 4 Mo.
+
+
+
+
+
Contenu du PDF
+
+
Page text goes here.
+
+
+
+
+
+
+
+
diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py
index 8864398..201e109 100644
--- a/mondumas/views/dossier.py
+++ b/mondumas/views/dossier.py
@@ -883,7 +883,7 @@ def demandes(request):
else:
# dem_devis n'existe pas, creer nouveau dossier
nochantier = insert_dossier(request, societe, cd_cli, dem_info['c_nom'], dem_info['c_adr'], dem_info['c_adr2'], \
- dem_info['c_cp'], dem_info['c_ville'], dem_info['c_telp'], dem_info['c_email'], nosin, dem_info['c_obs'], dem_info['tx_trav'])
+ dem_info['c_cp'], dem_info['c_ville'], dem_info['c_telp'], dem_info['c_email'], nosin, '', dem_info['c_obs'], dem_info['tx_trav'])
nodossier = "%s-%s" % (societe, nochantier)
# log de nuit
print('--> CREER DOSSIER sinistre %s <--' % nodossier)
@@ -1150,7 +1150,7 @@ def pdf_convert_to_txt(path):
laparams = LAParams()
converter = PDFPageAggregator(resource_manager, laparams=laparams)
page_interpreter = PDFPageInterpreter(resource_manager, converter)
-
+
extracted_text = ""
with open(path, 'rb') as fh:
@@ -1318,7 +1318,89 @@ def get_pdf_infos2(extracted_file):
'tx_trav': tx_trav,
'no_sinistre': no_sinistre,
}
-
+
+def get_pdf_infos3(extracted_file):
+ # à partir du fichier texte du pdf de AXA
+ # parcourir les lignes pour retrouver les infos utiles
+ with open(extracted_file, encoding="utf-8") as fp:
+
+ cnt = 1
+ line = fp.readline()
+ # première ligne doit être :
+ if line[:-1] != 'Assurance et Banque':
+ fp.close()
+ return {'c_nom': ''}
+
+ c_telp = ''
+ c_email = ''
+ while line:
+ if line[:-1] == 'LibellØ':
+ # import pdb;pdb.set_trace()
+ line = fp.readline()
+ if 'PEINTURE' in line or 'PAPIER PEINT' in line or 'CARRELAGE' in line or 'CERAMIQUE' in line:
+ societe = 'PE'
+ elif 'MENUISERIE' in line or 'FERMETURE' in line or 'PARQUET' in line:
+ societe = 'ME'
+ else:
+ societe = ''
+
+ if line[:-1] == 'Contrat':
+ # import pdb;pdb.set_trace()
+ line = fp.readline()
+ no_police = line[:-1]
+ if line[:-1] == 'RØfØrence sinistre':
+ # import pdb;pdb.set_trace()
+ line = fp.readline()
+ no_sinistre = line[:-1]
+ if line[:-1] == 'Notre assurØ':
+ # import pdb;pdb.set_trace()
+ line = fp.readline()
+ c_nom = line[:-1]
+ line = fp.readline()
+ c_adr = line[:-1]
+ line = fp.readline()
+ c_adr2 = line[:-1]
+ line = fp.readline()
+ c_adr3 = line[:-1]
+ # début 3ème ligne adr est un code postal ?
+ if to_int(c_adr3[0:5]) > 0 :
+ # oui, mémoriser le code postal et la ville
+ c_cp = c_adr3[0:5]
+ c_ville = c_adr3[6:]
+ else:
+ # non, le code postal et la ville se trouvent dans la 2è ligne
+ c_cp = c_adr2[0:5]
+ c_ville = c_adr2[6:]
+ c_adr2 = ''
+ if 'portable ' in line:
+ # import pdb;pdb.set_trace()
+ # les 10 derniers caratères
+ c_telp = line[-11:-1]
+ line = fp.readline()
+ # séparer l'émail
+ # import pdb;pdb.set_trace()
+ elt = line[:-1].split(': ')
+ if len(elt) == 2:
+ c_email = elt[1]
+ # lire ligne suivante
+ line = fp.readline()
+ cnt += 1
+
+ fp.close()
+ # import pdb;pdb.set_trace()
+
+ return {'c_nom': c_nom,
+ 'c_adr': c_adr,
+ 'c_adr2': c_adr2,
+ 'c_cp': c_cp[:5],
+ 'c_ville': c_ville,
+ 'c_telp': c_telp,
+ 'c_email': c_email,
+ 'no_police': no_police,
+ 'no_sinistre': no_sinistre,
+ 'societe': societe,
+ }
+
def resize_photos(image_file):
# using the Python Image Library (PIL) to resize an image
img_org = Image.open(image_file)
@@ -1348,4 +1430,86 @@ def photos_size(photos):
return '%s Mo' % round(sum_size / 1024, 1)
+@view_config(route_name='upload_om', renderer='../templates/dossier/upload_om.pt', permission='view')
+def upload_om(request):
+ """
+ UPLOAD d'un ordre de mission en PDF
+
+ """
+ def generer_mission(request, extracted_file, temp_file_path):
+
+ # extraire les infos de la demmande AXA
+ dem_info = get_pdf_infos3(extracted_file)
+ societe = dem_info['societe']
+ if societe == 'PE':
+ cd_cli = 15207
+ elif societe == 'ME':
+ cd_cli = 1190
+ else:
+ return "Descriptif de travaux non prevu par le programme. Prévenir M. CAO."
+
+ # extraction OK ? oui, créer une dem_devis et récupèrer son no_id
+ message = ''
+ if dem_info['c_nom'] != '':
+ # dem_devis n'existe pas, creer nouveau dossier
+ nochantier = insert_dossier(request, societe, cd_cli, dem_info['c_nom'], dem_info['c_adr'], dem_info['c_adr2'], dem_info['c_cp'], \
+ dem_info['c_ville'], dem_info['c_telp'], dem_info['c_email'], dem_info['no_sinistre'], dem_info['no_police'], '', '')
+ nodossier = "%s-%s" % (societe, nochantier)
+ # log de nuit
+ print('--> CREER DOSSIER sinistre %s <--' % nodossier)
+
+ # récupère le nom du fichier et ajouter le no de dossier
+ filename = os.path.basename(temp_file_path)
+ filename = '%s-DD%s-%s' % (societe, nochantier, filename)
+ tempFile2Dossier(request, societe, nochantier, '0', 0, 'CLT', temp_file_path, filename, 'EMAIL')
+
+ return message
+
+ logged_in = request.authenticated_userid.upper()
+
+ url = request.route_url("upload_om")
+ message = ''
+ html_text = ''
+
+ if 'form.submitted' in request.params or 'form.previewed' in request.params:
+ # récupère le fichier download dans le dossier /tmp
+ input_file = request.POST['filename'].file
+ input_name = request.POST['filename'].filename
+ ext_allowed = ['pdf']
+ temp_file = downloadFile2Temp(input_file, input_name, ext_allowed)
+ if temp_file[:8] == 'ERREUR: ':
+ request.session.flash(temp_file, 'danger')
+ return HTTPFound(location=url)
+
+ # convertir le fichier pdf en texte
+ extracted_text, extracted_file = pdf_convert_to_txt(temp_file)
+
+ # prévisualiser le pdf
+ if 'form.previewed' in request.params:
+ # convert text to html
+ html_text = "
" + extracted_text.replace("\n", "
") + "
"
+ html_text = html_text.replace("Ø", "é")
+
+ # importer le pdf
+ if 'form.submitted' in request.params:
+ # origine du PDF = AXA ?
+ if 'AXA France GESTION SINISTRES' in extracted_text :
+ # PDF = ordre de mission AXA ?
+ if 'bon de commande pour les travaux' in extracted_text :
+ # genere le dossier d'après le fichier PDF
+ message = generer_mission(request, extracted_file, temp_file)
+ if message == '':
+ request.session.flash("Le fichier PDF a été importé avec succès.", 'success')
+ return HTTPFound(location=request.route_url('dossier_lookup'))
+ else:
+ message = "ERREUR : L'importation de ce document AXA n'est pas prévue."
+ else:
+ message = "ERREUR : L'importation de ce type de document n'est pas prévue."
+
+ return {
+ 'page_title': 'Importer un ordre de mission AXA',
+ 'url': url,
+ 'message': message,
+ 'html_text': html_text,
+ }