Récupérations variables dolibarr

Bonjour à tous,

Je suis novice en développement et dans le cadre de mon stage de 1ère année de BTS, j’essaie de créer un module pour automatiser la création d’étiquettes de transport Colissimo.
Je suis bien partie du côté du web service Laposte mais je bloque sur la partie Dolibarr car je n’en comprends pas trop le code php.

J’ai suivi la doc pour coder un module qui ajoute un bouton dans la page des commande dont le lien ouvre une autre page php de mon module (celle avec le code de l’API).

Donc avec des variables écrite « en dur » ça fonctionne. Malheureusement, je ne sais pas comment récupérer les informations de la commande en cours de traitement. J’ai réussi à récupérer les infos du destinataire avec une requête sql sur la dernière commande, mais cela n’est pas une bonne option pour deux raisons :

- Cela ne me permet pas de récupérer le poids du ou des produit(s) de la commande en cours (et je ne sais pas comment faire) ;
- Si on crée la commande et que l’on ne fait l’étiquette que plus tard, il peut y avoir eu d’autres commandes et du coup cela ne fonctionne plus.

Pouvez-vous m’aider à régler ce problème ? Précisément, j’aurais besoin de :

- Cibler la commande en cours de traitement,
- Récupérer, en SQL ou PHP les informations de livraison (nom, prénom, adresse…)
- Cibler les produits contenu dans la commande afin d’en extraire le poids du colis.

Merci d’avance pour votre aide précieuse !

Bonjour :happy:
Dans utilise la classe commande

$object = new Commande($db);
$object->fetch($id);

et du coup $object contient les infos désirés.

Bonjour,

Merci pour ta réactivité :happy:

Et après pour récupérer les infos que je veux, je n’ai plus qu’à faire $object->laBonneVariable ? (Je ne suis pas trop caler en php objet, d’où ma difficulté avec le code Dolibarr !)

Et le poids des produits fera-t’il partie de mon objet ? Car dans la bdd, le poids n’est pas compris dans la table commande.

[EDIT] J’ai trouvé le fichier commande.class mais je ne suis pas sûr de la démarche pour récupérer mes données, peux-tu me détailler la procédure pour récupérer par exemple le nom de famille d’un contact si il y a un contact ajouté ? Je suppose qu’il faut aussi récupérer le contact courant en créant un objet mais comme je t’ai dit, je n’ai jamais appris le php objet, j’apprends sur le tas donc c’est un peu compliqué. Je pense qu’avec un exemple pour une des variables, je pourrais m’en sortir pour toutes les autres.
Merci d’avance !!

1 J'aime

Fait un print_r($object); pour voir tout ce que tu peux sortir
exemple :
$object->ref
$object->total_ttc

Tu trouvera ca dans :
commande\class\commande.class.php
function fetch($id, $ref=’’, $ref_ext=’’, $ref_int=’’)

Inspire toi des pages card.php de commande expédition etc

Merci je vais essayer.

Je reviens vers le forum si j’ai un soucis.

J’ai un soucis ^^

J’ai suivi tes conseils et j’ai fait :

function debug($variable){
echo ‹ <pre> ›.print_r($variable, true).’</pre>’;
}
$object = new Commande($db);
$object->fetch($id);

debug($object);

Mais lorsque je suis sur une commande et que je clique sur le bouton qui active ce code, j’ai une commande vierge en debug (aucune info sur la commande en cours), aperçu :

Sanstitre2.png

Comment ça se fait ? J’ai oublié quelque chose ? Je dois définir $id ?

Problème résolu, effectivement je devais définir id, je ne voyais pas comment faire mais c’était tout bête ^^ :

$object->fetch($_GET[« id »]);

n’oublie pas de tester le get avant ex:
$id = GETPOST(‹ id ›,‹ int ›);

puis si $id

$object->fetch($id);

Ah oui ! Merci de m’y avoir fait pensé :happy:

J’ai un nouveau souci…

Je n’arrive pas à récupérer l’id de mes produits dans l’objet commande… Les valeurs de premier niveau ça va mais là a priori pour les produits c’est « objet->tableau->nouvelObjet->valeur » et j’ai eu beau essayer pas mal de trucs ce matin, je n’arrive pas à la récupérer.

Tu peux m’aider encore un peu ? (Ou quelqu’un d’autre, si il y a du monde dans le coin :wink: ) Après ça je devrais pouvoir me débrouiller pour finir mon module (j’espère :happy: ) Je vous mets un extrait du debug() :

Sanstitre1.png

En gros il y a un tableau d’objet et dans le premier je veux récupérer 4689 et dans le 2e 4690.

Merci d’avance !!

:happy:
c’est :
$object->lines[0]->fk_product
$object->lines[1]->fk_product
$object->lines[etc]->fk_product

fk_product = id du produit (foreign key product)

L’id que tu cite est je pense l’id de la ligne llx_commandedet

1 J'aime

Comme, ça, sans avoir testé, je dirais :

foreach($object->lines as $line) {
echo $line->fk_product;
}

Je pense que tu dois pouvoir aussi y accéder par un indice :
$monproduit = $object->lines[0]->fk_product;

1 J'aime

Cool Merci !

C’est exactement ce que je cherchais !

J’espère m’en sortir maintenant ^^

:sunglasses:

Bonjour,

Avez-vous vu sur le dolistore le module « Chronopost » ?
Il est disponible pour 48€ et il est sous licence AGPL.
Il pourrait vous apporter de bonnes informations.

Cordialement
Marc

Oui j’ai vu, j’ai aussi trouvé un module un peu plus cher qui comprend l’automatisation des étiquettes colissimo que j’essaie de mettre en place.
Mais je suis en stage de développement, et le but est donc que je programme moi-même, en évitant de faire dépenser de l’argent à mon patron.
Merci tout de même pour le conseil mais j’avance bien, je devrais m’en sortir :happy:

Puis après tu lui fera le suivi de colis sur une carte :tongue:

:lol: J’en suis pas encore là ! ^^

Oui chaque chose en son temps tu as raison, mais tu verras rien de compliqué.

Petite question, je ne trouve pas la table contenant les infos de ma société (nom, adresse…).
Je voudrais les récupérer dynamiquement car mon patron m’a parlé d’un déménagement éventuel d’ici 2 ans (et je ne serai plus là d’ici là ^^).

Vous savez quelle table c’est ?

Ce sont des constantes :

MAIN_INFO_SOCIETE_NOM
MAIN_INFO_SOCIETE_ADDRESS
MAIN_INFO_SOCIETE_TOWN
MAIN_INFO_SOCIETE_ZIP
MAIN_INFO_SOCIETE_STATE
MAIN_MONNAIE
MAIN_INFO_SOCIETE_TEL
MAIN_INFO_SOCIETE_FAX
MAIN_INFO_SOCIETE_MAIL
MAIN_INFO_SOCIETE_WEB
MAIN_INFO_SOCIETE_NOTE
MAIN_INFO_SOCIETE_GENCOD

regarde dans

admin/company.php