annulation de mission MAIF et DOMUS

This commit is contained in:
2019-09-20 18:30:01 +02:00
parent 64154c7045
commit d125d9c42d
3 changed files with 244 additions and 86 deletions

View File

@@ -686,7 +686,7 @@ def demandes(request):
logged_in = request.authenticated_userid.upper()
url = request.route_url('demandes')
societes = ['PE','ME','PL','PO']
societes = ['PE','ME','PL']
societe = 'PE'
# prendre en compte les paramètres de saisie
if 'societe' in request.params:
@@ -722,12 +722,12 @@ def demandes(request):
if 'form.submitted' in request.params:
# traiter les demandes de la MAIF puis de DOMUS
#demandes_generer(request, conn, societe, mbx_search1, liste, logged_in)
demandes_generer(request, conn, societe, mbx_search2, liste, logged_in)
# demandes_generer(request, conn, societe, mbx_search1)
demandes_generer(request, conn, societe, mbx_search2)
liste=[]
# lire les demandes de la MAIF puis de DOMUS
demandes_afficher(conn, mbx_name, mbx_search1, liste)
# demandes_afficher(conn, mbx_name, mbx_search1, liste)
demandes_afficher(conn, mbx_name, mbx_search2, liste)
# messages lus
msglus = bool(liste)
@@ -771,67 +771,73 @@ def demandes_afficher(conn, mbx_name, search_criteria, liste):
liste.append(d)
return liste
def demandes_generer(request, conn, societe, mbx_search, liste, logged_in):
def demandes_generer(request, conn, societe, mbx_search):
def generer_dossier(request, societe, mbx_search, extracted_file, temp_file_path, logged_in):
# parcourir les lignes pour retrouver les infos utiles
with open(extracted_file) as fp:
cnt = 1
line = fp.readline()
c_obs = ''
tx_trav = ''
while line:
if line.find('Nos références') == 0:
line = fp.readline()
line = fp.readline()
no_sinistre = line[:-1]
if line.find('Bénéficiaire des travaux :') == 0:
elt = line.split(' : ')
c_nom = elt[1][:-1]
line = fp.readline()
line = fp.readline()
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 line.find('N° de téléphone :') == 0:
# les 10 derniers caratères
c_tel1 = line[-11:-1]
if 'une franchise de ' in line:
i1 = line.find('franchise de ')
i2 = line.find('')
c_obs = line[i1:i2+2]
if ' pour un montant de ' in line:
i1 = line.find('pour un montsant de ')
tx_trav = line[i1:-2].replace(',', '.')
# lire ligne suivante
line = fp.readline()
cnt += 1
fp.close()
def generer_mission(request, societe, mbx_search, extracted_file, temp_file_path):
if 'maif.fr' in mbx_search:
# extraire les infos de la demmande MAIF
dem_info = get_pdf_infos1(extracted_file)
if societe == 'PE':
cd_cli = 2813
elif societe == 'ME':
cd_cli = 3428
else:
# VERSANIT
cd_cli = 1743
elif 'domus-services.fr' in mbx_search:
# extraire les infos de la demmande DOMUS
dem_info = get_pdf_infos2(extracted_file)
if societe == 'PE':
cd_cli = 8991
elif societe == 'ME':
cd_cli = 5276
else:
# VERSANIT
cd_cli = 3209
# créer une dem_devis et récupèrer son no_id
nochantier = insert_dossier(request, societe, 'MAIF', logged_in, c_nom, c_adr, c_adr2, c_cp, c_ville, c_tel1, no_sinistre, c_obs, tx_trav)
nodossier = "%s-%s" % (societe, nochantier)
# extraction OK ? oui, créer une dem_devis et récupèrer son no_id
if dem_info['c_nom'] != '':
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['no_sinistre'], dem_info['c_obs'], dem_info['tx_trav'])
nodossier = "%s-%s" % (societe, nochantier)
# 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', temp_file_path, filename, 'AUTO')
return
def generer_annulation1(request, societe, extracted_file, temp_file_path):
# extraire les infos de la demmande MAIF
dem_info = get_pdf_infos1(extracted_file)
import pdb;pdb.set_trace()
# extraction OK ? oui, rechercher la dem_devis concerné
if dem_info['c_nom'] != '':
# oui, rechercher la dem_devis concerné par le no de sinistre
dem_devis = get_dossier_by_sinistre(request,societe, nosin)
nodossier = "%s-%s" % (societe, dem_devis.NO_ID)
# récupère le nom du fichier et ajouter le no de dossier
filename = '%s-DD%s-%s' % (societe, dem_devis.NO_ID, 'ANNULATION.pdf')
tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', temp_file_path, filename, 'AUTO')
# insérer une ligne de suivi ANNULATION
insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR la MAIF')
return
def generer_annulation2(request, societe, nosin, temp_file_path):
# oui, rechercher la dem_devis concerné par le no de sinistre
dem_devis = get_dossier_by_sinistre(request,societe, nosin)
nodossier = "%s-%s" % (societe, dem_devis.NO_ID)
# 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', temp_file, filename, logged_in)
filename = '%s-DD%s-%s' % (societe, dem_devis.NO_ID, 'ANNULATION.pdf')
tempFile2Dossier(request, societe, dem_devis.NO_ID, '0', temp_file_path, filename, 'AUTO')
# insérer une ligne de suivi ANNULATION
insert_suivi(request, nodossier, '!!MISSION ANNULEE PAR DOMUS')
return
# rechercher les emails de demandes dans le INBOX
@@ -852,21 +858,34 @@ def demandes_generer(request, conn, societe, mbx_search, liste, logged_in):
raw_email_string = raw_email.decode('utf-8')
email_message = email.message_from_string(raw_email_string)
email_subject = email_message['subject']
# demande annulée ?
if email_subject.find('Annulation ') < 0:
# downloading attachment
temp_file_path = download_pdf_to_tmp(email_message)
# get the message's body
body = ''
for part in email_message.walk():
ctype = part.get_content_type()
cdispo = str(part.get('Content-Disposition'))
# skip any text/plain (txt) attachments
if ctype == 'text/html' and 'attachment' not in cdispo:
body = part.get_payload(decode=True) # decode
break
# downloading attachment
temp_file_path = download_pdf_to_tmp(email_message)
# convertir le fichier pdf en texte
texte, extracted_file = pdf_convert_to_txt(temp_file_path)
# mission annulée
if 'Objet : ANNULATION MISSION' in texte:
# supprime le pdf
os.remove(temp_file_path)
else:
# genere le dossier d'après le mail
generer_dossier(request, societe, mbx_search, extracted_file, temp_file_path, logged_in)
# convertir le fichier pdf en texte
texte, extracted_file = pdf_convert_to_txt(temp_file_path)
# mission annulée ?
if 'Objet : ANNULATION MISSION' in texte :
# genere ANNULATION mission MAIF
generer_annulation1(request, societe, extracted_file, temp_file_path)
elif 'ANNULATION ORDRE DE MISSION' in texte:
import pdb;pdb.set_trace()
# genere ANNULATION mission DOMUS
nosin = str(body)[84:95]
generer_annulation2(request, societe, nosin, temp_file_path)
else:
# genere le dossier d'après le mail
generer_mission(request, societe, mbx_search, extracted_file, temp_file_path)
return
@@ -988,3 +1007,132 @@ def pdf_convert_to_txt(path):
return extracted_text, extracted_file
def get_pdf_infos1(extracted_file):
# à partir du fichier texte du pdf
# parcourir les lignes pour retrouver les infos utiles
with open(extracted_file) as fp:
cnt = 1
line = fp.readline()
# première ligne doit être "MAIF"
if line[:-1] != 'MAIF':
return {'c_nom': ''}
c_obs = ''
tx_trav = ''
c_telp = ''
while line:
if line.find('Nos références') == 0:
line = fp.readline()
line = fp.readline()
no_sinistre = line[:-1]
if line.find('Bénéficiaire des travaux :') == 0:
elt = line.split(' : ')
c_nom = elt[1][:-1]
line = fp.readline()
line = fp.readline()
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 ' téléphone : ' in line:
# les 10 derniers caratères
c_tel1 = line[-11:-1]
if 'une franchise de ' in line:
i1 = line.find('franchise de ')
i2 = line.find('')
c_obs = line[i1:i2+2]
if ' pour un montant de ' in line:
i1 = line.find('pour un montsant de ')
tx_trav = line[i1:-2].replace(',', '.')
# lire ligne suivante
line = fp.readline()
cnt += 1
fp.close()
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_obs': c_obs,
'tx_trav': tx_trav,
'no_sinistre': no_sinistre,
}
def get_pdf_infos2(extracted_file):
# à partir du fichier texte du pdf de DOMUS
# parcourir les lignes pour retrouver les infos utiles
with open(extracted_file) as fp:
cnt = 1
line = fp.readline()
import pdb;pdb.set_trace()
# première ligne doit être :
if line[:-1] != 'ORDRE DE MISSION':
fp.close()
return {'c_nom': ''}
c_obs = ''
tx_trav = ''
c_telp = ''
while line:
if line.find('SINISTRE N°') == 0:
line = fp.readline()
line = fp.readline()
no_sinistre = line[:-1]
if line.find('Adresse du sinistre :') == 0:
line = fp.readline()
c_nom = line[:-1]
line = fp.readline()
c_adr = line[:-1]
line = fp.readline()
c_adr2 = line[:-1]
# début 2ème ligne adr est un code postal ?
if to_int(c_adr2) > 0 :
# oui, mémoriser le code postal et la ville
c_cp = c_adr2
line = fp.readline()
c_ville = line[:-1]
c_adr2 = ''
else:
# non, le code postal et la ville se trouvent dans la 3è ligne
line = fp.readline()
c_cp = line[:-1]
c_ville = line[:-1]
line = fp.readline()
if 'Gsm : ' in line:
# les 10 derniers caratères
c_telp = line[-11:-1]
# lire ligne suivante
line = fp.readline()
cnt += 1
fp.close()
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_obs': c_obs,
'tx_trav': tx_trav,
'no_sinistre': no_sinistre,
}