diff --git a/README.md b/README.md index 8e8f319..ea1cdba 100644 --- a/README.md +++ b/README.md @@ -82,3 +82,11 @@ critique: - id2767 samsung 860 evo le libellé ne précise pas la capacité (cette même réf est utilisée pour des disques dur de différent capacité) +### généré it-cnrs-l15.tsv + +critique: + - peu de lignes comparé à cnrs... est-ce normal ? + - libellé incomplet + - id527 - l'écran n'apparait même pas dans le libellé alors que je sais qu'il y en a un + - beaucoup de libellés qui ne contiennent pas le numéro de modèle + diff --git a/achats-ipr/2019/cnrs/commandes-it-2019-ur1-002-annotated.tsv b/achats-ipr/2019/cnrs/commandes-it-2019-ur1-002-annotated.tsv new file mode 100644 index 0000000..f0ce213 --- /dev/null +++ b/achats-ipr/2019/cnrs/commandes-it-2019-ur1-002-annotated.tsv @@ -0,0 +1,34 @@ + Centre financier Elément d'OTP Document d'achat Fournisseur/Division fourn. Date du document Code TVA Désignation Date livraison Valeur totale en cours Reste à livrer (quantité) Livraison finale Reste à facturer (quantité) Facture finale Immobilisation Groupe marchandises Texte Correspondance Créateur commande comment +21 991R423 17CQ423-S0 4500458349.0 7976 DELL 2019-02-14 DK LATITUDE 5590 - Portable conf.n°2 2019-02-25 1616.8 0 X 0 126639.0 IA.11 Danièle, Le numéro d'ordre n'est pas cor DE MOREL DANIELE +38 991R423 17CQ423-S0 4500463111.0 7976 DELL 2019-03-28 DJ Acessoires pour LATITUDE 5 DELL 2019-04-15 81.74 0 X 0 X IA.24 BC soldé mail Danièle 14/06/19 Danièle, DE MOREL DANIELE +39 991R423 17CQ423-S0 4500463928.0 4945 MISCO INMAC WSTORE 2019-04-03 DJ Disque dur 1 To devis joint 2019-04-15 71.92 0 X 0 X IA.23 bc soldé à la demande de Danièle DE MOREL DANIELE +64 991R423 17CQ423-S0 4500474750.0 7976 DELL 2019-07-16 DJ Accessoires DELL : sac à dos,cable,clé 2019-07-20 82.94 0 X 0 IA.24 DE MOREL DANIELE +233 991R423 17CQ423-G0 4500479590.0 7976 DELL 2019-10-01 DK PC portable DELL pour MARIETTE Céline 2019-10-28 1474.61 0 X 0 127281.0 IA.11 num IMMO = 127281 num etiquette 052108 LECLAIRE FRANCIS modèle ? +234 991R423 17CQ423-G0 4500479590.0 7976 DELL 2019-10-01 DJ Eco contribution 2019-10-28 2.21 0 X 0 X IA.11 num IMMO = 127281 num etiquette 052108 LECLAIRE FRANCIS +237 991R423 17CQ423-G0 4500481443.0 7976 DELL 2019-10-14 DJ CAT1_Configuration n°1 - Latitude 3400 2019-10-28 900.04 0 X 0 IA.11 LECLAIRE FRANCIS +238 991R423 17CQ423-G0 4500481449.0 7976 DELL 2019-10-14 DJ Cat1-Configuration1-Optiplex 5070 2019-10-28 883.85 0 X 0 IA.01 erreur de numéro de contrat. Il y a plus LECLAIRE FRANCIS +292 991R423 17CQ423-B0 4500466068.0 4945 MISCO INMAC WSTORE 2019-04-26 DJ 4 Disques dur externe réf. 2963591 2019-05-02 378.62 0 X 0 IA.23 DE MOREL DANIELE +294 991R423 17CQ423-B0 4500467898.0 4945 MISCO INMAC WSTORE 2019-05-14 DJ consom. inform. (clé, cable, cordon) 2019-12-20 52.9 0 X 0 IA.24 DE MOREL DANIELE +321 991R423 17CQ423-B0 4500480354.0 7976 DELL 2019-10-07 DJ "Moniteur 27""-P27 19H" 2019-10-28 248.4 0 X 0 IA.01 erreur de numéro de contrat. il s'agit d LECLAIRE FRANCIS +322 991R423 17CQ423-B0 4500480354.0 7976 DELL 2019-10-07 DJ eco contribution 2019-10-28 3.0 0 X 0 IA.01 erreur de numéro de contrat. il s'agit d LECLAIRE FRANCIS +323 991R423 17CQ423-B0 4500481836.0 16783 ECONOCOM 2019-10-16 DJ "Philips moniteur 32"" LED Brillance p-Lin" 2019-10-28 491.58 0 X 0 IA.24 LECLAIRE FRANCIS +335 991R423 17CQ423-F0 4500458618.0 16783 ECONOCOM 2019-02-18 DJ Apple adaptateur Thunderbolt 3 2019-02-25 45.67 0 X 0 IA.24 DE MOREL DANIELE +337 991R423 17CQ423-F0 4500459260.0 4945 MISCO INMAC WSTORE 2019-02-26 DJ CLES USB VERBATIM REF.49065 2019-03-04 149.88 0 X 0 IA.23 Erreur de numéro de poste Nicolas DE MOREL DANIELE +382 991R423 17CQ423-F0 4500467350.0 4945 MISCO INMAC WSTORE 2019-05-09 DJ cons.informatiques (disque dur, souris.. 2019-05-20 140.47 0 X 0 IA.24 DE MOREL DANIELE +458 991R423 17CQ423-E0 4500481443.0 7976 DELL 2019-10-14 DJ compélement CAT1 conf n°1 2019-10-28 0.32 0 X 0 IA.11 LECLAIRE FRANCIS +461 991R423 17CQ423-E0 4500484012.0 7976 DELL 2019-11-04 DJ "Moniteur 27"" - Ecran panoramique" 2019-11-25 407.4 0 X 0 IA.01 erreur de n° de marché Attention à bien LECLAIRE FRANCIS +509 991R423 17CQ423-A0 4500466536.0 7976 DELL 2019-05-02 DK ORDINATEUR PORTABLE LUCILE RUTKOWSKI 2019-05-15 2205.84 0 X 0 126799.0 IA.11 immo: 126799 code barre: 051358 MARCAULT MAGALI modèle ? + écran ? +527 991R423 17CQ423-A0 4500469692.0 7976 DELL 2019-05-28 DK Ordinateur portable Guillaume Raffy 2019-06-17 1981.57 0 X 0 X 126871.0 IA.11 numéro immo 126871 étiquette 051357 MARCAULT MAGALI latitude 7490 + écran u2719d +530 991R423 17CQ423-A0 4500472335.0 7976 DELL 2019-06-25 DK PORTABLE LATITUDE DEV. 100000519892 2019-07-01 1680.16 0 X 0 X 126927.0 IA.11 immo: 126927 Etiquette: 051641 DE MOREL DANIELE modèle ? +545 991R423 17CQ423-A0 4500478894.0 7976 DELL 2019-09-25 DJ DELL mémoire mise niveau 16-GO 2019-09-30 906.84 0 X 0 IA.32 Bonjour, le devis n'est que pour une bar LECLAIRE FRANCIS +556 991R423 17CQ423-A0 4500482087.0 7976 DELL 2019-10-17 DK Cat3_Configuration n°1 Latitude 7400 2019-11-18 1675.1 0 X 0 127312.0 IA.11 IMMO 127312 Etiquette 052037 LECLAIRE FRANCIS +578 991R423 17CQ423-A0 4500483795.0 16783 ECONOCOM 2019-10-29 DJ Apple souris sans fil magic mouse 2 argt 2019-11-18 70.55 0 X 0 IA.24 LECLAIRE FRANCIS +579 991R423 17CQ423-A0 4500483795.0 16783 ECONOCOM 2019-10-29 DJ Apple adaptateur secteur 2019-11-18 73.92 0 X 0 IA.24 LECLAIRE FRANCIS +583 991R423 17CQ423-A0 4500484318.0 7976 DELL 2019-11-05 DJ CAT2 CONFIG 2 OPTIPLEX 7070 FORMAT MT 2019-11-25 897.98 0 X 0 IA.01 LECLAIRE FRANCIS +589 991R423 17CQ423-A0 4500484523.0 7976 DELL 2019-11-05 DJ "Moniteur 27"" Écran + sac à dos Dell" 2019-11-25 306.6 0 0 IA.24 le disque dur et le casque sont à passer LECLAIRE FRANCIS +590 991R423 17CQ423-A0 7976 DELL 2019-11-05 DJ Casque Pro sans fil Bluetooth 2019-11-25 165.6 0 0 IA.24 le disque dur et le casque sont à passer LECLAIRE FRANCIS +591 991R423 17CQ423-A0 7976 DELL 2019-11-05 DJ Câble réseau RJ45 2019-11-25 24.0 0 0 IA.24 le disque dur et le casque sont à passer LECLAIRE FRANCIS +592 991R423 17CQ423-A0 7976 DELL 2019-11-05 DJ Disque dur externe 2To 2019-11-25 108.0 0 0 IA.24 le disque dur et le casque sont à passer LECLAIRE FRANCIS +593 991R423 17CQ423-A0 4500484523.0 7976 DELL 2019-11-05 DJ Sac à dos Dell Pro 2019-11-25 40.32 0 0 IA.24 le disque dur et le casque sont à passer LECLAIRE FRANCIS +613 991R423 17CQ423-A0 4500484656.0 4945 MISCO INMAC WSTORE 2019-11-06 DJ PLANTRONICS Voyager 8200 UC Noir 2019-11-25 298.52 0 X 0 IA.24 LECLAIRE FRANCIS +614 991R423 17CQ423-A0 4500484825.0 7976 DELL 2019-11-06 DJ "Moniteur 27"" + sac à dos DELL" 2019-11-25 306.6 0 X 0 IA.24 LECLAIRE FRANCIS diff --git a/achats-ipr/2019/cnrs/it-ur1-l1p5.tsv b/achats-ipr/2019/cnrs/it-ur1-l1p5.tsv new file mode 100644 index 0000000..5bc1b37 --- /dev/null +++ b/achats-ipr/2019/cnrs/it-ur1-l1p5.tsv @@ -0,0 +1,24 @@ +id Modele Fabricant Type + +21 latitude 5590 dell pc portable +39 1 To disque dur +233 dell pc portable +237 latitude 3400 dell pc portable +238 optiplex 5070 dell pc fixe +292 disque dur externe disque dur +292 disque dur externe disque dur +292 disque dur externe disque dur +292 disque dur externe disque dur +321 p2719h dell écran +323 led brilliance p-line 32" philips écran +461 écran panormaique 27" dell écran +509 dell pc portable +527 latitude 7490 dell pc portable +527 u2719d dell écran +530 latitude dell pc portable +556 latitude 7400 dell pc portable +578 magic mouse 2 apple souris +583 optiplex 7070 dell pc fixe +589 moniteur 27" dell écran +592 externe 2 To disque dur +614 moniteur 27" dell écran diff --git a/src/sifact002_to_itorders.py b/src/sifact002_to_itorders.py new file mode 100755 index 0000000..81bde0b --- /dev/null +++ b/src/sifact002_to_itorders.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +from pathlib import Path +import re +import pandas + + +# converts a cnrs geslab type t001 report to a single table +def sifact002_to_sheet(sifact002_dir: Path, out_tsv_file_path: Path): + + dept_names = [ + 'DIRECTION', + 'MAT.NANO.SCIENCES', + 'MATERIAUX ET LUMIERE', + 'MATIERE MOLLE', + 'MECA VERRES', + 'MILIEU DIVISE', + 'PHYSIQUE MOLECULAIRE' + ] + + with open(out_tsv_file_path, 'wt') as outf: + out_header_has_been_written = False + for dept_name in dept_names: + src_file_path = sifact002_dir / ('2019.' + dept_name + '.xls') + tmp_file_path = Path('./tmp') / ('2019.' + dept_name + '.tsv') + df = pandas.read_excel(src_file_path) + df.to_csv(tmp_file_path, sep='\t') + + with open(tmp_file_path) as inf: + in_header_has_been_read = False + for line in inf.readlines(): + if in_header_has_been_read: + outf.write(line) + else: + # this line is the header only output it if it's the 1st header + in_header_has_been_read = True + if not out_header_has_been_written: + outf.write(line) + out_header_has_been_written = True + + # add an index + df = pandas.read_csv(out_tsv_file_path, sep='\t') + # df.rename(columns={0: 'uid'}) + # df['id'] = range(1, len(df) + 1) + # df.insert(0, 'id', df.pop('id')) + # df = df[-1:] + df[:-1] # put the id column in the first column + df.to_csv(out_tsv_file_path, sep='\t') + + # with open(in_tsv_file_path) as inf, open(out_tsv_file_path, 'wt') as outf: + # table_header_has_been_written = False + # for line in inf.readlines(): + # ignore_line = False + # # Entité dépensière : AESJULLIEN AES RENNES METROPOLE MC JULLIEN Crédits reçus : 40,000.00 + # # Disponible : 24,743.14 + # # + # # + # # N° commande Souche Libellé commande Date commande Raison sociale fournisseur Montant consommé sur exercice antérieur Montant consommé sur l'exercice Montant réservé Montant facturé Code origine Nature dépense Statut Cde groupée + # if re.match(r'^Entité dépensière', line): + # ignore_line = True # noqa + # is_table_header = re.match(r'^N° commande', line) is not None + # # 19,572.00 19AESMCJ CAMERA ZYLA 5.5 sCMOS 04/11/19 ANDOR TECHNOLOGY LIMITED 0.00 13,681.56 0.00 0.00 635991 IM + # if is_table_header and not table_header_has_been_written: + # outf.write('# %s' % line) + # table_header_has_been_written = True + # if re.match(r'^[0-9,./]+\t', line): + # outf.write(line) + + +def sifact002_to_itorders(sifact002_dir: Path, itorders_file_path: Path): + sheet_file_path = Path('./tmp/commandes-2019-ur1.tsv') + sifact002_to_sheet(sifact002_dir, sheet_file_path) + + df = pandas.read_csv(sheet_file_path, sep='\t') + + # delete the colums for which the label is of the form 'Unnamed: '. They come from the csv export of libre office + unnamed_columns = [column_label for column_label in df.keys() if re.match(r'^Unnamed', column_label) is not None] + print(unnamed_columns) + df = df.drop(columns=unnamed_columns) + + print(df.columns) + print(df.keys()) + print(df) + it_df = df[(df['Fournisseur/Division fourn.'] == '7976 DELL') | + (df['Fournisseur/Division fourn.'] == '16783 ECONOCOM') | + (df['Fournisseur/Division fourn.'] == '4945 MISCO INMAC WSTORE') + ] + + # 'AMAZON EU SARL SUCCURSALE FRANCAISE' + # 'INMAC' + # 'RETIS' + # 'APIXIT' + print(it_df) + + # print(it_df[['Montant facturé', 'Raison sociale fournisseur', 'Libellé commande']]) + it_df.to_csv(itorders_file_path, sep='\t') + + +def main(): + sifact002_to_itorders(Path('./achats-ipr/2019/ur1/from_ddemorel'), Path('./tmp/commandes-it-2019-ur1-002.tsv')) + + +main()