Projet

Général

Profil

Actions

Anomalie #1117

fermé

Message d'erreur lors de l'ajout d'une nouvelle transaction

Ajouté par Nicolas Guillerm il y a environ 7 ans. Mis à jour il y a environ 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
Core
Version cible:
-
Début:
26/11/2017
Echéance:
% réalisé:

100%

Temps estimé:
Version utilisée:

Description

Bonjour,

Toujours en cours d'essai sur la version 0.9 rc3, je viens de constater que je ne peux pas creer de nouvelles transactions.
Quand je clique sur [ Enregistrer ], j'ai un message "Erreur de l'application".
=> J'ai effacé les logs juste avant de cliquer sur le bouton pour bien isoler le problème, mais je ne comprends pas exactement ce que cela signifie.

Pourtant, si je clique sur le bouton [ Accueil] , puis que je vais dans la liste des transactions, la transaction apparait bien et je peux l'editer pour y ajouter des contributions.
Mais j'ai de nouveau l'erreur si je clique à nouveau sur le bouton [ Enregistrer ], même si je n'ai fais aucun changements.

Pas de problème pour ajouter une cotisation ou un don.

Cordialement


Fichiers

galette_debug_2017-11-26.log (4,03 ko) galette_debug_2017-11-26.log Nicolas Guillerm, 26/11/2017 18:41
galette_run.log (5,58 ko) galette_run.log Nicolas Guillerm, 26/11/2017 18:41

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • Version cible 0.9.1 supprimé

Il semble qu'il manque un des paramètres requis dans la route, ceci devrait faire l'affaire :

diff --git a/galette/includes/routes/contributions.routes.php b/galette/includes/routes/contributions.routes.php
index 9ec651d..e2898a9 100644
--- a/galette/includes/routes/contributions.routes.php
+++ b/galette/includes/routes/contributions.routes.php
@@ -1018,7 +1018,8 @@ $app->post(
             if ($trans->getMissingAmount() > 0) {
                 $rparams = [
                     'action'    => __('add', 'routes'),
-                    'trans_id'  => $trans->id
+                    'trans_id'  => $trans->id,
+                    'type'      => __('fee', 'routes')
                 ];

                 if (isset($trans->member)) {

Mis à jour par Nicolas Guillerm il y a environ 7 ans

Effectivement, je n'ai plus d'erreur.

Mais il doit manquer encore quelque chose car j'arrive sur la création d'une cotisation sans lien avec la transaction.
Je n'ai pas les informations sur la transaction liée, avec la date, le montant et le montant non ventilé.

Est-ce parce qu'au moment de cliquer sur [ Enregistrer ], on ne peut pas savoir s'il faut ouvrir l'ajout d'une cotisation ou d'un don ?

Cordialement

Mis à jour par Johan Cwiklinski il y a environ 7 ans

En effet, les infos de la transaction ne sont pas passées. Voici :

diff --git a/galette/includes/routes/contributions.routes.php b/galette/includes/routes/contributions.routes.php
index 9ec651d..d8bfd7b 100644
--- a/galette/includes/routes/contributions.routes.php
+++ b/galette/includes/routes/contributions.routes.php
@@ -1018,7 +1018,8 @@ $app->post(
             if ($trans->getMissingAmount() > 0) {
                 $rparams = [
                     'action'    => __('add', 'routes'),
-                    'trans_id'  => $trans->id
+                    'trans_id'  => $trans->id,
+                    'type'      => __('fee', 'routes')
                 ];

                 if (isset($trans->member)) {
@@ -1032,7 +1033,7 @@ $app->post(
                         $this->router->pathFor(
                             'contribution',
                             $rparams
-                        )
+                        ) . '?' . Transaction::PK . '=' . $trans->id
                     );
             } else {
                 //report success

La possibilité de choisir su l'on souhaite créer une cotisation ou un don, c'est une autre histoire ; je m'en suis rendu compte avant de proposer le correctif ; je traiterai ça dans un second temps.

Mis à jour par Nicolas Guillerm il y a environ 7 ans

Avec la seconde modification, j'ai bien la cotisation liée à la transaction.

Par contre, un transaction n'est pas forcement lié à une cotisation. Cela peut aussi être un don.
Je peux comprendre l'intéret d'avoir des liens séparés pour cotisation et don, afin de limiter la liste déroulante du type de contribution et d'afficher ou non la date de fin (même si dans mon cas, j'ai modifié le code afin d'avoir une date de fin dans tous les cas car j'ai "transformé" les dons en inscriptions pour les different groupes de l'association).

Aurait-il pas été plus simple de garder un seul lien contribution, et d'ajouter deux radiobuttons entre "Contributeur" et "Type de contribution" ?
Certes, cela oblige à mettre à jour la liste déroulante du type de contribution au moment où un clique sur l'un des deux radiobuttons, mais bon, comme il faut déjà mettre à jour le champ Date selon le contributeur, on peut avoir une seconde mise à jour dynamique.

Cordialement

Mis à jour par Johan Cwiklinski il y a environ 7 ans

Nicolas Guillerm a écrit :

Avec la seconde modification, j'ai bien la cotisation liée à la transaction.

OK, on va pouvoir passer à la suite alors si le problème est résolu.

Par contre, un transaction n'est pas forcement lié à une cotisation. Cela peut aussi être un don.

Oui, c'est bien ce que je disais, "c'est une autre histoire".

Aurait-il pas été plus simple de garder un seul lien contribution, et d'ajouter deux radiobuttons entre "Contributeur" et "Type de contribution" ?
Certes, cela oblige à mettre à jour la liste déroulante du type de contribution au moment où un clique sur l'un des deux radiobuttons, mais bon, comme il faut déjà mettre à jour le champ Date selon le contributeur, on peut avoir une seconde mise à jour dynamique.

Non, ce n'est pas aussi simple. Je m'explique (enfin, j'essaie)...
Il est possible d'utiliser Galette avec javascript complètement désactivé, les parties dynamiques ne doivent pas altérer le fonctionnement du logiciel d'une part, et tout doit pouvoir fonctionner correctement en cas de problème ou de désactivation du js.

Un exemple : lors de la suppression d'un adhérent en 0.8, il y a une bête confirmation javascript. Si javascript est désactivé, ou s'il y a un bug quelconque ; l'adhérent est supprimé sans autre forme de procès, et sans confirmation ! En 0.9, il y a un système de base qui gère la suppression ; agrémenté ensuite d'une partie plus dynamique pour afficher une popup plutôt que de recharger la page.

Donc globalement, il faut d'abord trouver une solution, pour ensuite éventuellement la rendre davantage dynamique. Et pour le coup, ce que tu proposes ne fourni pas la solution « standard ».

J'ai une idée en tête, mais pas le temps actuellement pour la mettre en oeuvre... Et ça ne couvrirai pas l'intégralité des besoins non plus :-/ La nouvelle interface des dons/cotisations n'est pas parfaite, mais l'ancienne ne l'était pas non plus ; je n'ai actuellement aucune solution réellement satisfaisante à proposer (et de toutes façons, de telles modifications sortent du cadre de la 0.9 ; les fonctionnalités sont figées et je n'appliquerai que des correctifs d'ici à la version stable [qui aurait déjà du sortir d'ailleurs :p).

Mis à jour par Nicolas Guillerm il y a environ 7 ans

Je comprends mieux pourqui je suis completement perdu dans cette nouvelle version, alors que j'avais passé pas mal de temps à comprendre comment fonctionnait la 0.8.

Je comprends le besoin d'éviter au maximum Javascript car effectivement, il y a de plus en plus de navigateur qui le désactive par défaut.

Quid d'un petit pop-up quand on clique le bouton [ Enregistrer ] pour demander si on veut ajouter une cotisation ou un don ?
Il faudrait renouveller cette demande cotisation <> don, tant que le montant non ventilé n'est pas égal à zéro.

Si tu as d'autres proposition de patch, je me ferais un plaisir de les tester.

Cordialement

Mis à jour par Johan Cwiklinski il y a environ 7 ans

Nicolas Guillerm a écrit :

Quid d'un petit pop-up quand on clique le bouton [ Enregistrer ] pour demander si on veut ajouter une cotisation ou un don ?

Les popup... C'est du Javascript :D

Mais en gros, oui, c'est un peu l'idée que j'ai en tête ; un peu comme j'ai fait pour les suppressions.

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • Statut changé de Nouveau à In Progress

Mis à jour par Johan Cwiklinski il y a environ 7 ans

J'ai finalement ajouté une bête liste déroulante lors de la création d'une transaction, et sur l'ajout/modification d'une contribution si elle est attachée à une transaction qui n'est pas intégralement ventilée :
https://github.com/galette/galette/commit/da3dc56b3df6eae7b9cfbbe81a4d7f23f468b451.patch

Mis à jour par Nicolas Guillerm il y a environ 7 ans

L'idée d'avoir un menu deroulant en bas de la page pour décider s'il faut ensuite ouvrir une cotisation ou un don fonctionne.

Par contre:
  • Comme il n'y a que deux choix possible, j'aurais plutôt vu deux radioboutons plutôt qu'une liste déroulante
    Mais bon, je ne sais pas si cela peut se gerer de la même façon
  • Dans la page de saisie de la contribution, il faudrait que le dispatch apparaise dans une case séparée du "Détail du don/cotisation"
    En effet, ce n'est pas un élément de la contribution en cours de saisie mais juste un point de suite
  • Reste le cas bizarre de demander un autre dispatch quand le montant de la contribution = le montant non ventilé
    Mais je comprends que sans Javascript, il n'est pas possible de comparer deux valeurs pour jouer sur la visibilité d'un autre champ
  • Pourquoi limiter la liste déroulante Contributeur à l'emmeteur de la transaction ?
    Un parent peut payer par example pour ces enfants.
    Je suis d'accord que passer l'adh_id à la page de saisie de la contribution est intéressante mais uniquement comme valeur par défaut du contributeur et non comme un fistre de cette liste
  • Dans la version 0.8.3, à la fin de la saisie d'un contribution qui permetait d'avoir une transaction complète, c'est à dire avec un montant non ventilé nul, on retombait sur la page récapitulative de la transaction, ce qui était pratique pour vérifier le dispatch du montant global de la transaction
    Là, on tombe sur la liste des contributions du dernier contributeur.
    Est-ce possible d'avoir une autre route quand getMissingAmount = 0 ?

Désolé pour toutes ces questions, mais je reste un amateur en terme de devellepement web et je ne ma vois pas contribuer directement au commits sans risquer de tout casser.

Cordialement

Mis à jour par Nicolas Guillerm il y a environ 7 ans

En cherchant sur Internet comment afficher ou masquer des champs sans javascript, je suis tombé sur cette page:
https://stackoverflow.com/questions/17731457/hide-show-content-list-with-only-css-no-javascript-used

A voir si cela fonctionne aussi pour des droplists, car dans ce cas on pourrait imaginer de calculer les deux droplist "Cotisations" et "Dons", et de n'afficher que celle l'on veut par un deux radioboutons.
Il faut bien sûr récupérer aussi la valeur du radiobution sélectioné, afinde savoir quel item de quelle liste il faut appliquer.

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • Comme il n'y a que deux choix possible, j'aurais plutôt vu deux radioboutons plutôt qu'une liste déroulante
    Mais bon, je ne sais pas si cela peut se gerer de la même façon

Si, je modifie.

  • Dans la page de saisie de la contribution, il faudrait que le dispatch apparaise dans une case séparée du "Détail du don/cotisation"
    En effet, ce n'est pas un élément de la contribution en cours de saisie mais juste un point de suite

OK ; je ne voulais pas ajouter un nouveau bloc à la base, mais cette page n'est pas surchargée.

  • Reste le cas bizarre de demander un autre dispatch quand le montant de la contribution = le montant non ventilé
    Mais je comprends que sans Javascript, il n'est pas possible de comparer deux valeurs pour jouer sur la visibilité d'un autre champ

En effet :) Du coup, j'ajouterai un bout de JS pour prendre ça en compte.

  • Pourquoi limiter la liste déroulante Contributeur à l'emmeteur de la transaction ?
    Un parent peut payer par example pour ces enfants.

Ce cas est déjà pris en compte : la liste est limitée à l'émetteur et les membres qui lui sont rattachés.

Je suis d'accord que passer l'adh_id à la page de saisie de la contribution est intéressante mais uniquement comme valeur par défaut du contributeur et non comme un fistre de cette liste

Le but était de ne pas se retrouver là avec l'entière liste des adhérents (avec plusieurs centaines ou milliers de membres, c'est vite pénible).

  • Dans la version 0.8.3, à la fin de la saisie d'un contribution qui permetait d'avoir une transaction complète, c'est à dire avec un montant non ventilé nul, on retombait sur la page récapitulative de la transaction, ce qui était pratique pour vérifier le dispatch du montant global de la transaction
    Là, on tombe sur la liste des contributions du dernier contributeur.
    Est-ce possible d'avoir une autre route quand getMissingAmount = 0 ?

Pas de soucis.

Mis à jour par Nicolas Guillerm il y a environ 7 ans

Que penses-tu de la selection entre cotisationet dons par CSS, et sans Javascript ?

(Testé sur JSFiddle: http://jsfiddle.net/khnNe/950/)
HTML:
<label for="select_cotis"><span>Contributions</span></label>
<input type=radio id="select_cotis" name="group_contrib_type">
<label for="select_fee"><span>Dons</span></label>
<input type=radio id="select_fee" name="group_contrib_type">

<p id="cotis_list">
<label for="id_type_cotis">Cotisation</label>
<select name="id_type_cotis" id="id_type_cotis">
<option value="1">Un</option>
<option value="2">Deux</option>
</select>
</p>

<p id="fee_list">
<label for="id_type_fee">Don</label>
<select name="id_type_fee" id="id_type_fee">
<option value="A">Alpha</option>
<option value="B">Beta</option>
</select>
</p>

CSS:
p#cotis_list {
display:none;
}
p#fee_list {
display:none;
}

input#select_cotis:checked ~ p#cotis_list {
display:block;
}

input#select_fee:checked ~ p#fee_list {
display:block;
}

=> Grâce aux deux inputs radio, on connait la liste affichée et donc on fait quelle valeur prendre pour stocker dans la base

Je comprends l'intéret de limiter la liste des contributeurs qui peut vite être très longue, mais la relation entre l'emmeteur de la transaction et les bénéficiaires des contributions n'est pas forcement uniquement Parents-Enfants. Il est aussi possible que quelqu'un paie pour son conjoint ou pour un ami, et donc sans relation d'attachement entre les adhérents.
Pour ma part, le fais de pouvoir taper les premières lettre du nom pour atteindre le bon adhérent est amplement suffisant.
Si tu veux garder cette nouvelle fonctionnalité, est-il possible de la mettre sous condition dans les préférences ?

Mis à jour par Johan Cwiklinski il y a environ 7 ans

Nicolas Guillerm a écrit :

Que penses-tu de la selection entre cotisationet dons par CSS, et sans Javascript ?

Bah vu qu'on va afficher le choix du type dans la page suivante... Je sais pas trop.

Bien que l'idée puisse être intéressante, ça impliquerait encore d'autres modifications, et je ne veux plus trop modifier la 0.9 ; j'aimerai qu'elle sorte.

Si tu veux garder cette nouvelle fonctionnalité, est-il possible de la mettre sous condition dans les préférences ?

Non, je ne vois pas trop l'intérêt d'une config à ce niveau là... Il faudrait effectivement améliorer ça (mais c'est pas franchement nouveau) :/

J'ai créé une PR pour l'ensemble des modifications, je pense que ça devrait être bon maintenant :
https://github.com/galette/galette/pull/15

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • Statut changé de In Progress à Résolu
  • % réalisé changé de 0 à 100

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • Statut changé de Résolu à Fermé
  • % réalisé changé de 100 à 0

Mis à jour par Johan Cwiklinski il y a environ 7 ans

  • % réalisé changé de 0 à 100
Actions

Formats disponibles : Atom PDF