2004-11-30 20:25:48 +01:00
< ? php
2012-03-18 11:13:01 +01:00
/* Copyright ( C ) 2003 - 2006 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2004 - 2012 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ capnetworks . com >
2012-03-18 11:13:01 +01:00
* Copyright ( C ) 2007 Franky Van Liedekerke < franky . van . liedekerke @ telenet . be >
2013-03-12 15:06:38 +01:00
* Copyright ( C ) 2010 - 2013 Juanjo Menent < jmenent @ 2 byte . es >
2013-04-08 17:17:13 +02:00
* Copyright ( C ) 2010 - 2013 Philippe Grand < philippe . grand @ atoo - net . com >
2012-08-24 19:55:31 +02:00
* Copyright ( C ) 2012 Marcos García < marcosgdf @ gmail . com >
2013-04-09 17:18:07 +02:00
* Copyright ( C ) 2013 Florian Henry < florian . henry @ open - concept . pro >
2013-06-04 16:33:23 +02:00
* Copyright ( C ) 2013 Cédric Salvador < csalvador @ gpcsolutions . fr >
2004-11-30 20:25:48 +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
2004-11-30 20:25:48 +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
2011-08-01 01:45:11 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2004-11-30 20:25:48 +01:00
*/
2006-12-11 21:52:39 +01:00
/**
2010-07-21 14:35:56 +02:00
* \file htdocs / fourn / class / fournisseur . commande . class . php
2009-01-09 22:46:58 +01:00
* \ingroup fournisseur , commande
2010-07-21 13:57:52 +02:00
* \brief File of class to manage suppliers orders
2008-07-01 21:46:18 +02:00
*/
2004-11-30 20:25:48 +01:00
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/commonorder.class.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php' ;
2005-09-11 18:51:41 +02:00
2004-11-30 20:25:48 +01:00
2008-07-01 21:46:18 +02:00
/**
2012-04-14 20:21:06 +02:00
* Class to manage predefined suppliers products
2008-07-01 21:46:18 +02:00
*/
2012-07-11 18:13:41 +02:00
class CommandeFournisseur extends CommonOrder
2004-11-30 20:25:48 +01:00
{
2011-09-20 19:19:46 +02:00
public $element = 'order_supplier' ;
public $table_element = 'commande_fournisseur' ;
public $table_element_line = 'commande_fournisseurdet' ;
public $fk_element = 'fk_commande' ;
protected $ismultientitymanaged = 1 ; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
2011-09-11 20:35:38 +02:00
var $ref ; // TODO deprecated
var $product_ref ;
var $ref_supplier ;
var $brouillon ;
var $statut ; // 0=Draft -> 1=Validated -> 2=Approved -> 3=Process runing -> 4=Received partially -> 5=Received totally -> (reopen) 4=Received partially
2012-04-14 20:21:06 +02:00
// -> 7=Canceled/Never received -> (reopen) 3=Process runing
// -> 6=Canceled -> (reopen) 2=Approved
// -> 9=Refused -> (reopen) 1=Validated
2011-09-11 20:35:38 +02:00
var $socid ;
var $fourn_id ;
var $date ;
2012-04-12 10:52:53 +02:00
var $date_valid ;
2012-04-15 16:49:49 +02:00
var $date_approve ;
2011-09-11 20:35:38 +02:00
var $date_commande ;
2012-04-10 17:21:28 +02:00
var $date_livraison ; // Date livraison souhaitee
2011-09-11 20:35:38 +02:00
var $total_ht ;
var $total_tva ;
var $total_localtax1 ; // Total Local tax 1
var $total_localtax2 ; // Total Local tax 2
var $total_ttc ;
var $source ;
var $note ;
var $note_public ;
var $model_pdf ;
var $fk_project ;
var $cond_reglement_id ;
var $cond_reglement_code ;
var $mode_reglement_id ;
var $mode_reglement_code ;
2012-04-12 10:03:55 +02:00
var $user_author_id ;
var $user_valid_id ;
2012-04-15 16:49:49 +02:00
var $user_approve_id ;
2012-04-11 14:37:36 +02:00
2012-03-18 11:13:01 +01:00
var $extraparams = array ();
2011-09-11 20:35:38 +02:00
2012-01-19 09:53:27 +01:00
/**
* Constructor
*
2012-04-15 16:49:49 +02:00
* @ param DoliDB $db Database handler
2011-09-11 20:35:38 +02:00
*/
2012-04-20 09:48:00 +02:00
function __construct ( $db )
2011-09-11 20:35:38 +02:00
{
2012-01-19 09:53:27 +01:00
$this -> db = $db ;
2011-09-11 20:35:38 +02:00
$this -> products = array ();
$this -> lines = array ();
// List of language codes for status
$this -> statuts [ 0 ] = 'StatusOrderDraft' ;
$this -> statuts [ 1 ] = 'StatusOrderValidated' ;
$this -> statuts [ 2 ] = 'StatusOrderApproved' ;
$this -> statuts [ 3 ] = 'StatusOrderOnProcess' ;
$this -> statuts [ 4 ] = 'StatusOrderReceivedPartially' ;
$this -> statuts [ 5 ] = 'StatusOrderReceivedAll' ;
$this -> statuts [ 6 ] = 'StatusOrderCanceled' ;
$this -> statuts [ 7 ] = 'StatusOrderCanceled' ;
$this -> statuts [ 9 ] = 'StatusOrderRefused' ;
}
/**
* Get object and lines from database
2011-11-09 22:10:58 +01:00
*
* @ param int $id Id of order to load
* @ param string $ref Ref of object
2012-02-08 16:41:06 +01:00
* @ return int > 0 if OK , < 0 if KO , 0 if not found
2011-09-11 20:35:38 +02:00
*/
function fetch ( $id , $ref = '' )
{
global $conf ;
// Check parameters
if ( empty ( $id ) && empty ( $ref )) return - 1 ;
2012-04-12 10:52:53 +02:00
$sql = " SELECT c.rowid, c.ref, ref_supplier, c.fk_soc, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva, " ;
2011-09-11 20:35:38 +02:00
$sql .= " c.localtax1, c.localtax2, " ;
2012-04-15 16:49:49 +02:00
$sql .= " c.date_creation, c.date_valid, c.date_approve, " ;
$sql .= " c.fk_user_author, c.fk_user_valid, c.fk_user_approve, " ;
2012-07-22 16:58:37 +02:00
$sql .= " c.date_commande as date_commande, c.date_livraison as date_livraison, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_input_method, " ;
2013-04-09 17:18:07 +02:00
$sql .= " c.note_private, c.note_public, c.model_pdf, c.extraparams, " ;
2011-09-11 20:35:38 +02:00
$sql .= " cm.libelle as methode_commande, " ;
$sql .= " cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle, " ;
$sql .= " p.code as mode_reglement_code, p.libelle as mode_reglement_libelle " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commande_fournisseur as c " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " c_payment_term as cr ON (c.fk_cond_reglement = cr.rowid) " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " c_paiement as p ON (c.fk_mode_reglement = p.id) " ;
2012-07-22 16:58:37 +02:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " c_input_method as cm ON cm.rowid = c.fk_input_method " ;
2011-09-11 20:35:38 +02:00
$sql .= " WHERE c.entity = " . $conf -> entity ;
if ( $ref ) $sql .= " AND c.ref=' " . $ref . " ' " ;
else $sql .= " AND c.rowid= " . $id ;
2012-02-08 16:41:06 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch sql= " . $sql , LOG_DEBUG );
2011-09-20 15:32:16 +02:00
$resql = $this -> db -> query ( $sql );
2011-09-11 20:35:38 +02:00
if ( $resql )
{
$obj = $this -> db -> fetch_object ( $resql );
2012-02-08 16:41:06 +01:00
if ( ! $obj )
{
$this -> error = 'Bill with id ' . $id . ' not found sql=' . $sql ;
dol_syslog ( get_class ( $this ) . '::fetch ' . $this -> error );
return 0 ;
}
2011-09-11 20:35:38 +02:00
2012-03-18 11:13:01 +01:00
$this -> id = $obj -> rowid ;
$this -> ref = $obj -> ref ;
2012-04-11 14:37:36 +02:00
$this -> ref_supplier = $obj -> ref_supplier ;
2012-03-18 11:13:01 +01:00
$this -> socid = $obj -> fk_soc ;
$this -> fourn_id = $obj -> fk_soc ;
$this -> statut = $obj -> fk_statut ;
$this -> user_author_id = $obj -> fk_user_author ;
2012-04-12 10:03:55 +02:00
$this -> user_valid_id = $obj -> fk_user_valid ;
2012-04-15 16:49:49 +02:00
$this -> user_approve_id = $obj -> fk_user_approve ;
2012-03-18 11:13:01 +01:00
$this -> total_ht = $obj -> total_ht ;
$this -> total_tva = $obj -> tva ;
$this -> total_localtax1 = $obj -> localtax1 ;
$this -> total_localtax2 = $obj -> localtax2 ;
$this -> total_ttc = $obj -> total_ttc ;
$this -> date = $this -> db -> jdate ( $obj -> date_creation );
2012-04-12 10:52:53 +02:00
$this -> date_valid = $this -> db -> jdate ( $obj -> date_valid );
2012-04-15 16:49:49 +02:00
$this -> date_approve = $this -> db -> jdate ( $obj -> date_approve );
2012-04-12 10:52:53 +02:00
$this -> date_commande = $this -> db -> jdate ( $obj -> date_commande ); // date a laquelle la commande a ete transmise
2012-04-10 19:43:44 +02:00
$this -> date_livraison = $this -> db -> jdate ( $obj -> date_livraison );
2012-03-18 11:13:01 +01:00
$this -> remise_percent = $obj -> remise_percent ;
2012-07-22 16:58:37 +02:00
$this -> methode_commande_id = $obj -> fk_input_method ;
2012-03-18 11:13:01 +01:00
$this -> methode_commande = $obj -> methode_commande ;
$this -> source = $obj -> source ;
2012-02-08 16:41:06 +01:00
//$this->facturee = $obj->facture;
2012-03-18 11:13:01 +01:00
$this -> fk_project = $obj -> fk_project ;
$this -> cond_reglement_id = $obj -> fk_cond_reglement ;
$this -> cond_reglement_code = $obj -> cond_reglement_code ;
$this -> cond_reglement = $obj -> cond_reglement_libelle ;
$this -> cond_reglement_doc = $obj -> cond_reglement_libelle ;
$this -> mode_reglement_id = $obj -> fk_mode_reglement ;
$this -> mode_reglement_code = $obj -> mode_reglement_code ;
$this -> mode_reglement = $obj -> mode_reglement_libelle ;
$this -> note = $obj -> note_private ; // deprecated
$this -> note_private = $obj -> note_private ;
$this -> note_public = $obj -> note_public ;
$this -> modelpdf = $obj -> model_pdf ;
2012-04-11 14:37:36 +02:00
2012-03-18 19:59:38 +01:00
$this -> extraparams = ( array ) json_decode ( $obj -> extraparams , true );
2011-09-11 20:35:38 +02:00
$this -> db -> free ( $resql );
if ( $this -> statut == 0 ) $this -> brouillon = 1 ;
$sql = " SELECT l.rowid, l.ref as ref_supplier, l.fk_product, l.product_type, l.label, l.description, " ;
$sql .= " l.qty, " ;
$sql .= " l.tva_tx, l.remise_percent, l.subprice, " ;
$sql .= " l.localtax1_tx, l. localtax2_tx, l.total_localtax1, l.total_localtax2, " ;
$sql .= " l.total_ht, l.total_tva, l.total_ttc, " ;
2012-02-20 23:58:36 +01:00
$sql .= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.description as product_desc " ;
2011-09-11 20:35:38 +02:00
$sql .= " FROM " . MAIN_DB_PREFIX . " commande_fournisseurdet as l " ;
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'product as p ON l.fk_product = p.rowid' ;
$sql .= " WHERE l.fk_commande = " . $this -> id ;
$sql .= " ORDER BY l.rowid " ;
//print $sql;
2012-02-08 16:41:06 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch get lines sql= " . $sql , LOG_DEBUG );
2011-09-11 20:35:38 +02: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 );
$line = new CommandeFournisseurLigne ( $this -> db );
$line -> id = $objp -> rowid ;
$line -> desc = $objp -> description ; // Description ligne
$line -> description = $objp -> description ; // Description ligne
$line -> qty = $objp -> qty ;
$line -> tva_tx = $objp -> tva_tx ;
$line -> localtax1_tx = $objp -> localtax1_tx ;
$line -> localtax2_tx = $objp -> localtax2_tx ;
2014-03-01 14:49:30 +01:00
$line -> subprice = $objp -> subprice ; // deprecated
$line -> pu_ht = $objp -> subprice ; // Unit price HT
2011-09-11 20:35:38 +02:00
$line -> remise_percent = $objp -> remise_percent ;
$line -> total_ht = $objp -> total_ht ;
$line -> total_tva = $objp -> total_tva ;
$line -> total_localtax1 = $objp -> total_localtax1 ;
$line -> total_localtax2 = $objp -> total_localtax2 ;
$line -> total_ttc = $objp -> total_ttc ;
$line -> product_type = $objp -> product_type ;
2012-02-20 23:58:36 +01:00
$line -> fk_product = $objp -> fk_product ; // Id du produit
$line -> libelle = $objp -> product_label ; // TODO deprecated
$line -> product_label = $objp -> product_label ; // Label produit
$line -> product_desc = $objp -> product_desc ; // Description produit
2011-09-11 20:35:38 +02:00
$line -> ref = $objp -> product_ref ; // TODO deprecated
$line -> product_ref = $objp -> product_ref ; // Internal reference
$line -> ref_fourn = $objp -> ref_supplier ; // TODO deprecated
$line -> ref_supplier = $objp -> ref_supplier ; // Reference supplier
$this -> lines [ $i ] = $line ;
$i ++ ;
}
$this -> db -> free ( $result );
return 1 ;
}
else
{
$this -> error = $this -> db -> error () . " sql= " . $sql ;
2012-02-08 16:41:06 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
{
$this -> error = $this -> db -> error () . " sql= " . $sql ;
2012-02-08 16:41:06 +01:00
dol_syslog ( get_class ( $this ) . " ::fetch " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
/**
* Add a line in log table
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user User making action
* @ param int $statut Status of order
* @ param date $datelog Date of change
* @ param string $comment Comment
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function log ( $user , $statut , $datelog , $comment = '' )
{
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande_fournisseur_log (datelog, fk_commande, fk_statut, fk_user, comment) " ;
2012-04-15 19:20:39 +02:00
$sql .= " VALUES (' " . $this -> db -> idate ( $datelog ) . " ', " . $this -> id . " , " . $statut . " , " ;
2011-09-11 20:35:38 +02:00
$sql .= $user -> id . " , " ;
$sql .= ( $comment ? " ' " . $this -> db -> escape ( $comment ) . " ' " : 'null' );
$sql .= " ) " ;
dol_syslog ( " FournisseurCommande::log sql= " . $sql , LOG_DEBUG );
if ( $this -> db -> query ( $sql ) )
{
return 1 ;
}
else
{
$this -> error = $this -> db -> lasterror ();
2012-03-18 00:59:24 +01:00
dol_syslog ( get_class ( $this ) . " ::log " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
/**
* Validate an order
2011-11-09 22:10:58 +01:00
*
2012-04-14 20:21:06 +02:00
* @ param User $user Validator User
* @ param int $idwarehouse Id of warehouse to use for stock decrease
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
2012-04-14 20:21:06 +02:00
function valid ( $user , $idwarehouse = 0 )
2011-09-11 20:35:38 +02:00
{
global $langs , $conf ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2011-09-11 20:35:38 +02:00
$error = 0 ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::valid " );
2011-09-11 20:35:38 +02:00
$result = 0 ;
if ( $user -> rights -> fournisseur -> commande -> valider )
{
$this -> db -> begin ();
// Definition du nom de modele de numerotation de commande
$soc = new Societe ( $this -> db );
$soc -> fetch ( $this -> fourn_id );
// Check if object has a temporary ref
if ( preg_match ( '/^[\(]?PROV/i' , $this -> ref ))
{
$num = $this -> getNextNumRef ( $soc );
}
else
{
$num = $this -> ref ;
}
$sql = 'UPDATE ' . MAIN_DB_PREFIX . " commande_fournisseur " ;
2012-04-15 18:41:38 +02:00
$sql .= " SET ref=' " . $num . " ', " ;
$sql .= " fk_statut = 1, " ;
$sql .= " date_valid=' " . $this -> db -> idate ( dol_now ()) . " ', " ;
$sql .= " fk_user_valid = " . $user -> id ;
2011-09-11 20:35:38 +02:00
$sql .= " WHERE rowid = " . $this -> id ;
$sql .= " AND fk_statut = 0 " ;
$resql = $this -> db -> query ( $sql );
if ( ! $resql )
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::valid Echec update - 10 - sql= " . $sql , LOG_ERR );
2011-09-11 20:35:38 +02:00
dol_print_error ( $this -> db );
$error ++ ;
}
if ( ! $error )
{
2012-06-11 21:45:59 +02:00
$this -> oldref = '' ;
2012-07-11 18:13:41 +02:00
2011-09-11 20:35:38 +02:00
// Rename directory if dir was a temporary ref
if ( preg_match ( '/^[\(]?PROV/i' , $this -> ref ))
{
// On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref)
2013-11-05 15:29:33 +01:00
// in order not to lose the attached files
2011-09-11 20:35:38 +02:00
$oldref = dol_sanitizeFileName ( $this -> ref );
$newref = dol_sanitizeFileName ( $num );
$dirsource = $conf -> fournisseur -> dir_output . '/commande/' . $oldref ;
$dirdest = $conf -> fournisseur -> dir_output . '/commande/' . $newref ;
if ( file_exists ( $dirsource ))
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::valid rename dir " . $dirsource . " into " . $dirdest );
2011-09-11 20:35:38 +02:00
if ( @ rename ( $dirsource , $dirdest ))
{
2012-06-11 21:45:59 +02:00
$this -> oldref = $oldref ;
2012-07-11 18:13:41 +02:00
2011-09-11 20:35:38 +02:00
dol_syslog ( " Rename ok " );
// Suppression ancien fichier PDF dans nouveau rep
2012-08-07 14:24:54 +02:00
dol_delete_file ( $dirdest . '/' . $oldref . '*.*' );
2011-09-11 20:35:38 +02:00
}
}
}
}
if ( ! $error )
{
$result = 1 ;
$this -> log ( $user , 1 , time ()); // Statut 1
$this -> ref = $num ;
}
if ( ! $error )
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-09-11 20:35:38 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_VALIDATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
if ( ! $error )
{
$this -> db -> commit ();
return 1 ;
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::valid " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
}
else
{
$this -> error = 'Not Authorized' ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::valid " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
/**
* Set draft status
2011-11-14 15:46:44 +01:00
* TODO This method seems to be never called .
2011-11-08 00:03:19 +01:00
*
2011-11-14 16:23:59 +01:00
* @ param User $user Object user that modify
* @ param int $idwarehouse Id warehouse to use for stock change .
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
2011-11-14 16:23:59 +01:00
function set_draft ( $user , $idwarehouse =- 1 )
2011-09-11 20:35:38 +02:00
{
global $conf , $langs ;
$error = 0 ;
// Protection
if ( $this -> statut == 0 )
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::set_draft already draft status " , LOG_WARNING );
2011-09-11 20:35:38 +02:00
return 0 ;
}
if ( ! $user -> rights -> fournisseur -> commande -> valider )
{
$this -> error = 'Permission denied' ;
return - 1 ;
}
$this -> db -> begin ();
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur " ;
$sql .= " SET fk_statut = 0 " ;
$sql .= " WHERE rowid = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::set_draft sql= " . $sql , LOG_DEBUG );
2011-09-11 20:35:38 +02:00
if ( $this -> db -> query ( $sql ))
{
// If stock is incremented on validate order, we must redecrement it
2012-09-15 11:21:22 +02:00
if ( ! empty ( $conf -> stock -> enabled ) && ! empty ( $conf -> global -> STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER ))
2011-09-11 20:35:38 +02:00
{
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php' ;
2011-09-11 20:35:38 +02:00
2011-09-17 21:49:50 +02:00
$num = count ( $this -> lines );
for ( $i = 0 ; $i < $num ; $i ++ )
2011-09-11 20:35:38 +02:00
{
if ( $this -> lines [ $i ] -> fk_product > 0 )
{
$mouvP = new MouvementStock ( $this -> db );
// We increment stock of product (and sub-products)
2014-03-01 14:49:30 +01:00
$up_ht_disc = $this -> lines [ $i ] -> subprice ;
if ( ! empty ( $this -> lines [ $i ] -> remise_percent ) && empty ( $conf -> global -> STOCK_EXCLUDE_DISCOUNT_FOR_PMP )) $up_ht_disc = price2num ( $up_ht_disc * ( 100 - $this -> lines [ $i ] -> remise_percent ) / 100 , 'MU' );
$result = $mouvP -> reception ( $user , $this -> lines [ $i ] -> fk_product , $idwarehouse , $this -> lines [ $i ] -> qty , $up_ht_disc , $langs -> trans ( " OrderBackToDraftInDolibarr " , $this -> ref ));
2011-09-11 20:35:38 +02:00
if ( $result < 0 ) { $error ++ ; }
}
}
if ( ! $error )
{
$this -> statut = 0 ;
$this -> db -> commit ();
return $result ;
}
else
{
$this -> error = $mouvP -> error ;
$this -> db -> rollback ();
return $result ;
}
}
$this -> statut = 0 ;
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
$this -> db -> rollback ();
dol_syslog ( $this -> error , LOG_ERR );
return - 1 ;
}
}
/**
* Return label of the status of object
2012-01-19 09:53:27 +01:00
*
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Long label
* @ return string Label
2011-09-11 20:35:38 +02:00
*/
function getLibStatut ( $mode = 0 )
{
return $this -> LibStatut ( $this -> statut , $mode );
}
/**
* Return label of a status
2012-01-19 09:53:27 +01:00
*
* @ 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
2011-09-11 20:35:38 +02:00
*/
function LibStatut ( $statut , $mode = 0 )
{
global $langs ;
$langs -> load ( 'orders' );
// List of language codes for status
$statutshort [ 0 ] = 'StatusOrderDraftShort' ;
$statutshort [ 1 ] = 'StatusOrderValidatedShort' ;
$statutshort [ 2 ] = 'StatusOrderApprovedShort' ;
$statutshort [ 3 ] = 'StatusOrderOnProcessShort' ;
$statutshort [ 4 ] = 'StatusOrderReceivedPartiallyShort' ;
$statutshort [ 5 ] = 'StatusOrderReceivedAllShort' ;
$statutshort [ 6 ] = 'StatusOrderCanceledShort' ;
$statutshort [ 7 ] = 'StatusOrderCanceledShort' ;
$statutshort [ 9 ] = 'StatusOrderRefusedShort' ;
if ( $mode == 0 )
{
return $langs -> trans ( $this -> statuts [ $statut ]);
}
if ( $mode == 1 )
{
return $langs -> trans ( $statutshort [ $statut ]);
}
if ( $mode == 2 )
{
return $langs -> trans ( $this -> statuts [ $statut ]);
}
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 ]), 'statut1' );
if ( $statut == 2 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 3 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 4 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 5 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut6' );
if ( $statut == 6 || $statut == 7 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' );
if ( $statut == 9 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' );
}
if ( $mode == 4 )
{
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 ]), 'statut1' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 2 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 3 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 4 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 5 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut6' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 6 || $statut == 7 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
if ( $statut == 9 ) return img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' ) . ' ' . $langs -> trans ( $this -> statuts [ $statut ]);
}
if ( $mode == 5 )
{
2013-04-25 20:27:45 +02:00
if ( $statut == 0 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut0' );
if ( $statut == 1 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut1' );
if ( $statut == 2 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 3 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 4 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut3' );
if ( $statut == 5 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut6' );
if ( $statut == 6 || $statut == 7 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' );
if ( $statut == 9 ) return '<span class="hideonsmartphone">' . $langs -> trans ( $statutshort [ $statut ]) . ' </span>' . img_picto ( $langs -> trans ( $this -> statuts [ $statut ]), 'statut5' );
2011-09-11 20:35:38 +02:00
}
}
/**
* Renvoie nom clicable ( avec eventuellement le picto )
2011-12-19 17:12:29 +01:00
*
* @ param int $withpicto 0 = Pas de picto , 1 = Inclut le picto dans le lien , 2 = Picto seul
* @ param string $option Sur quoi pointe le lien
* @ return string Chaine avec URL
2011-09-11 20:35:38 +02:00
*/
function getNomUrl ( $withpicto = 0 , $option = '' )
{
global $langs ;
$result = '' ;
$lien = '<a href="' . DOL_URL_ROOT . '/fourn/commande/fiche.php?id=' . $this -> id . '">' ;
$lienfin = '</a>' ;
$picto = 'order' ;
$label = $langs -> trans ( " ShowOrder " ) . ': ' . $this -> ref ;
if ( $withpicto ) $result .= ( $lien . img_object ( $label , $picto ) . $lienfin );
if ( $withpicto && $withpicto != 2 ) $result .= ' ' ;
$result .= $lien . $this -> ref . $lienfin ;
return $result ;
}
/**
* Renvoie la reference de commande suivante non utilisee en fonction du modele
2013-04-11 17:24:17 +02:00
* de numerotation actif defini dans COMMANDE_SUPPLIER_ADDON_NUMBER
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param Societe $soc objet societe
2011-09-11 20:35:38 +02:00
* @ return string reference libre pour la facture
*/
function getNextNumRef ( $soc )
{
global $db , $langs , $conf ;
$langs -> load ( " orders " );
2011-10-24 14:11:49 +02:00
$dir = DOL_DOCUMENT_ROOT . '/core/modules/supplier_order/' ;
2011-09-11 20:35:38 +02:00
2013-04-11 17:24:17 +02:00
if ( ! empty ( $conf -> global -> COMMANDE_SUPPLIER_ADDON_NUMBER ))
2011-09-11 20:35:38 +02:00
{
2013-04-11 17:24:17 +02:00
$file = $conf -> global -> COMMANDE_SUPPLIER_ADDON_NUMBER . '.php' ;
2011-09-11 20:35:38 +02:00
if ( is_readable ( $dir . '/' . $file ))
{
// Definition du nom de modele de numerotation de commande fournisseur
2013-04-11 17:24:17 +02:00
$modName = $conf -> global -> COMMANDE_SUPPLIER_ADDON_NUMBER ;
2012-08-22 23:11:24 +02:00
require_once $dir . '/' . $file ;
2011-09-11 20:35:38 +02:00
// Recuperation de la nouvelle reference
$objMod = new $modName ( $this -> db );
$numref = " " ;
$numref = $objMod -> commande_get_num ( $soc , $this );
if ( $numref != " " )
{
return $numref ;
}
else
{
2012-04-14 20:21:06 +02:00
dol_print_error ( $db , get_class ( $this ) . " ::getNextNumRef " . $obj -> error );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
{
2013-04-11 17:24:17 +02:00
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_FailedToLoad_COMMANDE_SUPPLIER_ADDON_File " , $conf -> global -> COMMANDE_SUPPLIER_ADDON_NUMBER );
2011-09-11 20:35:38 +02:00
return - 2 ;
}
}
else
{
print $langs -> trans ( " Error " ) . " " . $langs -> trans ( " Error_COMMANDE_SUPPLIER_ADDON_NotDefined " );
return - 3 ;
}
}
/**
* Accept an order
2011-11-08 00:03:19 +01:00
*
2011-11-09 22:10:58 +01:00
* @ param User $user Object user
* @ param int $idwarehouse Id of warhouse for stock change
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
2011-11-09 22:10:58 +01:00
function approve ( $user , $idwarehouse = 0 )
2011-09-11 20:35:38 +02:00
{
global $langs , $conf ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2011-09-11 20:35:38 +02:00
$error = 0 ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::approve " );
2011-09-11 20:35:38 +02:00
if ( $user -> rights -> fournisseur -> commande -> approuver )
{
$this -> db -> begin ();
2012-04-16 09:50:02 +02:00
// Definition du nom de modele de numerotation de commande
$soc = new Societe ( $this -> db );
$soc -> fetch ( $this -> fourn_id );
// Check if object has a temporary ref
if ( preg_match ( '/^[\(]?PROV/i' , $this -> ref ))
{
$num = $this -> getNextNumRef ( $soc );
}
else
{
$num = $this -> ref ;
}
2012-04-15 16:49:49 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur " ;
2012-04-15 18:41:38 +02:00
$sql .= " SET ref=' " . $this -> db -> escape ( $num ) . " ', " ;
$sql .= " fk_statut = 2, " ;
$sql .= " date_approve=' " . $this -> db -> idate ( dol_now ()) . " ', " ;
$sql .= " fk_user_approve = " . $user -> id ;
2012-04-15 16:49:49 +02:00
$sql .= " WHERE rowid = " . $this -> id ;
$sql .= " AND fk_statut = 1 " ;
2011-09-11 20:35:38 +02:00
if ( $this -> db -> query ( $sql ))
{
$this -> log ( $user , 2 , time ()); // Statut 2
// If stock is incremented on validate order, we must increment it
2012-09-15 11:21:22 +02:00
if ( ! $error && ! empty ( $conf -> stock -> enabled ) && ! empty ( $conf -> global -> STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER ))
2011-09-11 20:35:38 +02:00
{
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php' ;
2011-11-09 22:10:58 +01:00
$langs -> load ( " agenda " );
2011-09-11 20:35:38 +02:00
2011-11-08 00:03:19 +01:00
$cpt = count ( $this -> lines );
for ( $i = 0 ; $i < $cpt ; $i ++ )
2011-09-11 20:35:38 +02:00
{
// Product with reference
if ( $this -> lines [ $i ] -> fk_product > 0 )
{
$mouvP = new MouvementStock ( $this -> db );
// We decrement stock of product (and sub-products)
2014-03-01 14:49:30 +01:00
$up_ht_disc = $this -> lines [ $i ] -> subprice ;
if ( ! empty ( $this -> lines [ $i ] -> remise_percent ) && empty ( $conf -> global -> STOCK_EXCLUDE_DISCOUNT_FOR_PMP )) $up_ht_disc = price2num ( $up_ht_disc * ( 100 - $this -> lines [ $i ] -> remise_percent ) / 100 , 'MU' );
$result = $mouvP -> reception ( $user , $this -> lines [ $i ] -> fk_product , $idwarehouse , $this -> lines [ $i ] -> qty , $up_ht_disc , $langs -> trans ( " OrderApprovedInDolibarr " , $this -> ref ));
2011-09-11 20:35:38 +02:00
if ( $result < 0 ) { $error ++ ; }
}
}
}
2011-11-09 22:10:58 +01:00
if ( ! $error )
2011-09-11 20:35:38 +02:00
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-09-11 20:35:38 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_APPROVE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
2011-11-09 22:10:58 +01:00
if ( ! $error )
2011-09-11 20:35:38 +02:00
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::approve Error " , $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::approve Not Authorized " , LOG_ERR );
2011-09-11 20:35:38 +02:00
}
return - 1 ;
}
/**
* Refuse an order
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user User making action
* @ return int 0 if Ok , < 0 if Ko
2011-09-11 20:35:38 +02:00
*/
function refuse ( $user )
{
global $conf , $langs ;
2011-12-05 19:41:38 +01:00
$error = 0 ;
2012-01-19 09:53:27 +01:00
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::refuse " );
2011-09-11 20:35:38 +02:00
$result = 0 ;
if ( $user -> rights -> fournisseur -> commande -> approuver )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur SET fk_statut = 9 " ;
$sql .= " WHERE rowid = " . $this -> id ;
if ( $this -> db -> query ( $sql ))
{
$result = 0 ;
$this -> log ( $user , 9 , time ());
if ( $error == 0 )
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-09-11 20:35:38 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_REFUSE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::refuse Error -1 " );
2011-09-11 20:35:38 +02:00
$result = - 1 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::refuse Not Authorized " );
2011-09-11 20:35:38 +02:00
}
return $result ;
}
/**
* Cancel an approved order .
* L 'annulation se fait apres l' approbation
2011-12-19 17:12:29 +01:00
*
2012-04-28 18:49:01 +02:00
* @ param User $user User making action
* @ param int $idwarehouse Id warehouse to use for stock change ( not used for supplier orders ) .
* @ return int > 0 if Ok , < 0 if Ko
2011-09-11 20:35:38 +02:00
*/
2012-04-28 18:49:01 +02:00
function Cancel ( $user , $idwarehouse =- 1 )
2011-09-11 20:35:38 +02:00
{
global $langs , $conf ;
2011-12-05 19:41:38 +01:00
$error = 0 ;
2012-01-19 09:53:27 +01:00
2011-09-11 20:35:38 +02:00
//dol_syslog("CommandeFournisseur::Cancel");
$result = 0 ;
if ( $user -> rights -> fournisseur -> commande -> commander )
{
$statut = 6 ;
$this -> db -> begin ();
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur SET fk_statut = " . $statut ;
$sql .= " WHERE rowid = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::cancel sql= " . $sql );
2011-09-11 20:35:38 +02:00
if ( $this -> db -> query ( $sql ))
{
$result = 0 ;
$this -> log ( $user , $statut , time ());
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-09-11 20:35:38 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_CANCEL' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
if ( $error == 0 )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::cancel " . $this -> error );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::cancel Not Authorized " );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
/**
* Send a supplier order to supplier
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user User making change
* @ param date $date Date
* @ param int $methode Method
* @ param string $comment Comment
2011-09-11 20:35:38 +02:00
* @ return int < 0 if KO , > 0 if OK
*/
function commande ( $user , $date , $methode , $comment = '' )
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::commande " );
2011-09-11 20:35:38 +02:00
$result = 0 ;
if ( $user -> rights -> fournisseur -> commande -> commander )
{
2012-07-22 16:58:37 +02:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur SET fk_statut = 3, fk_input_method= " . $methode . " ,date_commande= " . $this -> db -> idate ( " $date " );
2011-09-11 20:35:38 +02:00
$sql .= " WHERE rowid = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::commande sql= " . $sql , LOG_DEBUG );
2011-09-11 20:35:38 +02:00
if ( $this -> db -> query ( $sql ))
{
2012-12-01 15:45:05 +01:00
$result = 1 ;
2011-09-11 20:35:38 +02:00
$this -> log ( $user , 3 , $date , $comment );
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::cCommande Error -1 " , LOG_ERR );
2011-09-11 20:35:38 +02:00
$result = - 1 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::commande User not Authorized " , LOG_ERR );
2011-09-11 20:35:38 +02:00
}
return $result ;
}
/**
2012-04-28 18:49:01 +02:00
* Create order with draft status
2012-01-19 09:53:27 +01:00
*
2012-04-28 18:49:01 +02:00
* @ param User $user User making creation
* @ param int $notrigger Disable all triggers
* @ return int < 0 if KO , Id of supplier order if OK
2011-09-11 20:35:38 +02:00
*/
2012-04-28 18:49:01 +02:00
function create ( $user , $notrigger = 0 )
2011-09-11 20:35:38 +02:00
{
2013-04-08 17:17:13 +02:00
global $langs , $conf , $hookmanager ;
2011-09-11 20:35:38 +02:00
$this -> db -> begin ();
2012-01-19 09:53:27 +01:00
2011-12-05 19:41:38 +01:00
$error = 0 ;
2011-09-11 20:35:38 +02:00
$now = dol_now ();
2013-09-08 23:38:40 +02:00
// Clean parameters
if ( empty ( $this -> source )) $this -> source = 0 ;
2011-09-11 20:35:38 +02:00
/* On positionne en mode brouillon la commande */
$this -> brouillon = 1 ;
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande_fournisseur ( " ;
$sql .= " ref " ;
2013-03-12 15:06:38 +01:00
$sql .= " , ref_supplier " ;
2013-04-09 17:18:07 +02:00
$sql .= " , note_private " ;
2013-03-12 15:06:38 +01:00
$sql .= " , note_public " ;
2011-09-11 20:35:38 +02:00
$sql .= " , entity " ;
$sql .= " , fk_soc " ;
$sql .= " , date_creation " ;
2012-04-13 19:13:48 +02:00
//$sql.= ", date_livraison";
2011-09-11 20:35:38 +02:00
$sql .= " , fk_user_author " ;
$sql .= " , fk_statut " ;
$sql .= " , source " ;
$sql .= " , model_pdf " ;
2013-07-30 16:21:39 +02:00
$sql .= " , fk_mode_reglement " ;
$sql .= " , fk_cond_reglement " ;
2011-09-11 20:35:38 +02:00
$sql .= " ) " ;
$sql .= " VALUES ( " ;
$sql .= " '' " ;
2013-03-12 15:06:38 +01:00
$sql .= " , ' " . $this -> ref_supplier . " ' " ;
2013-04-09 17:18:07 +02:00
$sql .= " , ' " . $this -> note_private . " ' " ;
2013-03-12 15:06:38 +01:00
$sql .= " , ' " . $this -> note_public . " ' " ;
2011-09-11 20:35:38 +02:00
$sql .= " , " . $conf -> entity ;
$sql .= " , " . $this -> socid ;
2013-05-07 17:09:31 +02:00
$sql .= " , ' " . $this -> db -> idate ( $now ) . " ' " ;
2012-04-13 19:13:48 +02:00
//$sql.= ", ".$this->db->idate($now);
2011-09-11 20:35:38 +02:00
$sql .= " , " . $user -> id ;
$sql .= " , 0 " ;
2013-06-28 16:07:34 +02:00
$sql .= " , " . $this -> source ;
2011-09-11 20:35:38 +02:00
$sql .= " , ' " . $conf -> global -> COMMANDE_SUPPLIER_ADDON_PDF . " ' " ;
2013-09-08 23:38:40 +02:00
$sql .= " , " . ( $this -> mode_reglement_id > 0 ? $this -> mode_reglement_id : 'null' );
$sql .= " , " . ( $this -> cond_reglement_id > 0 ? $this -> cond_reglement_id : 'null' );
2011-09-11 20:35:38 +02:00
$sql .= " ) " ;
2012-01-19 09:53:27 +01:00
dol_syslog ( get_class ( $this ) . " ::create sql= " . $sql );
if ( $this -> db -> query ( $sql ))
2011-09-11 20:35:38 +02:00
{
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . " commande_fournisseur " );
2012-12-01 15:45:05 +01:00
if ( $this -> id ) {
$num = count ( $this -> lines );
/*
* Insertion du detail des produits dans la base
*/
for ( $i = 0 ; $i < $num ; $i ++ )
{
$result = $this -> addline (
$this -> lines [ $i ] -> desc ,
$this -> lines [ $i ] -> subprice ,
$this -> lines [ $i ] -> qty ,
$this -> lines [ $i ] -> tva_tx ,
$this -> lines [ $i ] -> localtax1_tx ,
$this -> lines [ $i ] -> localtax2_tx ,
$this -> lines [ $i ] -> fk_product ,
0 ,
$this -> lines [ $i ] -> ref_fourn ,
$this -> lines [ $i ] -> remise_percent ,
'HT' ,
0 ,
$this -> lines [ $i ] -> info_bits
);
if ( $result < 0 )
{
2013-06-09 16:15:49 +02:00
dol_syslog ( get_class ( $this ) . " ::create " . $this -> error , LOG_WARNING ); // do not use dol_print_error here as it may be a functionnal error
2012-12-01 15:45:05 +01:00
$this -> db -> rollback ();
return - 1 ;
}
}
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur " ;
$sql .= " SET ref='(PROV " . $this -> id . " )' " ;
$sql .= " WHERE rowid= " . $this -> id ;
dol_syslog ( get_class ( $this ) . " ::create sql= " . $sql );
if ( $this -> db -> query ( $sql ))
{
// On logue creation pour historique
$this -> log ( $user , 0 , time ());
2013-04-08 17:17:13 +02:00
if ( ! $error )
{
// Actions on extra fields (by external module or standard code)
// FIXME le hook fait double emploi avec le trigger !!
$hookmanager -> initHooks ( array ( 'supplierorderdao' ));
$parameters = array ( 'socid' => $this -> id );
$reshook = $hookmanager -> executeHooks ( 'insertExtraFields' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( empty ( $reshook ))
{
if ( empty ( $conf -> global -> MAIN_EXTRAFIELDS_DISABLED )) // For avoid conflicts if trigger used
{
$result = $this -> insertExtraFields ();
if ( $result < 0 )
{
$error ++ ;
}
}
}
else if ( $reshook < 0 ) $error ++ ;
}
2013-06-09 16:15:49 +02:00
2013-04-08 17:17:13 +02:00
if ( ! $notrigger )
2012-12-01 15:45:05 +01:00
{
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_CREATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
$this -> db -> commit ();
return $this -> id ;
}
else
{
$this -> error = $this -> db -> error ();
dol_syslog ( get_class ( $this ) . " ::create: Failed -2 - " . $this -> error , LOG_ERR );
$this -> db -> rollback ();
return - 2 ;
}
}
}
else
{
$this -> error = $this -> db -> error ();
dol_syslog ( get_class ( $this ) . " ::create: Failed -1 - " . $this -> error , LOG_ERR );
$this -> db -> rollback ();
return - 1 ;
}
}
2011-09-11 20:35:38 +02:00
2012-12-01 15:45:05 +01:00
/**
* Load an object from its id and create a new one in database
*
* @ return int New id of clone
*/
2013-01-26 10:35:30 +01:00
function createFromClone ()
2012-12-01 15:45:05 +01:00
{
2013-01-26 10:35:30 +01:00
global $conf , $user , $langs , $hookmanager ;
2011-09-11 20:35:38 +02:00
2012-12-01 15:45:05 +01:00
$error = 0 ;
$this -> db -> begin ();
// Load source object
$objFrom = dol_clone ( $this );
$this -> id = 0 ;
$this -> statut = 0 ;
// Clear fields
$this -> user_author_id = $user -> id ;
$this -> user_valid = '' ;
$this -> date_creation = '' ;
$this -> date_validation = '' ;
2013-09-08 23:38:40 +02:00
$this -> ref_supplier = '' ;
2012-12-01 15:45:05 +01:00
// Create clone
$result = $this -> create ( $user );
if ( $result < 0 ) $error ++ ;
if ( ! $error )
{
// Hook of thirdparty module
if ( is_object ( $hookmanager ))
2011-09-11 20:35:38 +02:00
{
2012-12-01 15:45:05 +01:00
$parameters = array ( 'objFrom' => $objFrom );
$action = '' ;
$reshook = $hookmanager -> executeHooks ( 'createFrom' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( $reshook < 0 ) $error ++ ;
2011-09-11 20:35:38 +02:00
}
2012-12-01 15:45:05 +01:00
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_CLONE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
// End
if ( ! $error )
{
$this -> db -> commit ();
return $this -> id ;
2011-09-11 20:35:38 +02:00
}
else
{
$this -> db -> rollback ();
return - 1 ;
}
}
/**
* Add order line
2011-12-05 19:41:38 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param string $desc Description
* @ param double $pu_ht Unit price
* @ param double $qty Quantity
* @ param double $txtva Taux tva
* @ param double $txlocaltax1 Localtax1 tax
* @ param double $txlocaltax2 Localtax2 tax
* @ param int $fk_product Id produit
* @ param int $fk_prod_fourn_price Id supplier price
* @ param string $fourn_ref Supplier reference
* @ param double $remise_percent Remise
* @ param string $price_base_type HT or TTC
* @ param double $pu_ttc Unit price TTC
* @ param int $type Type of line ( 0 = product , 1 = service )
2012-01-19 09:53:27 +01:00
* @ param int $info_bits More information
2012-09-08 02:17:08 +02:00
* @ param int $notrigger Disable triggers
2011-12-19 17:12:29 +01:00
* @ return int <= 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
function addline ( $desc , $pu_ht , $qty , $txtva , $txlocaltax1 = 0 , $txlocaltax2 = 0 , $fk_product = 0 , $fk_prod_fourn_price = 0 , $fourn_ref = '' , $remise_percent = 0 , $price_base_type = 'HT' , $pu_ttc = 0 , $type = 0 , $info_bits = 0 , $notrigger = false )
2011-09-11 20:35:38 +02:00
{
global $langs , $mysoc ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::addline $desc , $pu_ht , $qty , $txtva , $txlocaltax1 , $txlocaltax2 . $fk_product , $fk_prod_fourn_price , $fourn_ref , $remise_percent , $price_base_type , $pu_ttc , $type " );
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php' ;
2011-09-11 20:35:38 +02:00
// Clean parameters
if ( ! $qty ) $qty = 1 ;
if ( ! $info_bits ) $info_bits = 0 ;
if ( empty ( $txtva )) $txtva = 0 ;
if ( empty ( $txlocaltax1 )) $txlocaltax1 = 0 ;
if ( empty ( $txlocaltax2 )) $txlocaltax2 = 0 ;
2012-12-05 00:45:10 +01:00
if ( empty ( $remise_percent )) $remise_percent = 0 ;
2011-09-11 20:35:38 +02:00
$remise_percent = price2num ( $remise_percent );
$qty = price2num ( $qty );
$pu_ht = price2num ( $pu_ht );
$pu_ttc = price2num ( $pu_ttc );
$txtva = price2num ( $txtva );
$txlocaltax1 = price2num ( $txlocaltax1 );
$txlocaltax2 = price2num ( $txlocaltax2 );
if ( $price_base_type == 'HT' )
{
$pu = $pu_ht ;
}
else
{
$pu = $pu_ttc ;
}
$desc = trim ( $desc );
// Check parameters
if ( $qty < 1 && ! $fk_product )
{
$this -> error = $langs -> trans ( " ErrorFieldRequired " , $langs -> trans ( " Product " ));
return - 1 ;
}
if ( $type < 0 ) return - 1 ;
if ( $this -> statut == 0 )
{
$this -> db -> begin ();
if ( $fk_product > 0 )
{
$prod = new Product ( $this -> db , $fk_product );
if ( $prod -> fetch ( $fk_product ) > 0 )
{
$result = $prod -> get_buyprice ( $fk_prod_fourn_price , $qty , $fk_product , $fourn_ref );
if ( $result > 0 )
{
$label = $prod -> libelle ;
$pu = $prod -> fourn_pu ;
$ref = $prod -> ref_fourn ;
$product_type = $prod -> type ;
}
if ( $result == 0 || $result == - 1 )
{
2013-09-16 14:31:56 +02:00
$langs -> load ( " errors " );
$this -> error = " Ref " . $prod -> ref . " " . $langs -> trans ( " ErrorQtyTooLowForThisSupplier " );
2011-09-11 20:35:38 +02:00
$this -> db -> rollback ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::addline result= " . $result . " - " . $this -> error , LOG_DEBUG );
2012-12-05 00:45:10 +01:00
return - 1 ;
2011-09-11 20:35:38 +02:00
}
if ( $result < - 1 )
{
$this -> error = $prod -> error ;
$this -> db -> rollback ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::addline result= " . $result . " - " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
2013-06-09 16:15:49 +02:00
{
$this -> error = $prod -> error ;
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
else
{
$product_type = $type ;
}
// Calcul du total TTC et de la TVA pour la ligne a partir de
// qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$localtaxes_type = getLocalTaxesFromRate ( $txtva , 0 , $this -> thirdparty );
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$tabprice = calcul_price_total ( $qty , $pu , $remise_percent , $txtva , $txlocaltax1 , $txlocaltax2 , 0 , $price_base_type , $info_bits , $product_type , $this -> thirdparty , $localtaxes_type );
2011-09-11 20:35:38 +02:00
$total_ht = $tabprice [ 0 ];
$total_tva = $tabprice [ 1 ];
$total_ttc = $tabprice [ 2 ];
$total_localtax1 = $tabprice [ 9 ];
$total_localtax2 = $tabprice [ 10 ];
2013-09-11 16:44:34 +02:00
$localtax1_type = $localtaxes_type [ 0 ];
$localtax2_type = $localtaxes_type [ 2 ];
2011-09-11 20:35:38 +02:00
$subprice = price2num ( $pu , 'MU' );
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande_fournisseurdet " ;
2012-12-05 00:45:10 +01:00
$sql .= " (fk_commande, label, description, " ;
2011-09-11 20:35:38 +02:00
$sql .= " fk_product, product_type, " ;
2013-09-11 16:44:34 +02:00
$sql .= " qty, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, remise_percent, subprice, ref, " ;
2011-09-11 20:35:38 +02:00
$sql .= " total_ht, total_tva, total_localtax1, total_localtax2, total_ttc " ;
$sql .= " ) " ;
$sql .= " VALUES ( " . $this -> id . " , ' " . $this -> db -> escape ( $label ) . " ',' " . $this -> db -> escape ( $desc ) . " ', " ;
if ( $fk_product ) { $sql .= $fk_product . " , " ; }
else { $sql .= " null, " ; }
$sql .= " ' " . $product_type . " ', " ;
2013-09-11 16:44:34 +02:00
$sql .= " ' " . $qty . " ', " . $txtva . " , " . $txlocaltax1 . " , " . $txlocaltax2 ;
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$sql .= " , ' " . $localtax1_type . " ', " ;
$sql .= " ' " . $localtax2_type . " ' " ;
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$sql .= " , " . $remise_percent . " ,' " . price2num ( $subprice , 'MU' ) . " ',' " . $ref . " ', " ;
2011-09-11 20:35:38 +02:00
$sql .= " ' " . price2num ( $total_ht ) . " ', " ;
$sql .= " ' " . price2num ( $total_tva ) . " ', " ;
$sql .= " ' " . price2num ( $total_localtax1 ) . " ', " ;
$sql .= " ' " . price2num ( $total_localtax2 ) . " ', " ;
$sql .= " ' " . price2num ( $total_ttc ) . " ' " ;
$sql .= " ) " ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::addline sql= " . $sql );
2011-09-11 20:35:38 +02:00
$resql = $this -> db -> query ( $sql );
//print $sql;
if ( $resql )
{
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
$this -> rowid = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . 'commande_fournisseurdet' );
if ( ! $notrigger )
{
global $conf , $langs , $user ;
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'LINEORDER_SUPPLIER_CREATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
2011-09-11 20:35:38 +02:00
$this -> update_price ();
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
$this -> db -> rollback ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::addline " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 1 ;
}
}
}
/**
* Add a product into a stock warehouse .
2011-11-08 00:03:19 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user User object making change
* @ param int $product Id of product to dispatch
* @ param double $qty Qty to dispatch
* @ param int $entrepot Id of warehouse to add product
2014-03-01 14:49:30 +01:00
* @ param double $price Unit Price for PMP value calculation ( Unit price without Tax and taking into account discount )
2011-12-19 17:12:29 +01:00
* @ param string $comment Comment for stock movement
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function DispatchProduct ( $user , $product , $qty , $entrepot , $price = 0 , $comment = '' )
{
global $conf ;
$error = 0 ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/product/stock/class/mouvementstock.class.php' ;
2011-09-11 20:35:38 +02:00
// Check parameters
if ( $entrepot <= 0 || $qty <= 0 )
{
$this -> error = 'BadValueForParameter' ;
return - 1 ;
}
$now = dol_now ();
if (( $this -> statut == 3 || $this -> statut == 4 || $this -> statut == 5 ))
{
$this -> db -> begin ();
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande_fournisseur_dispatch " ;
$sql .= " (fk_commande,fk_product, qty, fk_entrepot, fk_user, datec) VALUES " ;
$sql .= " (' " . $this -> id . " ',' " . $product . " ',' " . $qty . " ', " . ( $entrepot > 0 ? " ' " . $entrepot . " ' " : " null " ) . " ,' " . $user -> id . " ',' " . $this -> db -> idate ( $now ) . " ') " ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::DispatchProduct sql= " . $sql );
2011-09-11 20:35:38 +02:00
$resql = $this -> db -> query ( $sql );
2013-02-21 17:32:57 +01:00
if ( $resql )
{
if ( ! $notrigger )
{
global $conf , $langs , $user ;
// Appel des triggers
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'LINEORDER_SUPPLIER_DISPATCH' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
$this -> db -> commit ();
}
else
2011-09-11 20:35:38 +02:00
{
$this -> error = $this -> db -> lasterror ();
$error ++ ;
}
// Si module stock gere et que incrementation faite depuis un dispatching en stock
2012-09-15 11:21:22 +02:00
if ( ! $error && $entrepot > 0 && ! empty ( $conf -> stock -> enabled ) && ! empty ( $conf -> global -> STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER ))
2011-09-11 20:35:38 +02:00
{
$mouv = new MouvementStock ( $this -> db );
if ( $product > 0 )
{
2014-03-01 14:49:30 +01:00
// $price should take into account discount (except if option STOCK_EXCLUDE_DISCOUNT_FOR_PMP is on)
2011-09-11 20:35:38 +02:00
$result = $mouv -> reception ( $user , $product , $entrepot , $qty , $price , $comment );
if ( $result < 0 )
{
$this -> error = $mouv -> error ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::DispatchProduct " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
$error ++ ;
}
}
}
if ( $error == 0 )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
return - 1 ;
}
}
else
{
$this -> error = 'BadStatusForObject' ;
return - 2 ;
}
}
/**
* Delete line
2011-11-09 22:10:58 +01:00
*
* @ param int $idligne Id of line to delete
2011-12-19 17:12:29 +01:00
* @ return 0 if Ok , < 0 ik Ko
2011-09-11 20:35:38 +02:00
*/
function deleteline ( $idligne )
{
if ( $this -> statut == 0 )
{
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande_fournisseurdet WHERE rowid = " . $idligne ;
$resql = $this -> db -> query ( $sql );
2011-11-09 22:10:58 +01:00
dol_syslog ( get_class ( $this ) . " ::deleteline sql= " . $sql );
2011-09-11 20:35:38 +02:00
if ( $resql )
{
$result = $this -> update_price ();
return 0 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
else
{
return - 1 ;
}
}
/**
2011-11-09 22:10:58 +01:00
* Delete an order
*
2011-12-05 19:41:38 +01:00
* @ param User $user Object user
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
2011-12-05 19:41:38 +01:00
function delete ( $user = '' )
2011-09-11 20:35:38 +02:00
{
global $langs , $conf ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2011-09-11 20:35:38 +02:00
2011-12-05 19:41:38 +01:00
$error = 0 ;
2011-09-11 20:35:38 +02:00
$this -> db -> begin ();
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande_fournisseurdet WHERE fk_commande = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::delete sql= " . $sql , LOG_DEBUG );
2011-09-11 20:35:38 +02:00
if ( ! $this -> db -> query ( $sql ) )
{
2011-12-05 19:41:38 +01:00
$error ++ ;
2011-09-11 20:35:38 +02:00
}
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " commande_fournisseur WHERE rowid = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::delete sql= " . $sql , LOG_DEBUG );
2011-09-11 20:35:38 +02:00
if ( $resql = $this -> db -> query ( $sql ) )
{
if ( $this -> db -> affected_rows ( $resql ) < 1 )
{
2011-12-05 19:41:38 +01:00
$error ++ ;
2011-09-11 20:35:38 +02:00
}
}
else
{
2011-12-05 19:41:38 +01:00
$error ++ ;
2011-09-11 20:35:38 +02:00
}
2013-06-09 16:15:49 +02:00
2013-04-26 17:20:21 +02:00
// Remove extrafields
if (( ! $error ) && ( empty ( $conf -> global -> MAIN_EXTRAFIELDS_DISABLED ))) // For avoid conflicts if trigger used
{
$result = $this -> deleteExtraFields ();
if ( $result < 0 )
{
$error ++ ;
dol_syslog ( get_class ( $this ) . " ::delete error -4 " . $this -> error , LOG_ERR );
}
}
2012-07-11 18:13:41 +02:00
2012-07-02 19:30:37 +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' ;
2012-07-02 19:30:37 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ORDER_SUPPLIER_DELETE' , $this , $user , $langs , $conf );
if ( $result < 0 ) {
$error ++ ; $this -> errors = $interface -> errors ;
}
2012-06-11 21:45:59 +02:00
// Fin appel triggers
}
2012-07-11 18:13:41 +02:00
2012-07-02 19:30:37 +02:00
if ( ! $error )
{
// We remove directory
$ref = dol_sanitizeFileName ( $this -> ref );
if ( $conf -> fournisseur -> commande -> dir_output )
{
$dir = $conf -> fournisseur -> commande -> dir_output . " / " . $ref ;
$file = $dir . " / " . $ref . " .pdf " ;
if ( file_exists ( $file ))
{
if ( ! dol_delete_file ( $file , 0 , 0 , 0 , $this )) // For triggers
{
2012-07-29 14:15:29 +02:00
$this -> error = 'ErrorFailToDeleteFile' ;
2012-07-02 19:30:37 +02:00
$error ++ ;
}
}
if ( file_exists ( $dir ))
{
$res =@ dol_delete_dir_recursive ( $dir );
if ( ! $res )
{
$this -> error = 'ErrorFailToDeleteDir' ;
$error ++ ;
}
}
}
2012-06-11 21:45:59 +02:00
}
2012-07-11 18:13:41 +02:00
2012-06-11 21:45:59 +02:00
if ( ! $error )
{
dol_syslog ( get_class ( $this ) . " ::delete $this->id by $user->id " , LOG_DEBUG );
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> lasterror ();
dol_syslog ( get_class ( $this ) . " ::delete " . $this -> error , LOG_ERR );
$this -> db -> rollback ();
return - $error ;
}
2011-09-11 20:35:38 +02:00
}
/**
2011-12-19 17:12:29 +01:00
* Get list of order methods
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ return 0 if Ok , < 0 if Ko
2011-09-11 20:35:38 +02:00
*/
function get_methodes_commande ()
{
$sql = " SELECT rowid, libelle " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " c_input_method " ;
$sql .= " WHERE active = 1 " ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$i = 0 ;
$num = $this -> db -> num_rows ( $resql );
$this -> methodes_commande = array ();
while ( $i < $num )
{
$row = $this -> db -> fetch_row ( $resql );
$this -> methodes_commande [ $row [ 0 ]] = $row [ 1 ];
$i ++ ;
}
return 0 ;
}
else
{
return - 1 ;
}
}
/**
* Set a delivery in database for this supplier order
2012-01-19 09:53:27 +01:00
*
* @ param User $user User that input data
* @ param date $date Date of reception
* @ param string $type Type of receipt
* @ param string $comment Comment
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function Livraison ( $user , $date , $type , $comment )
{
$result = 0 ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::Livraison " );
2011-09-11 20:35:38 +02:00
if ( $user -> rights -> fournisseur -> commande -> receptionner )
{
if ( $type == 'par' ) $statut = 4 ;
if ( $type == 'tot' ) $statut = 5 ;
if ( $type == 'nev' ) $statut = 7 ;
if ( $type == 'can' ) $statut = 7 ;
if ( $statut == 4 or $statut == 5 or $statut == 7 )
{
$this -> db -> begin ();
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur " ;
$sql .= " SET fk_statut = " . $statut ;
$sql .= " WHERE rowid = " . $this -> id ;
$sql .= " AND fk_statut IN (3,4) " ; // Process running or Partially received
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::Livraison sql= " . $sql );
2011-09-11 20:35:38 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$result = 0 ;
$result = $this -> log ( $user , $statut , $date , $comment );
$this -> db -> commit ();
}
else
{
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::Livraison Error " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
$result = - 1 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::Livraison Error -2 " , LOG_ERR );
2011-09-11 20:35:38 +02:00
$result = - 2 ;
}
}
else
{
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::Livraison Not Authorized " );
2011-09-11 20:35:38 +02:00
$result = - 3 ;
}
return $result ;
}
2012-04-10 17:21:28 +02:00
/**
* Set the planned delivery date
*
* @ param User $user Objet utilisateur qui modifie
* @ param timestamp $date_livraison Date de livraison
* @ return int < 0 si ko , > 0 si ok
*/
function set_date_livraison ( $user , $date_livraison )
{
if ( $user -> rights -> fournisseur -> commande -> creer )
{
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseur " ;
$sql .= " SET date_livraison = " . ( $date_livraison ? " ' " . $this -> db -> idate ( $date_livraison ) . " ' " : 'null' );
$sql .= " WHERE rowid = " . $this -> id ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::set_date_livraison sql= " . $sql , LOG_DEBUG );
2012-04-10 17:21:28 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$this -> date_livraison = $date_livraison ;
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::set_date_livraison " . $this -> error , LOG_ERR );
2012-04-10 17:21:28 +02:00
return - 1 ;
}
}
else
{
return - 2 ;
}
}
2011-09-11 20:35:38 +02:00
/**
2012-01-19 09:53:27 +01:00
* Update a supplier order from a customer order
*
* @ param User $user User that create
* @ param int $idc Id of supplier order to update
* @ param int $comclientid Id of customer order to use as template
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function updateFromCommandeClient ( $user , $idc , $comclientid )
{
$comclient = new Commande ( $this -> db );
$comclient -> fetch ( $comclientid );
$this -> id = $idc ;
$this -> lines = array ();
2011-09-17 21:49:50 +02:00
$num = count ( $comclient -> lines );
for ( $i = 0 ; $i < $num ; $i ++ )
2011-09-11 20:35:38 +02:00
{
$prod = new Product ( $this -> db );
if ( $prod -> fetch ( $comclient -> lines [ $i ] -> fk_product ) > 0 )
{
$libelle = $prod -> libelle ;
$ref = $prod -> ref ;
}
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " commande_fournisseurdet " ;
$sql .= " (fk_commande,label,description,fk_product, price, qty, tva_tx, localtax1_tx, localtax2_tx, remise_percent, subprice, remise, ref) " ;
$sql .= " VALUES ( " . $idc . " , ' " . $this -> db -> escape ( $libelle ) . " ',' " . $this -> db -> escape ( $comclient -> lines [ $i ] -> desc ) . " ' " ;
$sql .= " , " . $comclient -> lines [ $i ] -> fk_product . " ,' " . price2num ( $comclient -> lines [ $i ] -> price ) . " ' " ;
$sql .= " , ' " . $comclient -> lines [ $i ] -> qty . " ', " . $comclient -> lines [ $i ] -> tva_tx . " , " . $comclient -> lines [ $i ] -> localtax1_tx . " , " . $comclient -> lines [ $i ] -> localtax2_tx . " , " . $comclient -> lines [ $i ] -> remise_percent ;
2011-09-20 15:32:16 +02:00
$sql .= " , ' " . price2num ( $comclient -> lines [ $i ] -> subprice ) . " ','0',' " . $ref . " '); " ;
2012-01-19 09:53:27 +01:00
if ( $this -> db -> query ( $sql ))
2011-09-11 20:35:38 +02:00
{
$this -> update_price ();
}
}
return 1 ;
}
/**
* Tag order with a particular status
2012-01-19 09:53:27 +01:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user Object user that change status
* @ param int $status New status
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function setStatus ( $user , $status )
{
global $conf , $langs ;
$error = 0 ;
$this -> db -> begin ();
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'commande_fournisseur' ;
$sql .= ' SET fk_statut=' . $status ;
$sql .= ' WHERE rowid = ' . $this -> id ;
2012-03-18 00:59:24 +01:00
dol_syslog ( get_class ( $this ) . " ::setStatus sql= " . $sql );
2011-09-11 20:35:38 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
}
else
{
$error ++ ;
$this -> error = $this -> db -> lasterror ();
2012-03-18 00:59:24 +01:00
dol_syslog ( get_class ( $this ) . " ::setStatus " . $this -> error );
2011-09-11 20:35:38 +02:00
}
if ( ! $error )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
return - 1 ;
}
}
/**
* Update line
2011-09-12 19:08:02 +02:00
*
2011-12-19 17:12:29 +01:00
* @ param int $rowid Id de la ligne de facture
* @ param string $desc Description de la ligne
* @ param double $pu Prix unitaire
* @ param double $qty Quantity
* @ param double $remise_percent Pourcentage de remise de la ligne
2012-01-19 09:53:27 +01:00
* @ param double $txtva Taux TVA
* @ param double $txlocaltax1 Localtax1 tax
* @ param double $txlocaltax2 Localtax2 tax
2011-12-19 17:12:29 +01:00
* @ param double $price_base_type Type of price base
2013-03-24 07:11:44 +01:00
* @ param int $info_bits Miscellaneous informations
2011-12-19 17:12:29 +01:00
* @ param int $type Type of line ( 0 = product , 1 = service )
2012-11-03 16:32:49 +01:00
* @ param int $notrigger Disable triggers
2011-12-19 17:12:29 +01:00
* @ return int < 0 if error , > 0 if ok
2011-09-11 20:35:38 +02:00
*/
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
function updateline ( $rowid , $desc , $pu , $qty , $remise_percent , $txtva , $txlocaltax1 = 0 , $txlocaltax2 = 0 , $price_base_type = 'HT' , $info_bits = 0 , $type = 0 , $notrigger = false )
2011-09-11 20:35:38 +02:00
{
2012-03-18 00:59:24 +01:00
dol_syslog ( get_class ( $this ) . " ::updateline $rowid , $desc , $pu , $qty , $remise_percent , $txtva , $price_base_type , $info_bits , $type " );
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php' ;
2011-09-11 20:35:38 +02:00
if ( $this -> brouillon )
{
$this -> db -> begin ();
// Clean parameters
if ( empty ( $qty )) $qty = 0 ;
if ( empty ( $info_bits )) $info_bits = 0 ;
if ( empty ( $txtva )) $txtva = 0 ;
if ( empty ( $txlocaltax1 )) $txlocaltax1 = 0 ;
if ( empty ( $txlocaltax2 )) $txlocaltax2 = 0 ;
if ( empty ( $remise )) $remise = 0 ;
if ( empty ( $remise_percent )) $remise_percent = 0 ;
$remise_percent = price2num ( $remise_percent );
$qty = price2num ( $qty );
if ( ! $qty ) $qty = 1 ;
$pu = price2num ( $pu );
$txtva = price2num ( $txtva );
$txlocaltax1 = price2num ( $txlocaltax1 );
$txlocaltax2 = price2num ( $txlocaltax2 );
// Check parameters
if ( $type < 0 ) return - 1 ;
// Calcul du total TTC et de la TVA pour la ligne a partir de
// qty, pu, remise_percent et txtva
// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$localtaxes_type = getLocalTaxesFromRate ( $txtva , 0 , $this -> thirdparty );
2013-11-19 21:08:02 +01:00
2013-09-11 16:44:34 +02:00
$tabprice = calcul_price_total ( $qty , $pu , $remise_percent , $txtva , $txlocaltax1 , $txlocaltax2 , 0 , $price_base_type , $info_bits , $type , $this -> thirdparty , $localtaxes_type );
2011-09-11 20:35:38 +02:00
$total_ht = $tabprice [ 0 ];
$total_tva = $tabprice [ 1 ];
$total_ttc = $tabprice [ 2 ];
$total_localtax1 = $tabprice [ 9 ];
$total_localtax2 = $tabprice [ 10 ];
2013-09-11 16:44:34 +02:00
$localtax1_type = $localtaxes_type [ 0 ];
$localtax2_type = $localtaxes_type [ 2 ];
2011-09-11 20:35:38 +02:00
2012-11-03 16:32:49 +01:00
$subprice = price2num ( $pu , 'MU' );
2011-09-11 20:35:38 +02:00
// Mise a jour ligne en base
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseurdet SET " ;
$sql .= " description=' " . $this -> db -> escape ( $desc ) . " ' " ;
$sql .= " ,subprice=' " . price2num ( $subprice ) . " ' " ;
2012-11-03 16:32:49 +01:00
//$sql.= ",remise='".price2num($remise)."'";
2011-09-11 20:35:38 +02:00
$sql .= " ,remise_percent=' " . price2num ( $remise_percent ) . " ' " ;
$sql .= " ,tva_tx=' " . price2num ( $txtva ) . " ' " ;
$sql .= " ,localtax1_tx=' " . price2num ( $txlocaltax1 ) . " ' " ;
$sql .= " ,localtax2_tx=' " . price2num ( $txlocaltax2 ) . " ' " ;
2013-09-11 16:44:34 +02:00
$sql .= " ,localtax1_type=' " . $localtax1_type . " ' " ;
$sql .= " ,localtax2_type=' " . $localtax2_type . " ' " ;
2011-09-11 20:35:38 +02:00
$sql .= " ,qty=' " . price2num ( $qty ) . " ' " ;
2011-12-05 19:41:38 +01:00
/* if ( $date_end ) { $sql .= " ,date_start=' $date_end ' " ; }
2011-09-11 20:35:38 +02:00
else { $sql .= ',date_start=null' ; }
if ( $date_end ) { $sql .= " ,date_end=' $date_end ' " ; }
2011-12-05 19:41:38 +01:00
else { $sql .= ',date_end=null' ; } */
2011-09-11 20:35:38 +02:00
$sql .= " ,info_bits=' " . $info_bits . " ' " ;
$sql .= " ,total_ht=' " . price2num ( $total_ht ) . " ' " ;
$sql .= " ,total_tva=' " . price2num ( $total_tva ) . " ' " ;
$sql .= " ,total_localtax1=' " . price2num ( $total_localtax1 ) . " ' " ;
$sql .= " ,total_localtax2=' " . price2num ( $total_localtax2 ) . " ' " ;
$sql .= " ,total_ttc=' " . price2num ( $total_ttc ) . " ' " ;
2013-06-05 18:19:50 +02:00
$sql .= " ,product_type= " . $type ;
2011-09-11 20:35:38 +02:00
$sql .= " WHERE rowid = " . $rowid ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::updateline sql= " . $sql );
2011-09-20 11:40:27 +02:00
$result = $this -> db -> query ( $sql );
2011-09-11 20:35:38 +02:00
if ( $result > 0 )
{
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
$this -> rowid = $rowid ;
if ( ! $notrigger )
{
global $conf , $langs , $user ;
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
Add: hooks and triggers for a lot of core modules (action/calendrier, deplacement, dons, tva, contact/tiers, contrat, product lines, expedition, fournisseur commandes et factures, fiche intervention, projet et taches)
Signed-off-by: Stephen L. <lrq3000@gmail.com>
2012-08-14 15:50:45 +02:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'LINEORDER_SUPPLIER_UPDATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) { $error ++ ; $this -> errors = $interface -> errors ; }
// Fin appel triggers
}
2011-09-11 20:35:38 +02:00
// Mise a jour info denormalisees au niveau facture
$this -> update_price ();
$this -> db -> commit ();
return $result ;
}
else
{
$this -> error = $this -> db -> error ();
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::updateline " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
$this -> db -> rollback ();
return - 1 ;
}
}
else
{
$this -> error = " Order status makes operation forbidden " ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::updateline " . $this -> error , LOG_ERR );
2011-09-11 20:35:38 +02:00
return - 2 ;
}
}
/**
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
2011-09-11 20:35:38 +02:00
*/
function initAsSpecimen ()
{
global $user , $langs , $conf ;
2012-04-14 20:21:06 +02:00
dol_syslog ( get_class ( $this ) . " ::initAsSpecimen " );
2011-09-11 20:35:38 +02:00
$now = dol_now ();
2012-12-05 00:45:10 +01:00
// Find first product
$prodid = 0 ;
$product = new ProductFournisseur ( $db );
2011-09-11 20:35:38 +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 ) . " ) " ;
2012-12-05 00:45:10 +01:00
$sql .= $this -> db -> order ( " rowid " , " ASC " );
$sql .= $this -> db -> plimit ( 1 );
2011-09-11 20:35:38 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
2012-12-05 00:45:10 +01:00
$obj = $this -> db -> fetch_object ( $resql );
$prodid = $obj -> rowid ;
2011-09-11 20:35:38 +02:00
}
// Initialise parametres
$this -> id = 0 ;
$this -> ref = 'SPECIMEN' ;
$this -> specimen = 1 ;
$this -> socid = 1 ;
$this -> date = $now ;
$this -> date_commande = $now ;
$this -> date_lim_reglement = $this -> date + 3600 * 24 * 30 ;
$this -> cond_reglement_code = 'RECEP' ;
$this -> mode_reglement_code = 'CHQ' ;
$this -> note_public = 'This is a comment (public)' ;
2013-04-09 17:18:07 +02:00
$this -> note_private = 'This is a comment (private)' ;
2011-09-11 20:35:38 +02:00
// Lines
$nbp = 5 ;
$xnbp = 0 ;
while ( $xnbp < $nbp )
{
$line = new CommandeFournisseurLigne ( $this -> db );
$line -> desc = $langs -> trans ( " Description " ) . " " . $xnbp ;
$line -> qty = 1 ;
$line -> subprice = 100 ;
$line -> price = 100 ;
$line -> tva_tx = 19.6 ;
$line -> localtax1_tx = 0 ;
$line -> localtax2_tx = 0 ;
if ( $xnbp == 2 )
{
$line -> total_ht = 50 ;
$line -> total_ttc = 59.8 ;
$line -> total_tva = 9.8 ;
$line -> remise_percent = 50 ;
}
else
{
$line -> total_ht = 100 ;
$line -> total_ttc = 119.6 ;
$line -> total_tva = 19.6 ;
$line -> remise_percent = 00 ;
}
2012-12-05 00:45:10 +01:00
$line -> fk_product = $prodid ;
2011-09-11 20:35:38 +02:00
$this -> lines [ $xnbp ] = $line ;
$this -> total_ht += $line -> total_ht ;
$this -> total_tva += $line -> total_tva ;
$this -> total_ttc += $line -> total_ttc ;
$xnbp ++ ;
}
}
/**
2011-12-19 17:12:29 +01:00
* Load indicators for dashboard ( this -> nbtodo and this -> nbtodolate )
2011-09-11 20:35:38 +02:00
*
2011-12-19 17:12:29 +01:00
* @ param User $user Objet user
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function load_board ( $user )
{
global $conf , $user ;
2012-03-23 18:19:50 +01:00
$now = dol_now ();
2011-09-11 20:35:38 +02:00
$this -> nbtodo = $this -> nbtodolate = 0 ;
$clause = " WHERE " ;
$sql = " SELECT c.rowid, c.date_creation as datec, c.fk_statut " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " commande_fournisseur as c " ;
if ( ! $user -> rights -> societe -> client -> voir && ! $user -> societe_id )
{
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe_commerciaux as sc ON c.fk_soc = sc.fk_soc " ;
$sql .= " WHERE sc.fk_user = " . $user -> id ;
$clause = " AND " ;
}
$sql .= $clause . " c.entity = " . $conf -> entity ;
$sql .= " AND (c.fk_statut BETWEEN 1 AND 2) " ;
if ( $user -> societe_id ) $sql .= " AND c.fk_soc = " . $user -> societe_id ;
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$this -> nbtodo ++ ;
if ( $obj -> fk_statut != 3 && $this -> db -> jdate ( $obj -> datec ) < ( $now - $conf -> commande -> fournisseur -> warning_delay )) $this -> nbtodolate ++ ;
}
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2012-08-24 19:55:31 +02:00
/**
* Returns the translated input method
2012-09-08 02:17:08 +02:00
*
2012-08-24 19:55:31 +02:00
* @ return string
*/
function getInputMethod ()
{
global $db , $langs ;
if ( $this -> methode_commande_id > 0 )
{
$sql = " SELECT rowid, code, libelle " ;
$sql .= " FROM " . MAIN_DB_PREFIX . 'c_input_method' ;
$sql .= " WHERE active=1 AND rowid = " . $db -> escape ( $this -> methode_commande_id );
$query = $db -> query ( $sql );
if ( $query && $db -> num_rows ( $query ))
{
$result = $db -> fetch_object ( $query );
$string = $langs -> trans ( $result -> code );
if ( $string == $result -> code )
{
$string = $obj -> libelle != '-' ? $obj -> libelle : '' ;
}
return $string ;
}
2012-09-08 02:17:08 +02:00
2012-08-24 19:55:31 +02:00
dol_print_error ( $db );
}
return '' ;
}
2004-11-30 20:25:48 +01:00
}
2006-02-17 18:59:43 +01:00
2007-03-23 00:20:21 +01:00
2010-11-13 18:37:22 +01:00
2007-03-23 00:20:21 +01:00
/**
2012-04-14 20:21:06 +02:00
* Classe de gestion des lignes de commande
2007-03-23 00:20:21 +01:00
*/
2012-07-11 18:13:41 +02:00
class CommandeFournisseurLigne
2006-02-17 18:59:43 +01:00
{
2011-09-11 20:35:38 +02:00
// From llx_commandedet
var $qty ;
var $tva_tx ;
var $localtax1_tx ;
var $localtax2_tx ;
var $subprice ;
var $remise_percent ;
var $desc ; // Description ligne
var $fk_product ; // Id of predefined product
var $product_type = 0 ; // Type 0 = product, 1 = Service
var $total_ht ;
var $total_tva ;
var $total_localtax1 ;
var $total_localtax2 ;
var $total_ttc ;
2012-09-19 12:49:58 +02:00
var $info_bits ;
2012-09-19 17:53:09 +02:00
var $special_code ;
2011-09-11 20:35:38 +02:00
// From llx_product
var $libelle ; // Label produit
var $product_desc ; // Description produit
2011-10-04 01:26:07 +02:00
// From llx_product_fournisseur_price
2011-09-11 20:35:38 +02:00
var $ref_fourn ; // Ref supplier
/**
* Constructor
*
2012-01-19 09:53:27 +01:00
* @ param DoliDB $db Database handler
2011-09-11 20:35:38 +02:00
*/
2012-04-20 09:48:00 +02:00
function __construct ( $db )
2011-09-11 20:35:38 +02:00
{
2012-01-19 09:53:27 +01:00
$this -> db = $db ;
2011-09-11 20:35:38 +02:00
}
/**
* Load line order
*
2012-01-19 09:53:27 +01:00
* @ param int $rowid Id line order
* @ return int < 0 if KO , > 0 if OK
2011-09-11 20:35:38 +02:00
*/
function fetch ( $rowid )
{
$sql = 'SELECT cd.rowid, cd.fk_commande, cd.fk_product, cd.product_type, cd.description, cd.qty, cd.tva_tx,' ;
$sql .= ' cd.localtax1_tx, cd.localtax2_tx,' ;
$sql .= ' cd.remise, cd.remise_percent, cd.subprice,' ;
$sql .= ' cd.info_bits, cd.total_ht, cd.total_tva, cd.total_ttc,' ;
2013-06-05 18:19:50 +02:00
$sql .= ' cd.total_localtax1, cd.total_localtax2,' ;
2011-09-11 20:35:38 +02:00
$sql .= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc' ;
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'commande_fournisseurdet as cd' ;
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'product as p ON cd.fk_product = p.rowid' ;
$sql .= ' WHERE cd.rowid = ' . $rowid ;
$result = $this -> db -> query ( $sql );
if ( $result )
{
$objp = $this -> db -> fetch_object ( $result );
$this -> rowid = $objp -> rowid ;
$this -> fk_commande = $objp -> fk_commande ;
$this -> desc = $objp -> description ;
$this -> qty = $objp -> qty ;
$this -> subprice = $objp -> subprice ;
$this -> tva_tx = $objp -> tva_tx ;
$this -> localtax1_tx = $objp -> localtax1_tx ;
$this -> localtax2_tx = $objp -> localtax2_tx ;
$this -> remise = $objp -> remise ;
$this -> remise_percent = $objp -> remise_percent ;
$this -> fk_product = $objp -> fk_product ;
$this -> info_bits = $objp -> info_bits ;
$this -> total_ht = $objp -> total_ht ;
$this -> total_tva = $objp -> total_tva ;
$this -> total_localtax1 = $objp -> total_localtax1 ;
$this -> total_localtax2 = $objp -> total_localtax2 ;
$this -> total_ttc = $objp -> total_ttc ;
$this -> product_type = $objp -> product_type ;
$this -> ref = $objp -> product_ref ;
$this -> product_libelle = $objp -> product_libelle ;
$this -> product_desc = $objp -> product_desc ;
$this -> db -> free ( $result );
2013-06-05 18:19:50 +02:00
return 1 ;
2011-09-11 20:35:38 +02:00
}
else
{
dol_print_error ( $this -> db );
2013-06-05 18:19:50 +02:00
return - 1 ;
2011-09-11 20:35:38 +02:00
}
}
/**
* Mise a jour de l ' objet ligne de commande en base
2012-01-19 09:53:27 +01:00
*
2011-09-11 20:35:38 +02:00
* @ return int < 0 si ko , > 0 si ok
*/
function update_total ()
{
$this -> db -> begin ();
// Mise a jour ligne en base
$sql = " UPDATE " . MAIN_DB_PREFIX . " commande_fournisseurdet SET " ;
$sql .= " total_ht=' " . price2num ( $this -> total_ht ) . " ' " ;
$sql .= " ,total_tva=' " . price2num ( $this -> total_tva ) . " ' " ;
$sql .= " ,total_localtax1=' " . price2num ( $this -> total_localtax1 ) . " ' " ;
$sql .= " ,total_localtax2=' " . price2num ( $this -> total_localtax2 ) . " ' " ;
$sql .= " ,total_ttc=' " . price2num ( $this -> total_ttc ) . " ' " ;
$sql .= " WHERE rowid = " . $this -> rowid ;
dol_syslog ( " CommandeFournisseurLigne.class.php::update_total sql= $sql " );
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> error = $this -> db -> error ();
dol_syslog ( " CommandeFournisseurLigne.class.php::update_total Error " . $this -> error , LOG_ERR );
$this -> db -> rollback ();
return - 2 ;
}
}
2006-02-17 18:59:43 +01:00
}
2012-06-11 21:45:59 +02:00
?>