Project

General

Profile

Anomalie #755

Ventilation sur don impossible pour une transaction

Added by July Schatten almost 6 years ago. Updated almost 6 years ago.

Status:
Fermé
Priority:
Bas
Category:
Base de données
Target version:
Start date:
12/12/2013
Due date:
% Done:

100%

Estimated time:
Version utilisée:
Vote:

Description

Bonjour,
Lors de l'ajout de contributions sur une transaction, seules celles ayant la propriété d'allonger la durée de cotisation permettent de générer un menu valide pour le type de contribution dans le formulaire final de saisie des détails.

Le champs type de contribution étant obligatoire et le menu vide, il est alors impossible de finaliser la saisie.
En guise de test, l'ajout de la propriété au don pécuniaire a permis d'obtenir la génération d'un menu valide.

Merci
--
July

Associated revisions

Revision fff4bb3e (diff)
Added by Johan Cwiklinski almost 6 years ago

SQLite does not like boolean false; fixes #755

History

#1

Updated by Johan Cwiklinski almost 6 years ago

  • Status changed from Nouveau to Commentaire

Je ne parviens pas à reproduire ce problème. Que ce soit lors de la ventilation d'une transaction, ou la création directe d'une contribution, j'ai bien les différents types de contributions dans la liste.

Il faudrait voir les logs (Galette et serveur), je suppose que le problème est ailleurs.

#2

Updated by July Schatten almost 6 years ago

Voici le message vu dans les logs :
2013-12-12 08:28:00 - 3 - Galette\Entity\Entitled::getList | SQLSTATE[HY000]: General error: 1 no such column: false

La base utilisée est SQLite.
Le navigateur utilisé est Firefox 26.

#3

Updated by Johan Cwiklinski almost 6 years ago

  • Status changed from Commentaire to Nouveau
  • Priority changed from Normal to Bas

OK, c'est donc spécifique à SQLite... Que je ne teste pour ainsi dire pas (je passe déjà assez de temps à tester les deux autres).

Je verrai lorsque j'en aurai le temps si ce problème peut être corrigé facilement.

#4

Updated by Johan Cwiklinski almost 6 years ago

Il faudra davantage d'informations, comme la requête exécutée. Le plus simple est de passer en mode DEV (cf. http://galette.eu/documentation/fr/development/debug.html?highlight=d%C3%A9veloppement#les-modes), de reproduire l'erreur et de consulter le log à nouveau.

#5

Updated by July Schatten almost 6 years ago

Voici la log :

2013-12-20 22:45:01 - 7 - [Db] Database connection was successfull! 
2013-12-20 22:45:02 - 7 - [Galette\Core\History|Pagination] Setting property `ordered`
2013-12-20 22:45:07 - 7 - [Db] Database connection was successfull!
2013-12-20 22:45:07 - 7 - [Galette\Core\History|Pagination] Setting property `ordered`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `email_filter`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `email_filter`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `filter_str`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `membership_filter`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `account_status_filter`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `group_filter`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `orderby`
2013-12-20 22:45:07 - 7 - [Galette\Filters\MembersList|Pagination] Getting property `orderby`
2013-12-20 22:45:07 - 7 - [MembersList] Setting property `query`
2013-12-20 22:45:07 - 7 - [MembersList] Getting property `query`
2013-12-20 22:45:07 - 7 - The following query will be executed:
SELECT DISTINCT "a"."id_adh", "a"."nom_adh", "a"."prenom_adh", "p".* FROM "galette_adherents" AS "a"
INNER JOIN "galette_statuts" AS "p" ON a.id_statut=p.id_statut ORDER BY "nom_adh" ASC, "prenom_adh" ASC
2013-12-20 22:45:07 - 7 - [Db] Database connection was successfull!
2013-12-20 22:45:07 - 7 - [Galette\Core\History|Pagination] Setting property `ordered`
2013-12-20 22:45:12 - 7 - [Db] Database connection was successfull!
2013-12-20 22:45:12 - 7 - [Galette\Core\History|Pagination] Setting property `ordered`
2013-12-20 22:45:12 - 7 - Query was: SELECT DISTINCT "galette_types_cotisation"."id_type_cotis", "galette_types_cotisation"."libelle_type_cotis" FROM "galette_types_cotisation" WHERE (cotis_extension = false) ORDER BY "id_type_cotis" ASC
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `email_filter`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `email_filter`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `filter_str`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `membership_filter`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `account_status_filter`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `group_filter`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `orderby`
2013-12-20 22:45:12 - 7 - [Galette\Filters\MembersList|Pagination] Getting property `orderby`
2013-12-20 22:45:12 - 7 - [MembersList] Setting property `query`
2013-12-20 22:45:12 - 7 - [MembersList] Getting property `query`
2013-12-20 22:45:12 - 7 - The following query will be executed:
SELECT DISTINCT "a"."id_adh", "a"."nom_adh", "a"."prenom_adh", "p".* FROM "galette_adherents" AS "a"
INNER JOIN "galette_statuts" AS "p" ON a.id_statut=p.id_statut ORDER BY "nom_adh" ASC, "prenom_adh" ASC
2013-12-20 22:45:13 - 7 - [Db] Database connection was successfull!
2013-12-20 22:45:13 - 7 - [Galette\Core\History|Pagination] Setting property `ordered`
#6

Updated by Johan Cwiklinski almost 6 years ago

  • Target version set to 0.7.8
  • Assignee set to Johan Cwiklinski
  • Category changed from IHM to Base de données
  • Status changed from Nouveau to In Progress

Je n'ai pas trouvé de solution réellement propre ; voici un correctif qui fonctionne :

diff --git a/galette/lib/Galette/Entity/Entitled.php b/galette/lib/Galette/Entity/Entitled.php
index 7443659..d222149 100644
--- a/galette/lib/Galette/Entity/Entitled.php
+++ b/galette/lib/Galette/Entity/Entitled.php
@@ -235,7 +235,11 @@ abstract class Entitled
                 if ( $extent === true ) {
                     $select->where($this->_fthird . ' = ?', $extent);
                 } else if ( $extent === false ) {
-                    $select->where($this->_fthird . ' = false');
+                    if ( TYPE_DB === 'sqlite' ) {
+                        $select->where($this->_fthird . ' = 0');
+                    } else {
+                        $select->where($this->_fthird . ' = false');
+                    }
                 }
             }

Je crains que ce problème ne se pose également à d'autres endroits, ce n'est pas le seul endroit dans le code où l'on interroge une valeur "false".

#7

Updated by Johan Cwiklinski almost 6 years ago

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

Updated by Johan Cwiklinski almost 6 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF