Skip to content

[fix] Correction de l'erreur "Invalid operation (*)" sur /contractAdmin/orders#151

Merged
Mandrak-Kimigo merged 1 commit into
stagingfrom
fix-orders-multiweight-null-qt
Jun 27, 2026
Merged

[fix] Correction de l'erreur "Invalid operation (*)" sur /contractAdmin/orders#151
Mandrak-Kimigo merged 1 commit into
stagingfrom
fix-orders-multiweight-null-qt

Conversation

@Mandrak-Kimigo

Copy link
Copy Markdown
Member

Contexte

Une erreur serveur "Invalid operation (*)" se produisait sur la page
/contractAdmin/orders/<id> pour certains catalogues, rendant la page
inaccessible.

Trace :
Called from contractadmin/orders.mtt line 123
at URL /contractAdmin/orders/82897

Cause

Le template tente d'afficher o.quantity * o.productQt dans l'input
de saisie du poids (bloc multiWeight && variablePrice). Or product.qt
est SNull<SFloat> — un produit peut avoir multiWeight=true sans qt
renseigné. Dans ce cas o.productQt est null et Neko lève
"Invalid operation (*)" à la multiplication.

Solution

Introduction d'une variable locale effectiveQt dans le template :

::set effectiveQt = o.productQt::
::if effectiveQt == null::::set effectiveQt = 1::::end::

Cette valeur par défaut de 1 est cohérente avec OrderService.updateUserOrderQuantity
(ligne 872) qui applique le même fallback côté serveur.

Note : l'opérateur ternaire ? : n'est pas supporté par le compilateur
Templo — d'où l'usage de deux instructions ::set:: / ::if::.

Comment tester

  1. Identifier un produit avec multipesée + prix variable selon pesée et quantité nulle
  2. Créer une commande sur ce produit pour une distribution
  3. Ouvrir /contractAdmin/orders/<catalog_id>?d=<distrib_id>
  4. Vérifier que la page s'affiche sans erreur et que l'input de pesée
    affiche la quantité (quantity × 1)

🤖 Co-rédigé avec Claude Code

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

Le template contractadmin/orders.mtt calculait `o.quantity * o.productQt`
pour l'input de pesée (bloc multiWeight + variablePrice) sans vérifier la
nullité de `productQt` (champ SNull<SFloat> dans Product). Quand un produit
a multiWeight=true mais qt=null, Neko lançait "Invalid operation (*)".

On introduit une variable locale `effectiveQt` qui vaut `o.productQt` si
non-null, sinon 1, aligné sur le comportement de OrderService ligne 872.
L'opérateur ternaire n'étant pas supporté par le compilateur Templo, on
utilise deux instructions ::set:: / ::if::.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@InterAMAP44 InterAMAP44 marked this pull request as ready for review June 27, 2026 17:25
@InterAMAP44 InterAMAP44 self-requested a review as a code owner June 27, 2026 17:25
@Mandrak-Kimigo Mandrak-Kimigo merged commit d8300af into staging Jun 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants