+ Les ordres de missions doivent être des fichiers PDF originaux téléchargés des portails des Assureurs. :
+
+
+
Portail d'AXA
+
Portail Sinapps (AXA et MAIF)
+
+
@@ -24,7 +32,7 @@
-
Seuls les documents au format PDF seront acceptés.
+
Seuls les documents au format PDF ORIGINAUX seront acceptés.
La taille de chaque document ne doit pas dépasser 4 Mo.
diff --git a/mondumas/views/dossier.py b/mondumas/views/dossier.py
index fd39140..034ee91 100644
--- a/mondumas/views/dossier.py
+++ b/mondumas/views/dossier.py
@@ -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,