# HG changeset patch
# User artbio
# Date 1540243031 14400
# Node ID 32b0db39551c9bc3bb699c85328317b923508f15
planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/master/tools/facturation_ibps commit 0099dbb7178a8b187c1904f92871bce033070c58
diff -r 000000000000 -r 32b0db39551c facturation.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/facturation.py Mon Oct 22 17:17:11 2018 -0400
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+
+
+import argparse
+import re
+
+import openpyxl
+
+import pandas as pd
+
+
+def Parser():
+ the_parser = argparse.ArgumentParser()
+ the_parser.add_argument('--input', '-i', action='store', type=str,
+ help="input html code to convert to xlsx")
+ the_parser.add_argument('--output', '-o', action='store', type=str,
+ help='xlsx converted file')
+ args = the_parser.parse_args()
+ return args
+
+
+def main(input_file, output_file):
+ """Script de parsing des fichiers de facturation de l'IBPS"""
+
+ # ouverture fichier input
+ with open(input_file, 'r') as file_object:
+ facture_html = file_object.read()
+
+ # parsing de la date et de la période de facturation
+ date = re.search(r'Paris le (.*?)
'.decode('utf-8'),
+ facture_html).group(1)
+ periode = re.search(r'de la prestation (.*?)'.decode('utf-8'),
+ facture_html).group(1)
+
+ # parsing des tableaux html avec pandas
+ facture_parsed = pd.read_html(
+ facture_html,
+ thousands='',
+ decimal='.',
+ flavor='bs4')
+ # remove 'Adresse de l'appel à facturation : ' (\xa0:\xa0)
+ adresse = facture_parsed[0].replace(
+ r"Adresse de l'appel \xe0 facturation\xa0:\xa0", r'', regex=True)
+
+ # supression des symboles € (ça fait planter les calculs dans excel sinon)
+ # ' € ' == \xa0\u20ac
+ elements = facture_parsed[1].replace(r"\xa0\u20ac", r'', regex=True)
+
+ # conversion des noms de colonnes
+ elements_col = elements.iloc[0]
+ cout_col = elements_col.str.extract(r'(cout.*)',
+ expand=False).dropna().iloc[0]
+ elements = elements.rename(columns=elements_col).drop(
+ elements.index[0])
+
+ misc = facture_parsed[3]
+
+ ref = misc.iloc[:, # récupération de la référence
+ 0].str.extract(r'sur le bon de commande :\s*(.*)$',
+ expand=False).dropna().iloc[0]
+
+ # ouverture fichier output
+ facture_output = openpyxl.load_workbook(
+ 'template_facture.xlsx', data_only=False, keep_vba=False)
+ ws = facture_output.worksheets[0]
+
+ # rajout de l'image de SU qui ne survit pas à la conversion
+ img = openpyxl.drawing.image.Image('template_SU.jpg')
+ img.anchor = "A1"
+ ws.add_image(img)
+
+ # ajout des éléments facturés dans le tableau
+ element_row = 23
+ for i in range(len(elements)):
+ element_row += 1
+ ws.cell(row=element_row, column=1, value=elements.iloc[i][u'Objet'])
+ ws.cell(
+ row=element_row,
+ column=2,
+ value=elements.iloc[i][u'nombre(s)'])
+ ws.cell(
+ row=element_row,
+ column=4,
+ value=elements.iloc[i][cout_col])
+
+ # ajout de l'adresse
+ address_row = 7
+ for i in range(len(adresse)):
+ address_row += 1
+ ws.cell(row=address_row, column=3,
+ value=adresse.iloc[i, 0].encode('utf-8'))
+
+ # ajout de la référence/période/date
+ ws.cell(row=2, column=3, value=ref.encode('utf-8'))
+ ws.cell(row=5, column=5, value=periode.encode('utf-8'))
+ ws.cell(row=21, column=5, value=date.encode('utf-8'))
+
+ # export fichier output
+ facture_output.save(output_file)
+ return
+
+
+if __name__ == '__main__':
+ args = Parser()
+ main(args.input, args.output)
diff -r 000000000000 -r 32b0db39551c facturation.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/facturation.xml Mon Oct 22 17:17:11 2018 -0400
@@ -0,0 +1,39 @@
+
+
+
+ beautifulsoup4
+ html5lib
+ openpyxl
+ pandas
+ pil
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.. class:: infomark
+
+**What it does**
+
+Génère un fichier Excel de facturation à partir du fichier html du système actuel de l'IBPS.
+
+
+
+
+
diff -r 000000000000 -r 32b0db39551c requirements.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/requirements.txt Mon Oct 22 17:17:11 2018 -0400
@@ -0,0 +1,5 @@
+openpyxl==2.5.9
+pandas==0.23.4
+bs4==0.0.1
+m3-PIL==1.1.7
+
diff -r 000000000000 -r 32b0db39551c template_SU.jpg
Binary file template_SU.jpg has changed
diff -r 000000000000 -r 32b0db39551c template_facture.xlsx
Binary file template_facture.xlsx has changed
diff -r 000000000000 -r 32b0db39551c test-data/facture.htm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/facture.htm Mon Oct 22 17:17:11 2018 -0400
@@ -0,0 +1,63 @@
+
+
+Double de facture
+
+
+
+
+
+
Institut de Biologie Paris Seine - FR 3631
+
Service Imagerie
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Paris le 20-09-2018
+
+
+
Adresse de l'appel à facturation : UMR 7622 - S.Schneider-Maunoury
Morphogénèse du Cerveau des Vertébrés
Université Pierre et Marie Curie
9 Quai St Bernard
Batiment C
7etage
Paris
75005
+
+
+
Période de la prestation 8- 2018
+
Objet
+
nombre(s)
+
cout séance *
+
total
+
+
Confocal SP5 Droit 8-2018
+
77.00
+
21.00 €
+
1617.00 €
Confocal SP5 Inversé 8-2018
+
14.00
+
21.00 €
+
294.00 €
Sous total des relevés systeme
1911 €
Total ht du relevé
1911 €
Le total de votre relevé est de 1911.00 €
+
+
Total hors taxes sert au paiement interne
1911.00 €
+
+
Total TTC
2293.20 €
+
+
+
Ce document est le double d'un relevé et ne peut tenir lieu de facture.
+Veuillez régulariser ce relevé en nous envoyant un bon de commande par mail à nadia.baghli@upmc.fr, soit par fax au 01 44 27 22 91
+
Référence interne de l'appel à facturation, à rappeler sur le bon de commande : imagerie-2018/ 217
Utilisateurs de l'équipe : A.Donati A.Andreu cervera F.Giudicelli C.Vesque
+
+
+
+
+
+
* le cout de séance ne tient pas compte du tarif autonome si celui-ci existe
+
+
+
+
+
Institut de Biologie Paris Seine - FR 3631
9 Quai St Bernard Bat B 7 étage Case 25 75252 Paris cedex 05