Champ calculé ds extrafields

Bonjour,
Je suis sur Dolibarr 7.0.3 en localhost avec windows.
J’ai un souci pour les champs calculés sur les attributs supplémentaires.
Quand je fais un calcul dynamique pour faire la somme de deux quantités pour avoir le total: Champ $object->array_options[options_qtetotal]
$object->array_options[options_qtematin]+$object->array_options[options_qtesoir]
Le résultat s’affiche bien dans le formulaire de validation sauf que lors de l’affichage de la liste, cela reveient à 0.
Au fait $object->array_options[options_qtetotal] est à null.
Quelqu’un peut m’aider s’il vous plaît? merci

Bonjour :happy:

le problème avec les champs calculés dans l’affichage des listes, c’est que la variable « $object » n’est pas affectée !!!

pour résoudre ce problème, il faut simplement affecter cette variable,
par exemple, pour les propositions commerciales dans /htdocs/comm/propal/list.php, aux environs de la ligne 630
il faut ajouter les deux lignes de code en surbrillance…

siChampsCalcules.png

Bonne continuation

Bonjour,
Merci infiniment, tu m’as sauvé la vie.

Bonne continuation aussi!

Bonjour,
Je suis sur dolibarr 8.0.1
J’aimerais rajouter sur mes services une ligne faisant réference au budget d’un projet qui est une valeur par default de doli et je ne sais pas comment faire référence a cet objet
j’ai essayer $reloadBudget mais ca ne fonctionne pas je suis un peu perdu merci de votre aide
Est ce que vous pouvez m’aider ?

Pièces jointes :

Bonjour,

J’ai le même problème pour un champ calculé à afficher dans la liste Produits.
Je calcule un prix au kg dont voici le détail du champ calculé :
round($object->weight_units == 0 ? $object->price_ttc/$object->weight : ($object->weight_units == -3 ? $object->price_ttc/$object->weight1000 : $object->price_ttc/$object->weight1000*1000),2)

Je suis donc aller sur le ficher /htdocs/product/list.php mais je ne vois pas comment le modifier pour faire en sorte que mon champ calculé s’affiche correctement sur ma liste.
Je pense que les modifications doivent être apporté à partir de la ligne 717, j’ai tenter d’insérer plusieurs lignes de codes mais sans succès malheureusement.

Si quelqu’un peut m’éclairer pour modifier correctement ce fichier.

Bonjour

le problème que vous avez tient au fait que vous utilisez la variable « $object »,
alors que certains de ses champs ne sont pas affectés…
dans le source de htdocs/product/list.php de la version 8.0.2, aux environs de la ligne 717…
le code suivant devrait résoudre votre problème :

$object->weight_units = $obj->weight_units; $object->price_ttc = $obj->price_ttc; $object->weight = $obj->weight;

Bonne continuation

Merci pcbleu pour ton retour.

Malheureusement cela n’a pas fonctionné.

Voici la partie du code de htdocs/product/list.php sur laquelle j’ai ajouté les 3 lignes conseillées (début ligne 704).

$product_static->id = $obj->rowid;
$product_static->ref = $obj->ref;
$product_static->ref_fourn = $obj->ref_supplier;
$product_static->label = $obj->label;
$product_static->type = $obj->fk_product_type;
$product_static->status_buy = $obj->tobuy;
$product_static->status     = $obj->tosell;
$product_static->status_batch = $obj->tobatch;
$product_static->entity = $obj->entity;
$product_static->pmp = $obj->pmp;
$product_static->accountancy_code_sell = $obj->accountancy_code_sell;
$product_static->accountancy_code_sell_export = $obj->accountancy_code_sell_export;
$product_static->accountancy_code_sell_intra = $obj->accountancy_code_sell_intra;
$product_static->accountancy_code_buy = $obj->accountancy_code_buy;
$object->weight_units = $obj->weight_units;
$object->price_ttc = $obj->price_ttc;
$object->weight = $obj->weight;

Je n’ai même pas de message d’erreur qui me permettrait de pouvoir modifier le code en conséquence mais toujours le sigle € seul.
Je précise que le montant calculé s’affiche correctement sur le formulaire et que je suis en version 8.0.4.

Peut-être est-il nécessaire de rajouter la ligne avec fetch_optionnals mais si je rajoute celle que tu as conseillé à fidus :

$object->fetch_optionnals($obj->rowid);
La liste ne s’affiche plus mais aucun message d’erreur n’apparaît pour autant.

Bonjour

le problème est bien du fait de la variable « $object » utilisée dans le champ calculé…

Veuillez essayer ceci, après les affectations de « $product_static » :

$object = $obj;

et aussi ajouter le texte suivant pour inclure les deux champs nécessaires au calcul :

p.weight, p.weight_units, au niveau de la déclaration de la requête sql qui génère la liste…

siCalcField.png

Bonne continuation

1 J'aime

Grand merci pcbleu pour ton aide précieuse ! Cela fonctionne parfaitement grâce à tes modifications.

Maintenant j’ai bien compris le principe et je vais pouvoir m’amuser avec les champs calculés :happy: !

Hello

Même besoin ici en v9 mais je ne parviens pas (non plus) à le faire fonctionner.

J’ai deux types de devis : en « one-shot » ou en mensuel.
Donc deux extrafields :

  1. mensuel : booleen. Vrai ou faux
  2. annuité : champ calculé. Si mensuel à vrai => [totalHT x 12] sinon [totalHT].
    J’ai mis ça dans champ calculé et ça marche bien sur la fiche :

$object->array_options['options_mensuel'] ? $object->total_ht * 12 : $object->total_ht

… mais pas sur la liste, même avec :

$object->array_options = array();
$object->fetch_optionals($obj->rowid);

C’est peut être pas possible avec mon booléen case à cocher :unsure:

Bonjour :happy:

votre problème vient probablement du fait de la variable « $object » utilisée dans le champ calculé, et qui n’est pas affectée dans le module list…

Veuillez essayer l’ajout de l’affectation de la variable $object, comme ceci, juste avant de recharger les extrafields :

$object = $obj; $object->array_options = array(); $object->fetch_optionals($obj->rowid);

Bonne continuation

Slt pc bleu

Tes connaissances sont les bienvenues :wink:

https://wiki.dolibarr.org/index.php/Extrafield_Champ_Calculé

Hello !

Merci pour ton retour rapide PCBleu, malheureusement ça ne fonctionne pas, la liste se vide si j’initialise l’objet :huh:

En fait en mettant un point d’arrêt, je vois mon champ « mensuel » qui est bien à vrai ou faux mais le champs « annuité » est toujours à null :dry:

Bonjour :happy:

pour plus de précision, les trois affectations de la variable $object sont à effectuer dans la boucle qui liste les valeurs à afficher
dans le code de la version 8.04, cela se situe à la ligne 741 dans le code…

si_fetchlist.png

il faut placer ces lignes en dessous de l’appel à la fonction fetch_object…

Bonne continuation

c’est bien ce que j’ai fait me semble-t-il :dry:
(Je suis en 9.0)

aze.jpg

Bonjour :happy:

j’ai pris le temps de faire le test sur les propositions commerciales de cette démo

si_demochampcalcul.png

il faut utiliser le code suivant, pour affecter correctement la variable « $object » :

$object = new propal($db); $object->fetch($obj->rowid); $object->array_options = array(); $object->fetch_optionals($obj->rowid);

Bonne continuation

1 J'aime

troooooop génial !!! :woohoo:

Merci infiniment d’avoir pris le temps ! Il faudrait le proposer en pull request sur le doli officiel ça serait top…

J’en ai encore une… :laugh:

Mon extrafield est « totalisable » (nouveau depuis v9). Mais il ne fonctionne pas… Je pense que c’est un peu la même histoire d’initialisation qui ne se fait pas dans la liste. Merci pour ton aide éventuelle. :lol:

tmp.jpg

Bonjour

Désolé pour le temps de réponse,
Voici [url=www.dolibarr.fr/forum/t/liste-avec-somme-correcte-des-extrafields-calcules/29999/1 réponse à ce problème[/url]

Bonne continuation

Thanks for tips to fix.
I pushed a more complete fix for v11 (all lists should be fixed)