helloasso-paheko-adapter/README.md

75 lines
3 KiB
Markdown
Raw Normal View History

2024-01-21 22:59:46 +00:00
# Paheko Adapter
2023-11-06 10:40:00 +00:00
[HelloAsso](https://www.helloasso.com/) <-> [Paheko](https://paheko.cloud/)
2024-01-21 22:59:46 +00:00
CSV <-> [Paheko](https://paheko.cloud/)
2023-11-06 10:40:00 +00:00
2024-01-21 22:59:46 +00:00
The goal is to provide a way for organizations to import members and memberships data into the Paheko software from Helloasso or from CSV.
**WARNING: This is a very custom script adapted for my environment and requirements**, but I plan to make it more flexible in the future.
2023-11-06 10:40:00 +00:00
And with some specifics features:
2024-01-21 22:59:46 +00:00
- clean-up and normalization of data
- handle subscriptions and activities
- handle linked users
- handle additional donations
- implement additional custom fields
- WIP: update the data without duplication.
IO:
- read from stdin for the CSV
- use the Helloasso unofficial API to read data
- use the [Paheko API](https://paheko.cloud/api)
2023-11-06 10:40:00 +00:00
2024-01-21 22:59:46 +00:00
Written in the Rust programming language.
2023-11-06 10:40:00 +00:00
## Getting started
Create a `.env` file from `.env.example` and fill in some secrets.
Run the program `dotenv cargo run`
2023-12-24 11:52:11 +00:00
## Fonctionnement
Arbre de décision au moment de l'import :
2023-12-24 11:52:11 +00:00
- On va déjà récupérer la liste des utilisateurs en mode "summary" UserSummary` cad avec juste l'id, l'email, le prénom et le nom.
2023-12-26 15:09:49 +00:00
- Ensuite on va récupérer la liste des transactions avec helloasso pour cette période comptable
- ce qui compte c'est d'avoir la référence comptable
- on peut faire une req sql qui filtre sur les id ou alors sur un compte
- using accounting/years/{ID_YEAR}/account/journal (GET)
- ou alors req SQL
2023-12-24 11:52:11 +00:00
- On va créer une liste de réponse helloasso à traiter en filtrant les "réponses" d'helloasso. Pour chaque réponse, si l'id helloasso de cette réponse est trouvé dans la liste récupéré avant sur Paheko, alors on l'ignore. Sinon on garde
- Pour chaque réponse à traiter
- On va regarder si l'id de la réponse est trouvé dans une écriture comptable, si oui on ignore
- cela veut dire que la personne est déjà inscrite pour ajd
- On va regarder si l'email est déjà présent dans la liste des adhérents ou ancien adhérents (à N-1)
- Si non, on créé l'utilisateur
- Si oui, on ne créé pas d'utilisateur, on récupère l'id
- On va créer une activité pour cet utilisateur
- On va créer une écriture comptable, le numéro de la pièce comptable étant "HA/{ID_ANSWER}" (à la base je voulais le faire en JSON pour plus de détails, mais c'est trop gros)
PB: l'API permet d'importer des activités, mais pas de lier une écriture comptable
ya une table `acc_transactions_users` qui permet de lier une transaction avec une activité d'un utilisateur
## Import from CSV
```
xlsx2csv -n "Adhérents PAPIER" ./wip_matthieu_b.xlsx > ./to_import.csv
```
```
cat ./tmp/adhesions_papier_nov2023.csv | cargo run -- --source csv
```
```
cat ~/.mnt/etoiledebethleem/copyparty/adhesions/to_import.csv | head -n 25 | sed ':a;N;$!ba;s/\(Champ complémentaire [0-9]\)\n/\1 /g' | sed 's/Champ complémentaire \([0-9]\)/CC \1/g'
```
2024-01-21 22:59:46 +00:00
## Run in prod
```
cargo run -- --source helloasso | tee ./.out/2024-01-21_2_ha.log
cargo run -- --source helloasso | tee ./.out/2024-01-21_2_ha.log
```