[RÉSOLU]-Retranscription requête pour extrafield

Bonjour à tous,

Je cherche à retranscrire une requête sql en un extrafield de case à cocher issue d’une table.

Voici la requête sql :

$sql1 = "SELECT *";
$sql1.= " FROM ".MAIN_DB_PREFIX."commande as co ";
$sql1.= " , ".MAIN_DB_PREFIX."commandedet as cod";
$sql1.= " WHERE co.entity = ".$conf->entity;
$sql1.= " AND cod.fk_commandefourndet = 0";
$sql1.= " AND co.fk_statut > 0";
$sql1.= " AND cod.product_type = 0";
$sql1.= " AND cod.fk_product IS NOT NULL";
$sql1.= " AND cod.fk_commande = ".$objp->rowid;

Auriez-vous une idée ?

Merci d’avance pour vos retours.

Bruce

Bonjour :happy:
Je n’ai pas vraiment compris :unhappy:

Bonjour dolibarr95,

J’ai modifié le core (commande/list.php) en ajoutant une requête SQL pour vérifier un traitement.
Je me suis dis que peut-être un extrafield serait une meilleure solution (plutôt que de toucher au core de Dolibarr).

L’idée est d’implémenter ce champs supplémentaire sur la fiche commande afin de savoir si cette requête est TRUE ou FALSE.
Si TRUE alors la case à cocher est « checked »
Si FALSE alors la case à cocher est « no checked »

J’espère avoir été plus clair.

ok
et avec un hook (orderlist)? https://wiki.dolibarr.org/index.php/Système_de_Hooks

Oui c’est ce que j’essaye de faire mais sans succès…
Voici ma fonction doActions

	function doActions($parameters, &$object, &$action, $hookmanager)
	{
		global $conf, $langs, $db;

		$error = 0; // Error counter
		$myvalue = 'test'; // A result value

		if (!empty($conf->fournisseur->enabled))
			{

				$sql1 = "SELECT *";
				$sql1.= " FROM ".MAIN_DB_PREFIX."commande as co ";
				$sql1.= " , ".MAIN_DB_PREFIX."commandedet as cod";
				$sql1.= " WHERE co.entity = ".$conf->entity;
				//$sql1.= " AND co.rowid = cod.fk_commande";
				$sql1.= " AND cod.fk_commandefourndet = 0";
				$sql1.= " AND co.fk_statut > 0";
				$sql1.= " AND cod.product_type = 0";
				$sql1.= " AND cod.fk_product IS NOT NULL";
				$sql1.= " AND cod.fk_commande = ".$objp->rowid;
				$resql1 = $db->query($sql1);
				//print $sql1;

				if ($parameters['currentcontext'] = ("orderlist"))
				{
					if ($resql1)
						{
							$num1 = $db->num_rows($resql1);
							if (empty($num1))
								{
									$text_info.= '<br><span class="cde_fourn_ok">'.$langs->trans('Commande fournisseur effectuée').'</span><hr>';
									$commande_fourn = '<img id="vert" class="classfortooltip vert" title="'.$langs->trans('Commande fournisseur effectuée').'" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/feu_vert.png">';
								}

							else
								{
									$text_info.= '<br><span class="cde_fourn_nok">'.$langs->trans('Commande fournisseur a effectuer').'</span><hr>';
									$commande_fourn = '<img id="rouge" class="classfortooltip rouge" title="'.$langs->trans('Commande fournisseur a effectuer').'" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/feu_rouge.png">';
								}
						}
					else
					{
						 $text_info.='<br>';
					}
				}
		if (! $error)
		{
			$this->results = array('myreturn' => $text_info);
			$this->resprints = $commande_fourn;
			return 0; // or return 1 to replace standard code
		}
		else
		{
			$this->errors[] = 'Error message';
			return -1;
		}
			}
		}

J’ai résolu mon problème :wink:
Avec les hooks :
printFieldListTitle
printFieldListOption
printFieldListValue dans la quelle j’ai mis ma requête sql

Je n’y arrivais pas car je suis en 3.9.2 et que ces hooks sont implémentés après cette version…

Je continue donc mon module pour personnalisé mon Dolibarr sans toucher au core.

Bonne soirée.
Bruce

1 « J'aime »

Bonjour à tous,

Je continue mon petit module mais je fais face à le même genre de problématique.
Je précise qu’il n’est pas possible de passer par un hook pour ce que je veux faire.
Je souhaite afficher la référence de la commande client dans objectline_view.tpl.php pour chaque ligne de produit dans la commande fournisseur.

Voici la requête qui le permet :

SELECT c.ref_client
FROM llx_commande_fournisseur as cf
,llx_commande_fournisseurdet as cfd
,llx_commande as c
,llx_commandedet as cd
,llx_product as p
WHERE cf.rowid = $ID$
AND cf.rowid = cfd.fk_commande
AND cd.fk_commandefourndet = cfd.rowid
AND c.rowid = cd.fk_commande
AND p.rowid = cd.fk_product

J’ai créer un extrafield line (liste issue d’une table) pour la commande fournisseur.
Mais là où je bloque c’est sur la syntaxe de la commande…Et la doc n’est pas très fournie sur le sujet.

Merci pour vos retours.
Bruce

Bonjour :happy:

la valeur contenue dans la variable « $ID » concerne le rowid de l’objet commande ou commande fournisseur
de ce fait, je ne pense pas qu’il soit possible de réaliser ce que vous cherchez à faire avec les propriétés des extrafields et leur implémentation classique

pour ce qui concerne votre demande, je ne comprends pas comment vous voulez effectuer ces liaisons entre commande clients et commandes fournisseurs - quid d’un produit présent dans plusieurs commandes clients pour une seule commande fournisseur - ou encore il manque un filtrage selon le statut de vos commandes clients afin de ne pas prendre en compte les commandes soldées…

Bonne continuation

Bonjour pcbleu,

Merci pour votre retour.
Florian Henry m’a donné la syntaxe : commande:ref:rowid:: pour avoir une liste des commandes clients
Mais sur ma version de doli cela ne fonctionne pas pour le moment…
Mais visiblement c’est possible avec un doli plus récent…

Pour le lien (ligne) entre les commandes clients et les commandes fournisseurs, j’utilise simplement cette ligne AND cd.fk_commandefourndet = cfd.rowid
La requête ci-dessus fonctionne bien mais je suis en train de faire un module qui reprend toutes mes modifications du core.
C’est pour cela que je souhaite passer par un hook/extrafield.

Bonne journée.
Bruce

Bonjour à tous,

J’avance bien mais il reste un petit bug à résoudre…

Dans une fonction addline de la commande fournisseur :

			//mon champ ref_client que je récupère
			$array_options = $restockcmde_static->ref_client;

			$array_options->array_options["options_ref_client"];
...
			$result=$objectcf->addline(
				'', 0, 
				$lgnCmdeFourn[1],					// $qty
				$lgnCmdeFourn[3],					// TxTVA
				0, 0,
				$restockcmde_static->fk_product,	// $fk_product
				$lgnCmdeFourn[2],					// $fk_prod_fourn_price
				'', 0,
				'HT',								// $price_base_type
				0, 0,								// type
				0,									// $info_bits
				FALSE,								// $notrigger
				NULL, 								// $date_start
				NULL, 								// $date_end
				$array_options						// $array_options

			);

Quand je vérifie dans les logs, j’ai bien chaque ref_client dans la variable $array_options.
Mais dans la base de données/llx_commande_fournisseurdet_extrafields, le fk_objet s’implémente bien mais pas la colonne ref_client (qui correspond à l’attibut de mon extrafield

Auriez-vous une idée ?

Merci pour vos retours.

Bruce

Bonjour à tous,

Je précise que pour le moment je suis en 3.9.2.
Peut-être que quelqu’un peut me dire si cela vient de ma version de Doli ?

Bruce

en 3.9.2 Extrafields c’était un module de mémoire pas dans le core.
Et le fonctionnement était complètement différent.

Bonjour ksar,

Les extrafields étaient en partie implantés dans le core avec cette version.
Pour le moment je contourne la chose avec une requête

						$sql2 = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseurdet_extrafields';
						$sql2.= ' SET ref_client = "'.$objcc->ref_client.'"';
						$sql2.= ' WHERE fk_object = "'.$idcmdefourndet.'"';
						$resqlupdate2 = $db->query($sql2);

Bonjour à tous,

J’ai finit mon module pour ma version de Dolibarr (3.9.2) qui reprend toutes les modifs du core que j’avais faite et pas d’autres choses.
Ces modifications correspondait à notre mode de fonctionnement, le Dropshipping.
Couplé aux modules restock et customtooltip des patas-monkey, c’est bien pratique.
Le module permet donc une cohérence visuelle et fonctionnelle sur les listes ainsi que sur les fiches de commandes clients et fournisseurs.
En petit bonus, j’ai implémenter le renvoi des liens de commandes vers une boutique Prestashop.

Voici quelques captures d’écran

boxes.png

commande_fournisseur.png

liste_commande_client.png

liste_commande_fournisseur.png

Bruce