intégrer les PDF de SINAPPS

This commit is contained in:
2023-09-22 14:19:35 +02:00
parent 98efbe2c2e
commit 25212af64f
2 changed files with 218 additions and 35 deletions

View File

@@ -9,6 +9,14 @@
data-fv-icon-invalid="glyphicon glyphicon-remove"
data-fv-icon-validating="glyphicon glyphicon-refresh">
<p>
Les ordres de missions doivent être des <span class="text-danger"><b>fichiers PDF originaux téléchargés des portails des Assureurs</b></span>. :
</p>
<ul>
<li>Portail d'AXA</li>
<li>Portail Sinapps (AXA et MAIF)</li>
</ul>
<div class="form-group">
<label class="control-label" for="uploadfile">Veuillez séléctionner un fichier :</label>
<input id="uploadfile" name="filename" type="file" value="" required />
@@ -24,7 +32,7 @@
</div>
</form>
<ul>
<li>Seuls les documents au format <b>PDF</b> seront acceptés.</li>
<li>Seuls les documents au format <b>PDF ORIGINAUX</b> seront acceptés.</li>
<li>La taille de chaque document ne doit <b>pas dépasser 4 Mo</b>.</li>
</ul>

View File

@@ -1406,6 +1406,7 @@ def get_pdf_infos_axa(extracted_file):
# fp.close()
# return {'c_nom': ''}
c_nom = ''
c_telp = ''
c_email = ''
while line:
@@ -1473,6 +1474,156 @@ def get_pdf_infos_axa(extracted_file):
'no_police': no_police,
'no_sinistre': no_sinistre,
'societe': societe,
'assureur': 'AXA'
}
def get_pdf_infos_sinapps_AXA(extracted_file):
# à partir du fichier texte du pdf de SINAPPS
# parcourir les lignes pour retrouver les infos utiles
with open(extracted_file, encoding="utf-8") as fp:
line = fp.readline()
# première ligne doit être :
if line[:-1] != 'Mission':
fp.close()
return {'c_nom': ''}
c_nom = ''
c_telp = ''
c_email = ''
while line:
# déterminer la société
if 'Prestataire' in line :
line = fp.readline()
line = fp.readline()
line = fp.readline()
line = fp.readline()
if 'DUMAS' in line :
societe = 'PE'
else :
societe = 'ME'
if line[:-1] == 'Numéro du contrat':
line = fp.readline()
no_police = line[:-1].lstrip("0")
if 'Référence sinistre : ' in line:
# import pdb;pdb.set_trace()
no_sinistre = line[:-1].split(':')[1]
no_sinistre = no_sinistre.strip().lstrip("0")
if line[:-1] == 'Assuré/client':
# import pdb;pdb.set_trace()
line = fp.readline()
c_nom = line[:-1].strip()
line = fp.readline()
c_email = line[:-1].strip()
line = fp.readline()
# tél = les 10 derniers caratères
c_telp = line[-12:-1].strip()
line = fp.readline()
c_adr = line[:-1].strip()
line = fp.readline()
c_adr2 = line[:-1].strip()
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:].strip()
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 = ''
# lire ligne suivante
line = fp.readline()
fp.close()
# import pdb;pdb.set_trace()
return {'c_nom': c_nom,
'c_adr': c_adr,
'c_adr2': c_adr2,
'c_cp': c_cp,
'c_ville': c_ville,
'c_telp': c_telp,
'c_email': c_email,
'no_police': no_police,
'no_sinistre': no_sinistre,
'societe': societe,
'assureur': 'AXA'
}
def get_pdf_infos_sinapps_MAIF(extracted_file):
# à partir du fichier texte du pdf de SINAPPS
# parcourir les lignes pour retrouver les infos utiles
with open(extracted_file, encoding="utf-8") as fp:
line = fp.readline()
# première ligne doit être :
if line[:-1] != 'Mission':
fp.close()
return {'c_nom': ''}
c_nom = ''
c_telp = ''
c_email = ''
no_police = ''
while line:
# déterminer la société
if 'Prestataire' in line :
line = fp.readline()
if 'VER SANIT' in line :
societe = 'PL'
else:
societe = ''
if 'Référence sinistre : ' in line:
# import pdb;pdb.set_trace()
no_sinistre = line[:-1].split(':')[1]
no_sinistre = no_sinistre.strip().lstrip("0")
if line[:-1] == 'Assuré/client':
# import pdb;pdb.set_trace()
line = fp.readline()
c_nom = line[:-1].strip()
line = fp.readline()
c_email = line[:-1].strip()
line = fp.readline()
# tél = les 10 derniers caratères
c_telp = line[-12:-1].strip()
line = fp.readline()
c_adr = line[:-1].strip()
line = fp.readline()
c_adr2 = line[:-1].strip()
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:].strip()
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 = ''
# lire ligne suivante
line = fp.readline()
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,
'assureur': 'MAIF'
}
def resize_photos(image_file):
@@ -1507,32 +1658,48 @@ 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_infos_axa(extracted_file)
def generer_mission(request, dem_info, temp_file_path):
# import pdb;pdb.set_trace()
societe = dem_info['societe']
if societe == 'PE':
cd_cli = 9150
elif societe == 'ME':
cd_cli = 5858
else:
if societe == '':
return "Descriptif de travaux non prevu par le programme. Prévenir M. CAO."
if dem_info['assureur'] == 'AXA':
if societe == 'PE':
cd_cli = 9150
else :
# menuiserie
cd_cli = 5858
else:
# assureur = MAIF
# societe = versanit
cd_cli = 1743
# 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', 'CLT', temp_file_path, filename, 'EMAIL')
# oui, rechercher la dem_devis concerné par le no de sinistre
nosin = dem_info['no_sinistre']
dem_devis = get_dossier_by_sinistre(request,societe, nosin)
if dem_devis:
# dem_devis existe, ajouter le PDF dans ce dossier
nochantier = dem_devis.NO_ID
nodossier = "%s-%s" % (societe, nochantier)
# insérer une ligne de suivi ANNULATION
insert_suivi(request, nodossier, '!!MISSION CONFIRMEE ou MODIFIEE PAR la MAIF')
# log de nuit
print('--> MODIFIER DOSSIER sinistre %s <--' % nodossier)
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'], 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', 'CLT', temp_file_path, filename, 'EMAIL')
return message
@@ -1563,22 +1730,30 @@ def upload_om(request):
# importer le pdf
if 'form.submitted' in request.params:
# origine du PDF = AXA ?
if 'Votre conseiller AXA' 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."
# Déterminer l'origine du PDF
if 'Votre conseiller AXA' in extracted_text and 'bon de commande pour les travaux' in extracted_text:
# PDF = ordre de mission AXA ?
# extraire les infos de la demmande AXA
dem_info = get_pdf_infos_axa(extracted_file)
elif 'Envoyé par MAIF le ' in extracted_text :
# PDF envoyé par sur SINAPPS
# extraire les infos de la mission
dem_info = get_pdf_infos_sinapps_MAIF(extracted_file)
elif 'Envoyé par AXA FRANCE IRD le' in extracted_text:
# PDF envoyé par AXA sur SINAPPS
# extraire les infos de la mission
dem_info = get_pdf_infos_sinapps_AXA(extracted_file)
else:
message = "ERREUR : Ce document n'est pas une demande de prestations AXA."
message = "ERREUR : Ce document n'est pas une demande de prestations AXA ou MAIF."
# genere le dossier d'après le fichier PDF
message = generer_mission(request, dem_info, temp_file)
if message == '':
request.session.flash("Le fichier PDF de %s a été importé dans la societe %s avec succès." % (dem_info['assureur'], dem_info['societe']), 'success')
return HTTPFound(location=request.route_url('dossier_lookup'))
return {
'page_title': 'Importer un ordre de mission AXA',
'page_title': 'Importer un ordre de mission AXA ou MAIF',
'url': url,
'message': message,
'html_text': html_text,