diff --git a/mondumas/templates/dossier/upload_om.pt b/mondumas/templates/dossier/upload_om.pt index a937d1b..e2243fc 100644 --- a/mondumas/templates/dossier/upload_om.pt +++ b/mondumas/templates/dossier/upload_om.pt @@ -9,6 +9,14 @@ data-fv-icon-invalid="glyphicon glyphicon-remove" data-fv-icon-validating="glyphicon glyphicon-refresh"> +

+ Les ordres de missions doivent être des fichiers PDF originaux téléchargés des portails des Assureurs. : +

+ +
@@ -24,7 +32,7 @@
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,