Lier 2 listes déroulantes

Bonjour,

J’utilise la version 9.0 de Dolibarr. J’ai crée un nouveau module avec le générateur de module avec les tables suivantes: Ferme,Bâtiment ,Lot…
J’ai lié la table Ferme et la table Bâtiment (Integer:Ferme:avision/class/ferme.class.php) pour pouvoir choisir une ferme dans une liste déroulante lors de la création d’un nouveau Bâtiment.
Maintenant, je veux faire de même avec la table Lot. Mais cette fois-ci,je souhaite afficher la liste des bâtiments de la ferme choisie. C’est à dire qu’a chaque fois que je sélectionne une ferme dans la liste des fermes je vois apparaître la liste des Bâtiments qui sont dans cette ferme.

Capture_Lot.png
Merci d’avance.

Avez-vous des propositions par rapport à mon problème, je galère depuis des jours.

Bonjour :happy:

j’ai pu réaliser ce genre de sélection avec un peu de code javascript
il me semble que c’est la seule solution

il faut modifier le fichier qui permet de faire les saisies pour les nouveaux enregistrements ou lors de modification
je ne peux vous en dire plus car je suis en vacances, mais je vous recontacterai dans 10 ou 15 jours

Bonne continuation

1 « J'aime »

D’accord. Je suis à l’écoute. Bonnes vacances!!

Bonjour :happy:

pour obtenir ce que vous attendez, il faut ajouter le code suivant au niveau du source php qui supporte les saisies

	// javascript for  selection
	$str_query = DOL_URL_ROOT."/yourmodule/ajax/llquerylist.php";
	if (!is_readable($str_query)) $str_query = DOL_URL_ROOT."/custom/yourmodule/ajax/llquerylist.php";
	$str_forjs = 'jQuery(document).ready(function() { '."\n";
	$str_forjs .= 'var xsel = document.getElementById("id_list1"); '."\n";
	$str_forjs .= '$("#id_list1").change(function() { '."\n";
	$str_forjs .= 'var select_id = $("#id_list1").val(); '."\n";
	$str_forjs .= 'jQuery.ajax({ type : "POST", url : "'.$str_query.'" , data : "idferme="+select_id, '."\n";
	$str_forjs .= 'success : function(response){ var resval = response.split(";"); $("#id_list2").html(resval[0]) ; if (resval[1]) { $("#id_list2").val(resval[1]); } }, '."\n";
	$str_forjs .= 'error : function(response){  } '."\n";
	$str_forjs .= ' }); '."\n";
	$str_forjs .= ' }); } );'."\n";

	print '<script type="text/javascript">'."\n";
	print $str_forjs;
	print '</script>';

et aussi créer un nouveau fichier php dont le nom correspond à /custom/yourmodule/ajax/llquerylist.php
dans lequel il faut adapter le code suivant :

// source php exemple pour llquerylist.php	
	require '../../main.inc.php';
	require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
	
	$sql = "SELECT llx_batiment.ref, llx_batiment.rowid";
	$sql.= " FROM llx_batiment INNER JOIN llx_ferme ON llx_batiment.fk_ferme = llx_ferme.rowid";
	$sql.= " WHERE llx_ferme.rowid=". GETPOST('idferme');

	$resql = $db->query($sql);
	$resselect ="<option></option>";
	$resval = "-1";
	$ii = 0;
	if ($resql)
	{
		while ($obj = $db->fetch_object($resql))
		{
			$resselect .="<option value=".$obj->rowid.">".$obj->ref."</option>";
			$ii +=1;
		}
	}
	$db->close();
	echo $resselect.";".$resval;

avec quelques adaptations, cela devrait le faire

Bonne continuation

1 « J'aime »

Merci beaucoup. Je vais l’ajouter et vous revenir

J’ai apporté ces modifications(J’ai ajouté le code dans le fichier lot_card.php ensuite crée le fichier llquerylist.php) mais le problème n’est pas réglé. J’ai toujours la liste de tous les bâtiments.

Voici le code que j’ai ajouté

Pièces jointes :

Bonjour :happy:

Désolé pour le temps de réponse, je profite encore du beau temps de la Bretagne Nord
avec les plus belles vues de Saint Malo, Cézembre et la pointe de la Malouine

j’ai été un peu rapide dans mes explications, et j’ai omis de préciser que les variables id_list1 & id_list2 représentent les objets « select » dont vous vous servez pour sélectionner les fermes et les bâtiments…

si vous rencontrez encore des problèmes, vous pouvez m’envoyer votre fichier php par mail à l’adresse petitcamionbleu_at_free.fr

Bonne continuation

1 « J'aime »

Bonjour,
Ah ok je vois. D’accord