[RESOLU] Integrer un script Ajax au module de caisse de Dolibarr

Petit nouveau ! | 7 Messages

23 févr. 2013, 18:31

Bonjour,

Souhaitant adapter Dolibar (CMS de compta/gestion open source) à mes besoins pour gérer ma librairie, je souhaite intégrer au module de caisse, un script ajax permettant une recherche en temps réel du bouquin que j'aurais scanné (grâce à l'ean unique). Ce qui permet ensuite de remplir les champs du titre, de l'auteur et l'éditeur.

J'ai trouvé un script Ajax sur le net que j'ai récupéré et adapté... qui fonctionne avec ma petite BD de test. Quand je tape un EAN , j'ai bien les champs qui se remplisse.

Je découvre un peu dolibar, et je suis un perdu... il y a déjà un script de base en menu déroulant mais qui implique un rechargement de page, et la liste déroulante ne va pas nécessairement me servir dans la mesure ou l'ean renvoi sur un produit unique. Là ou je suis un peu perdu, c'est que je ne sais pas intégrer le script, je m'en sors pour la partie formulaire et du script, mais ça ne fonctionne pas et je me doute que c'est en rapport avec la requête sql : comment puis je l'integrer pour que cela fonctionne ?

En vous remerciant
Bien cordialement

Le formulaire :
<!-- Ajout personnel pour integrer le script Ajax -->
<script type="text/javascript" src="ajax.js"></script>
<!-- Fin Ajout -->		
<fieldset class="cadre_facturation"><legend class="titre1"><?php echo $langs->trans("Article"); ?></legend>
	<form id="frmFacturation" class="formulaire1" method="post" action="facturation_verif.php" autocomplete="off">
		<input type="hidden" name="token" value="<?php echo $_SESSION['newtoken']; ?>" />
		<input type="hidden" name="hdnSource" value="NULL" />
		<table>
			<!-- Ajout Persnnel : On intégre les champs personnalisés titre, auteur, editeur-->
			<tr><th class="label1">EAN</th></tr>
				<tr><td><input type="text" size="12" name="ref" id="ref" onchange="ajaxref()"/></td></tr>
			<tr><th class="label1"><?php echo $langs->trans("Tirre"); ?></th></tr>
				<tr><td><input id ="label" size="20" name="label"/></td></tr>
			<tr><th class="label1"><?php echo $langs->trans("Auteur"); ?></th></tr>
				<tr><td><input id ="label_auteur" size="20" name="label_auteur"/></td></tr>
			<tr><th class="label1"><?php echo $langs->trans("Editeur"); ?></th></tr>
				<tr><td><input id ="label_editeur" size="20" name="label_editeur"/></td></tr>
			<?php echo $res?>
			<!-- FIn Ajout Persnnel-->
		</table>
	</form>
   
$req = mysql_query("SELECT label,label_auteur,label_editeur FROM llx_product WHERE ref = '$_POST[ref]'");
while($res = mysql_fetch_array($req))
    {
    echo "$res[label]*$res[label_auteur]*$res[label_editeur]";
    }
    
var xhr = null;
    // Fonction de creation de l'objet XMLHttpRequest qui resservira pour chaques fonctions AJAX
    function getXhr()
    {
    if(window.XMLHttpRequest) xhr = new XMLHttpRequest();
    else if(window.ActiveXObject)
    {
    try
    {
    xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    }
    else
    {
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest, veuillez le mettre à jour");
    xhr = false;
    }
    }
    function ajaxref()
    {
    getXhr();
    xhr.onreadystatechange = function()
    {
    if(xhr.readyState == 4 && xhr.status == 200)
    {
    // Nous recuperons ce coup ci le retour dans une variable
    var chaine = xhr.responseText;
    // Nous decoupons la reponse selon le caractere choisi
    var tableau = chaine.split("*");
    
	// Nous appliquons les valeurs récupérées au element correspondant
    document.getElementById('label').value = tableau[0];
    document.getElementById('label_auteur').value = tableau[1];
    document.getElementById('label_editeur').value = tableau[2];
    }
    }
    xhr.open("POST",'ajaxrecupaddr.php',true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    ref = document.getElementById('ref').value;
    xhr.send("ref="+ref);
    }

Mammouth du PHP | 504 Messages

23 févr. 2013, 18:56

$req = mysql_query("SELECT label,label_auteur,label_editeur FROM llx_product WHERE ref = '$_POST[ref]'");
while($res = mysql_fetch_array($req))
    {
    echo "$res[label]*$res[label_auteur]*$res[label_editeur]";
    }
Que veux tu obtenir ?

le * représente une multiplication.

Pour afficher ce que je pense, ce serait plutot.
echo $res[label].' - '.$res[label_auteur].' - '.$res[label_editeur];
C'est juste pour afficher le résultat.

Petit nouveau ! | 7 Messages

23 févr. 2013, 19:06

En fait le principe est simple : avec ma douchette, je lis le code barre qui me renvoi l'ean dans mon champ EAN. La fonction permet de remplir automatiquement les champs titre auteur et éditeur correspondant à l'ean du livre scanné.

Pour les * il s'agit en fait d'un caractère de séparation ajouté au résultat de la requete qui est utilisé ensuite comme marqueur de découpage pour avoir les trois segment (titre, auteur, éditeur)

Mammouth du PHP | 504 Messages

23 févr. 2013, 19:48

Concernant la séparation et ton retour echo,

la bonne syntaxe est
echo $variable ;


et
echo $variable1.' * '  .$variable2 ;
et pas
echo "$res[label]*$res[label_auteur]*$res[label_editeur]";

Petit nouveau ! | 7 Messages

24 févr. 2013, 00:52

Merci beaucoup pour la réponse. Mais en fait je ne pense pas que ça va corriger le problème. Le script fonctionne en dehors de dolibarr, je l'ai testé sur un formulaire de base et il me retourne correctement tout les tests, en me séparant les trois enregistrements dans les bons champs.