Project

General

Profile

Anomalie #1487

Reminder does not suits current requested type ArrayObject Object

Added by Florent G. about 2 months ago. Updated 9 days ago.

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

100%

Estimated time:
Version utilisée:
Vote:

Description

Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.

Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.

2001:912:3064:134::1 - 2020-09-05 17:27:39 - DEBUG - Reminder does not suits current requested type ArrayObject Object
(
    [storage:ArrayObject:private] => Array
        (
            [id_adh] => 37
            [id_statut] => 4
            [nom_adh] => DUPOND
            [prenom_adh] => PIERRE
            [pseudo_adh] => toto
            [societe_adh] => 
            [titre_adh] => 
            [ddn_adh] => 
            [sexe_adh] => 1
            [adresse_adh] => 1 rue de la gare
            [adresse2_adh] => 
            [cp_adh] => 69001
            [ville_adh] => LYON
            [pays_adh] => 
            [tel_adh] => 
            [gsm_adh] => 
            [email_adh] => 
            [url_adh] => 
            [icq_adh] => 
            [msn_adh] => 
            [jabber_adh] => 
            [info_adh] => 
            [info_public_adh] => 
            [prof_adh] => 
            [login_adh] => toto
            [mdp_adh] => $2y$10$2Ee.EXijcepBu7Hx5ga5kW6Fd20aY48uhrM78/2P9AqsPZ3b8y.aC
            [date_crea_adh] => 2017-06-16
            [date_modif_adh] => 2017-06-16
            [activite_adh] => 1
            [bool_admin_adh] => 0
            [bool_exempt_adh] => 0
            [bool_display_info] => 1
            [date_echeance] => 2020-06-19
            [pref_lang] => fr_FR
            [lieu_naissance] => 
            [gpgid] => 
            [fingerprint] => 
            [parent_id] => 
            [last_reminder] => 2019-06-03 00:00:00
            [reminder_type] => 1
        )

)
#1

Updated by Frederic CROZET about 2 months ago

Florent G. a écrit :

Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.

Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.

[...]

Hello,
Normal à priori, l'adresse mail de l'adhérent n'est pas renseignée

#2

Updated by Johan Cwiklinski about 2 months ago

  • Status changed from Nouveau to Commentaire

Frederic CROZET a écrit (#note-1):

Florent G. a écrit :

Bonjour,
La fonctionalité "Rappels" ne fonctionne pas correctement chez nous. Les mails ne sont pas envoyés.

Dans les logs on trouve plusieurs fois l'erreur "Reminder does not suits current requested type ArrayObject Object", pour différents membres qui devrait recevoir le rappel car cotisation expirée.

[...]

Hello,
Normal à priori, l'adresse mail de l'adhérent n'est pas renseignée

Oui, ça pourrait ne pas aider :)

Il est fort possible que des choses aient été corrigées en 0.9.4.1 ; il faudrait voir si le problème se reproduit avec cette version.

Il faudrait aussi fournir la stack complète de l'erreur.

#3

Updated by Florent G. about 2 months ago

Merci pour vos réponses !
J'étais effectivement tombé sur l'issue #1454 pour l'histoire du compteur sans mail toujours a zéro. Mais ici, je viens de vérifier une seconde fois, ces adhérents ont bien une adresse mail définie dans l'interface web. Si je vérifie en base dans la table galette_adherents, email_adh est bien renseigné correctement
C'est effectivement curieux que [email_adh] soit vide dans le log en debug.

Le log complet: https://postit.hadoly.fr/?9ff27bd7ce65fdeb#4cKwWuqMkfKJ6s2TpLhR3fTZFNDPc8uUQrBC35peiXRw

#4

Updated by Johan Cwiklinski about 2 months ago

  • Private changed from No to Yes
#5

Updated by Johan Cwiklinski about 2 months ago

  • Private changed from Yes to No
#6

Updated by Johan Cwiklinski about 2 months ago

#1454 concernait l'affichage uniquement, pas l'envoi des courriels.

Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).

#7

Updated by Florent G. about 2 months ago

Johan Cwiklinski a écrit (#note-6):

Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).

C'est tout a fait possible, mais je n'en ait aucune idée, et pas facile a vérifier.
Je me suis posé également la question en voyant le "last_reminder". Mais je ne comprend pas sa valeur. Ça semble issue de la table reminder: https://postit.hadoly.fr/?919bd5f4dc44fe45#FwUHzPkN8uJGJbQ4AJYxy6jqwwyXCy6gkj2H3hCLQmvC

A chaque fois à minuit et sans périodicité entre les occurrences. Est-ce qu'on est d'accord que Galette n'envoie pas automatiquement des rappels ? (il faut obligatoirement une action manuelle dans l'interface web pour déclencher (?)). Ça me surprend aussi qu'il n'y ait que 65 entrée dans cette table. 65 rappels seulement envoyés depuis 2017, ça semble peu sur une base d'environ 80 adhérents aujourd'hui. Mais on a ce soucis d'envoi depuis des années. Avant c'était aléatoire, maintenant rien n'est envoyé, du tout.

Si c'est un comportement attendu de ne pouvoir envoyer un rappel qu'une seule fois à une personne donnée, l'interface web ne permet pas de le comprendre.

Choisissez le ou les rappels que vous souhaitez envoyer :
☑ En retard (prévisualiser) - 14 adhérents ayant une adresse de courriel 0 adhérents sans adresse courriel

On s'attend a ce que 14 mails soient envoyés.

#8

Updated by Johan Cwiklinski about 2 months ago

Florent G. a écrit (#note-7):

Johan Cwiklinski a écrit (#note-6):

Est-ce que les adhérents concernés auraient déjà reçu un rappel, avant que leur cotisation n'expire ? C'est ce que semble supposer le code à première vue (je n'ai pas investigué plus que ça encore).

C'est tout a fait possible, mais je n'en ait aucune idée, et pas facile a vérifier.
Je me suis posé également la question en voyant le "last_reminder". Mais je ne comprend pas sa valeur. Ça semble issue de la table reminder: https://postit.hadoly.fr/?919bd5f4dc44fe45#FwUHzPkN8uJGJbQ4AJYxy6jqwwyXCy6gkj2H3hCLQmvC

A chaque fois à minuit et sans périodicité entre les occurrences. Est-ce qu'on est d'accord que Galette n'envoie pas automatiquement des rappels ? (il faut obligatoirement une action manuelle dans l'interface web pour déclencher (?)). Ça me surprend aussi qu'il n'y ait que 65 entrée dans cette table. 65 rappels seulement envoyés depuis 2017, ça semble peu sur une base d'environ 80 adhérents aujourd'hui. Mais on a ce soucis d'envoi depuis des années. Avant c'était aléatoire, maintenant rien n'est envoyé, du tout.

Le fonctionnement des rappels est expliqué dans la doc :
https://doc.galette.eu/fr/master/usermanual/contributions.html#reminders

Rien n'est envoyé par magie ; soit il faut le faire depuis l'interface, soit ça se fait depuis une tâche cron.

Il faudrait voir si le problème se reproduit en 0.9.4.1 (voire en nigthly) ; je crois me souvenir que certains avaient eu des soucis récemment (pas celui là à priori mais pas impossible qu'il y ait un lien) qui ont été solutionnés, il m'a été confirmé que les rappels étaient bien partis ensuite. Reste la possibilité d'un souci dans les données existantes ; difficile à dire.

#9

Updated by Florent G. about 2 months ago

Merci pour les précisions :)

Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.

Sur le git pas de tag 0.9.4.1

git checkout tags/0.9.4.1 
error: pathspec 'tags/0.9.4.1' did not match any file(s) known to git.

#10

Updated by Johan Cwiklinski about 2 months ago

Florent G. a écrit (#note-9):

Merci pour les précisions :)

Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.

Sur le git pas de tag 0.9.4.1
[...]

Au temps pour moi, la 0.9.4.1 n'est pas releasée encore, il s'agit de la nightly... Je fatigue un peu, désolé :D
https://download.tuxfamily.org/galette/galette-dev.tar.bz2

Il ne devrait plus y avoir de très gros changements dans cette release ; je n'ai pas eu le temps de faire la release elle même, et des soucis ont été déclarés entre temps...

#11

Updated by Frederic CROZET about 2 months ago

Florent G. a écrit (#note-9):

Merci pour les précisions :)

Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.

Sur le git pas de tag 0.9.4.1
[...]

En fait, c'est la futur 0.9.4.1 qui est en dev
Tu peux la trouver là : http://download.tuxfamily.org/galette/galette-dev.tar.bz2

#12

Updated by Frederic CROZET about 2 months ago

Frederic CROZET a écrit (#note-11):

Florent G. a écrit (#note-9):

Merci pour les précisions :)

Comment récupérer la 0.9.4.1 ?
Sur http://download.tuxfamily.org/galette/ il n'y a pas d'archive correspondante, normal si c'est pas encore release j'imagine.

Sur le git pas de tag 0.9.4.1
[...]

En fait, c'est la futur 0.9.4.1 qui est en dev
Tu peux la trouver là : http://download.tuxfamily.org/galette/galette-dev.tar.bz2

Oups! Johan a été plus réactif que moi ;)

#13

Updated by Johan Cwiklinski about 2 months ago

Florent G. a écrit (#note-7):

Choisissez le ou les rappels que vous souhaitez envoyer :
☑ En retard (prévisualiser) - 14 adhérents ayant une adresse de courriel 0 adhérents sans adresse courriel

On s'attend a ce que 14 mails soient envoyés.

Précision sur ce point : non. Il y a 14 adhérents en retard, mais le système des rappels a ses propres contraintes, pour envoyer aux bonnes dates, et une seule fois ; en se basant sur l'historique.

Sinon, je n'ai pas été en mesure de reproduire (je n'ai pu y passer que peu de temps, ça n'aide pas). Du nouveau avec la nightly du coup ?

#14

Updated by Johan Cwiklinski about 2 months ago

  • Status changed from Commentaire to In Progress
  • Assignee set to Johan Cwiklinski
  • Target version set to 0.9.4.1

Alors, j'ai pur reproduire ; j'ai un correctif. J'ai cafouillé durant mes tests, l'accès au serveur SMTP que j'utilisais m'est bloqué... Aucune idée si c'est temporaire ou pas, je n'ai pas le temps de me pencher sur la question pour le moment.

Voici le correctif :

diff --git a/galette/lib/Galette/Repository/Reminders.php b/galette/lib/Galette/Repository/Reminders.php
index d3686166..1a76a2c1 100644
--- a/galette/lib/Galette/Repository/Reminders.php
+++ b/galette/lib/Galette/Repository/Reminders.php
@@ -90,6 +90,7 @@ class Reminders
     {
         $this->toremind = array();
         $select = $zdb->select(Members::TABLE, 'a');
+        $select->columns([Members::PK, 'date_echeance']);
         $select->join(
             array('r' => PREFIX_DB . self::TABLE),
             'a.' . Members::PK . '=r.reminder_dest',
@@ -101,7 +102,7 @@ class Reminders
         )->join(
             array('p' => PREFIX_DB . Members::TABLE),
             'a.parent_id=p.' . Members::PK,
-            array('email_adh'),
+            array(),
             $select::JOIN_LEFT
         )->where('(a.email_adh != \'\' OR p.email_adh != \'\')')
             ->where('a.activite_adh=true')
@@ -125,11 +126,17 @@ class Reminders
             );
         }

-        $select->group('a.id_adh')->group('r.reminder_type')->group('p.email_adh');
+        $select->group('a.id_adh')->group('r.reminder_type');

         $results = $zdb->execute($select);

         foreach ($results as $r) {
+            if ($r->reminder_type < $type) {
+                //sent impending, but is now late. reset last remind.
+                $r->reminder_type = $type;
+                $r->last_reminder = '';
+            }
+
             if ($r->reminder_type === null || (int)$r->reminder_type === $type) {
                 $date_checked = false;

Il faudrait s'assurer que ça fonctionne, y compris sur des fiches "enfants" qui n'ont pas d'adresse de courriel.

#15

Updated by Frederic CROZET about 2 months ago

Hello Johan et Florent,
Si j'ai bien compris ce correctif, il avait un problème de rappel "en retard" suite à des "échéances proches" donc le 3ième rappel.
Effectivement, en regardant mes historiques cron, ils manquent les 3ième rappels.
Par contre, j'ai appliqué le correctif hier soir car j'ai un tache cron hebdomadaire le vendredi à minuit. Et certains membres ont eu un 3ième rappel mais pour seulement et ou deux jours de retard. Les rappels en retard sont pour un puis deux mois après l’expiration de la date d’échéance d'après la documentation ;)
Je reste vigilant pour les prochaines relances avec des fiches enfants sans adresse de courriel.
Merci encore

#16

Updated by Johan Cwiklinski about 2 months ago

Frederic CROZET a écrit (#note-15):

Hello Johan et Florent,
Si j'ai bien compris ce correctif, il avait un problème de rappel "en retard" suite à des "échéances proches" donc le 3ième rappel.
Effectivement, en regardant mes historiques cron, ils manquent les 3ième rappels.
Par contre, j'ai appliqué le correctif hier soir car j'ai un tache cron hebdomadaire le vendredi à minuit. Et certains membres ont eu un 3ième rappel mais pour seulement et ou deux jours de retard. Les rappels en retard sont pour un puis deux mois après l’expiration de la date d’échéance d'après la documentation ;)
Je reste vigilant pour les prochaines relances avec des fiches enfants sans adresse de courriel.
Merci encore

Merci pour le retour :) L'adhérent que j'ai testé avait plus de 600 jours de retard, forcément, je n'ai pas vu le problème :D

#17

Updated by Johan Cwiklinski about 2 months ago

Alors non seulement ils ne partaient pas à la bonne date, mais en plus, ça part tous les jours... Voici un patch modifié qui devrait mieux faire le travail :

diff --git a/galette/lib/Galette/Repository/Reminders.php b/galette/lib/Galette/Repository/Reminders.php
index d3686166..e1b7f24a 100644
--- a/galette/lib/Galette/Repository/Reminders.php
+++ b/galette/lib/Galette/Repository/Reminders.php
@@ -90,18 +90,19 @@ class Reminders
     {
         $this->toremind = array();
         $select = $zdb->select(Members::TABLE, 'a');
+        $select->columns([Members::PK, 'date_echeance']);
         $select->join(
             array('r' => PREFIX_DB . self::TABLE),
             'a.' . Members::PK . '=r.reminder_dest',
             array(
                 'last_reminder' => new Expression('MAX(reminder_date)'),
-                'reminder_type'
+                'reminder_type' => new Expression('MAX(reminder_type)')
             ),
             $select::JOIN_LEFT
         )->join(
             array('p' => PREFIX_DB . Members::TABLE),
             'a.parent_id=p.' . Members::PK,
-            array('email_adh'),
+            array(),
             $select::JOIN_LEFT
         )->where('(a.email_adh != \'\' OR p.email_adh != \'\')')
             ->where('a.activite_adh=true')
@@ -125,11 +126,17 @@ class Reminders
             );
         }

-        $select->group('a.id_adh')->group('r.reminder_type')->group('p.email_adh');
+        $select->group('a.id_adh');

         $results = $zdb->execute($select);

         foreach ($results as $r) {
+            if ($r->reminder_type < $type) {
+                //sent impending, but is now late. reset last remind.
+                $r->reminder_type = $type;
+                $r->last_reminder = '';
+            }
+
             if ($r->reminder_type === null || (int)$r->reminder_type === $type) {
                 $date_checked = false;

#18

Updated by Johan Cwiklinski about 1 month ago

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

Johan Cwiklinski a écrit (#note-17):

Alors non seulement ils ne partaient pas à la bonne date, mais en plus, ça part tous les jours... Voici un patch modifié qui devrait mieux faire le travail :
[...]

J'ai commité ce dernier patch par erreur (voir 6223858b01b4d6ab56ca3c016764c2dda419baac) ; je n'ai pas eu le loisir de tester les différents cas de figure possibles (j'aurai en fait aimé ajouter des tests automatisés, mais c'est un peu la galère).
En attente de retours donc :)

#19

Updated by Johan Cwiklinski about 1 month ago

  • Status changed from Résolu to Fermé

Je viens d'ajouter quelques tests automatisés, à priori, le patch commité était le bon :)

#20

Updated by Frederic CROZET about 1 month ago

J'ai la dernière nightly et il y a toujours un bug sur les 3ièmes rappels.
Certains membres ont eu un 3ième rappel mais pour seulement -2, -4 et -9 jours de retard.
C'est pas normal?

#21

Updated by Johan Cwiklinski about 1 month ago

  • Status changed from Fermé to In Progress
  • % Done changed from 100 to 0

Je rouvre puise le souci n'est toujours pas résolu

#22

Updated by Johan Cwiklinski 29 days ago

Johan Cwiklinski a écrit (#note-19):

Je viens d'ajouter quelques tests automatisés, à priori, le patch commité était le bon :)

Sauf que les tests ne testaient pas le bon cas :(

J'ai revu ma copie, et j'ai essayé de tester tous les cas de figure avec des dates différentes ; et des rappels déjà enregistrés en base. C'est certainement mieux qu'avant, mais ça n'est toujours pas exhaustif (je ne teste par exemple pas de cas avec l'adresse du parent - je n'avais plus le temps d'ajouter d'autres cas :/).

#23

Updated by Johan Cwiklinski 29 days ago

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

Updated by Johan Cwiklinski 9 days ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF