intégrer les PDF de SINAPPS
This commit is contained in:
@@ -9,6 +9,14 @@
|
|||||||
data-fv-icon-invalid="glyphicon glyphicon-remove"
|
data-fv-icon-invalid="glyphicon glyphicon-remove"
|
||||||
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
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">
|
<div class="form-group">
|
||||||
<label class="control-label" for="uploadfile">Veuillez séléctionner un fichier :</label>
|
<label class="control-label" for="uploadfile">Veuillez séléctionner un fichier :</label>
|
||||||
<input id="uploadfile" name="filename" type="file" value="" required />
|
<input id="uploadfile" name="filename" type="file" value="" required />
|
||||||
@@ -24,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<ul>
|
<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>
|
<li>La taille de chaque document ne doit <b>pas dépasser 4 Mo</b>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
@@ -1406,6 +1406,7 @@ def get_pdf_infos_axa(extracted_file):
|
|||||||
# fp.close()
|
# fp.close()
|
||||||
# return {'c_nom': ''}
|
# return {'c_nom': ''}
|
||||||
|
|
||||||
|
c_nom = ''
|
||||||
c_telp = ''
|
c_telp = ''
|
||||||
c_email = ''
|
c_email = ''
|
||||||
while line:
|
while line:
|
||||||
@@ -1473,6 +1474,156 @@ def get_pdf_infos_axa(extracted_file):
|
|||||||
'no_police': no_police,
|
'no_police': no_police,
|
||||||
'no_sinistre': no_sinistre,
|
'no_sinistre': no_sinistre,
|
||||||
'societe': societe,
|
'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):
|
def resize_photos(image_file):
|
||||||
@@ -1507,21 +1658,37 @@ def upload_om(request):
|
|||||||
UPLOAD d'un ordre de mission en PDF
|
UPLOAD d'un ordre de mission en PDF
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def generer_mission(request, extracted_file, temp_file_path):
|
def generer_mission(request, dem_info, temp_file_path):
|
||||||
|
# import pdb;pdb.set_trace()
|
||||||
# extraire les infos de la demmande AXA
|
|
||||||
dem_info = get_pdf_infos_axa(extracted_file)
|
|
||||||
societe = dem_info['societe']
|
societe = dem_info['societe']
|
||||||
|
if societe == '':
|
||||||
|
return "Descriptif de travaux non prevu par le programme. Prévenir M. CAO."
|
||||||
|
if dem_info['assureur'] == 'AXA':
|
||||||
if societe == 'PE':
|
if societe == 'PE':
|
||||||
cd_cli = 9150
|
cd_cli = 9150
|
||||||
elif societe == 'ME':
|
else :
|
||||||
|
# menuiserie
|
||||||
cd_cli = 5858
|
cd_cli = 5858
|
||||||
else:
|
else:
|
||||||
return "Descriptif de travaux non prevu par le programme. Prévenir M. CAO."
|
# assureur = MAIF
|
||||||
|
# societe = versanit
|
||||||
|
cd_cli = 1743
|
||||||
|
|
||||||
# extraction OK ? oui, créer une dem_devis et récupèrer son no_id
|
# extraction OK ? oui, créer une dem_devis et récupèrer son no_id
|
||||||
message = ''
|
message = ''
|
||||||
if dem_info['c_nom'] != '':
|
if dem_info['c_nom'] != '':
|
||||||
|
# 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
|
# 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'], \
|
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'], '', '')
|
dem_info['c_ville'], dem_info['c_telp'], dem_info['c_email'], dem_info['no_sinistre'], dem_info['no_police'], '', '')
|
||||||
@@ -1563,22 +1730,30 @@ def upload_om(request):
|
|||||||
|
|
||||||
# importer le pdf
|
# importer le pdf
|
||||||
if 'form.submitted' in request.params:
|
if 'form.submitted' in request.params:
|
||||||
# origine du PDF = AXA ?
|
# Déterminer l'origine du PDF
|
||||||
if 'Votre conseiller AXA' in extracted_text :
|
if 'Votre conseiller AXA' in extracted_text and 'bon de commande pour les travaux' in extracted_text:
|
||||||
# PDF = ordre de mission AXA ?
|
# PDF = ordre de mission AXA ?
|
||||||
if 'bon de commande pour les travaux' in extracted_text :
|
# 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 ou MAIF."
|
||||||
# genere le dossier d'après le fichier PDF
|
# genere le dossier d'après le fichier PDF
|
||||||
message = generer_mission(request, extracted_file, temp_file)
|
|
||||||
|
message = generer_mission(request, dem_info, temp_file)
|
||||||
if message == '':
|
if message == '':
|
||||||
request.session.flash("Le fichier PDF a été importé avec succès.", 'success')
|
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 HTTPFound(location=request.route_url('dossier_lookup'))
|
||||||
else:
|
|
||||||
message = "ERREUR : L'importation de ce document AXA n'est pas prévue."
|
|
||||||
else:
|
|
||||||
message = "ERREUR : Ce document n'est pas une demande de prestations AXA."
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': 'Importer un ordre de mission AXA',
|
'page_title': 'Importer un ordre de mission AXA ou MAIF',
|
||||||
'url': url,
|
'url': url,
|
||||||
'message': message,
|
'message': message,
|
||||||
'html_text': html_text,
|
'html_text': html_text,
|
||||||
|
|||||||
Reference in New Issue
Block a user