ajout upload ordre de mission AXA

This commit is contained in:
2020-12-09 11:09:18 +01:00
parent 879546e166
commit 7840087bb0
6 changed files with 225 additions and 9 deletions

View File

@@ -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 = "<p>" + extracted_text.replace("\n", "<br>") + "</p>"
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,
}