From ebfd5537597ab850d062428783645737f8dc00ed Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Sat, 27 May 2006 10:14:33 +0000 Subject: [PATCH] =?UTF-8?q?Ajout=20fl=E8ches=20d'ordonnancement=20des=20pr?= =?UTF-8?q?oduits=20sur=20les=20commandes=20et=20les=20propales?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/comm/propal.php | 4 +- htdocs/commande/commande.class.php | 126 ++++++++++++++++++++++++++++- htdocs/commande/fiche.php | 35 +++++++- htdocs/propal.class.php | 126 ++++++++++++++++++++++++++++- mysql/migration/2.0.0-2.1.0.sql | 3 + mysql/tables/llx_commandedet.sql | 3 +- mysql/tables/llx_propaldet.sql | 4 +- 7 files changed, 291 insertions(+), 10 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index e27a7f69b84..1d0ccf5953e 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -947,13 +947,13 @@ if ($_GET['propalid'] > 0) print ''; if ($i > 0) { - print 'rowid.'">'; + print 'rowid.'">'; print img_up(); print ''; } if ($i < $num_lignes-1) { - print 'rowid.'">'; + print 'rowid.'">'; print img_down(); print ''; } diff --git a/htdocs/commande/commande.class.php b/htdocs/commande/commande.class.php index ac8565a890b..8029dc8d831 100644 --- a/htdocs/commande/commande.class.php +++ b/htdocs/commande/commande.class.php @@ -635,6 +635,130 @@ class Commande **/ } } + + /** + * \brief Stocke un numéro de rang pour toutes les lignes de + * detail d'une commande qui n'en ont pas. + */ + function line_order() + { + $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.'commandedet'; + $sql .= ' WHERE fk_commande='.$this->id; + $sql .= ' AND rang = 0'; + $resql = $this->db->query($sql); + if ($resql) + { + $row = $this->db->fetch_row($resql); + $nl = $row[0]; + } + if ($nl > 0) + { + $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'commandedet'; + $sql .= ' WHERE fk_commande='.$this->id; + $sql .= ' ORDER BY rang ASC, rowid ASC'; + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $row = $this->db->fetch_row($resql); + $li[$i] = $row[0]; + $i++; + } + } + for ($i = 0 ; $i < sizeof($li) ; $i++) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = '.($i+1); + $sql .= ' WHERE rowid = '.$li[$i]; + if (!$this->db->query($sql) ) + { + dolibarr_syslog($this->db->error()); + } + } + } + } + + function line_up($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 > 1 ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = '.$rang ; + $sql .= ' WHERE fk_commande = '.$this->id; + $sql .= ' AND rang = '.($rang - 1); + if ($this->db->query($sql) ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = '.($rang - 1); + $sql .= ' WHERE rowid = '.$rowid; + if (! $this->db->query($sql) ) + { + dolibarr_print_error($this->db); + } + } + else + { + dolibarr_print_error($this->db); + } + } + } + + function line_down($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]; + } + + /* Lecture du rang max de la facture */ + $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.'commandedet'; + $sql .= ' WHERE fk_commande ='.$this->id; + $resql = $this->db->query($sql); + if ($resql) + { + $row = $this->db->fetch_row($resql); + $max = $row[0]; + } + + if ($rang < $max ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = '.$rang; + $sql .= ' WHERE fk_commande = '.$this->id; + $sql .= ' AND rang = '.($rang+1); + if ($this->db->query($sql) ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commandedet SET rang = '.($rang+1); + $sql .= ' WHERE rowid = '.$rowid; + if (! $this->db->query($sql) ) + { + dolibarr_print_error($this->db); + } + } + else + { + dolibarr_print_error($this->db); + } + } + } /** * Lit une commande @@ -720,7 +844,7 @@ class Commande $sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as l'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product=p.rowid'; $sql.= ' WHERE l.fk_commande = '.$this->id; - $sql.= ' ORDER BY l.rowid'; + $sql.= ' ORDER BY l.rang'; $result = $this->db->query($sql); if ($result) { diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 9d752bef6de..9275e3fd511 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -296,6 +296,22 @@ if ($_GET['action'] == 'modif' && $user->rights->commande->creer) $commande->reopen($user->id); } +/* + * Ordonnancement des lignes + */ + +if ($_GET['action'] == 'up' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->line_up($_GET['rowid']); +} + +if ($_GET['action'] == 'down' && $user->rights->commande->creer) +{ + $commande = new Commande($db); + $commande->line_down($_GET['rowid']); +} + if ($_REQUEST['action'] == 'builddoc') // En get ou en post { /* @@ -1090,13 +1106,24 @@ else print ''; print img_delete(); print ''; - print ' '; + print ''; + if ($i > 0) + { + print 'rowid.'">'; + print img_up(); + print ''; + } + if ($i < $num_lignes-1) + { + print 'rowid.'">'; + print img_down(); + print ''; + } + print ''; } else { - print ' '; - print ' '; - print ' '; + print ' '; } print ''; } diff --git a/htdocs/propal.class.php b/htdocs/propal.class.php index 08089deff75..71809ac3a71 100644 --- a/htdocs/propal.class.php +++ b/htdocs/propal.class.php @@ -548,6 +548,130 @@ class Propal } + /** + * \brief Stocke un numéro de rang pour toutes les lignes de + * detail d'une propale qui n'en ont pas. + */ + function line_order() + { + $sql = 'SELECT count(rowid) FROM '.MAIN_DB_PREFIX.'propaldet'; + $sql .= ' WHERE fk_propal='.$this->id; + $sql .= ' AND rang = 0'; + $resql = $this->db->query($sql); + if ($resql) + { + $row = $this->db->fetch_row($resql); + $nl = $row[0]; + } + if ($nl > 0) + { + $sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'propaldet'; + $sql .= ' WHERE fk_propal='.$this->id; + $sql .= ' ORDER BY rang ASC, rowid ASC'; + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num) + { + $row = $this->db->fetch_row($resql); + $li[$i] = $row[0]; + $i++; + } + } + for ($i = 0 ; $i < sizeof($li) ; $i++) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = '.($i+1); + $sql .= ' WHERE rowid = '.$li[$i]; + if (!$this->db->query($sql) ) + { + dolibarr_syslog($this->db->error()); + } + } + } + } + + function line_up($rowid) + { + $this->line_order(); + + /* Lecture du rang de la ligne */ + $sql = 'SELECT rang 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]; + } + + if ($rang > 1 ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = '.$rang ; + $sql .= ' WHERE fk_propal = '.$this->id; + $sql .= ' AND rang = '.($rang - 1); + if ($this->db->query($sql) ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = '.($rang - 1); + $sql .= ' WHERE rowid = '.$rowid; + if (! $this->db->query($sql) ) + { + dolibarr_print_error($this->db); + } + } + else + { + dolibarr_print_error($this->db); + } + } + } + + function line_down($rowid) + { + $this->line_order(); + + /* Lecture du rang de la ligne */ + $sql = 'SELECT rang 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]; + } + + /* Lecture du rang max de la facture */ + $sql = 'SELECT max(rang) FROM '.MAIN_DB_PREFIX.'propaldet'; + $sql .= ' WHERE fk_propal ='.$this->id; + $resql = $this->db->query($sql); + if ($resql) + { + $row = $this->db->fetch_row($resql); + $max = $row[0]; + } + + if ($rang < $max ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = '.$rang; + $sql .= ' WHERE fk_propal = '.$this->id; + $sql .= ' AND rang = '.($rang+1); + if ($this->db->query($sql) ) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'propaldet SET rang = '.($rang+1); + $sql .= ' WHERE rowid = '.$rowid; + if (! $this->db->query($sql) ) + { + dolibarr_print_error($this->db); + } + } + else + { + dolibarr_print_error($this->db); + } + } + } + /** * \brief Recupère de la base les caractéristiques d'une propale * \param rowid id de la propal à récupérer @@ -653,7 +777,7 @@ class Propal $sql.= " p.rowid, p.label, p.description as product_desc, p.ref"; $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d, ".MAIN_DB_PREFIX."product as p"; $sql.= " WHERE d.fk_propal = ".$this->id ." AND d.fk_product = p.rowid"; - $sql.= " ORDER by d.rowid ASC"; + $sql.= " ORDER by d.rang"; $result = $this->db->query($sql); if ($result) diff --git a/mysql/migration/2.0.0-2.1.0.sql b/mysql/migration/2.0.0-2.1.0.sql index 3733c6bb491..a2ed9720d6f 100644 --- a/mysql/migration/2.0.0-2.1.0.sql +++ b/mysql/migration/2.0.0-2.1.0.sql @@ -203,6 +203,7 @@ ALTER TABLE llx_facture_rec ADD CONSTRAINT fk_facture_rec_fk_projet FORE ALTER TABLE llx_facture_rec ADD UNIQUE INDEX idx_facture_rec_uk_titre (titre); alter table llx_commandedet add column coef real; +alter table llx_propaldet add colmun coef real; create table llx_livraison ( @@ -257,3 +258,5 @@ rename table llx_accountingsystem_det to llx_accountingaccount; insert into llx_rights_def (id, libelle, module, type, bydefault, subperms, perms) values (262,'Consulter tous les clients','commercial','r',1,'voir','client'); insert into llx_user_rights(fk_user,fk_id) select distinct fk_user, '262' from llx_user_rights where fk_id = 261; +alter table llx_commandedet add column rang integer DEFAULT 0; +alter table llx_propaldet add column rang integer DEFAULT 0; \ No newline at end of file diff --git a/mysql/tables/llx_commandedet.sql b/mysql/tables/llx_commandedet.sql index e4c9aa77d2d..0d7623a884c 100644 --- a/mysql/tables/llx_commandedet.sql +++ b/mysql/tables/llx_commandedet.sql @@ -32,5 +32,6 @@ create table llx_commandedet remise real DEFAULT 0, -- montant de la remise subprice real, -- prix avant remise price real, -- prix final - coef real -- coefficient de marge + coef real, -- coefficient de marge + rang integer DEFAULT 0 )type=innodb; diff --git a/mysql/tables/llx_propaldet.sql b/mysql/tables/llx_propaldet.sql index 8614512b7c1..c7dfbb218db 100644 --- a/mysql/tables/llx_propaldet.sql +++ b/mysql/tables/llx_propaldet.sql @@ -30,5 +30,7 @@ create table llx_propaldet remise_percent real DEFAULT 0, -- pourcentage de remise remise real DEFAULT 0, -- montant de la remise subprice real, -- prix avant remise - price real -- prix final + price real, -- prix final + coef real, -- coefficient de marge + rang integer DEFAULT 0 )type=innodb;