Insertion de ligne dans propal

Bonjour
Etant dans le besoin de faire des insertions de lignes dans les propales
j’ai réussi non sans mal à modifier le code afin de l’optenir.

Si cela intéresse qq je fais une copie du code que j’ai rajouté.
Juste avant l’icone img_edit pour les modifications de la ligne j’ai rajouté une icone img_insert avec action insertline afin de pouvoir insérer une ligne à l’endroit où je clique.

dans propal.php ligne 693

if ($_GET[‹ action ›] == ‹ insertline › && $user->rights->propale->creer)
{
$propal = new Propal($db, ‹  ›, $_GET[« propalid »]);
$propal->fetch($_GET[‹ propalid ›]);
$propal->line_insert($_GET[‹ ligne ›]);

if ($_REQUEST['lang_id'])
{
	$outputlangs = new Translate(DOL_DOCUMENT_ROOT ."/langs",$conf);
	$outputlangs->setDefaultLang($_REQUEST['lang_id']);
}
propale_pdf_create($db, $propal->id, $propal->modelpdf, $outputlangs);

Header (‹ Location: ‹ .$_SERVER[« PHP_SELF »]. ›?propalid= ›.$_GET[« propalid »].’&ligne=’.$_GET[‹ ligne ›].’&action=editline’);
exit;
}

dans propal.class.php ligne 848
function line_insert($rowid)
{
$this->line_order();

/\* Lecture du rang de la ligne */
$sql = 'SELECT rang FROM '.MAIN_DB_PREFIX.'commandedet';
$sql .= ' WHERE rowid ='.$rowid;
$resql = $this->db->query($sql);
if ($resql)
  {
$row = $this->db->fetch_row($resql);
$rang = $row[0];
  }

if ($rang > 0 )
  {
$sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = rang \+ 1';
$sql .= ' WHERE fk_commande  = '.$this->id;
$sql .= ' AND rang >= '.($rang );
if ($this->db->query($sql) )
  {

  }
else
  {
    dolibarr_print_error($this->db);
  }
  }

}

Je suppose que pour les commandes achats cela devrait fonctionner de la même manière.

henri

je comprend pas trop pourquoi tu ajoutes ceci vu qu’on peut changer l’ordre des lignes ?

La raison est la suivante:
Image un commercial qui tape un devis de 50 lignes et il veut rajouter un détails au tout début de son devis, il va devoir ajouter une ligne à la fin du devis et cliquez 51 fois sur l’icone up pour arriver au début de son devis.

Par expérience je sais qu’ils n’aiment pas ça.

Henri

oui vu comme ca c’est clair :smiley:
je vais voir pour insérer ta modif
Merci pour ta participation

ps: peux-tu envoyer ton image insert ?

de plus je ne sait pas si tu as corrigé chez toi mais tu fais référence à la table llx_commandedet dans ta fonction insert pour les propales !!!

as-tu une demo pour voir comment ca fonctionne car je ne vois pas comment ca peut fonctionner ?

Effectivement je n’ai pas coller la bonne fonction line-insert

Pour l’img-insert j’ai repris l’icône d’information (Désolé j’ai pas mieux)

donc dans propal.class.php
ligne 720
function line_insert($rowid)
{
$this->line_order();

	/\* Lecture du rang de la ligne */
	$sql = 'SELECT rang, fk_propal FROM '.MAIN_DB_PREFIX.'propaldet';
	$sql .= ' WHERE rowid ='.$rowid;
	$resql = $this->db->query($sql);
	if ($resql)
	{
		$row = $this->db->fetch_row($resql);
		$rang = $row[0];
		$fk_propal = $row[1];
	}

	if ($rang > 0 )
	{
		$sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = rang \+ 1 ';
		$sql .= ' WHERE fk_propal  = '.$this->id;
		$sql .= ' AND rang >= '.($rang );

		if ($this->db->query($sql) )
		{
		$sql = 'INSERT INTO '.MAIN_DB_PREFIX."propaldet (fk_propal, rang, fk_product)";
	$sql.= " VALUES (".$fk_propal.",".$rang. ",null)";



		if ($this->db->query($sql) )
		{
		$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'propaldet  ORDER BY rowid DESC LIMIT 1';
$resql = $this->db->query($sql);

if ($resql)
{
$row = $this->db->fetch_row($resql);
$_GET[‹ ligne ›] = $row[0];

	}

		}
		else
		{
			dolibarr_print_error($this->db);
		}


		}
		else
		{
			dolibarr_print_error($this->db);
		}
	}
}

J’ai mis un null dans fk_product arbitrairement, à améliorer certainement
Pour moi ce n’est pas génant

dans propal.php
ligne 1235

print ‹ <a href=" ›.$_SERVER[« PHP_SELF »].’?propalid=’.$propal->id.’&action=insertline&ligne=’.$objp->rowid.’#’.$objp->rowid.’">’;
print img_insert();

dans functions.inc.php
ligne 963
function img_insert($alt = « default »,$float=0)
{
global $conf,$langs;
if ($alt==« default ») $alt=$langs->trans(« Modify »);
$img=’<img src="’.DOL_URL_ROOT.’/theme/’.$conf->theme.’/img/info.png" border=« 0 » alt="’.$alt.’" title="’.$alt.’"’;
if ($float) $img.=’ style=« float: right »’;
$img.=’>’;
return $img;
}

Henri