https://bugs.kde.org/show_bug.cgi?id=524590

--- Comment #11 from [email protected] <[email protected]> ---
(In reply to [email protected] from comment #7)
> Titre : Échappement CSV incorrect dans SKGServices::stringToCsv (doublement
> erroné des guillemets)
> 
> Description :
> Dans la méthode SKGServices::stringToCsv (skgbasemodeler/skgservices.cpp),
> les guillemets doubles étaient remplacés deux fois en raison de
> l'utilisation d'une chaîne temporaire. Cela provoquait un doublement
> indésirable des guillemets lors des exports CSV.
> 
> Code d'origine :
> 
> C++
> QString SKGServices::stringToCsv(const QString& iNumber)
> {
>     QString output = iNumber;
>     output.replace('"', QStringLiteral("#SKGDOUBLECOTE#"));
>     output.replace(QStringLiteral("#SKGDOUBLECOTE#"),
> QStringLiteral("\"\""));
>     output = '"' % output % '"';
>     return output;
> }
> Correction proposée :
> Supprimer l'étape intermédiaire #SKGDOUBLECOTE# et effectuer le remplacement
> direct des guillemets doubles, conformément à la norme CSV :
> 
> C++
> QString SKGServices::stringToCsv(const QString& iNumber)
> {
>     QString output = iNumber;
>     output.replace('"', QStringLiteral("\"\""));
>     output = '"' % output % '"';
>     return output;
> }
> Statut :
> Testé localement sur la version 2.31.0. La modification corrige le problème
> d'échappement des guillemets et l'export CSV fonctionne désormais
> correctement.

EXPLICATION FINALE QUI SEMBLE AVOIR DU SENS

1. La vraie chaîne d'appels dans Skrooge
Dans le code de Skrooge, l'affichage des montants dans l'interface (les
tableaux de comptes, les listes d'opérations, etc.) ne passe pas par
stringToCsv, mais par la méthode SKGServices::toCurrencyString.

Or, si on regarde comment toCurrencyString fonctionnait dans la base de code
d'origine de Skrooge, elle faisait elle-même appel à... stringToCsv pour
formater et nettoyer la chaîne finale avant de l'afficher dans les éléments
graphiques (les QTableWidgetItem ou les vues Qt) !

2. Le mécanisme de l'erreur d'affichage
Voici la séquence qui provoquait l'apparition des parenthèses :

La valeur brute : Vous avez une valeur négative dans SQLite, par exemple
-150.00.

Le passage par la locale/Qt : Quand Skrooge formate ce nombre en chaîne de
caractères, Qt applique les règles de formatage selon la configuration système
ou le paramétrage interne. Dans certaines locales ou configurations de
formatage monétaire, un nombre négatif est représenté avec des guillemets ou
des caractères de cadrage temporaires.

Le piège de stringToCsv : toCurrencyString envoyait le résultat à stringToCsv.
À cause du bogue de la double substitution (#SKGDOUBLECOTE#), la chaîne de
texte affichant le montant négatif se retrouvait corrompue avec des paires de
guillemets superflues.

Le rendu graphique (Qt) : Lorsque le composant d'affichage graphique de KDE/Qt
recevait une chaîne monétaire corrompue par ces guillemets parasites, il
n'arrivait plus à parser le signe moins -. Pour éviter de crasher ou d'afficher
un symbole inconnu, le moteur de rendu de texte fallbackait sur la convention
d'affichage comptable standard de remplacement : entourer le nombre de
parenthèses (150.00).

En résumé
Le bogue dans stringToCsv altérait la chaîne textuelle générée par
toCurrencyString. L'interface graphique de Skrooge recevait un texte corrompu
et transformait le signe - mal interprété en parenthèses (...).

En corrigeant stringToCsv, le texte envoyé aux composants graphiques de Skrooge
est redescendu propre, et Qt a pu réafficher normalement le signe moins - !

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to