# HG changeset patch
# User artbio
# Date 1589240547 14400
# Node ID 27f2ef353554d554b94b46ae3d9a73ae2e2ab842
"planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/master/tools/facturation_ibps commit 07c73df696d6d80e03f03232603d713882131625"
diff -r 000000000000 -r 27f2ef353554 facturation.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/facturation.py Mon May 11 19:42:27 2020 -0400
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+
+
+import argparse
+import re
+import warnings
+
+import openpyxl
+
+import pandas as pd
+
+
+warnings.filterwarnings("ignore")
+
+
+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')
+ the_parser.add_argument('--template', '-t', action='store', type=str,
+ help='xlsx template file')
+ the_parser.add_argument('--reduction', '-r', action='store', type=float,
+ help='reduction to apply', default=1.0)
+ args = the_parser.parse_args()
+ return args
+
+
+def main(template, input_file, output_file, reduction):
+ """Script de parsing des fichiers de facturation de l'IBPS"""
+
+ # ouverture fichier input
+ with open(input_file, 'rb') as file_object:
+ facture_html = file_object.read()
+ # convert to unicode utf-8, remove   and €
+ facture_html = facture_html.decode('utf-8')
+ facture_html = facture_html.replace(r' ', r' ')
+ facture_html = facture_html.replace(r' €', '')
+ facture_html = facture_html.replace(u' \u20ac', '')
+ # parsing de la référence, de la date et de la période de facturation
+ date = re.search(r'Paris le (.*?)
',
+ facture_html).group(1)
+ periode = re.search(r'de la prestation (.*?)',
+ facture_html).group(1)
+ ref = re.search(r'rence interne d.*? :\s*(.*?)<',
+ 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 : ", r'', regex=True)
+ adresse = adresse.replace(
+ r"Adresse du client : ", r'', regex=True)
+ elements = facture_parsed[1]
+
+ # 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])
+
+ # changement du type des éléments numériques du tableau
+ elements[u'nombre(s)'] = pd.to_numeric(elements[u'nombre(s)'])
+ elements[cout_col] = pd.to_numeric(elements[cout_col])
+
+ # ouverture fichier output
+ facture_output = openpyxl.load_workbook(
+ template, data_only='True', 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)']).number_format = '0.00'
+ ws.cell(
+ row=element_row,
+ column=4,
+ value=((1-reduction) *
+ elements.iloc[i][cout_col])).number_format = '0.00'
+
+ # 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.template, args.input, args.output, args.reduction)
diff -r 000000000000 -r 27f2ef353554 facturation.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/facturation.xml Mon May 11 19:42:27 2020 -0400
@@ -0,0 +1,65 @@
+
+
+
+ beautifulsoup4
+ html5lib
+ openpyxl
+ pandas
+ pillow
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+.. 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 27f2ef353554 requirements.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/requirements.txt Mon May 11 19:42:27 2020 -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 27f2ef353554 template_SU.jpg
Binary file template_SU.jpg has changed
diff -r 000000000000 -r 27f2ef353554 template_facture_M_electronique.xlsx
Binary file template_facture_M_electronique.xlsx has changed
diff -r 000000000000 -r 27f2ef353554 template_facture_M_electronique.xlsx.bak
Binary file template_facture_M_electronique.xlsx.bak has changed
diff -r 000000000000 -r 27f2ef353554 template_facture_M_photonique.xlsx
Binary file template_facture_M_photonique.xlsx has changed
diff -r 000000000000 -r 27f2ef353554 template_facture_M_photonique.xlsx.bak
Binary file template_facture_M_photonique.xlsx.bak has changed
diff -r 000000000000 -r 27f2ef353554 test-data/Microscopie_Electronique-2018-67.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Microscopie_Electronique-2018-67.html Mon May 11 19:42:27 2020 -0400
@@ -0,0 +1,105 @@
+
+
+Appel à facturation
+
+
+
+
+
+
+
IBPS - Institut de Biologie Paris Seine - FR3631
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Paris le 09-01-2019
+
+
+
Adresse du client : L'Oréal-Département de physique et caracté - G.Naudin
Caractérisation - Lettre-accord C131378
L'Oréal Advance Research
A avenue Eugène Schueller
Batiment
etage
Aulnay sous Bois
96160
+
+
+
Période de la prestation Octobre Novembre Decembre -2018
Service de Microscopie Electronique
+
+
Objet
+
nombre(s)
+
cout séance *
+
total
+
+
Cryoplonge 11-2018
+
2.00
+
385.00 €
+
700.00 €
+
ACE Leica - E-beam / Cryo 12-2018
+
2.00
+
190.00 €
+
346.00 €
+
JEOL 2100 cryo - EFTEM 11-2018
+
2.00
+
225.00 €
+
410.00 €
+
Ultracut UCT 10-2018
+
1.00
+
86.00 €
+
78.00 €
+
Ultracut UCT 12-2018
+
4.00
+
86.00 €
+
312.00 €
+
ZEISS GeminiSEM 500 CRYO 12-2018
+
6.00
+
251.00 €
+
1368.00 €
Sous total du relevé système
3214 €
Total HT du relevé
3214 €
+
+
Votre nouvel avoir est de 4574.00 €
Le total de votre facture est de 3214.00 € pas de réduction sur ce forfait
Compte tenu de votre avoir vous n'avez rien à régler le total HT est là à titre indicatif
+
+
+
+
+
+
+
Total hors taxes sert au paiement interne
3214.00 €
+
+
Total TTC
3856.80 €
+
Ce document est 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 du relevé : Microscopie Electronique-2018 / 67
Utilisateurs de l'équipe : G.Naudin G.Naudin-follicule
+
+
+
* le cout de séance ne tient pas compte du tarif autonome si celui-ci existe
+
+
+
IBPS - Institut de Biologie Paris Seine - FR3631
9 Quai St Bernard Bat B 7 étage Case 25 75252 Paris cedex 05
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 000000000000 -r 27f2ef353554 test-data/doublefacture.htm
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/doublefacture.htm Mon May 11 19:42:27 2020 -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
Ce document est 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 du relevé : Microscopie Electronique-2018 / 58
Utilisateurs de l'équipe : M.Trichet
+
+
+
* le cout de séance ne tient pas compte du tarif autonome si celui-ci existe
+
+
+
IBPS - Institut de Biologie Paris Seine - FR3631
9 Quai St Bernard Bat B 7 étage Case 25 75252 Paris cedex 05