Bonjour à tous,

je découvre depuis peu Kresus (installé sur un YNH) en vue d’une gestion de LMNP et de SCI familliale… je voudrais savoir s’il est possible d’exporter les comptes sous un format X ou Y… car c’est mon principal besoin actuellement:

  • importer les comptes (ça, évidemment, c’est ok)
  • les catégoriser, rajouter les opérations qui ne passent pas par les comptes (ça aussi, c’est ok)
  • renvoyer cela à l’expert comptable (sous fichier xls ou autre)

merci de vos lumières (:

Krr

Salut !

Bienvenu sur le forum !

Alors non, ça n’existe pas en l’état actuel ; ça pourrait faire l’objet d’une contribution, si tu es ou quelqu’un est motivé :slight_smile:

Sinon, on a déjà une fonction d’export (qui permet de migrer son instance de Kresus, entre autres, et faire des « backups » simplement). Tu pourrais utiliser cet export, qui renvoie un fichier JSON, pour ensuite le convertir ; le format est relativement simple, donc ça doit bien se faire :+1:

Bon courage !
Benji

Hello… bon j’avais bien fait le tour. Le seul moyen consiste (sur un ipad uniquement, sur un ordi ca ne marche pas… j’ai aucune idée pourquoi) à sélectionner et faire un copier/coller spécial et qq manips ensuite.

Mais un simple export CSV serait vraiment génial… hélas, je n’ai aucune connaissance sur le sujet dev/code …

Serait il possible aussi, dans les demandes, de pouvoir avoir une colonne de plus (avec un simple champ texte) ? Afin de pouvoir noter les numéros de facture ou autre… (y’a tjrs moyen de rentrer dans les catégories mais c’est pas pratique)

et où pourrais je poster ces demandes ? (export et colonne en plus)

Salut !

Alors le forum est un endroit très bien pour demander une fonctionnalité comme tu l’as fait, merci à toi !

Pour ce qui est de l’export en CSV, plusieurs points me viennent à l’esprit :

  • si quelqu’un se sent de faire un petit script pour convertir du format de JSON vers CSV, faites-vous plaisir :slight_smile:
  • peut-être qu’un usage basé sur Woob serait suffisant pour toi ? Je pense que woob permet d’exporter vers des formats standards, donc j’imagine un format notamment CSV.
  • dans le doute, j’ouvre un ticket pour le faire côté Kresus, parce qu’un export d’un compte au format CSV ne devrait pas être très dur (ou de tous les comptes).

Pour ce qui est du champ texte : tu peux cliquer sur le nom d’une transaction pour personnaliser le libellé et ajouter des petites notes à l’intérieur, est-ce que c’est suffisant pour toi ?

À plus !

Hello désolé du super long délai de réponse… j’étais en arret maladie et donc un peu coupé des machines.

  • woob: peut etre que ca ferait le boulot ? j’ai du mal à saisir ce que ça fait ?
  • export en csv: oui ce sera très suffisant, puisqu’à partir de là, il suffit de savoir les caractères utilisées pour délimiter et on ressort un excel en deux clics…
  • non, en fait le libellé étant celui « de la banque », c’est un truc à conserver en l’état si possible… non vraiment simplement le fait de pouvoir rajouter une colonne « notes » (ou un autre titre) dans lequel on peut rentrer autre chose… ici, ce serait pour faire correspondre à des éléments comptables (le numéro d’une facture par exemple…). Evidemment, colonne qui serait également exportée via le CSV (-:

merci pour ton temps et tes réponses en tout cas !

Salut !

Concernant l’export en CSV, en attendant un éventuel développement, cette commande te fera un export CSV : curl -L http://127.0.0.1:9876/api/all | jq ".transactions[] | [.id, .accountId, .label, .rawLabel, .customLabel, .date, .amount, .category, .type] | @csv" > fichier.csv.

Ça nécessite curl et jq et se lance directement sur l’URL du Kresus (ici 127.0.0.1:9876).

Concernant les libellés, le label récupéré reste toujours disponible dans le champ rawLabel, le champ customLabel ne l’écrase pas. Dans l’interface le custom label est utilisé en priorité mais le label brut reste visible dans les détails de l’opération.
Et rien ne t’empêche de mettre en label personnalisé le label brut + la note que tu veux rajouter (en les séparant par un / ou autre pour t’y retrouver).

Hello… je te remercie pour la commande… je vais voir de tester cela.

Je suppose qu’il faut que je sois loggé quand meme pour que cela fonctionne ? Si je lance cela dans un terminal… comment la machine sait elle que je suis loggé via mon browser ?

La commande est à lancer sur le serveur qui fait tourner Kresus, ça appelle directement Kresus (qui n’a pas de système d’authentification, en laissant la charge à un reverse proxy ou truc style).

chez moi, c’est sur un YuNoHost…

bon, je vais voir comment je peux tester cela quand je rentre (je ne suis pas sur place…)… et je te dis dès que j’ai testé ! (:

J’ai donc tenté la commande dans un terminal directement sur la machine… et ca me met:
curl: (7) Failed to connect to 127.0.0.1 port 9876: Connection refused

Evidemment, j’étais en root…

Que donne comme retour la commande netstat -plnt ?
Le port a peut-être été changé…

je ne vois aucun nom dans la liste de netstat qui correspondrait à kresus… ca devrait etre quel nom de pgm qui utiliserait le port qu’on cherche ? actuellement le port 9876 n’est pas utilisé, en tout cas.

Le programme serait sûrement node, avec l’utilisateur kresus.
Sinon tu dois pouvoir retrouver le port avec un truc du style de grep "port=" /var/www/kresus/config.ini"

nope, y’a aucun node avec utilisateur kresus…

peut etre y’a t’il un truc à faire dans l’administration de kresus ? Il est installé via YUNOHOST…

Sans la liste ni le retour de la commande précédente ça va être difficile de t’aider…

grep ne donne aucun retour, juste un >

et la liste:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      2288/slapd          
tcp        0      0 0.0.0.0:4190            0.0.0.0:*               LISTEN      2369/dovecot        
tcp        0      0 0.0.0.0:4000            0.0.0.0:*               LISTEN      4734/nxd            
tcp        0      0 127.0.0.1:20000         0.0.0.0:*               LISTEN      4282/nxserver.bin   
tcp        0      0 127.0.0.1:12001         0.0.0.0:*               LISTEN      4332/nxnode.bin     
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      2369/dovecot        
tcp        0      0 0.0.0.0:44321           0.0.0.0:*               LISTEN      2436/pmcd           
tcp        0      0 0.0.0.0:44322           0.0.0.0:*               LISTEN      2471/pmproxy        
tcp        0      0 127.0.0.1:6787          0.0.0.0:*               LISTEN      553028/python3      
tcp        0      0 0.0.0.0:44323           0.0.0.0:*               LISTEN      2471/pmproxy        
tcp        0      0 127.0.0.1:11332         0.0.0.0:*               LISTEN      2119/rspamd: main p 
tcp        0      0 127.0.0.1:35140         0.0.0.0:*               LISTEN      1192/node           
tcp        0      0 127.0.0.1:42341         0.0.0.0:*               LISTEN      1523718/cockpit-bri 
tcp        0      0 127.0.0.1:11333         0.0.0.0:*               LISTEN      2119/rspamd: main p 
tcp        0      0 127.0.0.1:389           0.0.0.0:*               LISTEN      2288/slapd          
tcp        0      0 127.0.0.1:11334         0.0.0.0:*               LISTEN      2119/rspamd: main p 
tcp        0      0 0.0.0.0:5222            0.0.0.0:*               LISTEN      2427/lua5.3         
tcp        0      0 127.0.0.1:4200          0.0.0.0:*               LISTEN      2235/shellinaboxd   
tcp        0      0 127.0.0.1:25001         0.0.0.0:*               LISTEN      4416/nxrunner.bin   
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1520757/mariadbd    
tcp        0      0 0.0.0.0:4330            0.0.0.0:*               LISTEN      1486278/pmlogger    
tcp        0      0 127.0.0.1:5290          0.0.0.0:*               LISTEN      2427/lua5.3         
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      3514/master         
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      1208/redis-server 1 
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      1197/memcached      
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      2369/dovecot        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1831/nginx: master  
tcp        0      0 127.0.0.1:26001         0.0.0.0:*               LISTEN      4332/nxnode.bin     
tcp        0      0 127.0.0.1:10001         0.0.0.0:*               LISTEN      954/postsrsd        
tcp        0      0 127.0.0.1:10002         0.0.0.0:*               LISTEN      954/postsrsd        
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN      418536/dnsmasq      
tcp        0      0 0.0.0.0:5269            0.0.0.0:*               LISTEN      2427/lua5.3         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1280/sshd: /usr/sbi 
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1487706/cupsd       
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      925770/postgres     
tcp        0      0 127.0.0.1:35673         0.0.0.0:*               LISTEN      1523702/cockpit-bri 
tcp        0      0 0.0.0.0:7001            0.0.0.0:*               LISTEN      4332/nxnode.bin     
tcp        0      0 127.0.0.1:21561         0.0.0.0:*               LISTEN      2112/nxserver.bin   
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      3514/master         
tcp        0      0 127.0.0.1:21562         0.0.0.0:*               LISTEN      2112/nxserver.bin   
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1831/nginx: master  
tcp6       0      0 :::636                  :::*                    LISTEN      2288/slapd          
tcp6       0      0 ::1:4700                :::*                    LISTEN      1255/cnid_metad     
tcp6       0      0 :::4190                 :::*                    LISTEN      2369/dovecot        
tcp6       0      0 :::4000                 :::*                    LISTEN      4734/nxd            
tcp6       0      0 :::993                  :::*                    LISTEN      2369/dovecot        
tcp6       0      0 :::44321                :::*                    LISTEN      2436/pmcd           
tcp6       0      0 :::44322                :::*                    LISTEN      2471/pmproxy        
tcp6       0      0 :::9090                 :::*                    LISTEN      1/init              
tcp6       0      0 :::44323                :::*                    LISTEN      2471/pmproxy        
tcp6       0      0 ::1:11332               :::*                    LISTEN      2119/rspamd: main p 
tcp6       0      0 :::548                  :::*                    LISTEN      1252/afpd           
tcp6       0      0 ::1:11333               :::*                    LISTEN      2119/rspamd: main p 
tcp6       0      0 ::1:389                 :::*                    LISTEN      2288/slapd          
tcp6       0      0 ::1:11334               :::*                    LISTEN      2119/rspamd: main p 
tcp6       0      0 :::5222                 :::*                    LISTEN      2427/lua5.3         
tcp6       0      0 :::4330                 :::*                    LISTEN      1486278/pmlogger    
tcp6       0      0 ::1:5290                :::*                    LISTEN      2427/lua5.3         
tcp6       0      0 :::587                  :::*                    LISTEN      3514/master         
tcp6       0      0 ::1:6379                :::*                    LISTEN      1208/redis-server 1 
tcp6       0      0 :::143                  :::*                    LISTEN      2369/dovecot        
tcp6       0      0 :::80                   :::*                    LISTEN      1831/nginx: master  
tcp6       0      0 :::53                   :::*                    LISTEN      418536/dnsmasq      
tcp6       0      0 :::5269                 :::*                    LISTEN      2427/lua5.3         
tcp6       0      0 :::22                   :::*                    LISTEN      1280/sshd: /usr/sbi 
tcp6       0      0 ::1:631                 :::*                    LISTEN      1487706/cupsd       
tcp6       0      0 ::1:5432                :::*                    LISTEN      925770/postgres     
tcp6       0      0 :::7001                 :::*                    LISTEN      4332/nxnode.bin     
tcp6       0      0 :::25                   :::*                    LISTEN      3514/master         
tcp6       0      0 :::443                  :::*                    LISTEN      1831/nginx: master  

Tu peux montrer le contenu de /var/www/kresus/config.ini stp (hormis les mots de passe éventuels de la BDD) ?

ah oui, dans la config de kresus c’est bien le port 35140 … j’ai essayé la commande avec ce port… ca plante pas mais ca mouline et ca n’avance pas (le timer de curl défile mais c’est tout…)

Que donne curl -L http://127.0.0.1:35140/api/all ?
Et dans le config.ini, quelle est la valeur de url_prefix ?

url_prefix:/aaargent

(oui bon huhuhu)

et la commande ne donne rien: ca « plante » mais sans donner d’erreur, ni de fin de process

EDIT: ok, j’ai compris, il faut donc: http://127.0.0.1:35140/aaargent/api/all

et la, ca me sort qq chose… je teste !

Hello !

je teste pas mal depuis hier… bon le .csv qui sort, y’a qq bizarreries mais j’ai pu contourner l’essentiel. Je note, effectivement, quand on rentre un label personnalisé que, lors de l’export, cela sort une colonne de plus.

Cependant:

  • lorsqu’on remplit le label perso, on a donc plus les infos d’avant…sauf à aller dans les détails de l’opération. Sur quelques opérations, cava mais quand on arrive à plusieurs dizaines par mois, c’est vite lourd. En fait il suffirait de pouvoir demander à Kresus d’afficher en meme le « libellé complet » et le « libellé personnalisé » dans la vision de base… est ce compliqué à rajouter ? (je n’ai aucune connaissance sur le sujet, je ne peux que poser des questions -___-’ )

  • peux t’on élargir (ou demander à régler) la vision de la colonne centrale ? la plupart des infos (libellé, catégoerie, etc…) sont tronquées…

  • enfin, concernant l’export csv, y’a qq libellés qui foutent le bordel (quand y’a une virgule dans le titre notamment) mais bon, ça, c’est difficilement contournable je pense. Par contre, quand on écrit un libellé personnalisé, celui ci se rajoute dans l’export (forcement) et quand on exporte, les lignes sans lib personnalisé ont donc une colonne vide, ce qui ait que les lignes avec un lib perso se retrouvent décalée lors de l’export (quand on fusionne les séparateurs). Alors c’est contournable, j’en ferais pas une fixette (: mais si jamais y’a une fonction export qui se rajoute, il faudra peut etre en tenir compte (-:

Je conclue ce message en remerciant les dev de Kresus, vraiment, y’a une base ici qui est très intéressante… je ne sais pas si je vais pouvoir arriver à l’utiliser dans le cadre de mes besoins mais c’est un outil évidemment très utile !!

petit add: pour exporter les catégories, il faut categoryId et pas category dans la formule curl… par contre, ca n’exporte qu’un chiffre (qui corresponds à une catégorie, je suppose) mais pas le label de la catégorie ? … j’ai essayé de remplacer categoryId par categoryLabel mais ca doit pas etre ca (:

edit: idem, quand on a plusieurs comptes, les transactions sont toutes exportées en bloc… sans qu’on puisse déterminer lesquels sont sur tel compte ou sur tel compte… ?

Oui, d’où ma précision :

Et rien ne t’empêche de mettre en label personnalisé le label brut + la note que tu veux rajouter (en les séparant par un / ou autre pour t’y retrouver).

Non, mais tu peux déjà, si ce n’est déjà fait, opter la « Disposition fluide » dans la personnalisation de l’application, pour utiliser toute la place disponible.

Ce ne sera en effet pas possible d’avoir le libellé de la catégorie via cette simple commande. Tu peux toi-même remplacer les categoryId: 1 par categoryLabel: "MACHINTRUC" éventuellement dans le CSV créé.

Ça devrait être jouable en bidouillant la commande jq. Ou alors en exportant aussi le champ accountId et en filtrant ensuite via un tableur :).

  • j’avais raté l’option de la disposition fluide ! C’est cool !!

Tu peux toi-même remplacer les categoryId: 1 par categoryLabel: "MACHINTRUC" éventuellement dans le CSV créé.

dans la commande tu m’a donné ? ou bien je le fais après, dans excel, en remplacant le numéro de catégorie par la bonne chose…? mais c’est assez lourd.

Ça devrait être jouable en bidouillant la commande jq. Ou alors en exportant aussi le champ accountId et en filtrant ensuite via un tableur :).

On exporte déjà la valeur AccountId mais elle est vide…
On ne peut pas avoir plusieurs accounts dans Kresus, j’ai l’impression (du moins quand c’est dans un YUNOHOST), j’ai créé un compte utilisateur différent dans YNH et une fois loggé, il m’a envoyé sur une vision totalement identique de ce que j’avais dans mon compte admin…
je ne sais pas si c’est une limite de la version de KRESUS porté pour Yunohost …?

OUPS: j’ai dit de la m… en fait, AccountId est exporté sous forme de chiffre… bon… donc j’ai rien dit sur ce point. Le reste de la question sur le fait d’avoir des utilisateurs différents sur la meme instance de Kresus reste valable mais c’est d’un coup moins un souci…

Alors je remet ici la bonne réponse à la partie essentielle de ma question: comment exporter en csv ?

Dans un terminal sur la machine (ou en ssh):

curl -L http://127.0.0.1:xxxx/NomDeKresus/api/all | jq ".transactions[] | [.id, .accountId, .label, .rawLabel, .customLabel, .date, .amount, .categoryId, .type] | @csv" > fichier.csv

Evidemment, il faut mettre le bon port à la place de xxxx et le bon chemin à la place de NomDeKresus …

Ensuite, on récupère le .csv et il faut importer le .csv en mettant dans les séparateurs « en plus » des virgules, les caractères "\ et ’ en séparateur de chaines de caractères.

Certaines opérations seront décalées par rapport aux autres si elles ont une virgule dans le rawLabel et également si elles ont qq choses en .label (cad un label personnalisé, rentré dans Kresus). De là, un tri via les colonnes ou il y a des choses qui dépassent permettent de les mettre en premier, on copie-colle pour remettre les infos aux bons endroits et on retrie par date.
Sous excel/libreoffice, ca prends moins de 5 mins si on connait pas trop… moins de 2 mins, si on connait… et tadaaa ! On a un .xls/.ods exporté et exploitable.


Je reste partisan de la possibilité d’ajouter une colonne dans kresus directement (alors après, il faut la catégoriser dans Column, l’identifier, etc… j’ai bien compris, ca se fait pas en 5 mins, ca…) …

mais SURTOUT, le fait de pouvoir avoir plusieurs comptes qui n’accèdent pas aux memes données ! Bon, je suppose que je peux contourner ca en installant plusieurs instances de Kresus sur la meme machine…

Concernant les virgules qui cassent le csv, il faut jouer un peu avec jq mais je pense que les champs peuvent être entourés de ".

Jq peut aussi filtrer par champ et donc filtrer sur les accountId qui intéressent.

ah je ne maitrise pas du tout jq … -____-’

La documentation de jq est disponible ici : jq 1.7 Manual, mais il y a plein de tutos sur le web.

Donc en utilisant -r ça devrait améliorer le CSV de sortie:

jq -r ".transactions[] | [.id, .accountId, .label, .rawLabel, .customLabel, .date, .amount, .categoryId, .type] | @csv"

Ensuite pour filtrer sur les comptes qui t’intéressent :

jq -r ".transactions[] | select(.accountId == (ACCOUNT_ID_1, ACCOUNT_ID_2)) | [.id, .accountId, .label, .rawLabel, .customLabel, .date, .amount, .categoryId, .type] | @csv"

En remplaçant bien sûr ACCOUNT_ID par ceux qui t’intéressent.

je te remercie à nouveau, je vais voir ce que cela donne

Edit: bon ca vire les \ mais pas les "

mais c’est déjà un pas ! (:

Hello @nicofrand … je me permet un petit message ici pour suggérer l’ajout de cette fonction (je fais tjrs en ligne de commande mais est ce que tous les utilisateurs de kresus en sont capables ?) via un bouton dans l’administration ? ou bien peut etre sur chaque compte ?

En tous les cas, j’ai pu extraire les opérations, les convertir en .xls (avec qq tatonnements pour les réglages) et ensuite, avec un peu de ménage rapide, obtenir qq chose… Dans certains cas, les virgules qui apparaissent dans le .csv, dans le nom des opérations, foutent un peu le bordel (décalage de colonne)… y’a des infos à gicler (des “T00:00:00.000Z” et “T23:00:00.000Z” qui apparaissent et qui n’apportent rien).

La dernière opération restant à identifier quel ID Account corresponds à quel compte…

mais déjà, un simple bouton permettant un export .csv , ce serait bien, non ?

hello..

ah ok… j’avais cherché sur github avant d’écrire… mais je ne connaissais pas framagit. Donc, c’est noté dans un coin, cool (:

bon courage et encore merci pour ce travail