2004-10-19 22:43:23 +02:00
< ? php
2012-10-31 09:50:20 +01:00
/* Copyright ( C ) 2003 - 2008 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ capnetworks . com >
2012-10-31 09:50:20 +01:00
* Copyright ( C ) 2007 Franky Van Liedekerke < franky . van . liedekerke @ telenet . be >
* Copyright ( C ) 2006 - 2012 Laurent Destailleur < eldy @ users . sourceforge . net >
2013-06-20 18:37:23 +02:00
* Copyright ( C ) 2011 - 2013 Juanjo Menent < jmenent @ 2 byte . es >
* Copyright ( C ) 2013 Florian Henry < florian . henry @ open - concept . pro >
2003-11-13 18:36:45 +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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2003-11-13 18:36:45 +01:00
* ( 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
2008-09-01 15:22:36 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2003-11-13 18:36:45 +01:00
*/
2005-07-09 03:16:31 +02:00
/**
2010-06-05 15:27:11 +02:00
* \file htdocs / expedition / class / expedition . class . php
2009-11-12 14:33:55 +01:00
* \ingroup expedition
* \brief Fichier de la classe de gestion des expeditions
2008-05-26 23:27:50 +02:00
*/
2004-08-14 15:05:12 +02:00
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php' ;
2012-09-15 10:01:35 +02:00
if ( ! empty ( $conf -> propal -> enabled )) require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php' ;
if ( ! empty ( $conf -> commande -> enabled )) require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php' ;
2006-06-18 16:35:35 +02:00
2004-08-14 15:05:12 +02:00
2008-05-26 23:27:50 +02:00
/**
2012-03-14 14:00:20 +01:00
* Class to manage shipments
2008-05-26 23:27:50 +02:00
*/
2006-06-18 16:35:35 +02:00
class Expedition extends CommonObject
2003-11-13 18:36:45 +01:00
{
2011-09-20 19:19:46 +02:00
public $element = " shipping " ;
public $fk_element = " fk_expedition " ;
public $table_element = " expedition " ;
2012-12-18 09:01:04 +01:00
protected $ismultientitymanaged = 1 ; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
2008-10-25 13:16:39 +02:00
var $id ;
var $socid ;
2010-03-13 16:52:30 +01:00
var $ref_customer ;
2011-05-26 17:33:33 +02:00
var $ref_ext ;
var $ref_int ;
2008-10-25 13:16:39 +02:00
var $brouillon ;
var $entrepot_id ;
var $modelpdf ;
var $origin ;
var $origin_id ;
2010-09-09 16:06:15 +02:00
var $lines = array ();
2011-06-14 20:19:09 +02:00
var $shipping_method_id ;
2011-06-19 21:47:09 +02:00
var $tracking_number ;
var $tracking_url ;
2010-05-17 16:13:03 +02:00
var $statut ;
2012-03-13 17:28:55 +01:00
var $billed ;
2013-04-09 17:18:07 +02:00
var $note_public ;
var $note_private ;
2013-07-29 12:17:24 +02:00
var $model_pdf ;
2010-05-08 21:21:57 +02:00
2010-05-13 01:03:33 +02:00
var $trueWeight ;
var $weight_units ;
var $trueWidth ;
var $width_units ;
var $trueHeight ;
var $height_units ;
var $trueDepth ;
var $depth_units ;
// A denormalized value
var $trueSize ;
var $date_delivery ; // Date delivery planed
var $date_expedition ; // Date delivery real
2010-03-13 16:52:30 +01:00
var $date_creation ;
var $date_valid ;
2012-03-14 14:00:20 +01:00
2012-07-02 19:30:37 +02:00
// For Invoicing
var $total_ht ; // Total net of tax
var $total_ttc ; // Total with tax
var $total_tva ; // Total VAT
var $total_localtax1 ; // Total Local tax 1
2012-03-08 22:30:45 +01:00
var $total_localtax2 ; // Total Local tax 2
2009-01-29 13:39:52 +01:00
2013-03-17 14:28:57 +01:00
var $listmeths ; // List of carriers
2013-04-11 21:53:41 +02:00
2008-10-25 13:16:39 +02:00
/**
2011-09-29 22:32:28 +02:00
* Constructor
*
2012-03-14 14:00:20 +01:00
* @ param DoliDB $db Database handler
2008-10-25 13:16:39 +02:00
*/
2012-07-30 17:17:33 +02:00
function __construct ( $db )
2008-10-25 13:16:39 +02:00
{
2012-03-14 14:00:20 +01:00
$this -> db = $db ;
2010-12-15 08:12:28 +01:00
$this -> lines = array ();
2008-10-25 13:16:39 +02:00
$this -> products = array ();
2010-01-05 21:03:37 +01:00
2009-12-17 16:52:37 +01:00
// List of long language codes for status
$this -> statuts [ - 1 ] = 'StatusSendingCanceled' ;
$this -> statuts [ 0 ] = 'StatusSendingDraft' ;
$this -> statuts [ 1 ] = 'StatusSendingValidated' ;
2012-03-13 17:28:55 +01:00
$this -> statuts [ 2 ] = 'StatusSendingProcessed' ;
2008-10-25 13:16:39 +02:00
}
2011-02-20 23:53:59 +01:00
2011-09-29 22:32:28 +02:00
/**
2011-02-20 01:20:45 +01:00
* Return next contract ref
2011-09-29 22:32:28 +02:00
*
* @ param Societe $soc Objet society
* @ return string Free reference for contract
2011-02-20 01:20:45 +01:00
*/
function getNextNumRef ( $soc )
{
global $db , $langs , $conf ;
$langs -> load ( " sendings " );
2011-10-24 14:11:49 +02:00
$dir = DOL_DOCUMENT_ROOT . " /core/modules/expedition " ;
2011-02-20 01:20:45 +01:00
2011-02-20 23:53:59 +01:00
if ( empty ( $conf -> global -> EXPEDITION_ADDON_NUMBER ))
{
$conf -> global -> EXPEDITION_ADDON_NUMBER = 'mod_expedition_safor' ;
}
2011-02-20 01:20:45 +01:00
2011-02-20 23:53:59 +01:00
$file = $conf -> global -> EXPEDITION_ADDON_NUMBER . " .php " ;
2011-02-20 01:20:45 +01:00
2011-02-20 23:53:59 +01:00
// Chargement de la classe de numerotation
$classname = $conf -> global -> EXPEDITION_ADDON_NUMBER ;
2008-10-25 13:16:39 +02:00
2012-08-23 02:04:35 +02:00
$result = include_once $dir . '/' . $file ;
2011-02-20 23:53:59 +01:00
if ( $result )
{
$obj = new $classname ();
$numref = " " ;
$numref = $obj -> getNextValue ( $soc , $this );
if ( $numref != " " )
{
return $numref ;
2011-02-20 01:20:45 +01:00
}
else
{
2012-01-04 23:56:10 +01:00
dol_print_error ( $db , get_class ( $this ) . " ::getNextNumRef " . $obj -> error );
2011-02-20 01:20:45 +01:00
return " " ;
}
}
else
{
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_EXPEDITION_ADDON_NUMBER_NotDefined " );
return " " ;
}
}
2011-02-20 23:53:59 +01:00
2008-10-25 13:16:39 +02:00
/**
2011-09-29 22:32:28 +02:00
* Create expedition en base
*
* @ param User $user Objet du user qui cree
* @ return int < 0 si erreur , id expedition creee si ok
2008-10-25 13:16:39 +02:00
*/
function create ( $user )
{
2011-06-02 19:20:24 +02:00
global $conf , $langs ;
2012-07-29 12:54:19 +02:00
2012-03-23 18:19:50 +01:00
$now = dol_now ();
2013-08-07 15:08:30 +02:00
2013-07-29 12:17:24 +02:00
if ( empty ( $this -> model_pdf )) $this -> model_pdf = $conf -> global -> EXPEDITION_ADDON_PDF ;
2009-01-29 13:39:52 +01:00
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php' ;
2008-10-25 13:16:39 +02:00
$error = 0 ;
2009-02-03 03:39:28 +01:00
// Clean parameters
$this -> brouillon = 1 ;
2009-04-29 20:02:50 +02:00
$this -> tracking_number = dol_sanitizeFileName ( $this -> tracking_number );
2009-02-04 23:12:23 +01:00
2008-10-25 13:16:39 +02:00
$this -> user = $user ;
$this -> db -> begin ();
2009-04-30 18:28:53 +02:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " expedition ( " ;
$sql .= " ref " ;
$sql .= " , entity " ;
2011-05-26 17:33:33 +02:00
$sql .= " , ref_customer " ;
$sql .= " , ref_int " ;
2009-04-30 18:28:53 +02:00
$sql .= " , date_creation " ;
$sql .= " , fk_user_author " ;
$sql .= " , date_expedition " ;
2010-03-13 16:52:30 +01:00
$sql .= " , date_delivery " ;
2009-04-30 18:28:53 +02:00
$sql .= " , fk_soc " ;
2010-07-29 14:37:09 +02:00
$sql .= " , fk_address " ;
2013-04-11 21:53:41 +02:00
$sql .= " , fk_shipping_method " ;
2009-04-30 18:28:53 +02:00
$sql .= " , tracking_number " ;
$sql .= " , weight " ;
$sql .= " , size " ;
$sql .= " , width " ;
$sql .= " , height " ;
$sql .= " , weight_units " ;
$sql .= " , size_units " ;
2013-04-09 17:18:07 +02:00
$sql .= " , note_private " ;
$sql .= " , note_public " ;
2013-07-29 12:17:24 +02:00
$sql .= " , model_pdf " ;
2010-03-13 16:52:30 +01:00
$sql .= " ) VALUES ( " ;
2009-04-30 18:28:53 +02:00
$sql .= " '(PROV)' " ;
$sql .= " , " . $conf -> entity ;
2014-05-16 15:03:28 +02:00
$sql .= " , " . ( $this -> ref_customer ? " ' " . $this -> db -> escape ( $this -> ref_customer ) . " ' " : " null " );
$sql .= " , " . ( $this -> ref_int ? " ' " . $this -> db -> escape ( $this -> ref_int ) . " ' " : " null " );
2012-03-23 18:19:50 +01:00
$sql .= " , ' " . $this -> db -> idate ( $now ) . " ' " ;
2009-04-30 18:28:53 +02:00
$sql .= " , " . $user -> id ;
2010-05-13 01:03:33 +02:00
$sql .= " , " . ( $this -> date_expedition > 0 ? " ' " . $this -> db -> idate ( $this -> date_expedition ) . " ' " : " null " );
$sql .= " , " . ( $this -> date_delivery > 0 ? " ' " . $this -> db -> idate ( $this -> date_delivery ) . " ' " : " null " );
2009-04-30 18:28:53 +02:00
$sql .= " , " . $this -> socid ;
2009-07-08 12:02:57 +02:00
$sql .= " , " . ( $this -> fk_delivery_address > 0 ? $this -> fk_delivery_address : " null " );
2013-03-22 17:10:17 +01:00
$sql .= " , " . ( $this -> shipping_method_id > 0 ? $this -> shipping_method_id : " null " );
2011-02-24 19:11:12 +01:00
$sql .= " , ' " . $this -> db -> escape ( $this -> tracking_number ) . " ' " ;
2009-04-30 18:28:53 +02:00
$sql .= " , " . $this -> weight ;
2010-05-17 16:13:03 +02:00
$sql .= " , " . $this -> sizeS ; // TODO Should use this->trueDepth
$sql .= " , " . $this -> sizeW ; // TODO Should use this->trueWidth
$sql .= " , " . $this -> sizeH ; // TODO Should use this->trueHeight
2009-04-30 18:28:53 +02:00
$sql .= " , " . $this -> weight_units ;
$sql .= " , " . $this -> size_units ;
2013-04-09 17:18:07 +02:00
$sql .= " , " . ( ! empty ( $this -> note_private ) ? " ' " . $this -> db -> escape ( $this -> note_private ) . " ' " : " null " );
$sql .= " , " . ( ! empty ( $this -> note_public ) ? " ' " . $this -> db -> escape ( $this -> note_public ) . " ' " : " null " );
2013-07-29 12:17:24 +02:00
$sql .= " , " . ( ! empty ( $this -> model_pdf ) ? " ' " . $this -> db -> escape ( $this -> model_pdf ) . " ' " : " null " );
2009-01-29 21:56:14 +01:00
$sql .= " ) " ;
2008-10-25 13:16:39 +02:00
2013-09-05 17:45:30 +02:00
dol_syslog ( get_class ( $this ) . " ::create sql= " . $sql , LOG_DEBUG );
2008-10-25 13:16:39 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . " expedition " );
2009-04-30 18:28:53 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " expedition " ;
$sql .= " SET ref = '(PROV " . $this -> id . " )' " ;
$sql .= " WHERE rowid = " . $this -> id ;
2010-01-05 21:03:37 +01:00
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::create sql= " . $sql , LOG_DEBUG );
2008-10-25 13:16:39 +02:00
if ( $this -> db -> query ( $sql ))
2009-12-12 10:13:41 +01:00
{
// Insertion des lignes
2011-09-17 21:49:50 +02:00
$num = count ( $this -> lines );
for ( $i = 0 ; $i < $num ; $i ++ )
2009-12-12 10:13:41 +01:00
{
2010-12-15 08:12:28 +01:00
if ( ! $this -> create_line ( $this -> lines [ $i ] -> entrepot_id , $this -> lines [ $i ] -> origin_line_id , $this -> lines [ $i ] -> qty ) > 0 )
2009-12-12 10:13:41 +01:00
{
$error ++ ;
}
}
2010-01-05 21:03:37 +01:00
2009-12-12 10:13:41 +01:00
if ( ! $error && $this -> id && $this -> origin_id )
{
$ret = $this -> add_object_linked ();
if ( ! $ret )
{
$error ++ ;
}
2010-01-05 21:03:37 +01:00
2010-03-13 16:52:30 +01:00
// TODO uniformiser les statuts
$ret = $this -> setStatut ( 2 , $this -> origin_id , $this -> origin );
2009-12-15 09:15:11 +01:00
if ( ! $ret )
{
$error ++ ;
2009-12-12 10:13:41 +01:00
}
}
2010-01-05 21:03:37 +01:00
2009-12-12 10:13:41 +01:00
if ( ! $error )
{
2011-06-02 19:20:24 +02:00
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-06-02 19:20:24 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'SHIPPING_CREATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
2011-08-31 16:42:47 +02:00
2009-12-12 10:13:41 +01:00
$this -> db -> commit ();
return $this -> id ;
}
else
{
$error ++ ;
$this -> error = $this -> db -> lasterror () . " - sql= $sql " ;
$this -> db -> rollback ();
return - 3 ;
}
}
else
{
$error ++ ;
$this -> error = $this -> db -> lasterror () . " - sql= $sql " ;
$this -> db -> rollback ();
return - 2 ;
}
2008-10-25 13:16:39 +02:00
}
else
{
$error ++ ;
$this -> error = $this -> db -> error () . " - sql= $sql " ;
$this -> db -> rollback ();
return - 1 ;
}
}
/**
2011-12-16 15:29:58 +01:00
* Create a expedition line
2012-01-04 23:56:10 +01:00
*
* @ param int $entrepot_id Id of warehouse
* @ param int $origin_line_id Id of source line
* @ param int $qty Quantity
* @ return int < 0 if KO , > 0 if OK
2008-10-25 13:16:39 +02:00
*/
function create_line ( $entrepot_id , $origin_line_id , $qty )
{
$error = 0 ;
2010-03-13 16:52:30 +01:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " expeditiondet ( " ;
$sql .= " fk_expedition " ;
$sql .= " , fk_entrepot " ;
$sql .= " , fk_origin_line " ;
$sql .= " , qty " ;
$sql .= " ) VALUES ( " ;
$sql .= $this -> id ;
$sql .= " , " . ( $entrepot_id ? $entrepot_id : 'null' );
$sql .= " , " . $origin_line_id ;
$sql .= " , " . $qty ;
$sql .= " ) " ;
2013-09-05 17:45:30 +02:00
dol_syslog ( get_class ( $this ) . " ::create_line sql= " . $sql , LOG_DEBUG );
2010-09-07 00:31:36 +02:00
if ( ! $this -> db -> query ( $sql ))
2008-10-25 13:16:39 +02:00
{
2010-09-07 00:31:36 +02:00
$error ++ ;
2010-09-06 22:55:32 +02:00
}
2010-09-07 00:31:36 +02:00
if ( ! $error ) return 1 ;
else return - 1 ;
2008-10-25 13:16:39 +02:00
}
/**
2011-05-26 17:33:33 +02:00
* Get object and lines from database
2011-09-29 22:32:28 +02:00
*
* @ param int $id Id of object to load
* @ param string $ref Ref of object
* @ param string $ref_ext External reference of object
* @ param string $ref_int Internal reference of other object
* @ return int > 0 if OK , < 0 if KO
2008-10-25 13:16:39 +02:00
*/
2011-05-26 17:33:33 +02:00
function fetch ( $id , $ref = '' , $ref_ext = '' , $ref_int = '' )
2008-10-25 13:16:39 +02:00
{
global $conf ;
2011-05-26 17:33:33 +02:00
// Check parameters
if ( empty ( $id ) && empty ( $ref ) && empty ( $ref_ext ) && empty ( $ref_int )) return - 1 ;
2010-06-06 17:53:49 +02:00
2011-05-26 17:33:33 +02:00
$sql = " SELECT e.rowid, e.ref, e.fk_soc as socid, e.date_creation, e.ref_customer, e.ref_ext, e.ref_int, e.fk_user_author, e.fk_statut " ;
2009-08-05 18:42:04 +02:00
$sql .= " , e.weight, e.weight_units, e.size, e.size_units, e.width, e.height " ;
2010-07-29 14:37:09 +02:00
$sql .= " , e.date_expedition as date_expedition, e.model_pdf, e.fk_address, e.date_delivery " ;
2013-04-09 12:03:49 +02:00
$sql .= " , e.fk_shipping_method, e.tracking_number " ;
2010-03-13 16:52:30 +01:00
$sql .= " , el.fk_source as origin_id, el.sourcetype as origin " ;
2013-04-09 17:18:07 +02:00
$sql .= " , e.note_private, e.note_public " ;
2008-10-25 13:16:39 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " expedition as e " ;
2010-03-13 16:52:30 +01:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " element_element as el ON el.fk_target = e.rowid AND el.targettype = ' " . $this -> element . " ' " ;
2011-05-26 17:33:33 +02:00
$sql .= " WHERE e.entity = " . $conf -> entity ;
if ( $id ) $sql .= " AND e.rowid= " . $id ;
if ( $ref ) $sql .= " AND e.ref=' " . $this -> db -> escape ( $ref ) . " ' " ;
if ( $ref_ext ) $sql .= " AND e.ref_ext=' " . $this -> db -> escape ( $ref_ext ) . " ' " ;
if ( $ref_int ) $sql .= " AND e.ref_int=' " . $this -> db -> escape ( $ref_int ) . " ' " ;
2008-10-25 13:16:39 +02:00
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch sql= " . $sql );
2011-09-20 15:32:16 +02:00
$result = $this -> db -> query ( $sql );
2008-10-25 13:16:39 +02:00
if ( $result )
{
if ( $this -> db -> num_rows ( $result ))
2009-01-29 21:56:14 +01:00
{
$obj = $this -> db -> fetch_object ( $result );
$this -> id = $obj -> rowid ;
$this -> ref = $obj -> ref ;
$this -> socid = $obj -> socid ;
2010-03-13 16:52:30 +01:00
$this -> ref_customer = $obj -> ref_customer ;
2011-05-26 17:33:33 +02:00
$this -> ref_ext = $obj -> ref_ext ;
$this -> ref_int = $obj -> ref_int ;
2009-01-29 21:56:14 +01:00
$this -> statut = $obj -> fk_statut ;
$this -> user_author_id = $obj -> fk_user_author ;
2010-05-13 01:03:33 +02:00
$this -> date_creation = $this -> db -> jdate ( $obj -> date_creation );
2010-03-13 16:52:30 +01:00
$this -> date = $this -> db -> jdate ( $obj -> date_expedition ); // TODO obsolete
2010-05-13 01:03:33 +02:00
$this -> date_expedition = $this -> db -> jdate ( $obj -> date_expedition ); // TODO obsolete
$this -> date_shipping = $this -> db -> jdate ( $obj -> date_expedition ); // Date real
$this -> date_delivery = $this -> db -> jdate ( $obj -> date_delivery ); // Date planed
2010-07-29 14:37:09 +02:00
$this -> fk_delivery_address = $obj -> fk_address ;
2009-01-29 21:56:14 +01:00
$this -> modelpdf = $obj -> model_pdf ;
2013-04-11 21:53:41 +02:00
$this -> shipping_method_id = $obj -> fk_shipping_method ;
2009-01-29 21:56:14 +01:00
$this -> tracking_number = $obj -> tracking_number ;
2010-09-21 11:44:15 +02:00
$this -> origin = ( $obj -> origin ? $obj -> origin : 'commande' ); // For compatibility
2010-03-13 16:52:30 +01:00
$this -> origin_id = $obj -> origin_id ;
2012-03-13 17:28:55 +01:00
$this -> billed = ( $obj -> fk_statut == 2 ? 1 : 0 );
2009-01-29 21:56:14 +01:00
$this -> trueWeight = $obj -> weight ;
$this -> weight_units = $obj -> weight_units ;
$this -> trueWidth = $obj -> width ;
$this -> width_units = $obj -> size_units ;
$this -> trueHeight = $obj -> height ;
$this -> height_units = $obj -> size_units ;
$this -> trueDepth = $obj -> size ;
$this -> depth_units = $obj -> size_units ;
2013-04-11 21:53:41 +02:00
2013-04-09 17:18:07 +02:00
$this -> note_public = $obj -> note_public ;
$this -> note_private = $obj -> note_private ;
2009-01-29 21:56:14 +01:00
// A denormalized value
$this -> trueSize = $obj -> size . " x " . $obj -> width . " x " . $obj -> height ;
$this -> size_units = $obj -> size_units ;
$this -> db -> free ( $result );
if ( $this -> statut == 0 ) $this -> brouillon = 1 ;
2012-10-31 09:50:20 +01:00
$file = $conf -> expedition -> dir_output . " / " . get_exdir ( $this -> id , 2 ) . " / " . $this -> id . " .pdf " ;
2009-01-29 21:56:14 +01:00
$this -> pdf_filename = $file ;
2011-08-31 16:42:47 +02:00
2011-06-19 21:47:09 +02:00
// Tracking url
$this -> GetUrlTrackingStatus ( $obj -> tracking_number );
2009-01-29 21:56:14 +01:00
2013-02-22 16:02:19 +01:00
/*
* Thirparty
*/
$result = $this -> fetch_thirdparty ();
2013-04-11 21:53:41 +02:00
2009-01-29 21:56:14 +01:00
/*
2010-03-13 16:52:30 +01:00
* Lines
2009-01-29 21:56:14 +01:00
*/
$result = $this -> fetch_lines ();
if ( $result < 0 )
{
return - 3 ;
}
return 1 ;
}
else
{
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . '::Fetch Error -2' );
2011-12-05 19:41:38 +01:00
$this -> error = 'Delivery with id ' . $id . ' not found sql=' . $sql ;
2009-01-29 21:56:14 +01:00
return - 2 ;
}
2008-10-25 13:16:39 +02:00
}
else
{
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . '::Fetch Error -1' );
2008-10-25 13:16:39 +02:00
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
/**
2011-11-08 00:03:19 +01:00
* Validate object and update stock if option enabled
2011-09-29 22:32:28 +02:00
*
2011-11-08 00:03:19 +01:00
* @ param User $user Object user that validate
* @ return int < 0 if OK , > 0 if KO
2008-10-25 13:16:39 +02:00
*/
function valid ( $user )
{
2011-05-30 20:49:31 +02:00
global $conf , $langs ;
2011-08-31 16:42:47 +02:00
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2008-10-25 13:16:39 +02:00
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid " );
2008-10-25 13:16:39 +02:00
2009-05-07 23:38:56 +02:00
// Protection
if ( $this -> statut )
{
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid no draft status " , LOG_WARNING );
2009-05-07 23:38:56 +02:00
return 0 ;
}
if ( ! $user -> rights -> expedition -> valider )
{
$this -> error = 'Permission denied' ;
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid " . $this -> error , LOG_ERR );
2009-05-07 23:38:56 +02:00
return - 1 ;
}
2008-10-25 13:16:39 +02:00
$this -> db -> begin ();
2010-06-17 22:24:11 +02:00
$error = 0 ;
2009-05-07 23:38:56 +02:00
// Define new ref
2011-02-20 01:20:45 +01:00
$soc = new Societe ( $this -> db );
$soc -> fetch ( $this -> socid );
2008-10-25 13:16:39 +02:00
2011-02-20 01:20:45 +01:00
// Class of company linked to order
$result = $soc -> set_as_client ();
// Define new ref
if ( ! $error && ( preg_match ( '/^[\(]?PROV/i' , $this -> ref )))
{
2011-06-15 21:53:37 +02:00
$numref = $this -> getNextNumRef ( $soc );
2011-02-20 01:20:45 +01:00
}
else
{
2011-06-15 21:53:37 +02:00
$numref = " EXP " . $this -> id ;
2011-02-20 01:20:45 +01:00
}
2011-02-20 23:53:59 +01:00
2010-05-18 09:22:58 +02:00
$now = dol_now ();
2009-05-07 23:38:56 +02:00
// Validate
2010-03-13 16:52:30 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " expedition SET " ;
2011-06-15 21:53:37 +02:00
$sql .= " ref=' " . $numref . " ' " ;
2009-05-07 23:38:56 +02:00
$sql .= " , fk_statut = 1 " ;
2010-05-18 09:22:58 +02:00
$sql .= " , date_valid = ' " . $this -> db -> idate ( $now ) . " ' " ;
2009-05-07 23:38:56 +02:00
$sql .= " , fk_user_valid = " . $user -> id ;
$sql .= " WHERE rowid = " . $this -> id ;
2008-10-25 13:16:39 +02:00
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid update expedition sql= " . $sql );
2009-05-07 23:38:56 +02:00
$resql = $this -> db -> query ( $sql );
if ( ! $resql )
{
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid Echec update - 10 - sql= " . $sql , LOG_ERR );
2010-05-18 09:22:58 +02:00
$this -> error = $this -> db -> lasterror ();
2009-05-07 23:38:56 +02:00
$error ++ ;
}
2009-01-29 13:39:52 +01:00
2010-06-17 22:24:11 +02:00
// If stock increment is done on sending (recommanded choice)
2012-09-15 11:21:22 +02:00
if ( ! $error && ! empty ( $conf -> stock -> enabled ) && ! empty ( $conf -> global -> STOCK_CALCULATE_ON_SHIPMENT ))
2009-05-07 23:38:56 +02:00
{
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php' ;
2011-08-31 16:42:47 +02:00
2011-05-30 20:49:31 +02:00
$langs -> load ( " agenda " );
2010-06-17 22:24:11 +02:00
// Loop on each product line to add a stock movement
// TODO possibilite d'expedier a partir d'une propale ou autre origine
$sql = " SELECT cd.fk_product, cd.subprice, ed.qty, ed.fk_entrepot " ;
2011-11-08 00:03:19 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " commandedet as cd, " ;
$sql .= " " . MAIN_DB_PREFIX . " expeditiondet as ed " ;
2010-06-17 22:24:11 +02:00
$sql .= " WHERE ed.fk_expedition = " . $this -> id ;
$sql .= " AND cd.rowid = ed.fk_origin_line " ;
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid select details sql= " . $sql );
2010-06-17 22:24:11 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
2009-05-07 23:38:56 +02:00
{
2011-11-08 00:03:19 +01:00
$cpt = $this -> db -> num_rows ( $resql );
for ( $i = 0 ; $i < $cpt ; $i ++ )
2009-05-07 23:38:56 +02:00
{
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid movement index " . $i );
2010-06-17 22:24:11 +02:00
$obj = $this -> db -> fetch_object ( $resql );
2011-05-24 01:46:39 +02:00
//var_dump($this->lines[$i]);
$mouvS = new MouvementStock ( $this -> db );
// We decrement stock of product (and sub-products)
// We use warehouse selected for each line
2011-11-08 00:03:19 +01:00
$result = $mouvS -> livraison ( $user , $obj -> fk_product , $obj -> fk_entrepot , $obj -> qty , $obj -> subprice , $langs -> trans ( " ShipmentValidatedInDolibarr " , $numref ));
2011-05-24 01:46:39 +02:00
if ( $result < 0 ) { $error ++ ; break ; }
2009-05-07 23:38:56 +02:00
}
2010-06-17 22:24:11 +02:00
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> error ();
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::valid " . $this -> error , LOG_ERR );
2010-06-17 22:24:11 +02:00
return - 2 ;
2009-05-07 23:38:56 +02:00
}
}
if ( ! $error )
{
2012-08-22 23:11:24 +02:00
$this -> oldref = '' ;
// Rename directory if dir was a temporary ref
if ( preg_match ( '/^[\(]?PROV/i' , $this -> ref ))
{
// On renomme repertoire ($this->ref = ancienne ref, $numfa = nouvelle ref)
2013-11-05 15:29:33 +01:00
// in order not to lose the attached files
2012-08-22 23:11:24 +02:00
$oldref = dol_sanitizeFileName ( $this -> ref );
$newref = dol_sanitizeFileName ( $numref );
$dirsource = $conf -> expedition -> dir_output . '/sending/' . $oldref ;
$dirdest = $conf -> expedition -> dir_output . '/sending/' . $newref ;
if ( file_exists ( $dirsource ))
{
dol_syslog ( get_class ( $this ) . " ::valid rename dir " . $dirsource . " into " . $dirdest );
if ( @ rename ( $dirsource , $dirdest ))
{
$this -> oldref = $oldref ;
dol_syslog ( " Rename ok " );
// Suppression ancien fichier PDF dans nouveau rep
dol_delete_file ( $dirdest . '/' . $oldref . '*.*' );
}
}
2009-05-07 23:38:56 +02:00
}
}
2011-06-17 15:39:38 +02:00
// Set new ref and current status
2009-05-07 23:38:56 +02:00
if ( ! $error )
{
2011-06-15 21:53:37 +02:00
$this -> ref = $numref ;
2011-06-17 15:39:38 +02:00
$this -> statut = 1 ;
2009-05-07 23:38:56 +02:00
}
if ( ! $error )
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2009-05-07 23:38:56 +02:00
$interface = new Interfaces ( $this -> db );
2010-05-18 09:22:58 +02:00
$result = $interface -> run_triggers ( 'SHIPPING_VALIDATE' , $this , $user , $langs , $conf );
2009-05-07 23:38:56 +02:00
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
if ( ! $error )
{
$this -> db -> commit ();
return 1 ;
2008-10-25 13:16:39 +02:00
}
else
{
2010-05-18 09:22:58 +02:00
foreach ( $this -> errors as $errmsg )
{
dol_syslog ( get_class ( $this ) . " ::valid " . $errmsg , LOG_ERR );
$this -> error .= ( $this -> error ? ', ' . $errmsg : $errmsg );
}
2008-10-25 13:16:39 +02:00
$this -> db -> rollback ();
2010-05-18 09:22:58 +02:00
return - 1 * $error ;
2008-10-25 13:16:39 +02:00
}
}
/**
2011-09-29 22:32:28 +02:00
* Cree un bon de livraison a partir de l ' expedition
*
* @ param User $user Utilisateur
* @ return int < 0 if KO , >= 0 if OK
2008-10-25 13:16:39 +02:00
*/
function create_delivery ( $user )
{
global $conf ;
if ( $conf -> livraison_bon -> enabled )
{
2012-11-03 21:14:23 +01:00
if ( $this -> statut == 1 || $this -> statut == 2 )
2009-08-05 18:42:04 +02:00
{
2009-11-12 14:33:55 +01:00
// Expedition validee
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/livraison/class/livraison.class.php' ;
2010-03-13 16:52:30 +01:00
$delivery = new Livraison ( $this -> db );
$result = $delivery -> create_from_sending ( $user , $this -> id );
2009-08-05 18:42:04 +02:00
if ( $result > 0 )
{
return $result ;
}
else
{
2010-03-13 16:52:30 +01:00
$this -> error = $delivery -> error ;
2009-08-05 18:42:04 +02:00
return $result ;
}
}
else return 0 ;
2008-10-25 13:16:39 +02:00
}
else return 0 ;
}
/**
2012-01-04 23:56:10 +01:00
* Add a expedition line
*
* @ param int $entrepot_id Id of warehouse
* @ param int $id Id of source line
* @ param int $qty Quantity
* @ return int < 0 if KO , > 0 if OK
2008-10-25 13:16:39 +02:00
*/
2012-01-04 23:56:10 +01:00
function addline ( $entrepot_id , $id , $qty )
2008-10-25 13:16:39 +02:00
{
2011-09-17 21:49:50 +02:00
$num = count ( $this -> lines );
2010-03-13 16:52:30 +01:00
$line = new ExpeditionLigne ( $this -> db );
2008-10-25 13:16:39 +02:00
2010-03-13 16:52:30 +01:00
$line -> entrepot_id = $entrepot_id ;
$line -> origin_line_id = $id ;
$line -> qty = $qty ;
2008-10-25 13:16:39 +02:00
2010-12-15 08:12:28 +01:00
$this -> lines [ $num ] = $line ;
2008-10-25 13:16:39 +02:00
}
2010-05-17 16:13:03 +02:00
/**
2011-09-29 22:32:28 +02:00
* Update database
*
* @ param User $user User that modify
* @ param int $notrigger 0 = launch triggers after , 1 = disable triggers
* @ return int < 0 if KO , > 0 if OK
2010-05-17 16:13:03 +02:00
*/
function update ( $user = 0 , $notrigger = 0 )
{
global $conf , $langs ;
$error = 0 ;
// Clean parameters
if ( isset ( $this -> ref )) $this -> ref = trim ( $this -> ref );
if ( isset ( $this -> entity )) $this -> entity = trim ( $this -> entity );
if ( isset ( $this -> ref_customer )) $this -> ref_customer = trim ( $this -> ref_customer );
if ( isset ( $this -> socid )) $this -> socid = trim ( $this -> socid );
if ( isset ( $this -> fk_user_author )) $this -> fk_user_author = trim ( $this -> fk_user_author );
if ( isset ( $this -> fk_user_valid )) $this -> fk_user_valid = trim ( $this -> fk_user_valid );
2013-02-15 19:56:51 +01:00
if ( isset ( $this -> fk_delivery_address )) $this -> fk_delivery_address = trim ( $this -> fk_delivery_address );
2013-03-22 17:10:17 +01:00
if ( isset ( $this -> shipping_method_id )) $this -> shipping_method_id = trim ( $this -> shipping_method_id );
2010-05-17 16:13:03 +02:00
if ( isset ( $this -> tracking_number )) $this -> tracking_number = trim ( $this -> tracking_number );
if ( isset ( $this -> statut )) $this -> statut = trim ( $this -> statut );
if ( isset ( $this -> trueDepth )) $this -> trueDepth = trim ( $this -> trueDepth );
if ( isset ( $this -> trueWidth )) $this -> trueWidth = trim ( $this -> trueWidth );
if ( isset ( $this -> trueHeight )) $this -> trueHeight = trim ( $this -> trueHeight );
if ( isset ( $this -> size_units )) $this -> size_units = trim ( $this -> size_units );
if ( isset ( $this -> weight_units )) $this -> weight_units = trim ( $this -> weight_units );
if ( isset ( $this -> trueWeight )) $this -> weight = trim ( $this -> trueWeight );
2013-04-09 17:18:07 +02:00
if ( isset ( $this -> note_private )) $this -> note = trim ( $this -> note_private );
if ( isset ( $this -> note_public )) $this -> note = trim ( $this -> note_public );
2010-05-17 16:13:03 +02:00
if ( isset ( $this -> model_pdf )) $this -> model_pdf = trim ( $this -> model_pdf );
// Check parameters
// Put here code to add control on parameters values
// Update request
$sql = " UPDATE " . MAIN_DB_PREFIX . " expedition SET " ;
2010-08-24 16:42:18 +02:00
$sql .= " tms= " . ( dol_strlen ( $this -> tms ) != 0 ? " ' " . $this -> db -> idate ( $this -> tms ) . " ' " : 'null' ) . " , " ;
2011-02-24 19:11:12 +01:00
$sql .= " ref= " . ( isset ( $this -> ref ) ? " ' " . $this -> db -> escape ( $this -> ref ) . " ' " : " null " ) . " , " ;
$sql .= " ref_customer= " . ( isset ( $this -> ref_customer ) ? " ' " . $this -> db -> escape ( $this -> ref_customer ) . " ' " : " null " ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " fk_soc= " . ( isset ( $this -> socid ) ? $this -> socid : " null " ) . " , " ;
2010-08-24 16:42:18 +02:00
$sql .= " date_creation= " . ( dol_strlen ( $this -> date_creation ) != 0 ? " ' " . $this -> db -> idate ( $this -> date_creation ) . " ' " : 'null' ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " fk_user_author= " . ( isset ( $this -> fk_user_author ) ? $this -> fk_user_author : " null " ) . " , " ;
2010-08-24 16:42:18 +02:00
$sql .= " date_valid= " . ( dol_strlen ( $this -> date_valid ) != 0 ? " ' " . $this -> db -> idate ( $this -> date_valid ) . " ' " : 'null' ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " fk_user_valid= " . ( isset ( $this -> fk_user_valid ) ? $this -> fk_user_valid : " null " ) . " , " ;
2010-08-24 16:42:18 +02:00
$sql .= " date_expedition= " . ( dol_strlen ( $this -> date_expedition ) != 0 ? " ' " . $this -> db -> idate ( $this -> date_expedition ) . " ' " : 'null' ) . " , " ;
$sql .= " date_delivery= " . ( dol_strlen ( $this -> date_delivery ) != 0 ? " ' " . $this -> db -> idate ( $this -> date_delivery ) . " ' " : 'null' ) . " , " ;
2013-02-15 19:56:51 +01:00
$sql .= " fk_address= " . ( isset ( $this -> fk_delivery_address ) ? $this -> fk_delivery_address : " null " ) . " , " ;
2013-03-22 17:10:17 +01:00
$sql .= " fk_shipping_method= " . (( isset ( $this -> shipping_method_id ) && $this -> shipping_method_id > 0 ) ? $this -> shipping_method_id : " null " ) . " , " ;
2011-02-24 19:11:12 +01:00
$sql .= " tracking_number= " . ( isset ( $this -> tracking_number ) ? " ' " . $this -> db -> escape ( $this -> tracking_number ) . " ' " : " null " ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " fk_statut= " . ( isset ( $this -> statut ) ? $this -> statut : " null " ) . " , " ;
2012-11-18 16:21:38 +01:00
$sql .= " height= " . (( $this -> trueHeight != '' ) ? $this -> trueHeight : " null " ) . " , " ;
$sql .= " width= " . (( $this -> trueWidth != '' ) ? $this -> trueWidth : " null " ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " size_units= " . ( isset ( $this -> size_units ) ? $this -> size_units : " null " ) . " , " ;
2012-11-18 16:21:38 +01:00
$sql .= " size= " . (( $this -> trueDepth != '' ) ? $this -> trueDepth : " null " ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " weight_units= " . ( isset ( $this -> weight_units ) ? $this -> weight_units : " null " ) . " , " ;
2012-11-18 16:21:38 +01:00
$sql .= " weight= " . (( $this -> trueWeight != '' ) ? $this -> trueWeight : " null " ) . " , " ;
2013-04-09 17:18:07 +02:00
$sql .= " note_private= " . ( isset ( $this -> note_private ) ? " ' " . $this -> db -> escape ( $this -> note_private ) . " ' " : " null " ) . " , " ;
$sql .= " note_public= " . ( isset ( $this -> note_public ) ? " ' " . $this -> db -> escape ( $this -> note_public ) . " ' " : " null " ) . " , " ;
2011-02-24 19:11:12 +01:00
$sql .= " model_pdf= " . ( isset ( $this -> model_pdf ) ? " ' " . $this -> db -> escape ( $this -> model_pdf ) . " ' " : " null " ) . " , " ;
2010-05-17 16:13:03 +02:00
$sql .= " entity= " . $conf -> entity ;
$sql .= " WHERE rowid= " . $this -> id ;
$this -> db -> begin ();
dol_syslog ( get_class ( $this ) . " ::update sql= " . $sql , LOG_DEBUG );
$resql = $this -> db -> query ( $sql );
if ( ! $resql ) { $error ++ ; $this -> errors [] = " Error " . $this -> db -> lasterror (); }
if ( ! $error )
{
if ( ! $notrigger )
{
2010-05-18 09:22:58 +02:00
// Call triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2010-05-18 09:22:58 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'SHIPPING_MODIFY' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// End call triggers
2010-05-17 16:13:03 +02:00
}
}
// Commit or rollback
if ( $error )
{
foreach ( $this -> errors as $errmsg )
{
dol_syslog ( get_class ( $this ) . " ::update " . $errmsg , LOG_ERR );
$this -> error .= ( $this -> error ? ', ' . $errmsg : $errmsg );
}
$this -> db -> rollback ();
return - 1 * $error ;
}
else
{
$this -> db -> commit ();
return 1 ;
}
}
/**
2014-04-26 17:27:59 +02:00
* Delete shipment .
* Warning , do not delete a shipment if a delivery is linked to ( with table llx_element_element )
2011-09-29 22:32:28 +02:00
*
2014-04-26 17:27:59 +02:00
* @ return int > 0 if OK , 0 if deletion done but failed to delete files , < 0 if KO
2008-10-25 13:16:39 +02:00
*/
function delete ()
{
2011-06-02 19:20:24 +02:00
global $conf , $langs , $user ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2013-08-07 15:08:30 +02:00
2011-12-05 19:41:38 +01:00
$error = 0 ;
2013-08-07 15:08:30 +02:00
2014-04-26 17:27:59 +02:00
// Add a protection to refuse deleting if shipment has at least one delivery
$this -> fetchObjectLinked ( $this -> id , 'shipping' , 0 , 'delivery' ); // Get deliveries linked to this shipment
if ( count ( $this -> linkedObjectsIds ) > 0 )
{
$this -> error = 'ErrorThereIsSomeDeliveries' ;
return - 1 ;
}
2008-10-25 13:16:39 +02:00
$this -> db -> begin ();
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
// Stock control
if ( $conf -> stock -> enabled && $conf -> global -> STOCK_CALCULATE_ON_SHIPMENT && $this -> statut > 0 )
2008-10-25 13:16:39 +02:00
{
2013-06-20 18:37:23 +02:00
require_once ( DOL_DOCUMENT_ROOT . " /product/stock/class/mouvementstock.class.php " );
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
$langs -> load ( " agenda " );
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
// Loop on each product line to add a stock movement
$sql = " SELECT cd.fk_product, cd.subprice, ed.qty, ed.fk_entrepot " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commandedet as cd, " ;
$sql .= " " . MAIN_DB_PREFIX . " expeditiondet as ed " ;
$sql .= " WHERE ed.fk_expedition = " . $this -> id ;
$sql .= " AND cd.rowid = ed.fk_origin_line " ;
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
dol_syslog ( get_class ( $this ) . " ::delete select details sql= " . $sql );
$resql = $this -> db -> query ( $sql );
if ( $resql )
2008-10-25 23:18:53 +02:00
{
2013-06-20 18:37:23 +02:00
$cpt = $this -> db -> num_rows ( $resql );
for ( $i = 0 ; $i < $cpt ; $i ++ )
2009-05-07 23:38:56 +02:00
{
2013-06-20 18:37:23 +02:00
dol_syslog ( get_class ( $this ) . " ::delete movement index " . $i );
$obj = $this -> db -> fetch_object ( $resql );
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
//var_dump($this->lines[$i]);
$mouvS = new MouvementStock ( $this -> db );
// We decrement stock of product (and sub-products)
// We use warehouse selected for each line
$result = $mouvS -> reception ( $user , $obj -> fk_product , $obj -> fk_entrepot , $obj -> qty , $obj -> subprice , $langs -> trans ( " ShipmentDeletedInDolibarr " , $this -> ref ));
if ( $result < 0 )
2008-05-26 23:27:50 +02:00
{
2013-06-20 18:37:23 +02:00
$error ++ ;
break ;
}
}
}
else
{
$error ++ ;
}
}
2013-08-07 15:08:30 +02:00
2014-04-26 17:27:59 +02:00
if ( ! $error )
2013-06-20 18:37:23 +02:00
{
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " expeditiondet " ;
$sql .= " WHERE fk_expedition = " . $this -> id ;
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
if ( $this -> db -> query ( $sql ) )
{
// Delete linked object
$res = $this -> deleteObjectLinked ();
if ( $res < 0 ) $error ++ ;
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
if ( ! $error )
{
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " expedition " ;
$sql .= " WHERE rowid = " . $this -> id ;
2013-08-07 15:08:30 +02:00
2013-06-20 18:37:23 +02:00
if ( $this -> db -> query ( $sql ))
{
2014-04-26 17:27:59 +02:00
// Call triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'SHIPPING_DELETE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// End call triggers
2013-08-07 15:08:30 +02:00
2014-04-26 17:27:59 +02:00
if ( ! $error )
{
$this -> db -> commit ();
// We delete PDFs
$ref = dol_sanitizeFileName ( $this -> ref );
if ( ! empty ( $conf -> expedition -> dir_output ))
2009-04-05 21:30:37 +02:00
{
2014-04-26 17:27:59 +02:00
$dir = $conf -> expedition -> dir_output . '/sending/' . $ref ;
$file = $dir . '/' . $ref . '.pdf' ;
if ( file_exists ( $file ))
2013-06-20 18:37:23 +02:00
{
2014-04-26 17:27:59 +02:00
if ( ! dol_delete_file ( $file ))
{
return 0 ;
}
2013-06-20 18:37:23 +02:00
}
2014-04-26 17:27:59 +02:00
if ( file_exists ( $dir ))
2013-06-20 18:37:23 +02:00
{
2014-04-26 17:27:59 +02:00
if ( ! dol_delete_dir ( $dir ))
{
$this -> error = $langs -> trans ( " ErrorCanNotDeleteDir " , $dir );
return 0 ;
}
2013-06-20 18:37:23 +02:00
}
2009-04-05 21:30:37 +02:00
}
2013-08-07 15:08:30 +02:00
2014-04-26 17:27:59 +02:00
return 1 ;
}
else
{
$this -> db -> rollback ();
return - 1 ;
}
2013-06-20 18:37:23 +02:00
}
else
{
$this -> error = $this -> db -> lasterror () . " - sql= $sql " ;
$this -> db -> rollback ();
return - 3 ;
2008-05-26 23:27:50 +02:00
}
}
2009-04-05 21:30:37 +02:00
else
{
2009-12-11 17:31:42 +01:00
$this -> error = $this -> db -> lasterror () . " - sql= $sql " ;
2009-04-05 21:30:37 +02:00
$this -> db -> rollback ();
2013-06-20 18:37:23 +02:00
return - 2 ;
2009-04-05 21:30:37 +02:00
}
2009-05-07 23:38:56 +02:00
}
2008-05-26 23:27:50 +02:00
else
{
2009-12-11 17:31:42 +01:00
$this -> error = $this -> db -> lasterror () . " - sql= $sql " ;
2008-05-26 23:27:50 +02:00
$this -> db -> rollback ();
2013-06-20 18:37:23 +02:00
return - 1 ;
2008-05-26 23:27:50 +02:00
}
}
2013-08-07 15:08:30 +02:00
else
2008-05-26 23:27:50 +02:00
{
$this -> db -> rollback ();
return - 1 ;
}
2013-08-07 15:08:30 +02:00
2008-05-26 23:27:50 +02:00
}
2009-11-12 14:33:55 +01:00
/**
2011-09-29 22:32:28 +02:00
* Load lines
2009-11-12 14:33:55 +01:00
*
2011-12-16 15:29:58 +01:00
* @ return int > 0 if OK , Otherwise if KO
2009-11-12 14:33:55 +01:00
*/
2007-05-16 00:47:58 +02:00
function fetch_lines ()
2006-08-26 16:13:37 +02:00
{
2010-09-07 00:31:36 +02:00
// TODO: recuperer les champs du document associe a part
2012-08-25 15:21:34 +02:00
$sql = " SELECT cd.rowid, cd.fk_product, cd.label as custom_label, cd.description, cd.qty as qty_asked " ;
2012-03-08 22:30:45 +01:00
$sql .= " , cd.total_ht, cd.total_localtax1, cd.total_localtax2, cd.total_ttc, cd.total_tva " ;
2013-04-27 13:45:25 +02:00
$sql .= " , cd.tva_tx, cd.localtax1_tx, cd.localtax2_tx, cd.price, cd.subprice, cd.remise_percent " ;
2008-01-17 11:27:59 +01:00
$sql .= " , ed.qty as qty_shipped, ed.fk_origin_line, ed.fk_entrepot " ;
2012-11-18 16:21:38 +01:00
$sql .= " , p.ref as product_ref, p.label as product_label, p.fk_product_type " ;
$sql .= " , p.weight, p.weight_units, p.length, p.length_units, p.surface, p.surface_units, p.volume, p.volume_units " ;
2010-05-13 01:03:33 +02:00
$sql .= " FROM ( " . MAIN_DB_PREFIX . " expeditiondet as ed, " ;
2010-09-07 00:31:36 +02:00
$sql .= " " . MAIN_DB_PREFIX . " commandedet as cd) " ;
2010-05-13 01:03:33 +02:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " product as p ON p.rowid = cd.fk_product " ;
2007-05-16 00:47:58 +02:00
$sql .= " WHERE ed.fk_expedition = " . $this -> id ;
2010-09-07 00:31:36 +02:00
$sql .= " AND ed.fk_origin_line = cd.rowid " ;
2008-05-26 23:27:50 +02:00
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch_lines sql= " . $sql );
2006-08-26 16:13:37 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php' ;
2012-03-14 14:00:20 +01:00
2006-08-26 16:13:37 +02:00
$num = $this -> db -> num_rows ( $resql );
$i = 0 ;
2012-03-14 14:00:20 +01:00
2012-07-02 19:30:37 +02:00
$this -> total_ht = 0 ;
$this -> total_tva = 0 ;
$this -> total_ttc = 0 ;
$this -> total_localtax1 = 0 ;
2012-03-08 22:30:45 +01:00
$this -> total_localtax2 = 0 ;
2012-03-14 14:00:20 +01:00
2006-08-26 16:13:37 +02:00
while ( $i < $num )
{
2010-03-13 16:52:30 +01:00
$line = new ExpeditionLigne ( $this -> db );
2006-08-26 16:13:37 +02:00
$obj = $this -> db -> fetch_object ( $resql );
2008-05-26 23:27:50 +02:00
2010-09-09 16:06:15 +02:00
$line -> fk_origin_line = $obj -> fk_origin_line ;
2012-02-20 23:58:36 +01:00
$line -> origin_line_id = $obj -> fk_origin_line ; // TODO deprecated
2010-03-13 16:52:30 +01:00
$line -> entrepot_id = $obj -> fk_entrepot ;
$line -> fk_product = $obj -> fk_product ;
$line -> fk_product_type = $obj -> fk_product_type ;
2011-05-29 15:15:37 +02:00
$line -> ref = $obj -> product_ref ; // TODO deprecated
$line -> product_ref = $obj -> product_ref ;
2012-02-20 23:58:36 +01:00
$line -> product_label = $obj -> product_label ;
$line -> libelle = $obj -> product_label ; // TODO deprecated
2012-08-25 15:21:34 +02:00
$line -> label = $obj -> custom_label ;
2010-03-13 16:52:30 +01:00
$line -> description = $obj -> description ;
$line -> qty_asked = $obj -> qty_asked ;
$line -> qty_shipped = $obj -> qty_shipped ;
$line -> weight = $obj -> weight ;
$line -> weight_units = $obj -> weight_units ;
2012-11-18 16:21:38 +01:00
$line -> length = $obj -> length ;
$line -> length_units = $obj -> length_units ;
$line -> surface = $obj -> surface ;
$line -> surface_units = $obj -> surface_units ;
2010-03-13 16:52:30 +01:00
$line -> volume = $obj -> volume ;
$line -> volume_units = $obj -> volume_units ;
2012-03-14 14:00:20 +01:00
2013-02-17 18:40:09 +01:00
// For invoicing
2013-07-19 17:27:08 +02:00
$tabprice = calcul_price_total ( $obj -> qty_shipped , $obj -> subprice , $obj -> remise_percent , $obj -> tva_tx , $obj -> localtax1_tx , $obj -> localtax2_tx , 0 , 'HT' , $info_bits , $obj -> fk_product_type ); // We force type to 0
2013-02-17 18:40:09 +01:00
$line -> desc = $obj -> description ; // We need ->desc because some code into CommonObject use desc (property defined for other elements)
2012-03-08 22:30:45 +01:00
$line -> qty = $obj -> qty_shipped ;
2013-07-19 17:27:08 +02:00
$line -> total_ht = $tabprice [ 0 ];
$line -> total_localtax1 = $tabprice [ 9 ];
$line -> total_localtax2 = $tabprice [ 10 ];
$line -> total_ttc = $tabprice [ 2 ];
$line -> total_tva = $tabprice [ 1 ];
2012-03-08 22:30:45 +01:00
$line -> tva_tx = $obj -> tva_tx ;
$line -> localtax1_tx = $obj -> localtax1_tx ;
$line -> localtax2_tx = $obj -> localtax2_tx ;
$line -> price = $obj -> price ;
$line -> subprice = $obj -> subprice ;
$line -> remise_percent = $obj -> remise_percent ;
2012-03-14 14:00:20 +01:00
2012-07-02 19:30:37 +02:00
$this -> total_ht += $tabprice [ 0 ];
$this -> total_tva += $tabprice [ 1 ];
$this -> total_ttc += $tabprice [ 2 ];
$this -> total_localtax1 += $tabprice [ 9 ];
2012-03-08 22:30:45 +01:00
$this -> total_localtax2 += $tabprice [ 10 ];
2012-03-14 14:00:20 +01:00
2010-09-09 16:06:15 +02:00
$this -> lines [ $i ] = $line ;
2010-09-19 18:25:24 +02:00
2006-08-26 16:13:37 +02:00
$i ++ ;
}
$this -> db -> free ( $resql );
2007-05-16 00:47:58 +02:00
return 1 ;
2006-08-26 16:13:37 +02:00
}
2007-05-16 00:47:58 +02:00
else
{
$this -> error = $this -> db -> error ();
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . '::fetch_lines: Error ' . $this -> error , LOG_ERR );
2008-05-26 23:27:50 +02:00
return - 3 ;
}
}
2010-05-27 00:06:27 +02:00
/**
2011-12-16 15:29:58 +01:00
* Return clicable link of object ( with eventually picto )
*
* @ param int $withpicto Add picto into link
* @ param int $option Where point the link
* @ param int $max Max length to show
* @ param int $short Use short labels
* @ return string String with URL
*/
2011-05-26 17:33:33 +02:00
function getNomUrl ( $withpicto = 0 , $option = 0 , $max = 0 , $short = 0 )
2010-05-27 00:06:27 +02:00
{
global $langs ;
$result = '' ;
2011-08-31 16:42:47 +02:00
2011-05-26 17:33:33 +02:00
$url = DOL_URL_ROOT . '/expedition/fiche.php?id=' . $this -> id ;
2011-08-31 16:42:47 +02:00
2011-05-26 17:33:33 +02:00
if ( $short ) return $url ;
2010-05-27 00:06:27 +02:00
2011-05-26 17:33:33 +02:00
$linkstart = '<a href="' . $url . '">' ;
$linkend = '</a>' ;
2010-05-27 00:06:27 +02:00
$picto = 'sending' ;
$label = $langs -> trans ( " ShowSending " ) . ': ' . $this -> ref ;
2011-05-26 17:33:33 +02:00
if ( $withpicto ) $result .= ( $linkstart . img_object ( $label , $picto ) . $linkend );
2010-05-27 00:06:27 +02:00
if ( $withpicto && $withpicto != 2 ) $result .= ' ' ;
2011-05-26 17:33:33 +02:00
$result .= $linkstart . $this -> ref . $linkend ;
2010-05-27 00:06:27 +02:00
return $result ;
}
2012-01-04 23:56:10 +01:00
2008-05-26 23:27:50 +02:00
/**
2011-12-16 15:29:58 +01:00
* Return status label
*
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Long label , 5 = Short label + Picto
* @ return string Libelle
*/
2008-05-26 23:27:50 +02:00
function getLibStatut ( $mode = 0 )
{
return $this -> LibStatut ( $this -> statut , $mode );
2006-08-26 16:13:37 +02:00
}
2008-05-26 23:27:50 +02:00
2006-07-14 15:26:19 +02:00
/**
2011-09-29 22:32:28 +02:00
* Return label of a status
*
* @ param int $statut Id statut
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Long label , 5 = Short label + Picto
* @ return string Label of status
2006-07-14 15:26:19 +02:00
*/
2008-05-26 23:27:50 +02:00
function LibStatut ( $statut , $mode )
{
2006-07-14 15:26:19 +02:00
global $langs ;
2008-05-26 23:27:50 +02:00
if ( $mode == 0 )
{
2009-12-17 16:52:37 +01:00
if ( $statut == 0 ) return $langs -> trans ( $this -> statuts [ $statut ]);
2012-03-13 17:28:55 +01:00
if ( $statut == 1 ) return $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 2 ) return $langs -> trans ( $this -> statuts [ $statut ]);
2006-07-14 15:26:19 +02:00
}
2008-05-26 23:27:50 +02:00
if ( $mode == 1 )
{
2011-05-26 17:33:33 +02:00
if ( $statut == 0 ) return $langs -> trans ( 'StatusSendingDraftShort' );
if ( $statut == 1 ) return $langs -> trans ( 'StatusSendingValidatedShort' );
2012-03-13 17:28:55 +01:00
if ( $statut == 2 ) return $langs -> trans ( 'StatusSendingProcessedShort' );
2011-05-26 17:33:33 +02:00
}
if ( $mode == 3 )
{
if ( $statut == 0 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut0' );
if ( $statut == 1 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut4' );
2012-03-13 17:28:55 +01:00
if ( $statut == 2 ) return img_picto ( $langs -> trans ( 'StatusSendingProcessed' ), 'statut6' );
2008-05-26 23:27:50 +02:00
}
if ( $mode == 4 )
{
2011-05-26 17:33:33 +02:00
if ( $statut == 0 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut0' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 1 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut4' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
2012-03-13 17:28:55 +01:00
if ( $statut == 2 ) return img_picto ( $langs -> trans ( 'StatusSendingProcessed' ), 'statut6' ) . ' ' . $langs -> trans ( 'StatusSendingProcessed' );
2008-05-26 23:27:50 +02:00
}
if ( $mode == 5 )
{
2009-12-17 16:52:37 +01:00
if ( $statut == 0 ) return $langs -> trans ( 'StatusSendingDraftShort' ) . ' ' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut0' );
if ( $statut == 1 ) return $langs -> trans ( 'StatusSendingValidatedShort' ) . ' ' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut4' );
2012-03-13 17:28:55 +01:00
if ( $statut == 2 ) return $langs -> trans ( 'StatusSendingProcessedShort' ) . ' ' . img_picto ( $langs -> trans ( 'StatusSendingProcessedShort' ), 'statut6' );
2008-05-17 03:52:24 +02:00
}
2008-05-26 23:27:50 +02:00
}
2006-08-26 15:47:10 +02:00
/**
2011-09-20 19:19:46 +02:00
* Initialise an instance with random values .
* Used to build previews or test instances .
* id must be 0 if object instance is a specimen .
*
* @ return void
2006-08-26 15:47:10 +02:00
*/
function initAsSpecimen ()
{
2009-04-30 18:28:53 +02:00
global $user , $langs , $conf ;
2006-08-26 15:47:10 +02:00
2011-08-31 16:42:47 +02:00
$now = dol_now ();
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::initAsSpecimen " );
2008-10-25 13:16:39 +02:00
2006-08-26 15:47:10 +02:00
// Charge tableau des produits prodids
$prodids = array ();
2009-04-30 18:28:53 +02:00
$sql = " SELECT rowid " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " product " ;
2012-02-11 10:18:09 +01:00
$sql .= " WHERE entity IN ( " . getEntity ( 'product' , 1 ) . " ) " ;
2006-08-26 15:47:10 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$num_prods = $this -> db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num_prods )
{
$i ++ ;
$row = $this -> db -> fetch_row ( $resql );
$prodids [ $i ] = $row [ 0 ];
}
}
2008-05-17 03:52:24 +02:00
$order = new Commande ( $this -> db );
$order -> initAsSpecimen ();
2008-05-26 23:27:50 +02:00
2009-11-12 14:33:55 +01:00
// Initialise parametres
2006-08-26 15:47:10 +02:00
$this -> id = 0 ;
2012-04-22 00:41:13 +02:00
$this -> ref = 'SPECIMEN' ;
2006-08-26 15:47:10 +02:00
$this -> specimen = 1 ;
2008-05-26 23:27:50 +02:00
$this -> statut = 1 ;
2011-08-31 16:42:47 +02:00
$this -> livraison_id = 0 ;
$this -> date = $now ;
$this -> date_creation = $now ;
$this -> date_valid = $now ;
$this -> date_delivery = $now ;
$this -> date_expedition = $now + 24 * 3600 ;
2008-05-26 23:27:50 +02:00
$this -> entrepot_id = 0 ;
2009-07-08 12:02:57 +02:00
$this -> fk_delivery_address = 0 ;
2010-09-19 18:25:24 +02:00
$this -> socid = 1 ;
2006-08-26 15:47:10 +02:00
2008-05-17 03:52:24 +02:00
$this -> commande_id = 0 ;
$this -> commande = $order ;
2008-05-26 23:27:50 +02:00
2010-09-19 18:25:24 +02:00
$this -> origin_id = 1 ;
$this -> origin = 'commande' ;
2013-04-11 21:53:41 +02:00
2013-04-09 17:18:07 +02:00
$this -> note_private = 'Private note' ;
$this -> note_public = 'Public note' ;
2010-09-19 18:25:24 +02:00
2006-08-26 15:47:10 +02:00
$nbp = 5 ;
$xnbp = 0 ;
while ( $xnbp < $nbp )
{
2010-12-15 08:12:28 +01:00
$line = new ExpeditionLigne ( $this -> db );
$line -> desc = $langs -> trans ( " Description " ) . " " . $xnbp ;
$line -> libelle = $langs -> trans ( " Description " ) . " " . $xnbp ;
$line -> qty = 10 ;
$line -> qty_asked = 5 ;
$line -> qty_shipped = 4 ;
$line -> fk_product = $this -> commande -> lines [ $xnbp ] -> fk_product ;
2009-01-29 13:39:52 +01:00
2010-12-15 08:12:28 +01:00
$this -> lines [] = $line ;
2006-08-26 15:47:10 +02:00
$xnbp ++ ;
}
2009-01-29 13:39:52 +01:00
2008-05-26 23:27:50 +02:00
}
2009-03-23 18:38:04 +01:00
2010-05-13 01:03:33 +02:00
/**
2011-12-16 15:29:58 +01:00
* Set the planned delivery date
2011-09-29 22:32:28 +02:00
*
2012-01-04 23:56:10 +01:00
* @ param User $user Objet utilisateur qui modifie
* @ param timestamp $date_livraison Date de livraison
* @ return int < 0 if KO , > 0 if OK
2010-05-13 01:03:33 +02:00
*/
function set_date_livraison ( $user , $date_livraison )
{
if ( $user -> rights -> expedition -> creer )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " expedition " ;
$sql .= " SET date_delivery = " . ( $date_livraison ? " ' " . $this -> db -> idate ( $date_livraison ) . " ' " : 'null' );
$sql .= " WHERE rowid = " . $this -> id ;
2012-01-04 23:56:10 +01:00
dol_syslog ( get_class ( $this ) . " ::set_date_livraison sql= " . $sql , LOG_DEBUG );
2010-05-13 01:03:33 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$this -> date_delivery = $date_livraison ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
2013-08-07 15:08:30 +02:00
dol_syslog ( get_class ( $this ) . " ::set_date_livraison " . $this -> error , LOG_ERR );
2010-05-13 01:03:33 +02:00
return - 1 ;
}
}
else
{
return - 2 ;
}
}
2009-03-23 18:38:04 +01:00
/**
2011-12-16 15:29:58 +01:00
* Fetch deliveries method and return an array . Load array this -> meths ( rowid => label ) .
2011-09-29 22:32:28 +02:00
*
2011-12-16 15:29:58 +01:00
* @ return void
2008-10-25 23:18:53 +02:00
*/
2008-10-25 13:16:39 +02:00
function fetch_delivery_methods ()
{
2009-03-23 18:38:04 +01:00
global $langs ;
2008-10-25 13:16:39 +02:00
$meths = array ();
2009-03-23 18:38:04 +01:00
$sql = " SELECT em.rowid, em.code, em.libelle " ;
2010-09-06 02:02:55 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " c_shipment_mode as em " ;
2009-03-23 18:38:04 +01:00
$sql .= " WHERE em.active = 1 " ;
$sql .= " ORDER BY em.libelle ASC " ;
2008-10-25 13:16:39 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
2008-10-29 11:51:52 +01:00
{
2009-03-23 18:38:04 +01:00
$label = $langs -> trans ( 'SendingMethod' . $obj -> code );
$this -> meths [ $obj -> rowid ] = ( $label != 'SendingMethod' . $obj -> code ? $label : $obj -> libelle );
2008-10-29 11:51:52 +01:00
}
2008-10-25 13:16:39 +02:00
}
}
2009-01-29 13:39:52 +01:00
2013-02-21 23:40:25 +01:00
/**
* Fetch all deliveries method and return an array . Load array this -> listmeths .
2013-04-11 21:53:41 +02:00
*
2013-02-23 10:20:31 +01:00
* @ param id $id only this carrier , all if none
2013-02-21 23:40:25 +01:00
* @ return void
*/
2013-02-23 10:20:31 +01:00
function list_delivery_methods ( $id = '' )
2013-02-21 23:40:25 +01:00
{
global $langs ;
2013-04-11 21:53:41 +02:00
2013-04-20 11:03:36 +02:00
$this -> listmeths = array ();
2013-02-21 23:40:25 +01:00
$i = 0 ;
2013-02-22 14:18:51 +01:00
$sql = " SELECT em.rowid, em.code, em.libelle, em.description, em.tracking, em.active " ;
2013-02-21 23:40:25 +01:00
$sql .= " FROM " . MAIN_DB_PREFIX . " c_shipment_mode as em " ;
2013-02-23 15:23:33 +01:00
if ( $id != '' ) $sql .= " WHERE em.rowid= " . $id ;
2013-02-21 23:40:25 +01:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
2013-04-04 13:58:33 +02:00
$this -> listmeths [ $i ][ 'rowid' ] = $obj -> rowid ;
$this -> listmeths [ $i ][ 'code' ] = $obj -> code ;
2013-02-21 23:40:25 +01:00
$label = $langs -> trans ( 'SendingMethod' . $obj -> code );
2013-04-04 13:58:33 +02:00
$this -> listmeths [ $i ][ 'libelle' ] = ( $label != 'SendingMethod' . $obj -> code ? $label : $obj -> libelle );
$this -> listmeths [ $i ][ 'description' ] = $obj -> description ;
2013-04-20 11:03:36 +02:00
$this -> listmeths [ $i ][ 'tracking' ] = $obj -> tracking ;
2013-04-04 13:58:33 +02:00
$this -> listmeths [ $i ][ 'active' ] = $obj -> active ;
2013-02-21 23:40:25 +01:00
$i ++ ;
}
}
}
2013-02-23 15:23:33 +01:00
/**
* Update / create delivery method .
2013-04-11 21:53:41 +02:00
*
2013-04-04 13:58:33 +02:00
* @ param string $id id method to activate
2013-04-11 21:53:41 +02:00
*
2013-02-23 15:23:33 +01:00
* @ return void
*/
function update_delivery_method ( $id = '' )
{
if ( $id == '' )
{
2013-03-17 14:28:57 +01:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " c_shipment_mode (code, libelle, description, tracking) " ;
2013-04-04 13:58:33 +02:00
$sql .= " VALUES (' " . $this -> update [ 'code' ] . " ',' " . $this -> update [ 'libelle' ] . " ',' " . $this -> update [ 'description' ] . " ',' " . $this -> update [ 'tracking' ] . " ') " ;
2013-02-23 15:23:33 +01:00
$resql = $this -> db -> query ( $sql );
}
else
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " c_shipment_mode SET " ;
2013-04-04 13:58:33 +02:00
$sql .= " code=' " . $this -> update [ 'code' ] . " ' " ;
$sql .= " ,libelle=' " . $this -> update [ 'libelle' ] . " ' " ;
$sql .= " ,description=' " . $this -> update [ 'description' ] . " ' " ;
$sql .= " ,tracking=' " . $this -> update [ 'tracking' ] . " ' " ;
2013-02-23 15:23:33 +01:00
$sql .= " WHERE rowid= " . $id ;
$resql = $this -> db -> query ( $sql );
}
2013-03-17 14:28:57 +01:00
if ( $resql < 0 ) dol_print_error ( $this -> db , '' );
2013-02-23 15:23:33 +01:00
}
2013-02-21 23:40:25 +01:00
/**
* Activate delivery method .
2013-04-11 21:53:41 +02:00
*
2013-02-21 23:40:25 +01:00
* @ param id $id id method to activate
2013-04-11 21:53:41 +02:00
*
2013-02-21 23:40:25 +01:00
* @ return void
*/
function activ_delivery_method ( $id )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'c_shipment_mode SET active=1' ;
$sql .= ' WHERE rowid=' . $id ;
$resql = $this -> db -> query ( $sql );
}
/**
* DesActivate delivery method .
2013-04-11 21:53:41 +02:00
*
2013-02-21 23:40:25 +01:00
* @ param id $id id method to desactivate
2013-04-11 21:53:41 +02:00
*
2013-02-21 23:40:25 +01:00
* @ return void
*/
function disable_delivery_method ( $id )
{
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'c_shipment_mode SET active=0' ;
$sql .= ' WHERE rowid=' . $id ;
$resql = $this -> db -> query ( $sql );
}
2009-02-03 03:39:28 +01:00
/**
2011-12-16 15:29:58 +01:00
* Get tracking url status
2012-01-04 23:56:10 +01:00
*
* @ param string $value Value
* @ return void
2008-10-25 23:18:53 +02:00
*/
2011-05-25 18:53:39 +02:00
function GetUrlTrackingStatus ( $value = '' )
2008-10-25 13:16:39 +02:00
{
2013-03-22 17:10:17 +01:00
if ( ! empty ( $this -> shipping_method_id ))
2008-10-25 13:16:39 +02:00
{
2013-02-22 14:18:51 +01:00
$sql = " SELECT em.code, em.tracking " ;
2011-05-25 18:53:39 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " c_shipment_mode as em " ;
2013-03-22 17:10:17 +01:00
$sql .= " WHERE em.rowid = " . $this -> shipping_method_id ;
2011-06-19 21:47:09 +02:00
2011-05-25 18:53:39 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
2008-10-29 13:04:37 +01:00
{
2011-05-25 18:53:39 +02:00
if ( $obj = $this -> db -> fetch_object ( $resql ))
{
2013-04-19 20:20:10 +02:00
$tracking = $obj -> tracking ;
2011-05-25 18:53:39 +02:00
}
2008-10-29 13:04:37 +01:00
}
2008-10-25 13:16:39 +02:00
}
2013-04-20 11:03:36 +02:00
if ( ! empty ( $tracking ) && ! empty ( $value ))
2013-04-19 20:20:10 +02:00
{
$url = str_replace ( '{TRACKID}' , $value , $tracking );
$this -> tracking_url = sprintf ( '<a target="_blank" href="%s">' . ( $value ? $value : 'url' ) . '</a>' , $url , $url );
}
else
{
$this -> tracking_url = $value ;
}
}
2012-03-14 14:00:20 +01:00
2012-07-02 19:30:37 +02:00
/**
* Classify the shipping as invoiced
*
* @ return int < 0 if ko , > 0 if ok
*/
function set_billed ()
{
global $conf ;
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'expedition SET fk_statut=2' ;
$sql .= ' WHERE rowid = ' . $this -> id . ' AND fk_statut > 0 ;' ;
if ( $this -> db -> query ( $sql ) )
2012-03-13 17:28:55 +01:00
{
2012-07-02 19:30:37 +02:00
//TODO: Option to set order billed if 100% of order is shipped
return 1 ;
}
else
{
dol_print_error ( $this -> db );
return - 1 ;
}
}
2012-03-14 14:00:20 +01:00
2003-11-13 18:36:45 +01:00
}
2006-11-11 01:46:15 +01:00
/**
2011-09-29 22:32:28 +02:00
* Classe de gestion des lignes de bons d ' expedition
2008-05-26 23:27:50 +02:00
*/
2003-11-13 18:36:45 +01:00
class ExpeditionLigne
{
2006-06-23 21:05:33 +02:00
var $db ;
2008-05-26 23:27:50 +02:00
2006-05-30 15:49:03 +02:00
// From llx_expeditiondet
2006-06-23 21:05:33 +02:00
var $qty ;
2008-06-14 12:53:12 +02:00
var $qty_shipped ;
2006-06-23 21:05:33 +02:00
var $fk_product ;
2008-05-26 23:27:50 +02:00
2008-01-17 11:27:59 +01:00
// From llx_commandedet or llx_propaldet
2008-06-14 12:53:12 +02:00
var $qty_asked ;
2006-06-23 21:05:33 +02:00
var $libelle ; // Label produit
var $product_desc ; // Description produit
var $ref ;
2012-03-14 14:00:20 +01:00
2012-03-08 22:30:45 +01:00
// Invoicing
2012-07-02 19:30:37 +02:00
var $remise_percent ;
var $total_ht ; // Total net of tax
var $total_ttc ; // Total with tax
var $total_tva ; // Total VAT
var $total_localtax1 ; // Total Local tax 1
2012-03-08 22:30:45 +01:00
var $total_localtax2 ; // Total Local tax 2
2006-11-11 01:46:15 +01:00
2012-01-04 23:56:10 +01:00
2011-12-16 15:29:58 +01:00
/**
* Constructor
*
* @ param DoliDB $db Database handler
*/
2012-07-30 17:17:33 +02:00
function __construct ( $db )
2006-05-30 15:49:03 +02:00
{
2012-01-04 23:56:10 +01:00
$this -> db = $db ;
2006-05-30 15:49:03 +02:00
}
2003-11-13 18:36:45 +01:00
}
?>