Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : Insertion de ligne dans propal

Insertion de ligne dans propal il y a 11 ans 11 mois #4614

  • henri
  • Portrait de henri
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 == 'insertline' && $user->rights->propale->creer)
{
$propal = new Propal($db, '', $_GET["propalid"]);
$propal->fetch($_GET);
$propal->line_insert($_GET);


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



Header ('Location: '.$_SERVER["PHP_SELF"].'?propalid='.$_GET["propalid"].'&ligne='.$_GET.'&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
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Insertion de ligne dans propal il y a 11 ans 11 mois #4617

  • regis
  • Portrait de regis
  • Hors ligne
  • Administrateur
  • Messages : 2046
  • Remerciements reçus 91
  • Karma: 140
je comprend pas trop pourquoi tu ajoutes ceci vu qu'on peut changer l'ordre des lignes ?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Insertion de ligne dans propal il y a 11 ans 11 mois #4632

  • henri
  • Portrait de henri
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
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Insertion de ligne dans propal il y a 11 ans 11 mois #4636

  • regis
  • Portrait de regis
  • Hors ligne
  • Administrateur
  • Messages : 2046
  • Remerciements reçus 91
  • Karma: 140
oui vu comme ca c'est clair :D
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 !!!
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Insertion de ligne dans propal il y a 11 ans 11 mois #4638

  • regis
  • Portrait de regis
  • Hors ligne
  • Administrateur
  • Messages : 2046
  • Remerciements reçus 91
  • Karma: 140
as-tu une demo pour voir comment ca fonctionne car je ne vois pas comment ca peut fonctionner ?
L'administrateur a désactivé l'accès en écriture pour le public.

Re: Insertion de ligne dans propal il y a 11 ans 11 mois #4641

  • henri
  • Portrait de henri
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 = $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
L'administrateur a désactivé l'accès en écriture pour le public.