2004-10-19 20:58:50 +02:00
< ? php
2005-04-04 13:06:10 +02:00
/* Copyright ( C ) 2003 - 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2005-04-05 23:36:37 +02:00
* Copyright ( C ) 2004 - 2005 Laurent Destailleur < eldy @ users . sourceforge . net >
2003-03-14 01:17:54 +01: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-04-05 23:36:37 +02:00
/**
\file htdocs / commande / commande . class . php
\ingroup commande
\brief Fichier des classes de commandes
\version $Revision $
2004-08-15 18:11:04 +02:00
*/
2005-04-05 23:36:37 +02:00
/**
\class Commande
\brief Classe de gestion de commande
2004-08-15 18:11:04 +02:00
*/
2003-11-03 09:40:18 +01:00
class Commande
{
2003-03-14 01:17:54 +01:00
var $db ;
var $id ;
2003-11-03 09:40:18 +01:00
var $brouillon ;
2004-08-15 18:11:04 +02:00
2005-04-05 23:36:37 +02:00
/** \brief Constructeur
2003-11-09 16:57:18 +01:00
*/
2004-08-07 19:14:42 +02:00
function Commande ( $DB )
2003-11-03 09:40:18 +01:00
{
2005-04-05 23:36:37 +02:00
global $langs ;
$langs -> load ( " orders " );
2003-11-03 09:40:18 +01:00
$this -> db = $DB ;
2003-11-07 10:05:49 +01:00
$this -> sources [ 0 ] = " Proposition commerciale " ;
2003-11-09 16:57:18 +01:00
$this -> sources [ 1 ] = " Internet " ;
$this -> sources [ 2 ] = " Courrier " ;
2003-11-07 10:05:49 +01:00
$this -> sources [ 3 ] = " T<EFBFBD> l<EFBFBD> phone " ;
$this -> sources [ 4 ] = " Fax " ;
2005-04-04 13:06:10 +02:00
$this -> sources [ 5 ] = " Commercial " ;
2003-11-07 10:43:31 +01:00
2005-04-05 23:36:37 +02:00
$this -> statuts [ - 1 ] = $langs -> trans ( " StatusOrderCanceled " );
$this -> statuts [ 0 ] = $langs -> trans ( " StatusOrderDraft " );
$this -> statuts [ 1 ] = $langs -> trans ( " StatusOrderValidated " );
$this -> statuts [ 2 ] = $langs -> trans ( " StatusOrderOnProcess " );
$this -> statuts [ 3 ] = $langs -> trans ( " StatusOrderProcessed " );
2003-11-09 16:57:18 +01:00
2003-11-07 10:43:31 +01:00
$this -> products = array ();
2003-11-03 09:40:18 +01:00
}
2004-08-15 18:11:04 +02:00
2005-04-05 23:36:37 +02:00
/** \brief Cr<EFBFBD> <EFBFBD> la facture depuis une propale existante
2004-08-15 18:11:04 +02:00
\param user Utilisateur qui cr<EFBFBD> e
\param propale_id id de la propale qui sert de mod<EFBFBD> le
2003-11-03 09:40:18 +01:00
*/
2004-08-07 19:14:42 +02:00
function create_from_propale ( $user , $propale_id )
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01:00
$propal = new Propal ( $this -> db );
$propal -> fetch ( $propale_id );
$this -> lines = array ();
2003-11-09 16:57:18 +01:00
$this -> date_commande = time ();
$this -> source = 0 ;
2003-11-07 10:05:49 +01:00
for ( $i = 0 ; $i < sizeof ( $propal -> lignes ) ; $i ++ )
{
$CommLigne = new CommandeLigne ();
$CommLigne -> libelle = $propal -> lignes [ $i ] -> libelle ;
$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 ;
$this -> lines [ $i ] = $CommLigne ;
}
$this -> soc_id = $propal -> soc_id ;
2004-05-25 15:51:44 +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 ();
2003-11-07 10:05:49 +01:00
$this -> propale_id = $propal -> id ;
2003-11-03 09:40:18 +01:00
return $this -> create ( $user );
}
2004-08-15 18:11:04 +02:00
2005-04-05 23:36:37 +02:00
/** \brief Valide la commande
2004-08-15 18:11:04 +02:00
\param user Utilisateur qui valide
2003-11-07 10:05:49 +01:00
*/
2004-08-07 19:14:42 +02:00
function valid ( $user )
2003-11-09 16:57:18 +01:00
{
$result = 0 ;
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 " ;
2004-08-15 18:11:04 +02:00
// 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
2003-11-09 16:57:18 +01:00
$objMod = new $modName ( $this -> db );
2005-03-06 15:22:39 +01:00
$soc = new Societe ( $this -> db );
$soc -> fetch ( $this -> soc_id );
$num = $objMod -> commande_get_num ( $soc );
2003-11-09 16:57:18 +01:00
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET ref=' $num ', fk_statut = 1, date_valid=now(), fk_user_valid= $user->id " ;
2003-11-09 16:57:18 +01:00
$sql .= " WHERE rowid = $this->id AND fk_statut = 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
$result = 1 ;
}
else
{
$result = - 1 ;
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-09 16:57:18 +01:00
}
}
2003-11-19 15:54:45 +01:00
else
{
2004-05-25 15:51:44 +02:00
print " Impossible de lire le module de num<75> rotation " ;
2003-11-19 15:54:45 +01:00
}
}
else
{
2004-05-25 15:51:44 +02:00
print " Le module de num<75> rotation n'est pas d<> finit " ;
2003-11-09 16:57:18 +01:00
}
}
return $result ;
}
/**
2003-11-19 15:54:45 +01:00
* Cloture la commande
2003-11-09 16:57:18 +01:00
*
2003-11-19 15:54:45 +01:00
*/
2004-08-07 19:14:42 +02:00
function cloture ( $user )
2003-11-19 15:54:45 +01:00
{
if ( $user -> rights -> commande -> valider )
{
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET fk_statut = 3 " ;
2003-11-19 15:54:45 +01:00
$sql .= " WHERE rowid = $this->id AND fk_statut > 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-19 15:54:45 +01:00
}
}
}
/**
* Annule la commande
2003-11-09 16:57:18 +01:00
*
*/
2004-08-07 19:14:42 +02:00
function cancel ( $user )
2003-11-07 10:05:49 +01:00
{
if ( $user -> rights -> commande -> valider )
{
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET fk_statut = -1 " ;
2003-11-09 16:57:18 +01:00
$sql .= " WHERE rowid = $this->id AND fk_statut = 1 ; " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
}
}
}
2003-11-03 09:40:18 +01:00
/**
2003-11-09 16:57:18 +01:00
* Cr<EFBFBD> <EFBFBD> la commande
2003-11-03 09:40:18 +01:00
*
2003-03-14 01:17:54 +01:00
*/
2004-08-07 19:14:42 +02:00
function create ( $user )
2003-11-03 09:40:18 +01:00
{
2003-11-09 16:57:18 +01:00
/* On positionne en mode brouillon la commande */
2003-11-03 09:40:18 +01:00
$this -> brouillon = 1 ;
2003-03-14 01:17:54 +01:00
2003-11-03 09:40:18 +01:00
if ( ! $remise )
{
$remise = 0 ;
}
2003-03-14 01:17:54 +01:00
2003-11-03 09:40:18 +01:00
if ( ! $this -> projetid )
{
$this -> projetid = 0 ;
}
2004-02-01 02:44:06 +01:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande (fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source) " ;
2003-11-09 16:57:18 +01:00
$sql .= " VALUES ( $this->soc_id , now(), $user->id , $this->projetid , " . $this -> db -> idate ( $this -> date_commande ) . " , $this->source ) " ;
2003-11-07 10:05:49 +01:00
2003-11-03 09:40:18 +01:00
if ( $this -> db -> query ( $sql ) )
{
2005-03-19 00:56:41 +01:00
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . " commande " );
2003-03-14 01:17:54 +01:00
2003-11-07 10:43:31 +01:00
/*
* 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 ]))
{
$this -> insert_product_generic ( $prod -> libelle ,
$prod -> price ,
$this -> products_qty [ $i ],
$prod -> tva_tx ,
$this -> products [ $i ],
$this -> products_remise_percent [ $i ]);
}
}
/*
*
*
*/
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET ref='(PROV " . $this -> id . " )' WHERE rowid= " . $this -> id ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ))
{
2003-03-14 01:17:54 +01:00
2003-11-07 10:05:49 +01:00
if ( $this -> id && $this -> propale_id )
{
2004-02-01 02:44:06 +01:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " co_pr (fk_commande, fk_propale) VALUES ( " . $this -> id . " , " . $this -> propale_id . " ) " ;
2003-11-07 10:05:49 +01:00
$this -> db -> query ( $sql );
}
/*
* Produits
*
*/
for ( $i = 0 ; $i < sizeof ( $this -> lines ) ; $i ++ )
{
$result_insert = $this -> insert_product_generic (
$this -> lines [ $i ] -> libelle ,
$this -> lines [ $i ] -> price ,
$this -> lines [ $i ] -> qty ,
$this -> lines [ $i ] -> tva_tx ,
2003-11-19 15:54:45 +01:00
$this -> lines [ $i ] -> product_id ,
$this -> lines [ $i ] -> remise_percent );
2003-11-07 10:05:49 +01:00
if ( $result_insert < 0 )
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
}
}
/*
*
*
*/
return $this -> id ;
}
else
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01:00
return - 1 ;
2003-11-03 09:40:18 +01:00
}
2003-11-07 10:05:49 +01:00
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
return 0 ;
}
}
/**
* Ajoute un produit
*
*/
2004-08-07 19:14:42 +02:00
function insert_product_generic ( $p_desc , $p_price , $p_qty , $p_tva_tx = 19.6 , $p_product_id = 0 , $remise_percent = 0 )
2003-11-07 10:05:49 +01:00
{
if ( $this -> statut == 0 )
{
if ( strlen ( trim ( $p_qty )) == 0 )
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01:00
$p_qty = 1 ;
}
2003-03-14 01:17:54 +01:00
2003-11-07 10:05:49 +01:00
$p_price = ereg_replace ( " , " , " . " , $p_price );
2003-03-14 01:17:54 +01:00
2003-11-07 10:05:49 +01:00
$price = $p_price ;
$subprice = $p_price ;
if ( $remise_percent > 0 )
{
$remise = round (( $p_price * $remise_percent / 100 ), 2 );
$price = $p_price - $remise ;
}
2003-03-14 01:17:54 +01:00
2004-02-01 02:44:06 +01:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commandedet (fk_commande, fk_product, qty, price, tva_tx, description, remise_percent, subprice) VALUES " ;
2004-02-05 15:41:53 +01:00
$sql .= " (' " . $this -> id . " ', ' $p_product_id ',' " . $p_qty . " ',' " . $price . " ',' " . $p_tva_tx . " ',' " . addslashes ( $p_desc ) . " ',' $remise_percent ', ' $subprice ') ; " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
if ( $this -> update_price () > 0 )
{
return 1 ;
}
else
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01:00
return - 1 ;
2003-11-03 09:40:18 +01:00
}
}
2003-11-07 10:05:49 +01:00
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
return - 2 ;
}
2003-11-03 09:40:18 +01:00
}
2003-11-07 10:05:49 +01:00
}
/**
* Ajoute une ligne de commande
*
*/
2004-08-07 19:14:42 +02:00
function addline ( $desc , $pu , $qty , $txtva , $fk_product = 0 , $remise_percent = 0 )
2003-11-07 10:05:49 +01:00
{
2004-11-23 11:41:45 +01:00
$qty = ereg_replace ( " , " , " . " , $qty );
$pu = ereg_replace ( " , " , " . " , $pu );
2003-11-07 10:05:49 +01:00
if ( $this -> brouillon && strlen ( trim ( $desc )))
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01:00
if ( strlen ( trim ( $qty )) == 0 )
{
$qty = 1 ;
}
if ( $fk_product > 0 )
{
$prod = new Product ( $this -> db , $fk_product );
if ( $prod -> fetch ( $fk_product ) > 0 )
{
$desc = $prod -> libelle ;
$pu = $prod -> price ;
$txtva = $prod -> tva_tx ;
}
}
$remise = 0 ;
$price = round ( ereg_replace ( " , " , " . " , $pu ), 2 );
$subprice = $price ;
if ( trim ( strlen ( $remise_percent )) > 0 )
{
$remise = round (( $pu * $remise_percent / 100 ), 2 );
$price = $pu - $remise ;
}
2004-07-27 10:09:43 +02:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commandedet (fk_commande,label,description,fk_product, price,qty,tva_tx, remise_percent, subprice, remise) " ;
2004-11-23 11:41:45 +01:00
$sql .= " VALUES ( $this->id , ' " . addslashes ( $desc ) . " ',' " . addslashes ( $desc ) . " ', $fk_product , " . ereg_replace ( " , " , " . " , $price ) . " , ' $qty ', $txtva , $remise_percent ,' " . ereg_replace ( " , " , " . " , $subprice ) . " ',' " . ereg_replace ( " , " , " . " , $remise ) . " ') ; " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ();
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
return - 1 ;
}
2003-11-03 09:40:18 +01:00
}
}
2003-11-07 10:43:31 +01:00
/**
* Ajoute un produit dans la commande
*
*/
2004-08-07 19:14:42 +02:00
function add_product ( $idproduct , $qty , $remise_percent = 0 )
2003-11-07 10:43:31 +01: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 ;
}
}
2003-11-07 10:05:49 +01:00
2003-11-03 09:40:18 +01:00
/**
* Lit une commande
2003-03-14 01:17:54 +01:00
*
*/
2004-08-07 19:14:42 +02:00
function fetch ( $id )
2003-11-03 09:40:18 +01:00
{
2003-11-07 10:05:49 +01: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 " ;
2003-11-25 13:46:44 +01:00
$sql .= " , " . $this -> db -> pdate ( " c.date_commande " ) . " as date_commande, c.fk_projet, c.remise_percent, c.source, c.facture " ;
2004-02-01 02:44:06 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " commande as c " ;
2004-02-05 16:56:57 +01:00
$sql .= " WHERE c.rowid = " . $id ;
2003-11-03 09:40:18 +01:00
$result = $this -> db -> query ( $sql ) ;
if ( $result )
{
2003-11-07 10:05:49 +01:00
$obj = $this -> db -> fetch_object ();
2003-11-03 09:40:18 +01:00
2003-11-07 10:05:49 +01:00
$this -> id = $obj -> rowid ;
$this -> ref = $obj -> ref ;
$this -> soc_id = $obj -> fk_soc ;
$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 ;
$this -> remise_percent = $obj -> remise_percent ;
2003-11-09 16:57:18 +01:00
$this -> source = $obj -> source ;
2003-11-25 13:46:44 +01:00
$this -> facturee = $obj -> facture ;
2003-11-07 10:05:49 +01:00
$this -> projet_id = $obj -> fk_projet ;
2003-11-03 09:40:18 +01:00
$this -> db -> free ();
2003-11-07 10:05:49 +01:00
if ( $this -> statut == 0 )
$this -> brouillon = 1 ;
2003-11-09 16:57:18 +01:00
/*
* Propale associ<EFBFBD> e
*/
2004-02-01 02:44:06 +01:00
$sql = " SELECT fk_propale FROM " . MAIN_DB_PREFIX . " co_pr WHERE fk_commande = " . $this -> id ;
2003-11-09 16:57:18 +01:00
if ( $this -> db -> query ( $sql ) )
{
if ( $this -> db -> num_rows ())
{
2004-10-23 18:55:07 +02:00
$obj = $this -> db -> fetch_object ();
2003-11-09 16:57:18 +01:00
$this -> propale_id = $obj -> fk_propale ;
}
2003-11-03 09:40:18 +01:00
2004-02-05 16:56:57 +01:00
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2004-02-05 16:56:57 +01:00
return - 1 ;
}
2003-11-03 09:40:18 +01:00
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-03 09:40:18 +01:00
return - 1 ;
}
}
2003-11-19 15:54:45 +01:00
/**
*
2003-11-07 10:05:49 +01:00
*
2003-11-19 15:54:45 +01:00
*/
2004-08-07 19:14:42 +02:00
function fetch_lignes ( $only_product = 0 )
2003-11-19 15:54:45 +01:00
{
$this -> lignes = array ();
2003-11-27 12:04:50 +01:00
2003-11-19 15:54:45 +01:00
$sql = " SELECT l.fk_product, l.description, l.price, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice " ;
2003-11-27 12:04:50 +01:00
if ( $only_product == 1 )
{
2004-02-01 02:44:06 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " commandedet as l LEFT JOIN " . MAIN_DB_PREFIX . " product as p ON (p.rowid = l.fk_product) WHERE l.fk_commande = " . $this -> id . " AND p.fk_product_type <> 1 ORDER BY l.rowid " ;
2003-11-27 12:04:50 +01:00
}
else
{
2004-02-01 02:44:06 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " commandedet as l WHERE l.fk_commande = $this->id ORDER BY l.rowid " ;
2003-11-27 12:04:50 +01:00
}
2003-11-19 15:54:45 +01:00
$result = $this -> db -> query ( $sql );
if ( $result )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
$ligne = new CommandeLigne ();
2004-10-23 18:55:07 +02:00
$objp = $this -> db -> fetch_object ( $result );
2003-11-19 15:54:45 +01:00
$ligne -> id = $objp -> rowid ;
2003-11-24 11:14:19 +01: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 );
2003-11-19 15:54:45 +01:00
$this -> lignes [ $i ] = $ligne ;
$i ++ ;
}
$this -> db -> free ();
}
2003-11-24 11:14:19 +01:00
return $this -> lignes ;
2003-11-19 15:54:45 +01:00
}
/**
* Renvoie un tableau avec les livraison par ligne
*
*
*/
2004-08-07 19:14:42 +02:00
function livraison_array ()
2003-11-19 15:54:45 +01:00
{
$this -> livraisons = array ();
$sql = " SELECT fk_product, sum(ed.qty) " ;
2004-02-01 02:44:06 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " expeditiondet as ed, " . MAIN_DB_PREFIX . " commande as c, " . MAIN_DB_PREFIX . " commandedet as cd " ;
2003-11-19 15:54:45 +01:00
$sql .= " WHERE ed.fk_commande_ligne = cd .rowid AND cd.fk_commande = c.rowid " ;
$sql .= " AND cd.fk_commande = " . $this -> id ;
$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 );
$this -> livraisons [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
$this -> db -> free ();
}
}
/**
* Renvoie un tableau avec les livraison par ligne
*
*/
2004-08-07 19:14:42 +02:00
function nb_expedition ()
2003-11-19 15:54:45 +01:00
{
2004-02-01 02:44:06 +01:00
$sql = " SELECT count(*) FROM " . MAIN_DB_PREFIX . " expedition as e " ;
2003-11-19 15:54:45 +01:00
$sql .= " WHERE e.fk_commande = $this->id " ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$row = $this -> db -> fetch_row ( 0 );
return $row [ 0 ];
}
}
/**
* Supprime une ligne de la commande
2003-11-07 10:05:49 +01:00
*
*/
2004-08-07 19:14:42 +02:00
function delete_line ( $idligne )
2003-11-07 10:05:49 +01:00
{
if ( $this -> statut == 0 )
{
2004-02-01 02:44:06 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commandedet WHERE rowid = $idligne " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ();
return 1 ;
}
else
{
return 0 ;
}
}
}
2003-11-09 16:57:18 +01:00
/**
*
*
*/
2004-08-07 19:14:42 +02:00
function set_remise ( $user , $remise )
2003-11-09 16:57:18 +01:00
{
if ( $user -> rights -> commande -> creer )
{
$remise = ereg_replace ( " , " , " . " , $remise );
2003-11-07 10:05:49 +01:00
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET remise_percent = " . $remise ;
2003-11-09 16:57:18 +01:00
$sql .= " WHERE rowid = $this->id AND fk_statut = 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
$this -> remise_percent = $remise ;
$this -> update_price ();
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-09 16:57:18 +01:00
}
}
}
/**
2003-11-25 13:46:44 +01:00
* Classe la facture comme factur<EFBFBD> e
*
*/
2004-08-07 19:14:42 +02:00
function classer_facturee ()
2003-11-25 13:46:44 +01:00
{
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET facture = 1 " ;
2003-11-25 13:46:44 +01:00
$sql .= " WHERE rowid = " . $this -> id . " AND fk_statut > 0 ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-25 13:46:44 +01:00
}
}
/**
2003-11-19 15:54:45 +01:00
* Mettre <EFBFBD> jour le prix
2003-03-14 01:17:54 +01:00
*
*/
2004-08-07 19:14:42 +02:00
function update_price ()
2003-11-07 10:05:49 +01:00
{
include_once DOL_DOCUMENT_ROOT . " /lib/price.lib.php " ;
/*
* Liste des produits a ajouter
*/
2004-02-01 02:44:06 +01:00
$sql = " SELECT price, qty, tva_tx FROM " . MAIN_DB_PREFIX . " commandedet WHERE fk_commande = $this->id " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
$num = $this -> db -> num_rows ();
$i = 0 ;
while ( $i < $num )
{
2004-10-23 18:55:07 +02:00
$obj = $this -> db -> fetch_object ();
2003-11-07 10:05:49 +01:00
$products [ $i ][ 0 ] = $obj -> price ;
$products [ $i ][ 1 ] = $obj -> qty ;
$products [ $i ][ 2 ] = $obj -> tva_tx ;
$i ++ ;
}
}
$calculs = calcul_price ( $products , $this -> remise_percent );
$totalht = $calculs [ 0 ];
$totaltva = $calculs [ 1 ];
$totalttc = $calculs [ 2 ];
$total_remise = $calculs [ 3 ];
$this -> remise = $total_remise ;
$this -> total_ht = $totalht ;
$this -> total_tva = $totaltva ;
$this -> total_ttc = $totalttc ;
/*
*
*/
2004-07-27 10:09:43 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande set " ;
$sql .= " amount_ht =' " . ereg_replace ( " , " , " . " , $totalht ) . " ' " ;
$sql .= " , total_ht =' " . ereg_replace ( " , " , " . " , $totalht ) . " ' " ;
$sql .= " , tva =' " . ereg_replace ( " , " , " . " , $totaltva ) . " ' " ;
$sql .= " , total_ttc =' " . ereg_replace ( " , " , " . " , $totalttc ) . " ' " ;
$sql .= " , remise =' " . ereg_replace ( " , " , " . " , $total_remise ) . " ' " ;
$sql .= " WHERE rowid = $this->id " ;
2003-11-07 10:05:49 +01:00
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
print " Erreur mise <20> jour du prix<p> " . $sql ;
return - 1 ;
}
}
2003-11-19 15:54:45 +01:00
/**
* Mets <EFBFBD> jour une ligne de commande
*
*/
2004-08-07 19:14:42 +02:00
function update_line ( $rowid , $desc , $pu , $qty , $remise_percent = 0 )
2003-11-19 15:54:45 +01:00
{
if ( $this -> brouillon )
{
if ( strlen ( trim ( $qty )) == 0 )
{
$qty = 1 ;
}
$remise = 0 ;
$price = round ( ereg_replace ( " , " , " . " , $pu ), 2 );
$subprice = $price ;
if ( trim ( strlen ( $remise_percent )) > 0 )
{
$remise = round (( $pu * $remise_percent / 100 ), 2 );
$price = $pu - $remise ;
}
else
{
$remise_percent = 0 ;
}
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commandedet SET description=' $desc ',price= $price ,subprice= $subprice ,remise= $remise ,remise_percent= $remise_percent ,qty= $qty WHERE rowid = $rowid ; " ;
2003-11-19 15:54:45 +01:00
if ( $this -> db -> query ( $sql ) )
{
$this -> update_price ( $this -> id );
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-19 15:54:45 +01:00
}
}
}
2003-11-07 10:05:49 +01:00
/**
* Supprime la commande
*
*/
2004-08-07 19:14:42 +02:00
function delete ()
2003-11-07 10:05:49 +01:00
{
2003-11-19 15:54:45 +01:00
$err = 0 ;
$this -> db -> begin ();
2004-02-01 02:44:06 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commandedet WHERE fk_commande = $this->id ; " ;
2003-11-19 15:54:45 +01:00
if ( ! $this -> db -> query ( $sql ) )
2003-11-07 10:05:49 +01:00
{
2003-11-19 15:54:45 +01:00
$err ++ ;
}
2004-02-01 02:44:06 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande WHERE rowid = $this->id ; " ;
2003-11-19 15:54:45 +01:00
if ( ! $this -> db -> query ( $sql ) )
{
$err ++ ;
}
2004-02-01 02:44:06 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " co_pr WHERE fk_commande = $this->id ; " ;
2003-11-19 15:54:45 +01:00
if ( ! $this -> db -> query ( $sql ) )
{
$err ++ ;
}
if ( $err == 0 )
{
$this -> db -> commit ();
return 1 ;
2003-11-07 10:05:49 +01:00
}
else
{
2003-11-19 15:54:45 +01:00
$this -> db -> rollback ();
2003-11-07 10:05:49 +01:00
return - 1 ;
}
}
/**
2003-11-19 15:54:45 +01:00
* Classe la commande
2003-11-07 10:05:49 +01:00
*
*/
2004-08-07 19:14:42 +02:00
function classin ( $cat_id )
2003-11-07 10:05:49 +01:00
{
2004-02-01 02:44:06 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande SET fk_projet = $cat_id " ;
2003-11-07 10:05:49 +01:00
$sql .= " WHERE rowid = $this->id ; " ;
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
2004-08-15 18:11:04 +02:00
dolibarr_print_error ( $this -> db );
2003-11-07 10:05:49 +01:00
}
}
2003-11-03 09:40:18 +01:00
}
2003-03-14 01:17:54 +01:00
2005-04-05 23:36:37 +02:00
/** \class CommandeLigne
2004-08-15 18:11:04 +02:00
\brief Classe de gestion des lignes de commande
*/
2003-11-03 09:40:18 +01:00
class CommandeLigne
{
var $pu ;
2003-03-14 01:17:54 +01:00
}
2003-11-03 09:40:18 +01:00
2003-03-14 01:17:54 +01:00
?>