Project

General

Profile

Anomalie #1410

Ajout d'une adhésion : Une erreur est survenue lors de la récupération des dates

Added by Manuel Her 5 months ago. Updated 5 months ago.

Status:
Fermé
Priority:
Normal
Category:
Core
Target version:
Start date:
03/09/2020
Due date:
% Done:

100%

Estimated time:
Version utilisée:
Vote:

Description

Bonjour,

J'ai ajouté :
un nouveau type de contribution Don 'Abandon de frais' (en France au lieu de rembourser les notes de frais, on peut les déduire des impôts)
puis une contribution 'Adhésion membre bienfaiteur'

lorsque j'ajoute une nouvelle adhésion, au moment où je sélectionne 'Adhésion membre bienfaiteur',
une boite de dialogue js/alert m'indique : Une erreur est survenue lors de la récupération des dates

Il y a un problème d'indexation dans $this->post(
'/contribution/dates',..

à la ligne : 'type' => array_keys($contributions_types)[$post['fee_id']],
les id ne se suivent pas (il y a des 'trous' dans la liste retournée par array_keys($contributions_types) issue de $contributions_types = $ct->getList(true);
ce qui déclenche un débordement de tableau

j'ai corrigé par :
'type' => (int)[$post['fee_id']],

ça me parait trop simple, y a t il un loup?

je suppose que si j'avais d'abord ajouté le nouveau type d'adhésion et après de don, je n'aurais pas vu ce bug, les ids se suivant dans la table mysql.

Merci
Manuel

#1

Updated by Johan Cwiklinski 5 months ago

  • Status changed from Nouveau to Commentaire

Salut,

Je ne suis pas certain d'avoir tout suivi :D Essaie de fournir un patch à l'avenir sur des changements ;)

Ceci étant dit, $ct->getList(true); va retourner un tableau ayant pour index l'identifiant en base des résultats qui correspondent, et pas de tous les résultats. Il est donc tout à fait normal que les id ne se suivent pas.

Mais si ta nouvelle contribution est bien un don (ie. ne donne pas accès à une extension de l'adhésion), le calcul des date ne devrait juste pas se faire ; non ?

#2

Updated by Manuel Her 5 months ago

Slt,

Ce n'est pas évident à expliquer :)

un dump de $ct->getList(true); me retourne bien que des types d'adhésions :

array ( 1 => 'cotisation annuelle', 2 => 'cotisation annuelle réduite', 3 => 'cotisation personne morale', 7 => 'cotisation annuelle (dûe)', 8 => 'Adhésion XXXX', 9 => 'Adhésion YYYY', 10 => 'Adhésion annuelle, membre bienfaiteur',)

un dump de array_keys($contributions_types) me retourne :
array ( 0 => 1, 1 => 2, 2 => 3, 3 => 7, 4 => 8, 5 => 9, 6 => 10 ,)

dans le formulaire, si je sélectionne 'Adhésion annuelle, membre bienfaiteur' (le dernier);
$post['fee_id'] contient 10 soit l'index dans la table. il est en dehors du tableau lors de l’exécution de : 'type' => array_keys($contributions_types)[$post['fee_id']] :)

si j'ai bien compris, cet index est le type de la contribution, donc dans ce cas ligne 257,
je ferais simplement : 'type' => (int)$post['fee_id'],

Manuel

#3

Updated by Johan Cwiklinski 5 months ago

  • Category set to Core
  • Status changed from Commentaire to In Progress
  • Assignee set to Johan Cwiklinski
  • Target version set to 0.9.4

Ha ok, je vois oui. Je vais vérifier ça plus globalement, il me semle avoir vu quelque chose de similaire ailleurs dans le code.

#4

Updated by Johan Cwiklinski 5 months ago

  • Status changed from In Progress to Résolu
  • % Done changed from 0 to 100
#5

Updated by Johan Cwiklinski 5 months ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF