Balance ou solde d'un compte

Bonjour,

J’aimerai obtenir via API le solde d’un compte.

Je ne veux pas le solde d’un partner, seulement d’un compte

com.axelor.apps.account.db.Account

Ne donne pas de solde

com.axelor.apps.account.db.AccountingSituation

Ne me donne pas le solde du compte mais un solde de partner (si je comprends bien)

Quelqu’un a la variable dont j’ai besoin ?
Merci

Il semble que j’ai besoin de « Action Service »
Mais je ne sais pas faire, et j’ai du mal à comprendre ce qui correspond à mon besoin.

Je lis cette doc, mais j’ai du mal à discerner chaque point
https://docs.axelor.com/adk/6.1/dev-guide/views/index.html

Est-ce un View … form ?
Une action ?

Les Action Service sont un moyen d’appeler directement plusieurs actions déjà existantes dans la suite Axelor. On peut appeler donc toutes les actions XML ainsi que les fonctions du controlleur associés à notre objet.

Pour votre solde d’un compte, si l’information n’est pas calculée dans l’interface de l’ERP, il faut alors regarder si une action la calcule, sinon il va falloir coder.

Avez-vous déjà vu dans la base de données ou dans l’interface votre solde de compte ?

Merci Pierre.

Il me semble logique que le solde ne soit pas en BDD, car c’est la différences de tous les débits par les crédit (ou l’inverse peu importe), mais je me trompe peut-être ?

Oui dans l’interface, ce solde est visible.

Accounting > Configuration > Finance > Accounting Account

À partir de ces informations, je tente via « view », « model » et « action » de comprendre ce qui est utilisé, mais je n’arrive pas à en sortir quelque chose.

Dans le « view » > On a donc le formulaire de codé, nommé « account-form »
Et ça c’est le bouton pour voir les lignes qui composent le compte, et qui doit m’affiche le solde :

<button name="$balanceBtn" title="Total balance" icon="fa-money" onClick="action-account-view-show-move-lines" widget="info-button" x-currency="company.currency.symbol"/>

J’ai quelque notion de codes, et je ne vois pas de référence au calcul ou à la fonction de calcul


La partie « action » de cette affichage m’indique ceci

Mais je ne sais pas quoi en faire :confused:

Okay, je n’utilise pas du tout la suite de modules ERP d’Axelor donc je ne connais pas bien les fonctionnalités.

Je vais essayer de détailler comment je résous votre question afin que tout le monde puisse voir le cheminement pour résoudre un problème similaire dans le futur.

Au vu du code que vous avez donné pour le bouton :

<button name="$balanceBtn" title="Total balance" icon="fa-money" onClick="action-account-view-show-move-lines" widget="info-button" x-currency="company.currency.symbol"/>

Je suppose que le code est ici :

Vu que le nom du field commence par un dollar $, c’est un dummy field (un champ calculé par l’ERP qui n’est pas présent en base de données. Il faut donc regarder du côté du onLoad de cette vue.

Le onLoad mène vers cette action : action-group-account-account-onload

 <action-group name="action-group-account-account-onload">
    <action name="action-account-method-compute-balance"/>
    <action name="action-attrs-account-account-readonly-if-account-in-move-line"/>
    <action name="action-method-account-hide-analytic"/>
    <action name="action-attrs-account-account-status-show-title"/>
  </action-group>

Ici la première action (celle qui calcule le solde d’un compte) mène vers ici :

<action-method name="action-account-method-compute-balance">
    <call class="com.axelor.apps.account.web.AccountController" method="computeBalance"/>
  </action-method>

Note : Tout le code XML est dans le même fichier que le lien au dessus

Le code java est ici : https://github.com/axelor/axelor-open-suite/blob/317a08735c0ef49ad44d528d1022a270361b4931/axelor-account/src/main/java/com/axelor/apps/account/web/AccountController.java

A la lecture du code de la fonction dans le controlleur, je dirais que la fonction récupère l’id du compte pour calculer. Il n’y a donc besoin que de fournir ce paramètre.

La requete JSON sera donc la suivante :

{
  "action": "action-account-method-compute-balance",
  "data": {
    "context":  {
      "id": 1
    }
  }
}

Et 1 est l’ID de notre compte.

Voilà, j’espère que c’est ce que vous cherchez :slight_smile:

1 « J'aime »

Merci infiniment pour le temps que vous me consacré.
La réponse est presque parfaite :wink:
En tout cas le cheminement est très clair et je devrais être en mesure de trouver ce que je veux à l’avenir pour n’importe quelle action.

Donc, je n’obtiens pas la réponse voulu, il y a une erreur. Voici la réponse qu’importe l’ID:

[
  {
    "status": 0,
    "data": [
      {
        "flash": "java.lang.NullPointerException"
      }
    ]
  }
]

Je n’arrive pas à avoir de log supplémentaires :cry:

Dans l’exemple (ici Advanced Services :: Axelor Documentation) ils donnent

"action": "check-order-dates,com.axelor.sale.web.SaleOrderController:calculate",

J’ai tenté sans succès

"action":"action-account-method-compute-balance,com.axelor.apps.account.web.AccountController:computeBalance"

ou

"action":"action-account-method-compute-balance,com.axelor.apps.account.web.AccountController:calculate"

Est-ce qu’il manque un paramètre ? Comment obtenir la liste des paramètres necessaires ?

(petit détail pour ceux qui ferront copier coller de votre requête JSON. La requête engendre une erreur car la dernière virgule est de trop).

Bien vu pour la virgule !

Normalement, seul
"action": "action-account-method-compute-balance" suffit

Enfaite, ce sont deux notations identiques, l’une appelle directement le code java, l’autre à pour intermédiaire une action XML.

Avez-vous un log de l’erreur java.lang.NullPointerException dans le terminal de votre serveur Tomcat ?

Le serveur ne me donne que des « erreurs » 200.
Rien qui me donne des idées pour comprendre le probleme.

==> /var/log/tomcat/localhost_access_log.2023-03-01.txt <==
127.0.0.1 - - [01/Mar/2023:15:18:58 +0000] « POST /ws/action/menu/tags HTTP/1.1 » 200 112
127.0.0.1 - - [01/Mar/2023:15:19:08 +0000] « POST /login.jsp HTTP/1.1 » 200 -
127.0.0.1 - - [01/Mar/2023:15:19:08 +0000] « POST /ws/action HTTP/1.1 » 200 64

Merci pour ce que vous avez fait.
Je devrais finir par trouver, il ne doit pas me manquer grand chose :wink:

Encore merci pour les explications.

Excellente journée !

Je suis curieux de savoir si vous avez trouvé votre erreur.
Vous pouvez essayer de mettre un breakpoint si jamais.

Non, je n’ai pas avancé sur le sujet.
Je sature perso de tout ce que j’ai à faire, et je n’ai pas passé de temps sur cette question.

Je voulai prendre le temps de tester d’autres « action service »,
tenter en cURL peut-être aussi (parce que j’utilise n8n)

Mais dans tous les cas je reviendrai compléter ici et vous remercier encore :wink:

Trouvé

Mais c’est incensé de laisser TOUT le forum dans cette situation…
Parce qu’il y a plusieurs sujets sans solution, alors qu’il faut un paramètre non indiqué dans la doc !

Solution trouvé ici : Postman

Solution de mon post :

Il faut ajouter le paramètre "model"

{
  "model": "com.axelor.apps.account.db.Account",
  "action": "action-account-method-compute-balance",
  "data": {
    "context":  {
      "id": 1
    }
  }
}
1 « J'aime »

Dans ma frustration, mon énervement et à l’heure tardive où j’écris ces lignes, je ne vous ai pas remercié !

Merci encore pour le temps que vous avez passé et votre soutien.
Je n’aurai pas persévérer autant sans vos messages.

J’ai hate de pouvoir mettre tous ça accessible par un node n8n pour les automatisations externes.

Ah oui effectivement ! Je suis content que vous ayez trouvé

Je n’y ai pas pensé car ce n’est pas écrit sur la documentation. Mais bon ce n’est pas la première fois qu’on dit que la documentation est incomplète, que personne de chez Axelor ne s’en occupe et que rien ne bouge.
Je remarque en écrivant cette réponse que la documentation a été publiée sur Github c’est déjà une bonne chose. Elle a été publiée vers le milieu de l’année 2022 pour Axelor 6.0 (commit ici) mais il n’y a eu aucune promotion dessus.

Est-ce que Axelor encourage le travail Open Source aujourd’hui ? Je ne sais pas, car le nombre de Pull request est faible sur Github. Accepteraient-ils le travail des contributeurs sur Github ?

La documentation est disponible ici : axelor-open-platform/documentation at master · axelor/axelor-open-platform · GitHub

Je suis content que vous ayez réussi à résoudre votre problème. C’est bête, on a presque fini le travail mais les 2% restants bloquaient tout ! Merci pour vos tutoriels n8n. Qu’est ce que vous pensez de n8n à grande échelle ou avec une importante charge de travail ?

Bonne journée à vous

1 « J'aime »

Bien vu pour la doc. Je ne connaissais pas Antora, j’essaierai pour voir.
J’essaierai de faire des PR si j’arrive à comprendre le fonctionnement de tout ca.

Leur documentation, même si, ne pas être à jour arrive à tous le monde, le fait quelle soit fausse me rend fou.

L’un des autres exemple est celui ci :
image
Lien : MetaData Services :: Axelor Documentation

Le domain " com.axelor.contact.db.Contact " n’existe pas.
Hors c’est le premier exemple de la doc au sujet de l’API.
C’est quand meme dingue de laisser ça depuis au moins 3 ans :confused:

Au sujet de n8n :

  • je ne suis pas capable de comparer avec le BPM d’Axelor Camunda, car je ne l’utilise pas.
  • n8n est jeune, il n’y a pas plus tard que 2 semaines par exemple, ils ont fait d’importantes mise à jour de sécurité. C’est bien, mais c’est que ca manquait, et il y a surement encore beaucoup à apporter)
  • Communauté très importante, active (forum + discord)
  • basé sur nodejs / javascript, les possibilités sont infinies, car dans les workflows ils est possible de coder directement ce que l’on veut. Certains ont même ajouté la possibilité d’interpréter du python.

Pour ce qui est de la scalabilité, intensité de charge de travail, je dirai que n8n est capable de s’adapter.
L’outil n’est pas parfait, et il faudra surement « découper » le travail si la charge est trop importante, mais je pense sincèrement que n8n est capable de gérer une charge importante.

Apparement les « défauts » que voient certains avant de se lancer c’est la gestion des version (versioning) des API tiers.
Dans le sens où n8n a sa version en tant qu’application, le node à sa version construite (par la communauté en général) sur une version d’API (documentation de l’application tierce), et l’application tierce à également sa propre version.
C’est autant de lignes de code qui peuvent changer et casser le bon fonctionnement d’un workflow. Donc la gestion du versioning fait peur à beaucoup de personnes.

De mon côté j’ai des versions locales en docker qui marche très bien. Et une version sous k8s en prod. Mes workflows sont simples et gèrent peu de data. Mon objectif est d’automatiser avant de subir de gros flux avec une augmentation de l’activité.

Dans ce post, vous m’avez aider à obtenir le calcul/le solde d’un compte comptable; je récupère celui de mon compte en banque (donc le dernier état de situation pour Axelor de ma banque).
Comme j’ai automatisé la récupération des transactions bancaires depuis ma banque en ligne (Qonto pour pas les nommer, et que j’ai developpé le node spécifique à Qonto), j’ai donc la mise à jour automatique de mes écritures comptables sur Axelor (Accounting.Account).
L’intérêt de venir récupèrer ce solde du compte Axelor (résultats des débits et des crédits), c’est de le comparer à celui de la banque.
Ces deux résultats doivent être identiques.
Un dashboard Grafana qui récupère (au moins) ces deux soldes et je peux savoir si Qonto et Axelor indique la même chose, et m’alerter si ce n’est pas le cas.
C’est clairement une vérification supplémentaire à mes automatisations, pour me consacrer à ce qui ne marche pas (encore).

Je devrais arriver à faire un node Axelor.
L’idée c’est qu’il permette d’avoir accès à tous les modèles sous forme de liste (sans devoir à l’écrire).
Avoir evidement les fonctions GET, PUT, POST, DELETE…
Le body restera en JSON, pour éviter de complexifier le code du node.
Les cookies devrait être facilement gérable et éviter un node spécifique à ça.
Et maintenant que j’ai compris le /WS/ACTION, les possibilités sont encore plus grande via n8n.

Dès que j’ai du temps, j’avancerai à ce sujet

Excellente journée

1 « J'aime »

Merci beaucoup pour toutes vos indications. Je pense que cela peut intéresser la communauté sur les extensions et les automatisations possibles d’Axelor. Axelor propose déjà énormement d’outils mais il y toujours des gens qui ont besoin d’outils enitèrement personnalisés.

Bonne journée à vous aussi

Bonsoir,

La documentation du framework AOP fait référence à l’environnement de démo de celui-ci (également présent sur Github) et non à l’ERP (AOS). En effet, le framework AOP peut être utilisé indépendamment de l’ERP pour créer une application métier spécifique.

Le domain " com.axelor.contact.db.Contact " est donc présent ici :

Concernant le fait de devoir spécifier le model dans les appels WS, il me semble que ca ne devrait pas être le cas. Je remonte l’information.

Bravo pour votre travail.

Bonne soirée

3 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.