2005-09-15 02:37:03 +02:00
< ? php
/* Copyright ( C ) 2003 - 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2006-06-01 01:22:52 +02:00
* Copyright ( C ) 2004 - 2006 Laurent Destailleur < eldy @ users . sourceforge . net >
2006-02-12 09:54:15 +01:00
* Copyright ( C ) 2005 - 2006 Regis Houssin < regis . houssin @ cap - networks . com >
* Copyright ( C ) 2006 Andre Cianfarani < acianfa @ free . fr >
2005-09-15 02:37:03 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*
* $Id $
* $Source $
*/
2005-10-18 21:56:29 +02:00
2005-09-15 02:37:03 +02:00
/**
\file htdocs / commande / commande . class . php
\ingroup commande
\brief Fichier des classes de commandes
\version $Revision $
*/
2005-10-18 21:56:29 +02:00
2005-09-11 18:51:41 +02:00
require_once ( DOL_DOCUMENT_ROOT . " /product.class.php " );
2006-05-09 21:08:35 +02:00
require_once ( DOL_DOCUMENT_ROOT . " /contact.class.php " );
2005-09-15 02:37:03 +02:00
2006-03-20 17:57:06 +01:00
2005-09-15 02:37:03 +02:00
/**
\class Commande
\brief Classe de gestion de commande
*/
class Commande
{
var $db ;
var $id ;
2006-02-09 14:12:14 +01:00
var $socidp ;
2006-03-18 20:58:33 +01:00
var $contactid ;
2006-05-27 15:13:44 +02:00
var $projet_id ;
2006-05-20 11:19:20 +02:00
var $statut ;
var $facturee ;
2005-09-15 02:37:03 +02:00
var $brouillon ;
2006-02-16 15:25:57 +01:00
var $cond_reglement_id ;
var $cond_reglement_code ;
var $mode_reglement_id ;
var $mode_reglement_code ;
2006-04-21 17:49:50 +02:00
var $adresse_livraison_id ;
2006-04-29 17:09:44 +02:00
var $date ; // Date commande
var $date_livraison ; // Date livraison souhait<69> e
2006-06-01 01:22:52 +02:00
var $remise_percent ;
var $remise_absolue ;
2005-09-15 02:37:03 +02:00
// Pour board
var $nbtodo ;
var $nbtodolate ;
/**
* \brief Constructeur
* \param DB Handler d ' acc<EFBFBD> s base
*/
2006-05-27 13:01:04 +02:00
function Commande ( $DB , $soc_idp = " " , $commandeid = 0 )
2005-09-15 02:37:03 +02:00
{
global $langs ;
$langs -> load ( 'orders' );
$this -> db = $DB ;
2006-05-27 13:01:04 +02:00
$this -> socidp = $soc_idp ;
2006-06-01 01:22:52 +02:00
$this -> id = $commandeid ;
2006-03-18 20:58:33 +01:00
2005-09-15 02:37:03 +02:00
$this -> sources [ 0 ] = $langs -> trans ( 'OrderSource0' );
$this -> sources [ 1 ] = $langs -> trans ( 'OrderSource1' );
$this -> sources [ 2 ] = $langs -> trans ( 'OrderSource2' );
$this -> sources [ 3 ] = $langs -> trans ( 'OrderSource3' );
$this -> sources [ 4 ] = $langs -> trans ( 'OrderSource4' );
$this -> sources [ 5 ] = $langs -> trans ( 'OrderSource5' );
2006-03-18 20:58:33 +01:00
2006-04-29 17:09:44 +02:00
$this -> remise = 0 ;
$this -> remise_percent = 0 ;
2005-09-15 02:37:03 +02:00
$this -> products = array ();
}
2005-12-10 00:22:24 +01:00
/** \brief Cr<EFBFBD> <EFBFBD> la commande depuis une propale existante
\param user Utilisateur qui cr<EFBFBD> e
\param propale_id id de la propale qui sert de mod<EFBFBD> le
*/
2005-09-15 02:37:03 +02:00
function create_from_propale ( $user , $propale_id )
{
$propal = new Propal ( $this -> db );
$propal -> fetch ( $propale_id );
$this -> lines = array ();
$this -> date_commande = time ();
$this -> source = 0 ;
for ( $i = 0 ; $i < sizeof ( $propal -> lignes ) ; $i ++ )
{
$CommLigne = new CommandeLigne ();
2006-02-16 16:36:42 +01:00
$CommLigne -> libelle = $propal -> lignes [ $i ] -> libelle ;
$CommLigne -> description = $propal -> lignes [ $i ] -> desc ;
$CommLigne -> price = $propal -> lignes [ $i ] -> subprice ;
$CommLigne -> subprice = $propal -> lignes [ $i ] -> subprice ;
$CommLigne -> tva_tx = $propal -> lignes [ $i ] -> tva_tx ;
$CommLigne -> qty = $propal -> lignes [ $i ] -> qty ;
$CommLigne -> remise_percent = $propal -> lignes [ $i ] -> remise_percent ;
$CommLigne -> product_id = $propal -> lignes [ $i ] -> product_id ;
2005-09-15 02:37:03 +02:00
$this -> lines [ $i ] = $CommLigne ;
}
2006-05-26 20:07:26 +02:00
$this -> soc_id = $propal -> soc_id ;
$this -> projetid = $propal -> projetidp ;
$this -> cond_reglement_id = $propal -> cond_reglement_id ;
$this -> mode_reglement_id = $propal -> mode_reglement_id ;
$this -> date_livraison = $propal -> date_livraison ;
2006-04-24 18:00:18 +02:00
$this -> adresse_livraison_id = $propal -> adresse_livraison_id ;
2006-06-08 17:53:39 +02:00
$this -> contact_id = $propal -> contactid ;
2006-02-16 19:38:07 +01:00
2005-09-15 02:37:03 +02:00
/* D<> finit la soci<63> t<EFBFBD> comme un client */
$soc = new Societe ( $this -> db );
$soc -> id = $this -> soc_id ;
$soc -> set_as_client ();
$this -> propale_id = $propal -> id ;
2005-12-10 00:22:24 +01:00
2005-09-15 02:37:03 +02:00
return $this -> create ( $user );
}
/** \brief Valide la commande
\param user Utilisateur qui valide
*/
function valid ( $user )
{
$result = 0 ;
2006-03-20 17:57:06 +01:00
global $conf ;
2005-09-15 02:37:03 +02:00
if ( $user -> rights -> commande -> valider )
{
if ( defined ( 'COMMANDE_ADDON' ))
{
if ( is_readable ( DOL_DOCUMENT_ROOT . '/includes/modules/commande/' . COMMANDE_ADDON . '.php' ))
{
require_once DOL_DOCUMENT_ROOT . '/includes/modules/commande/' . COMMANDE_ADDON . '.php' ;
// Definition du nom de module de numerotation de commande
// \todo Normer le nom des classes des modules de num<75> rotation de ref de commande avec un nom du type NumRefCommandesXxxx
//
//$list=split('_',COMMANDE_ADDON);
//$numrefname=$list[2];
//$modName = 'NumRefCommandes'.ucfirst($numrefname);
$modName = COMMANDE_ADDON ;
// Recuperation de la nouvelle reference
$objMod = new $modName ( $this -> db );
$soc = new Societe ( $this -> db );
$soc -> fetch ( $this -> soc_id );
2006-05-03 12:04:19 +02:00
// on v<> rifie si la commande est en num<75> rotation provisoire
$comref = substr ( $this -> ref , 1 , 4 );
if ( $comref == PROV )
{
$num = $objMod -> commande_get_num ( $soc );
}
else
{
2006-05-03 12:05:11 +02:00
$num = $this -> ref ;
2006-05-03 12:04:19 +02:00
}
2005-09-15 02:37:03 +02:00
$sql = 'UPDATE ' . MAIN_DB_PREFIX . " commande SET ref=' $num ', fk_statut = 1, date_valid=now(), fk_user_valid= $user->id " ;
$sql .= " WHERE rowid = $this->id AND fk_statut = 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
2006-05-31 12:33:05 +02:00
// On efface le r<> pertoire de pdf provisoire
$comref = sanitize_string ( $this -> ref );
if ( $conf -> commande -> dir_output )
{
$dir = $conf -> commande -> dir_output . " / " . $comref ;
2006-05-31 12:43:59 +02:00
$file = $conf -> commande -> dir_output . " / " . $comref . " / " . $comref . " .pdf " ;
if ( file_exists ( $file ))
2006-05-31 12:33:05 +02:00
{
2006-05-31 12:43:59 +02:00
if ( ! dol_delete_file ( $file ))
2006-05-31 12:33:05 +02:00
{
2006-05-31 13:41:39 +02:00
$this -> error = $langs -> trans ( " ErrorCanNotDeleteFile " , $file );
2006-05-31 12:33:05 +02:00
return 0 ;
}
}
2006-05-31 12:43:59 +02:00
if ( file_exists ( $dir ))
{
if ( ! dol_delete_dir ( $dir ))
{
$this -> error = $langs -> trans ( " ErrorCanNotDeleteDir " , $dir );
return 0 ;
}
}
}
2006-05-31 12:33:05 +02:00
$result = 1 ;
2005-09-15 02:37:03 +02:00
}
else
{
$result = - 1 ;
dolibarr_print_error ( $this -> db );
}
}
else
{
print 'Impossible de lire le module de num<75> rotation' ;
}
}
else
{
print 'Le module de num<75> rotation n\'est pas d<> fini' ;
}
}
return $result ;
}
2006-04-29 15:30:21 +02:00
/**
*
*
*/
function reopen ( $userid )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET fk_statut = 0 " ;
$sql .= " WHERE rowid = $this->id ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
}
}
2005-09-15 02:37:03 +02:00
/**
* \brief Cloture la commande
* \param user Objet utilisateur qui cloture
* \return int < 0 si ko , > 0 si ok
*/
function cloture ( $user )
{
2006-03-20 17:57:06 +01:00
global $conf ;
2005-09-15 02:37:03 +02:00
if ( $user -> rights -> commande -> valider )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= ' SET fk_statut = 3,' ;
$sql .= ' fk_user_cloture = ' . $user -> id . ',' ;
$sql .= ' date_cloture = now()' ;
$sql .= " WHERE rowid = $this->id AND fk_statut > 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
2006-03-20 17:57:06 +01:00
if ( $conf -> stock -> enabled && $conf -> global -> PRODUIT_SOUSPRODUITS == 1 )
{
require_once ( DOL_DOCUMENT_ROOT . " /product/stock/mouvementstock.class.php " );
for ( $i = 0 ; $i < sizeof ( $this -> lignes ) ; $i ++ )
{
$prod = new Product ( $this -> db , $this -> lignes [ $i ] -> product_id );
$prod -> get_sousproduits_arbo ();
$prods_arbo = $prod -> get_each_prod ();
if ( sizeof ( $prods_arbo ) > 0 )
{
foreach ( $prods_arbo as $key => $value )
{
2006-03-21 10:08:35 +01:00
// on d<> compte le stock de tous les sousproduits
2006-03-20 17:57:06 +01:00
$mouvS = new MouvementStock ( $this -> db );
$entrepot_id = " 1 " ;
2006-03-21 10:08:35 +01:00
$result = $mouvS -> livraison ( $user , $value [ 1 ], $entrepot_id , $value [ 0 ]);
2006-03-20 17:57:06 +01:00
}
}
2006-03-21 11:26:12 +01:00
// on d<> compte pas le stock du produit principal, <20> a serait fait manuellement avec l'exp<78> dition
// $result=$mouvS->livraison($user, $this->lignes[$i]->product_id, $entrepot_id, $this->lignes[$i]->qty);
2006-03-20 17:57:06 +01:00
}
}
2005-09-15 02:37:03 +02:00
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
}
/**
* Annule la commande
*
*/
function cancel ( $user )
{
if ( $user -> rights -> commande -> valider )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande SET fk_statut = -1' ;
$sql .= " WHERE rowid = $this->id AND fk_statut = 1 ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
}
}
}
2006-03-18 20:58:33 +01:00
/**
* \brief Cr<EFBFBD> <EFBFBD> la commande
2006-06-01 01:22:52 +02:00
* \param user Objet utilisateur qui cr<EFBFBD> e
2006-03-18 20:58:33 +01:00
*/
2005-09-15 02:37:03 +02:00
function create ( $user )
{
2006-03-18 20:58:33 +01:00
global $conf , $langs ;
// V<> rification param<61> tres
if ( $this -> source < 0 )
{
$this -> error = $langs -> trans ( " ErrorFieldRequired " , $langs -> trans ( " Source " ));
return - 1 ;
}
// On positionne en mode brouillon la commande
2005-09-15 02:37:03 +02:00
$this -> brouillon = 1 ;
2006-05-27 15:04:10 +02:00
2005-09-15 02:37:03 +02:00
if ( ! $remise )
{
$remise = 0 ;
}
2006-05-27 15:04:10 +02:00
2005-09-15 02:37:03 +02:00
if ( ! $this -> projetid )
{
$this -> projetid = 0 ;
}
2006-05-27 15:04:10 +02:00
2006-03-18 20:58:33 +01:00
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'commande (' ;
2006-04-29 17:09:44 +02:00
$sql .= 'fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note, ref_client,' ;
$sql .= ' model_pdf, fk_cond_reglement, fk_mode_reglement, date_livraison, fk_adresse_livraison,' ;
$sql .= ' remise_absolue, remise_percent)' ;
2006-03-18 20:58:33 +01:00
$sql .= ' VALUES (' . $this -> soc_id . ', now(), ' . $user -> id . ', ' . $this -> projetid . ',' ;
$sql .= ' ' . $this -> db -> idate ( $this -> date_commande ) . ',' ;
$sql .= ' ' . $this -> source . ', ' ;
$sql .= " ' " . addslashes ( $this -> note ) . " ', " ;
$sql .= " ' " . $this -> ref_client . " ', ' " . $this -> modelpdf . '\', \'' . $this -> cond_reglement_id . '\', \'' . $this -> mode_reglement_id . '\',' ;
2006-06-01 01:22:52 +02:00
$sql .= ' ' . ( $this -> date_livraison ? $this -> db -> idate ( $this -> date_livraison ) : 'null' ) . ',' ;
2006-04-29 17:09:44 +02:00
$sql .= " ' " . $this -> adresse_livraison_id . " ', " ;
$sql .= " ' " . $this -> remise_absolue . " ', " ;
$sql .= " ' " . $this -> remise_percent . " ') " ;
2006-03-18 20:58:33 +01:00
dolibarr_syslog ( " Commande.class.php::create sql= $sql " );
2005-09-15 02:37:03 +02:00
if ( $this -> db -> query ( $sql ) )
{
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . 'commande' );
/*
* Insertion des produits dans la base
*/
for ( $i = 0 ; $i < sizeof ( $this -> products ) ; $i ++ )
{
$prod = new Product ( $this -> db , $this -> products [ $i ]);
if ( $prod -> fetch ( $this -> products [ $i ]))
{
2006-02-21 13:49:48 +01:00
$this -> soc_id ;
$client = new Societe ( $this -> db );
$client -> fetch ( $this -> soc_id );
if ( $client -> tva_assuj == " 0 " )
$tva_tx = " 0 " ;
else
$tva_tx = $prod -> tva_tx ;
2006-02-03 17:42:39 +01:00
// multiprix
if ( $conf -> global -> PRODUIT_MULTIPRICES == 1 )
{
2006-02-21 13:49:48 +01:00
2006-02-03 17:42:39 +01:00
//$prod->multiprices[$client->price_level]
$this -> insert_product_generic ( $prod -> libelle ,
2006-02-12 10:32:10 +01:00
$prod -> description ,
2006-02-03 17:42:39 +01:00
$prod -> multiprices [ $client -> price_level ],
$this -> products_qty [ $i ],
2006-02-21 13:49:48 +01:00
$tva_tx ,
2006-02-03 17:42:39 +01:00
$this -> products [ $i ],
$this -> products_remise_percent [ $i ]);
}
else
{
$this -> insert_product_generic ( $prod -> libelle ,
2006-02-12 10:32:10 +01:00
$prod -> description ,
2005-09-15 02:37:03 +02:00
$prod -> price ,
$this -> products_qty [ $i ],
2006-02-21 13:49:48 +01:00
$tva_tx ,
2005-09-15 02:37:03 +02:00
$this -> products [ $i ],
$this -> products_remise_percent [ $i ]);
2006-02-03 17:42:39 +01:00
}
2005-09-15 02:37:03 +02:00
}
}
$sql = 'UPDATE ' . MAIN_DB_PREFIX . " commande SET ref='(PROV " . $this -> id . " )' WHERE rowid= " . $this -> id ;
if ( $this -> db -> query ( $sql ))
{
if ( $this -> id && $this -> propale_id )
{
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'co_pr (fk_commande, fk_propale) VALUES (' . $this -> id . ',' . $this -> propale_id . ')' ;
$this -> db -> query ( $sql );
}
/*
* Produits
*
*/
for ( $i = 0 ; $i < sizeof ( $this -> lines ) ; $i ++ )
{
$result_insert = $this -> insert_product_generic (
$this -> lines [ $i ] -> libelle ,
2006-02-12 10:32:10 +01:00
$this -> lines [ $i ] -> description ,
2005-09-15 02:37:03 +02:00
$this -> lines [ $i ] -> price ,
$this -> lines [ $i ] -> qty ,
$this -> lines [ $i ] -> tva_tx ,
$this -> lines [ $i ] -> product_id ,
$this -> lines [ $i ] -> remise_percent );
if ( $result_insert < 0 )
{
dolibarr_print_error ( $this -> db );
}
}
return $this -> id ;
}
else
{
return - 1 ;
}
}
else
{
dolibarr_print_error ( $this -> db );
return 0 ;
}
}
/**
* Ajoute un produit
*
*/
2006-02-12 10:32:10 +01:00
function insert_product_generic ( $p_desc , $p_product_desc , $p_price , $p_qty , $p_tva_tx = 19.6 , $p_product_id = 0 , $remise_percent = 0 )
2005-09-15 02:37:03 +02:00
{
2006-02-12 11:36:29 +01:00
global $conf ;
2005-09-15 02:37:03 +02:00
if ( $this -> statut == 0 )
{
if ( strlen ( trim ( $p_qty )) == 0 )
{
$p_qty = 1 ;
}
$p_price = ereg_replace ( ',' , '.' , $p_price );
$price = $p_price ;
$subprice = $p_price ;
if ( $remise_percent > 0 )
{
$remise = round (( $p_price * $remise_percent / 100 ), 2 );
$price = $p_price - $remise ;
}
2006-02-12 10:32:10 +01:00
2006-02-12 20:55:29 +01:00
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'commandedet (fk_commande, fk_product, qty, price, tva_tx, label, description, remise_percent, subprice) VALUES ' ;
2006-02-13 17:42:11 +01:00
$sql .= " (' " . $this -> id . " ', ' $p_product_id ',' " . $p_qty . " ',' " . price2num ( $price ) . " ',' " . $p_tva_tx . " ',' " . addslashes ( $p_desc ) . " ',' " . addslashes ( $p_product_desc ) . " ', ' $remise_percent ', ' $subprice ') ; " ;
2006-02-12 20:55:29 +01:00
2006-02-13 17:42:11 +01:00
// Bugfix
/*
2006-05-22 00:34:15 +02:00
if ( $conf -> global -> PRODUIT_CHANGE_PROD_DESC )
2006-02-12 20:55:29 +01:00
{
2006-02-13 15:13:44 +01:00
$sql .= " (' " . $this -> id . " ', ' $p_product_id ',' " . $p_qty . " ',' " . price2num ( $price ) . " ',' " . $p_tva_tx . " ',' " . addslashes ( $p_desc ) . " ',' " . addslashes ( $p_product_desc ) . " ', ' $remise_percent ', ' $subprice ') ; " ;
2006-02-12 20:55:29 +01:00
}
else
{
2006-02-13 17:42:11 +01:00
$sql .= " (' " . $this -> id . " ', ' $p_product_id ',' " . $p_qty . " ',' " . price2num ( $price ) . " ',' " . $p_tva_tx . " ',' " . addslashes ( $p_desc ) . " ',' " . addslashes ( $p_product_desc ) . " ', ' $remise_percent ', ' $subprice ') ; " ;
2006-02-12 20:55:29 +01:00
}
2006-02-13 17:42:11 +01:00
*/
2006-02-12 20:55:29 +01:00
2005-09-15 02:37:03 +02:00
if ( $this -> db -> query ( $sql ) )
{
if ( $this -> update_price () > 0 )
{
2006-03-20 16:53:57 +01:00
2005-09-15 02:37:03 +02:00
return 1 ;
}
else
{
return - 1 ;
}
}
else
{
dolibarr_print_error ( $this -> db );
return - 2 ;
}
}
}
2006-06-07 23:03:19 +02:00
/**
* Ajoute une ligne de commande
*
*/
2006-02-11 18:18:48 +01:00
function addline ( $desc , $product_desc , $pu , $qty , $txtva , $fk_product = 0 , $remise_percent = 0 )
2005-09-15 02:37:03 +02:00
{
2006-02-03 17:42:39 +01:00
global $conf ;
2005-09-15 02:37:03 +02:00
// Nettoyage parametres
2006-06-07 23:03:19 +02:00
$qty = price2num ( $qty );
$pu = price2num ( $pu );
2005-09-15 02:37:03 +02:00
$desc = trim ( $desc );
2006-02-11 18:53:56 +01:00
$product_desc = trim ( $product_desc );
2005-09-15 02:37:03 +02:00
if ( strlen ( trim ( $qty )) == 0 )
{
$qty = 1 ;
}
2006-06-07 23:03:19 +02:00
2005-09-15 02:37:03 +02:00
// Verifs
if ( ! $this -> brouillon ) return - 1 ;
2006-06-07 23:03:19 +02:00
2005-09-15 02:37:03 +02:00
$this -> db -> begin ();
2006-06-07 23:03:19 +02:00
2005-09-15 02:37:03 +02:00
if ( $fk_product > 0 )
{
$prod = new Product ( $this -> db , $fk_product );
if ( $prod -> fetch ( $fk_product ) > 0 )
{
2006-02-11 18:36:14 +01:00
$desc = $desc ? $desc : $prod -> libelle ;
2006-02-12 21:05:55 +01:00
$product_desc = $prod -> description ;
2006-02-21 13:49:48 +01:00
$client = new Societe ( $this -> db );
2006-06-07 23:03:19 +02:00
$client -> fetch ( $this -> soc_id );
2006-02-21 13:49:48 +01:00
if ( $client -> tva_assuj == " 0 " )
2006-06-07 23:03:19 +02:00
$txtva = " 0 " ;
2006-02-21 13:49:48 +01:00
else
2006-06-07 23:03:19 +02:00
$txtva = $prod -> tva_tx ;
2006-02-03 17:42:39 +01:00
// multiprix
if ( $conf -> global -> PRODUIT_MULTIPRICES == 1 )
{
2006-06-07 23:03:19 +02:00
$pu = $prod -> multiprices [ $client -> price_level ];
2006-02-03 17:42:39 +01:00
}
else
2006-06-07 23:03:19 +02:00
$pu = $prod -> price ;
2005-09-15 02:37:03 +02:00
}
}
$remise = 0 ;
2006-06-07 23:03:19 +02:00
$price = round ( price2num ( $pu ), 2 );
2005-09-15 02:37:03 +02:00
$subprice = $price ;
2006-06-07 23:03:19 +02:00
2005-09-15 02:37:03 +02:00
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'commandedet (fk_commande,label,description,fk_product, price,qty,tva_tx, remise_percent, subprice, remise)' ;
2006-05-22 00:34:15 +02:00
if ( $conf -> global -> PRODUIT_CHANGE_PROD_DESC )
2006-06-07 23:03:19 +02:00
{
$sql .= " VALUES ( $this->id , ' " . addslashes ( $desc ) . " ',' " . addslashes ( $product_desc ) . " ', $fk_product , " . price2num ( $price ) . " , ' $qty ', $txtva , $remise_percent ,' " . price2num ( $subprice ) . " ',' " . price2num ( $remise ) . " ') ; " ;
}
else
{
$sql .= " VALUES ( $this->id , ' " . addslashes ( $desc ) . " ',' " . addslashes ( $desc ) . " ', $fk_product , " . price2num ( $price ) . " , ' $qty ', $txtva , $remise_percent ,' " . price2num ( $subprice ) . " ',' " . price2num ( $remise ) . " ') ; " ;
}
2005-09-15 02:37:03 +02:00
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ();
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
$this -> db -> rollback ();
return - 1 ;
}
}
2006-02-12 10:05:42 +01:00
/**
* Ajoute une ligne de commande libre
*
*/
function addline_libre ( $desc , $pu , $qty , $txtva , $fk_product = 0 , $remise_percent = 0 )
{
global $conf ;
// Nettoyage parametres
$qty = ereg_replace ( ',' , '.' , $qty );
$pu = ereg_replace ( ',' , '.' , $pu );
$desc = trim ( $desc );
if ( strlen ( trim ( $qty )) == 0 )
{
$qty = 1 ;
}
// Verifs
if ( ! $this -> brouillon ) return - 1 ;
$this -> db -> begin ();
$remise = 0 ;
$price = round ( ereg_replace ( ',' , '.' , $pu ), 2 );
$subprice = $price ;
2006-06-01 19:57:42 +02:00
// appliquait la remise 2 fois : sur la ligne et le HT
/*
2006-02-12 10:05:42 +01:00
if ( trim ( strlen ( $remise_percent )) > 0 )
{
$remise = round (( $pu * $remise_percent / 100 ), 2 );
$price = $pu - $remise ;
}
2006-06-01 19:57:42 +02:00
*/
2006-02-12 10:05:42 +01:00
$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . 'commandedet (fk_commande,label,description,fk_product, price,qty,tva_tx, remise_percent, subprice, remise)' ;
2006-02-21 13:49:48 +01:00
$sql .= " VALUES ( $this->id , ' " . addslashes ( $desc ) . " ',' " . addslashes ( $desc ) . " ',' $fk_product ', " . price2num ( $price ) . " , ' $qty ', ' $txtva ', $remise_percent ,' " . price2num ( $subprice ) . " ',' " . price2num ( $remise ) . " ') ; " ;
2006-02-25 15:34:25 +01:00
2006-02-12 10:05:42 +01:00
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ();
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
$this -> db -> rollback ();
return - 1 ;
}
}
2005-09-15 02:37:03 +02:00
/**
* Ajoute un produit dans la commande
*
*/
function add_product ( $idproduct , $qty , $remise_percent = 0 )
{
2006-03-20 16:53:57 +01:00
global $conf ;
2005-09-15 02:37:03 +02:00
if ( $idproduct > 0 )
{
$i = sizeof ( $this -> products );
$this -> products [ $i ] = $idproduct ;
if ( ! $qty )
{
$qty = 1 ;
}
$this -> products_qty [ $i ] = $qty ;
$this -> products_remise_percent [ $i ] = $remise_percent ;
2006-03-20 16:53:57 +01:00
/** POUR AJOUTER AUTOMATIQUEMENT LES SOUSPRODUITS <EFBFBD> LA COMMANDE
if ( $conf -> global -> PRODUIT_SOUSPRODUITS == 1 )
{
$prod = new Product ( $this -> db , $idproduct );
$prod -> get_sousproduits_arbo ();
$prods_arbo = $prod -> get_each_prod ();
if ( sizeof ( $prods_arbo ) > 0 )
{
foreach ( $prods_arbo as $key => $value )
{
// print "id : ".$value[1].' :qty: '.$value[0].'<br>';
if ( ! in_array ( $value [ 1 ], $this -> products ))
$this -> add_product ( $value [ 1 ], $value [ 0 ]);
}
}
}
**/
2005-09-15 02:37:03 +02:00
}
}
2006-05-27 12:14:33 +02:00
/**
* \brief Stocke un num<EFBFBD> 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 );
}
}
}
2005-09-15 02:37:03 +02:00
/**
* Lit une commande
*
*/
2006-02-09 13:49:02 +01:00
function fetch ( $id )
2005-09-15 02:37:03 +02:00
{
2006-04-29 17:09:44 +02:00
$sql = 'SELECT c.rowid, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva, c.fk_cond_reglement, c.fk_mode_reglement,' ;
$sql .= ' ' . $this -> db -> pdate ( 'c.date_commande' ) . ' as date_commande, ' . $this -> db -> pdate ( 'c.date_livraison' ) . ' as date_livraison,' ;
2006-05-25 22:07:09 +02:00
$sql .= ' c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as facturee, c.note, c.note_public, c.ref_client, c.model_pdf, c.fk_adresse_livraison' ;
2006-04-29 17:09:44 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commande as c' ;
$sql .= ' WHERE c.rowid = ' . $id ;
2005-09-15 02:37:03 +02:00
$result = $this -> db -> query ( $sql ) ;
if ( $result )
{
$obj = $this -> db -> fetch_object ();
2006-04-21 17:16:34 +02:00
$this -> id = $obj -> rowid ;
$this -> ref = $obj -> ref ;
$this -> ref_client = $obj -> ref_client ;
$this -> soc_id = $obj -> fk_soc ;
2006-05-09 21:08:35 +02:00
$this -> socidp = $obj -> fk_soc ;
2006-04-21 17:16:34 +02:00
$this -> statut = $obj -> fk_statut ;
$this -> user_author_id = $obj -> fk_user_author ;
$this -> total_ht = $obj -> total_ht ;
$this -> total_tva = $obj -> tva ;
$this -> total_ttc = $obj -> total_ttc ;
$this -> date = $obj -> date_commande ;
2006-05-15 17:31:52 +02:00
$this -> remise = $obj -> remise ;
2006-04-21 17:16:34 +02:00
$this -> remise_percent = $obj -> remise_percent ;
2006-04-29 17:09:44 +02:00
$this -> remise_absolue = $obj -> remise_absolue ;
2006-04-21 17:16:34 +02:00
$this -> source = $obj -> source ;
2006-05-25 22:07:09 +02:00
$this -> facturee = $obj -> facturee ;
2006-04-21 17:16:34 +02:00
$this -> note = $obj -> note ;
2006-05-25 17:34:22 +02:00
$this -> note_public = $obj -> note_public ;
2006-04-21 17:16:34 +02:00
$this -> projet_id = $obj -> fk_projet ;
$this -> modelpdf = $obj -> model_pdf ;
$this -> cond_reglement_id = $obj -> fk_cond_reglement ;
$this -> mode_reglement_id = $obj -> fk_mode_reglement ;
$this -> date_livraison = $obj -> date_livraison ;
$this -> adresse_livraison_id = $obj -> fk_adresse_livraison ;
2006-02-08 16:13:50 +01:00
2005-09-15 02:37:03 +02:00
$this -> db -> free ();
2006-05-09 21:01:20 +02:00
if ( $this -> cond_reglement_id )
{
$sql = " SELECT rowid, libelle, code " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " cond_reglement " ;
$sql .= " WHERE rowid = " . $this -> cond_reglement_id ;
$resqlcond = $this -> db -> query ( $sql );
if ( $resqlcond )
{
$objc = $this -> db -> fetch_object ( $resqlcond );
$this -> cond_reglement = $objc -> libelle ;
$this -> cond_reglement_code = $objc -> code ;
}
}
2006-05-09 21:04:01 +02:00
if ( $this -> user_author_id )
{
$sql = " SELECT name, firstname " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " user " ;
$sql .= " WHERE rowid = " . $this -> user_author_id ;
$resqluser = $this -> db -> query ( $sql );
if ( $resqluser )
{
$obju = $this -> db -> fetch_object ( $resqluser );
$this -> user_author_name = $obju -> name ;
$this -> user_author_firstname = $obju -> firstname ;
}
}
2006-05-09 21:01:20 +02:00
2005-09-15 02:37:03 +02:00
if ( $this -> statut == 0 )
$this -> brouillon = 1 ;
2006-02-08 16:13:50 +01:00
// exp pdf -----------
$this -> lignes = array ();
2006-05-03 17:38:51 +02:00
$sql = 'SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice, l.coef,' ;
2006-02-13 18:38:21 +01:00
$sql .= ' p.label, p.description as product_desc, p.ref, p.fk_product_type, p.rowid as prodid' ;
2006-02-08 16:13:50 +01:00
$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 ;
2006-05-27 12:14:33 +02:00
$sql .= ' ORDER BY l.rang' ;
2006-02-08 16:13:50 +01:00
$result = $this -> db -> query ( $sql );
if ( $result )
{
$num = $this -> db -> num_rows ( $result );
$i = 0 ;
while ( $i < $num )
{
$objp = $this -> db -> fetch_object ( $result );
$ligne = new CommandeLigne ();
$ligne -> desc = $objp -> description ; // Description ligne
$ligne -> qty = $objp -> qty ;
$ligne -> tva_tx = $objp -> tva_tx ;
$ligne -> subprice = $objp -> subprice ;
$ligne -> remise_percent = $objp -> remise_percent ;
$ligne -> price = $objp -> price ;
2006-02-12 06:23:39 +01:00
$ligne -> product_id = $objp -> fk_product ;
2006-05-03 17:38:51 +02:00
$ligne -> coef = $objp -> coef ;
2006-02-08 16:13:50 +01:00
$ligne -> libelle = $objp -> label ; // Label produit
$ligne -> product_desc = $objp -> product_desc ; // Description produit
$ligne -> ref = $objp -> ref ;
$this -> lignes [ $i ] = $ligne ;
//dolibarr_syslog("1 ".$ligne->desc);
//dolibarr_syslog("2 ".$ligne->product_desc);
$i ++ ;
}
$this -> db -> free ( $result );
}
else
{
dolibarr_syslog ( " Propal::Fetch Erreur lecture des produits " );
return - 1 ;
}
// -------- exp pdf //
2006-06-01 17:44:30 +02:00
2005-09-15 02:37:03 +02:00
/*
* Propale associ<EFBFBD> e
*/
2006-06-01 17:44:30 +02:00
$sql = 'SELECT cp.fk_propale' ;
2006-06-01 18:20:35 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'co_pr as cp' ;
$sql .= ' WHERE cp.fk_commande = ' . $this -> id ;
2005-09-15 02:37:03 +02:00
if ( $this -> db -> query ( $sql ) )
{
if ( $this -> db -> num_rows ())
{
$obj = $this -> db -> fetch_object ();
$this -> propale_id = $obj -> fk_propale ;
}
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
else
{
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
2006-02-09 14:35:26 +01:00
/*
*
*
*
*/
function set_pdf_model ( $user , $modelpdf )
{
if ( $user -> rights -> commande -> creer )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET model_pdf = ' $modelpdf ' " ;
2006-06-02 18:29:49 +02:00
$sql .= " WHERE rowid = $this->id AND fk_statut < 2 ; " ;
2006-02-09 14:35:26 +01:00
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
return 0 ;
}
}
}
2005-09-15 02:37:03 +02:00
/**
*
*
*/
function fetch_lignes ( $only_product = 0 )
{
$this -> lignes = array ();
2006-05-31 10:09:02 +02:00
$sql = 'SELECT l.fk_product, l.fk_commande, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice' ;
2005-09-15 02:37:03 +02:00
if ( $only_product == 1 )
{
2006-05-30 21:14:33 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commandedet as l' ;
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'product as p ON (p.rowid = l.fk_product)' ;
$sql .= ' WHERE l.fk_commande = ' . $this -> id ;
$sql .= ' AND p.fk_product_type <> 1' ;
$sql .= ' ORDER BY l.rowid' ;
2005-09-15 02:37:03 +02:00
}
else
{
2006-05-30 21:14:33 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commandedet as l' ;
$sql .= ' WHERE l.fk_commande = ' . $this -> id ;
$sql .= ' ORDER BY l.rowid' ;
2005-09-15 02:37:03 +02:00
}
$result = $this -> db -> query ( $sql );
if ( $result )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
$ligne = new CommandeLigne ();
$objp = $this -> db -> fetch_object ( $result );
$ligne -> id = $objp -> rowid ;
2006-05-31 10:09:02 +02:00
$ligne -> commande_id = $objp -> fk_commande ;
2005-09-15 02:37:03 +02:00
$ligne -> qty = $objp -> qty ;
$ligne -> price = $objp -> price ;
$ligne -> tva_tx = $objp -> tva_tx ;
$ligne -> subprice = $objp -> subprice ;
$ligne -> remise_percent = $objp -> remise_percent ;
$ligne -> product_id = $objp -> fk_product ;
$ligne -> description = stripslashes ( $objp -> description );
$this -> lignes [ $i ] = $ligne ;
$i ++ ;
}
$this -> db -> free ();
}
return $this -> lignes ;
}
2006-05-09 20:42:48 +02:00
/**
*
*
*/
2006-05-09 20:50:40 +02:00
function fetch_client ()
{
$client = new Societe ( $this -> db );
$client -> fetch ( $this -> socidp );
$this -> client = $client ;
}
/**
*
*
*/
2006-05-09 20:42:48 +02:00
function fetch_adresse_livraison ( $id )
{
$idadresse = $id ;
$adresse = new Societe ( $this -> db );
$adresse -> fetch_adresse_livraison ( $idadresse );
$this -> adresse = $adresse ;
}
/**
*
*
*/
function fetch_contact_commande ( $id )
{
$idcontact = $id ;
$contact = new Contact ( $this -> db );
$contact -> fetch ( $idcontact );
$this -> contact = $contact ;
}
2006-01-14 14:44:06 +01:00
/**
2006-05-29 15:53:20 +02:00
* \brief Renvoie un tableau avec les exp<EFBFBD> ditions par ligne
2006-01-14 14:44:06 +01:00
* \param filtre_statut Filtre sur statut
* \return int 0 si OK , < 0 si KO
*/
2006-05-29 15:53:20 +02:00
function expedition_array ( $filtre_statut =- 1 )
2005-09-15 02:37:03 +02:00
{
$this -> livraisons = array ();
$sql = 'SELECT fk_product, sum(ed.qty)' ;
2006-01-14 14:44:06 +01:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'expeditiondet as ed, ' . MAIN_DB_PREFIX . 'expedition as e, ' . MAIN_DB_PREFIX . 'commande as c, ' . MAIN_DB_PREFIX . 'commandedet as cd' ;
$sql .= ' WHERE ed.fk_expedition = e.rowid AND ed.fk_commande_ligne = cd .rowid AND cd.fk_commande = c.rowid' ;
$sql .= ' AND cd.fk_commande =' . $this -> id ;
if ( $filtre_statut >= 0 ) $sql .= ' AND e.fk_statut = ' . $filtre_statut ;
2005-09-15 02:37:03 +02:00
$sql .= ' GROUP BY fk_product ' ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
$row = $this -> db -> fetch_row ( $i );
2006-05-29 15:53:20 +02:00
$this -> expeditions [ $row [ 0 ]] = $row [ 1 ];
2005-09-15 02:37:03 +02:00
$i ++ ;
}
$this -> db -> free ();
}
2006-01-14 14:44:06 +01:00
return 0 ;
2005-09-15 02:37:03 +02:00
}
2006-01-14 14:44:06 +01:00
2005-09-15 02:37:03 +02:00
/**
2006-05-29 15:53:20 +02:00
* Renvoie un tableau avec les expeditions par ligne
2005-09-15 02:37:03 +02:00
*
*/
function nb_expedition ()
{
$sql = 'SELECT count(*) FROM ' . MAIN_DB_PREFIX . 'expedition as e' ;
$sql .= " WHERE e.fk_commande = $this->id " ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$row = $this -> db -> fetch_row ( 0 );
return $row [ 0 ];
}
}
2006-05-29 15:53:20 +02:00
/**
* \brief Renvoie un tableau avec les livraisons par ligne
* \param filtre_statut Filtre sur statut
* \return int 0 si OK , < 0 si KO
*/
function livraison_array ( $filtre_statut =- 1 )
{
$this -> livraisons = array ();
$sql = 'SELECT cd.fk_product, sum(ed.qty)' ;
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'livraisondet as ld, ' . MAIN_DB_PREFIX . 'livraison as l, ' . MAIN_DB_PREFIX . 'commande as c, ' . MAIN_DB_PREFIX . 'commandedet as cd' ;
$sql .= ' WHERE ld.fk_livraison = l.rowid AND ld.fk_commande_ligne = cd .rowid AND cd.fk_commande = c.rowid' ;
$sql .= ' AND cd.fk_commande =' . $this -> id ;
if ( $filtre_statut >= 0 ) $sql .= ' AND l.fk_statut = ' . $filtre_statut ;
$sql .= ' GROUP BY cd.fk_product ' ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
$row = $this -> db -> fetch_row ( $i );
$this -> livraisons [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
$this -> db -> free ();
}
return 0 ;
}
2005-09-15 02:37:03 +02:00
/**
* \brief Supprime une ligne de la commande
* \param idligne Id de la ligne <EFBFBD> supprimer
* \return int > 0 si ok , < 0 si ko
*/
function delete_line ( $idligne )
{
if ( $this -> statut == 0 )
{
$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . " commandedet WHERE rowid = $idligne " ;
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ();
return 1 ;
}
else
{
return - 1 ;
}
}
}
2006-04-29 17:09:44 +02:00
/**
* \brief Applique une remise relative
* \param user User qui positionne la remise
* \param remise
* \return int < 0 si ko , > 0 si ok
*/
2005-09-15 02:37:03 +02:00
function set_remise ( $user , $remise )
{
2006-04-29 17:09:44 +02:00
$remise = trim ( $remise ) ? trim ( $remise ) : 0 ;
2005-09-15 02:37:03 +02:00
if ( $user -> rights -> commande -> creer )
{
2006-04-29 17:09:44 +02:00
$remise = price2num ( $remise );
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= ' SET remise_percent = ' . $remise ;
$sql .= ' WHERE rowid = ' . $this -> id . ' AND fk_statut = 0 ;' ;
if ( $this -> db -> query ( $sql ))
2005-09-15 02:37:03 +02:00
{
$this -> remise_percent = $remise ;
2006-04-29 17:09:44 +02:00
$this -> update_price ( $this -> id );
2005-09-15 02:37:03 +02:00
return 1 ;
}
else
{
2006-04-29 17:09:44 +02:00
$this -> error = $this -> db -> error ();
return - 1 ;
2005-09-15 02:37:03 +02:00
}
}
}
2006-04-29 17:09:44 +02:00
/**
* \brief Applique une remise absolue
* \param user User qui positionne la remise
* \param remise
* \return int < 0 si ko , > 0 si ok
*/
function set_remise_absolue ( $user , $remise )
{
$remise = trim ( $remise ) ? trim ( $remise ) : 0 ;
if ( $user -> rights -> commande -> creer )
{
$remise = price2num ( $remise );
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= ' SET remise_absolue = ' . $remise ;
$sql .= ' WHERE rowid = ' . $this -> id . ' AND fk_statut = 0 ;' ;
dolibarr_syslog ( " Commande::set_remise_absolue sql= $sql " );
if ( $this -> db -> query ( $sql ))
{
$this -> remise_absolue = $remise ;
$this -> update_price ( $this -> id );
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
}
/**
* \brief Mets <EFBFBD> jour le prix total de la proposition
* \return int < 0 si ko , > 0 si ok
*/
function update_price ()
{
include_once DOL_DOCUMENT_ROOT . " /lib/price.lib.php " ;
/*
* Liste des produits a ajouter
*/
$sql = " SELECT price, qty, tva_tx FROM " . MAIN_DB_PREFIX . " commandedet " ;
$sql .= " WHERE fk_commande = " . $this -> id ;
if ( $this -> db -> query ( $sql ) )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
$obj = $this -> db -> fetch_object ();
$products [ $i ][ 0 ] = $obj -> price ;
$products [ $i ][ 1 ] = $obj -> qty ;
$products [ $i ][ 2 ] = $obj -> tva_tx ;
$i ++ ;
}
}
$calculs = calcul_price ( $products , $this -> remise_percent , $this -> remise_absolue );
$this -> total_remise = $calculs [ 3 ];
$this -> amount_ht = $calculs [ 4 ];
$this -> total_ht = $calculs [ 0 ];
$this -> total_tva = $calculs [ 1 ];
$this -> total_ttc = $calculs [ 2 ];
$tvas = $calculs [ 5 ];
// Met a jour en base
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET " ;
$sql .= " total_ht=' " . price2num ( $this -> total_ht ) . " ' " ;
$sql .= " , tva=' " . price2num ( $this -> total_tva ) . " ' " ;
$sql .= " , total_ttc=' " . price2num ( $this -> total_ttc ) . " ' " ;
$sql .= " , remise=' " . price2num ( $this -> total_remise ) . " ' " ;
$sql .= " WHERE rowid = " . $this -> id ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2006-05-25 17:34:22 +02:00
/**
* \brief Mets <EFBFBD> jour les commentaires priv<EFBFBD> s
* \param note Commentaire
* \return int < 0 si ko , > 0 si ok
*/
function update_note ( $note )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= " SET note = ' " . addslashes ( $note ) . " ' " ;
$sql .= " WHERE rowid = " . $this -> id ;
if ( $this -> db -> query ( $sql ))
{
$this -> note = $note ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
/**
* \brief Mets <EFBFBD> jour les commentaires publiques
* \param note_public Commentaire
* \return int < 0 si ko , > 0 si ok
*/
function update_note_public ( $note_public )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= " SET note_public = ' " . addslashes ( $note_public ) . " ' " ;
$sql .= " WHERE rowid = " . $this -> id ;
if ( $this -> db -> query ( $sql ))
{
$this -> note_public = $note_public ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2006-04-29 17:09:44 +02:00
/**
2006-03-01 16:10:17 +01:00
* \brief D<EFBFBD> finit une date de livraison
2006-03-18 20:58:33 +01:00
* \param user Objet utilisateur qui modifie
* \param date_livraison Date de livraison
* \return int < 0 si ko , > 0 si ok
2006-03-01 16:10:17 +01:00
*/
function set_date_livraison ( $user , $date_livraison )
{
if ( $user -> rights -> commande -> creer )
{
2006-06-01 01:22:52 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande " ;
2006-06-06 01:04:13 +02:00
$sql .= " SET date_livraison = " . ( $date_livraison ? $this -> db -> idate ( $date_livraison ) : 'null' );
2006-03-01 16:10:17 +01:00
$sql .= " WHERE rowid = " . $this -> id . " AND fk_statut = 0 " ;
2006-06-06 01:04:13 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
2006-03-01 16:10:17 +01:00
{
$this -> date_livraison = $date_livraison ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
2006-06-06 01:04:13 +02:00
dolibarr_syslog ( " Commande::set_date_livraison Erreur SQL sql= $sql " );
2006-03-01 16:10:17 +01:00
return - 1 ;
}
}
2006-06-06 01:04:13 +02:00
else
{
return - 2 ;
}
2006-03-01 16:10:17 +01:00
}
2006-04-21 18:06:44 +02:00
/**
* \brief D<EFBFBD> finit une adresse de livraison
* \param user Objet utilisateur qui modifie
* \param adresse_livraison Adresse de livraison
* \return int < 0 si ko , > 0 si ok
*/
function set_adresse_livraison ( $user , $adresse_livraison )
{
if ( $user -> rights -> commande -> creer )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET fk_adresse_livraison = ' " . $adresse_livraison . " ' " ;
$sql .= " WHERE rowid = " . $this -> id . " AND fk_statut = 0 " ;
if ( $this -> db -> query ( $sql ) )
{
$this -> adresse_livraison_id = $adresse_livraison ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
dolibarr_syslog ( " Commande::set_adresse_livraison Erreur SQL " );
return - 1 ;
}
}
}
2006-02-19 14:27:42 +01:00
/**
* \brief Renvoi la liste des propal ( <EFBFBD> ventuellement filtr<EFBFBD> e sur un user ) dans un tableau
* \param brouillon 0 = non brouillon , 1 = brouillon
* \param user Objet user de filtre
* \return int - 1 si erreur , tableau r<EFBFBD> sultat si ok
*/
function liste_array ( $brouillon = 0 , $user = '' )
{
$ga = array ();
$sql = " SELECT rowid, ref FROM " . MAIN_DB_PREFIX . " commande " ;
if ( $brouillon )
{
$sql .= " WHERE fk_statut = 0 " ;
if ( $user )
{
$sql .= " AND fk_user_author " . $user ;
}
}
else
{
if ( $user )
{
$sql .= " WHERE fk_user_author " . $user ;
}
}
$sql .= " ORDER BY date_commande DESC " ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$numc = $this -> db -> num_rows ( $result );
if ( $numc )
{
$i = 0 ;
while ( $i < $numc )
{
$obj = $this -> db -> fetch_object ( $result );
$ga [ $obj -> rowid ] = $obj -> ref ;
$i ++ ;
}
}
return $ga ;
}
else
{
return - 1 ;
}
}
2006-02-15 18:00:59 +01:00
/**
* \brief Change les conditions de r<EFBFBD> glement de la commande
* \param cond_reglement_id Id de la nouvelle condition de r<EFBFBD> glement
* \return int > 0 si ok , < 0 si ko
*/
function cond_reglement ( $cond_reglement_id )
{
dolibarr_syslog ( 'Commande::cond_reglement(' . $cond_reglement_id . ')' );
if ( $this -> statut >= 0 )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= ' SET fk_cond_reglement = ' . $cond_reglement_id ;
$sql .= ' WHERE rowid=' . $this -> id ;
if ( $this -> db -> query ( $sql ) )
{
$this -> cond_reglement_id = $cond_reglement_id ;
return 1 ;
}
else
{
dolibarr_syslog ( 'Commande::cond_reglement Erreur ' . $sql . ' - ' . $this -> db -> error ());
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
else
{
dolibarr_syslog ( 'Commande::cond_reglement, etat commande incompatible' );
$this -> error = 'Etat commande incompatible ' . $this -> statut ;
return - 2 ;
}
}
/**
* \brief Change le mode de r<EFBFBD> glement
* \param mode Id du nouveau mode
* \return int > 0 si ok , < 0 si ko
*/
function mode_reglement ( $mode_reglement_id )
{
dolibarr_syslog ( 'Commande::mode_reglement(' . $mode_reglement_id . ')' );
if ( $this -> statut >= 0 )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande' ;
$sql .= ' SET fk_mode_reglement = ' . $mode_reglement_id ;
$sql .= ' WHERE rowid=' . $this -> id ;
if ( $this -> db -> query ( $sql ) )
{
$this -> mode_reglement_id = $mode_reglement_id ;
return 1 ;
}
else
{
dolibarr_syslog ( 'Commande::mode_reglement Erreur ' . $sql . ' - ' . $this -> db -> error ());
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
else
{
dolibarr_syslog ( 'Commande::mode_reglement, etat facture incompatible' );
$this -> error = 'Etat commande incompatible ' . $this -> statut ;
return - 2 ;
}
}
2005-10-14 01:22:21 +02:00
/**
* \brief Positionne numero reference commande client
* \param user Utilisateur qui modifie
* \param ref_client Reference commande client
* \return int < 0 si ko , > 0 si ok
*/
2005-09-15 02:37:03 +02:00
function set_ref_client ( $user , $ref_client )
{
if ( $user -> rights -> commande -> creer )
{
2005-10-14 01:22:21 +02:00
dolibarr_syslog ( 'Commande::set_ref_client this->id=' . $this -> id . ', ref_client=' . $ref_client );
2005-09-15 02:37:03 +02:00
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande SET ref_client = ' . ( empty ( $ref_client ) ? 'NULL' : '\'' . addslashes ( $ref_client ) . '\'' );
2005-10-14 01:22:21 +02:00
$sql .= ' WHERE rowid = ' . $this -> id ;
2005-09-15 02:37:03 +02:00
if ( $this -> db -> query ( $sql ) )
{
$this -> ref_client = $ref_client ;
return 1 ;
}
else
{
2005-10-14 01:22:21 +02:00
$this -> error = $this -> db -> error ();
dolibarr_syslog ( 'Commande::set_ref_client Erreur ' . $this -> error . ' - ' . $sql );
return - 2 ;
2005-09-15 02:37:03 +02:00
}
}
2005-10-14 01:22:21 +02:00
else
{
return - 1 ;
}
2005-09-15 02:37:03 +02:00
}
2005-10-14 01:22:21 +02:00
2006-05-25 17:34:22 +02:00
2005-09-15 02:37:03 +02:00
/**
2006-05-25 17:34:22 +02:00
* \brief Classe la commande comme factur<EFBFBD> e
* \return int < 0 si ko , > 0 si ok
2005-09-15 02:37:03 +02:00
*/
function classer_facturee ()
{
2006-06-01 17:44:30 +02:00
global $conf ;
2005-09-15 02:37:03 +02:00
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande SET facture = 1' ;
$sql .= ' WHERE rowid = ' . $this -> id . ' AND fk_statut > 0 ;' ;
if ( $this -> db -> query ( $sql ) )
{
2006-06-02 10:53:03 +02:00
if (( $conf -> global -> PROPALE_CLASSIFIED_INVOICED_WITH_ORDER == 1 ) && $this -> propale_id )
2006-06-01 17:44:30 +02:00
{
$propal = new Propal ( $this -> db );
$propal -> fetch ( $this -> propale_id );
$propal -> classer_facturee ();
}
2005-09-15 02:37:03 +02:00
return 1 ;
}
else
{
dolibarr_print_error ( $this -> db );
}
}
2006-04-29 17:09:44 +02:00
2005-09-15 02:37:03 +02:00
/**
* \brief Mets <EFBFBD> jour une ligne de commande
* \param rowid Id de la ligne de facture
* \param desc Description de la ligne
* \param pu Prix unitaire
* \param qty Quantit<EFBFBD>
* \param remise_percent Pourcentage de remise de la ligne
* \param tva_tx Taux TVA
* \return int < 0 si erreur , > 0 si ok
*/
function update_line ( $rowid , $desc , $pu , $qty , $remise_percent = 0 , $tva_tx )
{
2005-10-18 21:56:29 +02:00
dolibarr_syslog ( " Commande::UpdateLine $rowid , $desc , $pu , $qty , $remise_percent =0, $tva_tx " );
2005-09-15 02:37:03 +02:00
if ( $this -> brouillon )
{
$this -> db -> begin ();
2005-10-18 21:56:29 +02:00
// Nettoyage param<61> tres
$pu = price2num ( $pu );
if ( strlen ( trim ( $qty )) == 0 ) $qty = 1 ;
2005-09-15 02:37:03 +02:00
$remise = 0 ;
2005-10-18 21:56:29 +02:00
$price = $pu ;
2005-09-15 02:37:03 +02:00
$subprice = $price ;
2005-10-18 21:56:29 +02:00
$remise_percent = trim ( $remise_percent );
if ( $remise_percent > 0 )
2005-09-15 02:37:03 +02:00
{
$remise = round (( $pu * $remise_percent / 100 ), 2 );
$price = $pu - $remise ;
}
else
{
$remise_percent = 0 ;
}
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commandedet' ;
2006-02-13 12:22:45 +01:00
$sql .= " SET description=' " . addslashes ( $desc ) . " ',price=' " . price2num ( $price ) . " ',subprice=' " . $subprice . " ', " ;
2006-02-11 14:36:20 +01:00
$sql .= " remise=' " . $remise . " ',remise_percent=' " . $remise_percent . " ',qty=' " . $qty . " ',tva_tx=' " . $tva_tx . " ' " ;
$sql .= " WHERE rowid = ' " . $rowid . " ' " ;
2005-09-15 02:37:03 +02:00
$result = $this -> db -> query ( $sql );
if ( $result )
{
$this -> update_price ( $this -> id );
$this -> db -> commit ();
return $result ;
}
else
{
$this -> db -> rollback ();
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
else
{
return - 2 ;
}
}
2006-05-06 17:15:48 +02:00
/**
* \brief Liste les valeurs possibles de type de contacts pour les factures
* \param source 'internal' ou 'external'
* \return array Tableau des types de contacts
*/
function liste_type_contact ( $source )
{
global $langs ;
$element = 'commande' ;
$tab = array ();
$sql = " SELECT distinct tc.rowid, tc.code, tc.libelle " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " c_type_contact as tc " ;
$sql .= " WHERE element=' " . $element . " ' " ;
$sql .= " AND source=' " . $source . " ' " ;
$sql .= " ORDER by tc.code " ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$num = $this -> db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$obj = $this -> db -> fetch_object ( $resql );
$transkey = " TypeContact_ " . $element . " _ " . $source . " _ " . $obj -> code ;
$libelle_type = ( $langs -> trans ( $transkey ) != $transkey ? $langs -> trans ( $transkey ) : $obj -> libelle );
$tab [ $obj -> rowid ] = $libelle_type ;
$i ++ ;
}
return $tab ;
}
else
{
$this -> error = $this -> db -> error ();
return null ;
}
}
/**
* \brief R<EFBFBD> cup<EFBFBD> re les lignes de contact de l ' objet
* \param statut Statut des lignes detail <EFBFBD> r<EFBFBD> cup<EFBFBD> rer
* \param source Source du contact external ( llx_socpeople ) ou internal ( llx_user )
* \return array Tableau des rowid des contacts
*/
function liste_contact ( $statut =- 1 , $source = 'external' )
{
global $langs ;
$element = 'commande' ;
$tab = array ();
$sql = " SELECT ec.rowid, ec.statut, ec.fk_socpeople as id, " ;
if ( $source == 'internal' ) $sql .= " '-1' as socid, " ;
if ( $source == 'external' ) $sql .= " t.fk_soc as socid, " ;
if ( $source == 'internal' ) $sql .= " t.name as nom, " ;
if ( $source == 'external' ) $sql .= " t.name as nom, " ;
$sql .= " tc.source, tc.element, tc.code, tc.libelle " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " element_contact ec, " ;
if ( $source == 'internal' ) $sql .= " " . MAIN_DB_PREFIX . " user t, " ;
if ( $source == 'external' ) $sql .= " " . MAIN_DB_PREFIX . " socpeople t, " ;
$sql .= " " . MAIN_DB_PREFIX . " c_type_contact tc " ;
$sql .= " WHERE element_id = " . $this -> id ;
$sql .= " AND ec.fk_c_type_contact=tc.rowid " ;
$sql .= " AND tc.element=' " . $element . " ' " ;
if ( $source == 'internal' ) $sql .= " AND tc.source = 'internal' " ;
if ( $source == 'external' ) $sql .= " AND tc.source = 'external' " ;
$sql .= " AND tc.active=1 " ;
if ( $source == 'internal' ) $sql .= " AND ec.fk_socpeople = t.rowid " ;
if ( $source == 'external' ) $sql .= " AND ec.fk_socpeople = t.idp " ;
if ( $statut >= 0 ) $sql .= " AND statut = ' $statut ' " ;
$sql .= " ORDER BY t.name ASC " ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$num = $this -> db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$obj = $this -> db -> fetch_object ( $resql );
$transkey = " TypeContact_ " . $obj -> element . " _ " . $obj -> source . " _ " . $obj -> code ;
$libelle_type = ( $langs -> trans ( $transkey ) != $transkey ? $langs -> trans ( $transkey ) : $obj -> libelle );
$tab [ $i ] = array ( 'source' => $obj -> source , 'socid' => $obj -> socid , 'id' => $obj -> id , 'nom' => $obj -> nom , 'rowid' => $obj -> rowid , 'code' => $obj -> code , 'libelle' => $libelle_type , 'status' => $obj -> statut );
$i ++ ;
}
return $tab ;
}
else
{
$this -> error = $this -> db -> error ();
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
/**
* \brief Ajoute un contact associ<EFBFBD> une commande
* \param fk_socpeople Id du contact a ajouter .
* \param type_contact Type de contact
* \param source extern = Contact externe ( llx_socpeople ), intern = Contact interne ( llx_user )
* \return int < 0 si erreur , > 0 si ok
*/
function add_contact ( $fk_socpeople , $type_contact , $source = 'extern' )
{
dolibarr_syslog ( " Commande::add_contact $fk_socpeople , $type_contact , $source " );
if ( $fk_socpeople <= 0 ) return - 1 ;
// Verifie type_contact
if ( ! $type_contact || ! is_numeric ( $type_contact ))
{
$this -> error = " Valeur pour type_contact incorrect " ;
return - 3 ;
}
$datecreate = time ();
// Insertion dans la base
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " element_contact " ;
$sql .= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) " ;
$sql .= " VALUES ( " . $this -> id . " , " . $fk_socpeople . " , " ;
$sql .= $this -> db -> idate ( $datecreate );
$sql .= " , 4, ' " . $type_contact . " ' " ;
$sql .= " ) " ;
// Retour
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
$this -> error = $this -> db -> error () . " - $sql " ;
return - 1 ;
}
}
/**
* \brief Supprime une ligne de contact
* \param rowid La reference du contact
* \return statur > 0 si ok , < 0 si ko
*/
function delete_contact ( $rowid )
{
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " element_contact " ;
$sql .= " WHERE rowid = " . $rowid ;
if ( $this -> db -> query ( $sql ))
{
return 1 ;
}
else
{
return - 1 ;
}
}
2006-06-08 16:52:18 +02:00
/**
* \brief Le d<EFBFBD> tail d ' un contact
* \param rowid L ' identifiant du contact
* \return object L ' objet construit par DoliDb . fetch_object
*/
function detail_contact ( $rowid )
{
$element = 'commande' ;
$sql = " SELECT ec.datecreate, ec.statut, ec.fk_socpeople, ec.fk_c_type_contact, " ;
$sql .= " tc.code, tc.libelle, s.fk_soc " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " element_contact as ec, " . MAIN_DB_PREFIX . " c_type_contact as tc, " ;
$sql .= " " . MAIN_DB_PREFIX . " socpeople as s " ;
$sql .= " WHERE ec.rowid = " . $rowid ;
$sql .= " AND ec.fk_socpeople=s.idp " ;
$sql .= " AND ec.fk_c_type_contact=tc.rowid " ;
$sql .= " AND tc.element = ' " . $element . " ' " ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$obj = $this -> db -> fetch_object ( $resql );
return $obj ;
}
else
{
$this -> error = $this -> db -> error ();
dolibarr_print_error ( $this -> db );
return null ;
}
}
/**
* \brief Mise a jour du contact associ<EFBFBD> <EFBFBD> une commande
* \param rowid La reference du lien commande - contact
* \param statut Le nouveau statut
* \param type_contact_id Description du type de contact
* \return int < 0 si erreur , = 0 si ok
*/
function update_contact ( $rowid , $statut , $type_contact_id )
{
// Insertion dans la base
$sql = " UPDATE " . MAIN_DB_PREFIX . " element_contact set " ;
$sql .= " statut = $statut , " ;
$sql .= " fk_c_type_contact = ' " . $type_contact_id . " ' " ;
$sql .= " where rowid = " . $rowid ;
// Retour
if ( $this -> db -> query ( $sql ) )
{
return 0 ;
}
else
{
dolibarr_print_error ( $this -> db );
return - 1 ;
}
}
2006-05-06 17:15:48 +02:00
/**
*
*
*
*/
function getIdContact ( $source , $code )
{
$element = 'commande' ; // Contact sur la facture
$result = array ();
$i = 0 ;
$sql = " SELECT ec.fk_socpeople " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " element_contact as ec, " . MAIN_DB_PREFIX . " c_type_contact as tc " ;
$sql .= " WHERE ec.element_id = " . $this -> id ;
$sql .= " AND ec.fk_c_type_contact=tc.rowid " ;
$sql .= " AND tc.element = ' " . $element . " ' " ;
$sql .= " AND tc.source = ' " . $source . " ' " ;
$sql .= " AND tc.code = ' " . $code . " ' " ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$result [ $i ] = $obj -> fk_socpeople ;
$i ++ ;
}
}
else
{
$this -> error = $this -> db -> error ();
return null ;
}
return $result ;
}
2005-09-15 02:37:03 +02:00
/**
* Supprime la commande
*
*/
function delete ()
{
2006-06-07 21:13:45 +02:00
global $conf , $lang ;
2005-09-15 02:37:03 +02:00
$err = 0 ;
$this -> db -> begin ();
$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . " commandedet WHERE fk_commande = $this->id ; " ;
if ( ! $this -> db -> query ( $sql ) )
{
$err ++ ;
}
$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . " commande WHERE rowid = $this->id ; " ;
if ( ! $this -> db -> query ( $sql ) )
{
$err ++ ;
}
$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . " co_pr WHERE fk_commande = $this->id ; " ;
if ( ! $this -> db -> query ( $sql ) )
{
$err ++ ;
}
2006-06-07 21:13:45 +02:00
// On efface le r<> pertoire de pdf provisoire
$comref = sanitize_string ( $this -> ref );
if ( $conf -> commande -> dir_output )
{
$dir = $conf -> commande -> dir_output . " / " . $comref ;
$file = $conf -> commande -> dir_output . " / " . $comref . " / " . $comref . " .pdf " ;
if ( file_exists ( $file ))
{
if ( ! dol_delete_file ( $file ))
{
$this -> error = $langs -> trans ( " ErrorCanNotDeleteFile " , $file );
return 0 ;
}
}
if ( file_exists ( $dir ))
{
if ( ! dol_delete_dir ( $dir ))
{
$this -> error = $langs -> trans ( " ErrorCanNotDeleteDir " , $dir );
return 0 ;
}
}
}
2005-09-15 02:37:03 +02:00
if ( $err == 0 )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
return - 1 ;
}
}
2006-03-18 20:58:33 +01:00
/**
* \brief Classer la commande dans un projet
* \param cat_id Id du projet
*/
2005-09-15 02:37:03 +02:00
function classin ( $cat_id )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . " commande SET fk_projet = $cat_id " ;
$sql .= " WHERE rowid = $this->id ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2006-03-18 20:58:33 +01:00
2005-07-15 00:29:49 +02:00
/**
2005-08-30 23:07:53 +02:00
* \brief Charge indicateurs this -> nbtodo et this -> nbtodolate de tableau de bord
* \param user Objet user
* \return int < 0 si ko , > 0 si ok
2005-07-15 00:29:49 +02:00
*/
2005-09-15 02:37:03 +02:00
function load_board ( $user )
{
2006-03-31 18:26:48 +02:00
global $conf , $user ;
2005-09-15 02:37:03 +02:00
$this -> nbtodo = $this -> nbtodolate = 0 ;
$sql = 'SELECT c.rowid,' . $this -> db -> pdate ( 'c.date_creation' ) . ' as datec' ;
2006-03-31 18:26:48 +02:00
if ( ! $user -> rights -> commercial -> client -> voir && ! $user -> societe_id ) $sql .= " , sc.fk_soc, sc.fk_user " ;
2005-09-15 02:37:03 +02:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commande as c' ;
2006-03-31 18:26:48 +02:00
if ( ! $user -> rights -> commercial -> client -> voir && ! $user -> societe_id ) $sql .= " , " . MAIN_DB_PREFIX . " societe_commerciaux as sc " ;
2005-09-15 02:37:03 +02:00
$sql .= ' WHERE c.fk_statut BETWEEN 1 AND 2' ;
2006-03-31 18:26:48 +02:00
if ( $user -> societe_id ) $sql .= ' AND c.fk_soc = ' . $user -> societe_id ;
if ( ! $user -> rights -> commercial -> client -> voir && ! $user -> societe_id ) $sql .= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " . $user -> id ;
2005-09-15 02:37:03 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$this -> nbtodo ++ ;
if ( $obj -> datec < ( time () - $conf -> commande -> traitement -> warning_delay )) $this -> nbtodolate ++ ;
}
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2006-03-26 23:42:00 +02:00
/**
* \brief Retourne le libell<EFBFBD> du statut de la commande
* \param mode 0 = libell<EFBFBD> long , 1 = libell<EFBFBD> court , 2 = Picto + Libell<EFBFBD> court , 3 = Picto , 4 = Picto + Libell<EFBFBD> long , 5 = Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD>
*/
function getLibStatut ( $mode )
2005-09-15 02:37:03 +02:00
{
2006-05-25 22:07:09 +02:00
return $this -> LibStatut ( $this -> statut , $this -> facturee , $mode );
2005-09-15 02:37:03 +02:00
}
2005-09-04 23:01:32 +02:00
2006-03-26 23:42:00 +02:00
/**
* \brief Renvoi le libell<EFBFBD> d ' un statut donn<EFBFBD>
2006-05-20 11:19:20 +02:00
* \param statut Id statut
2006-05-20 14:16:18 +02:00
* \param facturee Si facturee
2006-03-26 23:42:00 +02:00
* \param mode 0 = libell<EFBFBD> long , 1 = libell<EFBFBD> court , 2 = Picto + Libell<EFBFBD> court , 3 = Picto , 4 = Picto + Libell<EFBFBD> long , 5 = Libell<EFBFBD> court + Picto
* \return string Libell<EFBFBD>
*/
2006-05-20 14:16:18 +02:00
function LibStatut ( $statut , $facturee , $mode )
2005-09-15 02:37:03 +02:00
{
2006-03-26 23:42:00 +02:00
global $langs ;
if ( $mode == 0 )
{
2006-05-20 11:19:20 +02:00
if ( $statut ==- 1 ) return $langs -> trans ( 'StatusOrderCanceled' );
if ( $statut == 0 ) return $langs -> trans ( 'StatusOrderDraft' );
if ( $statut == 1 ) return $langs -> trans ( 'StatusOrderValidated' );
if ( $statut == 2 ) return $langs -> trans ( 'StatusOrderOnProcess' );
if ( $statut == 3 && ! $facturee ) return $langs -> trans ( 'StatusOrderToBill' );
if ( $statut == 3 && $facturee ) return $langs -> trans ( 'StatusOrderProcessed' );
2006-03-26 23:42:00 +02:00
}
if ( $mode == 1 )
{
2006-05-20 11:19:20 +02:00
if ( $statut ==- 1 ) return $langs -> trans ( 'StatusOrderCanceledShort' );
if ( $statut == 0 ) return $langs -> trans ( 'StatusOrderDraftShort' );
if ( $statut == 1 ) return $langs -> trans ( 'StatusOrderValidatedShort' );
if ( $statut == 2 ) return $langs -> trans ( 'StatusOrderOnProcessShort' );
if ( $statut == 3 && ! $facturee ) return $langs -> trans ( 'StatusOrderToBillShort' );
if ( $statut == 3 && $facturee ) return $langs -> trans ( 'StatusOrderProcessed' );
2006-03-26 23:42:00 +02:00
}
if ( $mode == 2 )
{
2006-05-20 11:19:20 +02:00
if ( $statut ==- 1 ) return img_picto ( $langs -> trans ( 'StatusOrderCanceledShort' ), 'statut5' ) . ' ' . $langs -> trans ( 'StatusOrderCanceled' );
if ( $statut == 0 ) return img_picto ( $langs -> trans ( 'StatusOrderDraftShort' ), 'statut0' ) . ' ' . $langs -> trans ( 'StatusOrderDraft' );
if ( $statut == 1 ) return img_picto ( $langs -> trans ( 'StatusOrderValidatedShort' ), 'statut1' ) . ' ' . $langs -> trans ( 'StatusOrderValidated' );
if ( $statut == 2 ) return img_picto ( $langs -> trans ( 'StatusOrderOnProcessShort' ), 'statut3' ) . ' ' . $langs -> trans ( 'StatusOrderOnProcess' );
if ( $statut == 3 && ! $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderToBillShort' ), 'statut4' ) . ' ' . $langs -> trans ( 'StatusOrderToBill' );
if ( $statut == 3 && $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderProcessedShort' ), 'statut6' ) . ' ' . $langs -> trans ( 'StatusOrderProcessed' );
2006-03-26 23:42:00 +02:00
}
if ( $mode == 3 )
{
2006-05-01 23:53:00 +02:00
if ( $statut ==- 1 ) return img_picto ( $langs -> trans ( 'StatusOrderCanceled' ), 'statut5' );
2006-03-26 23:42:00 +02:00
if ( $statut == 0 ) return img_picto ( $langs -> trans ( 'StatusOrderDraft' ), 'statut0' );
if ( $statut == 1 ) return img_picto ( $langs -> trans ( 'StatusOrderValidated' ), 'statut1' );
if ( $statut == 2 ) return img_picto ( $langs -> trans ( 'StatusOrderOnProcess' ), 'statut3' );
2006-05-20 11:19:20 +02:00
if ( $statut == 3 && ! $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderToBill' ), 'statut4' );
if ( $statut == 3 && $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderProcessed' ), 'statut6' );
2006-03-26 23:42:00 +02:00
}
if ( $mode == 4 )
{
2006-05-20 11:19:20 +02:00
if ( $statut ==- 1 ) return img_picto ( $langs -> trans ( 'StatusOrderCanceled' ), 'statut5' ) . ' ' . $langs -> trans ( 'StatusOrderCanceled' );
if ( $statut == 0 ) return img_picto ( $langs -> trans ( 'StatusOrderDraft' ), 'statut0' ) . ' ' . $langs -> trans ( 'StatusOrderDraft' );
if ( $statut == 1 ) return img_picto ( $langs -> trans ( 'StatusOrderValidated' ), 'statut1' ) . ' ' . $langs -> trans ( 'StatusOrderValidated' );
if ( $statut == 2 ) return img_picto ( $langs -> trans ( 'StatusOrderOnProcess' ), 'statut3' ) . ' ' . $langs -> trans ( 'StatusOrderOnProcess' );
if ( $statut == 3 && ! $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderToBill' ), 'statut4' ) . ' ' . $langs -> trans ( 'StatusOrderToBill' );
if ( $statut == 3 && $facturee ) return img_picto ( $langs -> trans ( 'StatusOrderProcessed' ), 'statut6' ) . ' ' . $langs -> trans ( 'StatusOrderProcessed' );
2006-03-26 23:42:00 +02:00
}
if ( $mode == 5 )
{
2006-05-20 11:19:20 +02:00
if ( $statut ==- 1 ) return $langs -> trans ( 'StatusOrderCanceledShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderCanceledShort' ), 'statut5' );
if ( $statut == 0 ) return $langs -> trans ( 'StatusOrderDraftShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderDraftShort' ), 'statut0' );
if ( $statut == 1 ) return $langs -> trans ( 'StatusOrderValidatedShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderValidatedShort' ), 'statut1' );
if ( $statut == 2 ) return $langs -> trans ( 'StatusOrderOnProcessShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderOnProcessShort' ), 'statut3' );
if ( $statut == 3 && ! $facturee ) return $langs -> trans ( 'StatusOrderToBillShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderToBillShort' ), 'statut4' );
if ( $statut == 3 && $facturee ) return $langs -> trans ( 'StatusOrderProcessedShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusOrderProcessedShort' ), 'statut6' );
2006-03-26 23:42:00 +02:00
}
2005-09-15 02:37:03 +02:00
}
2005-09-04 23:01:32 +02:00
2006-03-26 23:42:00 +02:00
2005-08-11 20:54:59 +02:00
/**
* \brief Charge les informations d 'ordre info dans l' objet commande
* \param id Id de la commande a charger
*/
2005-09-15 02:37:03 +02:00
function info ( $id )
{
$sql = 'SELECT c.rowid, ' . $this -> db -> pdate ( 'date_creation' ) . ' as datec,' ;
$sql .= ' ' . $this -> db -> pdate ( 'date_valid' ) . ' as datev,' ;
$sql .= ' ' . $this -> db -> pdate ( 'date_cloture' ) . ' as datecloture,' ;
$sql .= ' fk_user_author, fk_user_valid, fk_user_cloture' ;
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commande as c' ;
$sql .= ' WHERE c.rowid = ' . $id ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
if ( $this -> db -> num_rows ( $result ))
{
$obj = $this -> db -> fetch_object ( $result );
$this -> id = $obj -> rowid ;
if ( $obj -> fk_user_author )
{
$cuser = new User ( $this -> db , $obj -> fk_user_author );
$cuser -> fetch ();
$this -> user_creation = $cuser ;
}
if ( $obj -> fk_user_valid )
{
$vuser = new User ( $this -> db , $obj -> fk_user_valid );
$vuser -> fetch ();
$this -> user_validation = $vuser ;
}
if ( $obj -> fk_user_cloture )
{
$cluser = new User ( $this -> db , $obj -> fk_user_cloture );
$cluser -> fetch ();
$this -> user_cloture = $cluser ;
}
$this -> date_creation = $obj -> datec ;
$this -> date_validation = $obj -> datev ;
$this -> date_cloture = $obj -> datecloture ;
}
$this -> db -> free ( $result );
}
else
{
dolibarr_print_error ( $this -> db );
}
}
}
/**
\class CommandeLigne
\brief Classe de gestion des lignes de commande
*/
class CommandeLigne
{
2006-02-08 16:13:50 +01:00
// From llx_propaldet
var $qty ;
var $tva_tx ;
var $subprice ;
var $remise_percent ;
var $price ;
var $product_id ;
var $desc ; // Description ligne
2006-05-16 14:12:27 +02:00
var $coef ;
2006-02-08 16:13:50 +01:00
// From llx_product
var $libelle ; // Label produit
var $product_desc ; // Description produit
var $ref ;
2005-09-15 02:37:03 +02:00
function CommandeLigne ()
{
2006-02-08 16:13:50 +01:00
2005-09-15 02:37:03 +02:00
}
}
2006-02-03 17:42:39 +01:00
?>