Merge pull request #5169 from olsesacl/develop-change_fournisseurdet

FIX: can use LINEORDER_SUPPLIER_CREATE
This commit is contained in:
Laurent Destailleur 2016-07-20 18:55:52 +02:00 committed by GitHub
commit a75ea2bba6
3 changed files with 711 additions and 313 deletions

View File

@ -50,89 +50,89 @@ class CommandeFournisseur extends CommonOrder
*/
protected $table_ref_field = 'ref';
var $id;
public $id;
/**
* Supplier order reference
* @var string
*/
var $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
public $ref;
public $ref_supplier;
public $brouillon;
public $statut; // 0=Draft -> 1=Validated -> 2=Approved -> 3=Process runing -> 4=Received partially -> 5=Received totally -> (reopen) 4=Received partially
// -> 7=Canceled/Never received -> (reopen) 3=Process runing
// -> 6=Canceled -> (reopen) 2=Approved
// -> 9=Refused -> (reopen) 1=Validated
// Note: billed or not is on another field "billed"
var $statuts; // List of status
var $socid;
var $fourn_id;
var $date;
var $date_valid;
var $date_approve;
var $date_approve2; // Used when SUPPLIER_ORDER_DOUBLE_APPROVAL is set
var $date_commande;
public $statuts; // List of status
public $socid;
public $fourn_id;
public $date;
public $date_valid;
public $date_approve;
public $date_approve2; // Used when SUPPLIER_ORDER_DOUBLE_APPROVAL is set
public $date_commande;
/**
* Delivery date
*/
var $date_livraison;
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;
public $date_livraison;
public $total_ht;
public $total_tva;
public $total_localtax1; // Total Local tax 1
public $total_localtax2; // Total Local tax 2
public $total_ttc;
public $source;
/**
* @deprecated
* @see note_private, note_public
*/
var $note;
public $note;
public $note_private;
public $note_public;
var $model_pdf;
var $fk_project;
var $cond_reglement_id;
var $cond_reglement_code;
var $fk_account;
var $mode_reglement_id;
var $mode_reglement_code;
var $user_author_id;
var $user_valid_id;
var $user_approve_id;
var $user_approve_id2; // Used when SUPPLIER_ORDER_DOUBLE_APPROVAL is set
public $model_pdf;
public $fk_project;
public $cond_reglement_id;
public $cond_reglement_code;
public $fk_account;
public $mode_reglement_id;
public $mode_reglement_code;
public $user_author_id;
public $user_valid_id;
public $user_approve_id;
public $user_approve_id2; // Used when SUPPLIER_ORDER_DOUBLE_APPROVAL is set
//Incoterms
var $fk_incoterms;
var $location_incoterms;
var $libelle_incoterms; //Used into tooltip
public $fk_incoterms;
public $location_incoterms;
public $libelle_incoterms; //Used into tooltip
var $extraparams=array();
public $extraparams=array();
/**
* @var CommandeFournisseurLigne[]
*/
public $lines = array();
//Add for supplier_proposal
var $origin;
var $origin_id;
var $linked_objects=array();
public $origin;
public $origin_id;
public $linked_objects=array();
// Multicurrency
var $fk_multicurrency;
var $multicurrency_code;
var $multicurrency_tx;
var $multicurrency_total_ht;
var $multicurrency_total_tva;
var $multicurrency_total_ttc;
public $fk_multicurrency;
public $multicurrency_code;
public $multicurrency_tx;
public $multicurrency_total_ht;
public $multicurrency_total_tva;
public $multicurrency_total_ttc;
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
public function __construct($db)
{
global $conf;
@ -161,7 +161,7 @@ class CommandeFournisseur extends CommonOrder
* @param string $ref Ref of object
* @return int >0 if OK, <0 if KO, 0 if not found
*/
function fetch($id,$ref='')
public function fetch($id,$ref='')
{
global $conf;
@ -373,7 +373,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
* @return int <0 if KO, >0 if OK
*/
function valid($user,$idwarehouse=0,$notrigger=0)
public function valid($user,$idwarehouse=0,$notrigger=0)
{
global $langs,$conf;
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
@ -492,7 +492,7 @@ class CommandeFournisseur extends CommonOrder
* @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
*/
function getLibStatut($mode=0)
public function getLibStatut($mode=0)
{
return $this->LibStatut($this->statut,$mode,$this->billed);
}
@ -584,7 +584,7 @@ class CommandeFournisseur extends CommonOrder
* @param string $option On what the link points
* @return string Chain with URL
*/
function getNomUrl($withpicto=0,$option='')
public function getNomUrl($withpicto=0,$option='')
{
global $langs, $conf;
@ -620,7 +620,7 @@ class CommandeFournisseur extends CommonOrder
* @param Societe $soc company object
* @return string free reference for the invoice
*/
function getNextNumRef($soc)
public function getNextNumRef($soc)
{
global $db, $langs, $conf;
$langs->load("orders");
@ -674,8 +674,9 @@ class CommandeFournisseur extends CommonOrder
* @param User $user Object user making the change
* @return int <0 if KO, >0 if KO
*/
function classifyBilled(User $user)
public function classifyBilled(User $user)
{
$error=0;
$this->db->begin();
$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseur SET billed = 1';
@ -720,7 +721,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $secondlevel 0=Standard approval, 1=Second level approval (used when option SUPPLIER_ORDER_DOUBLE_APPROVAL is set)
* @return int <0 if KO, >0 if OK
*/
function approve($user, $idwarehouse=0, $secondlevel=0)
public function approve($user, $idwarehouse=0, $secondlevel=0)
{
global $langs,$conf;
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
@ -805,6 +806,7 @@ class CommandeFournisseur extends CommonOrder
// Product with reference
if ($this->lines[$i]->fk_product > 0)
{
$this->line = $this->lines[$i];
$mouvP = new MouvementStock($this->db);
$mouvP->origin = &$this;
// We decrement stock of product (and sub-products)
@ -812,6 +814,7 @@ class CommandeFournisseur extends CommonOrder
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));
if ($result < 0) { $error++; }
unset($this->line);
}
}
}
@ -870,7 +873,7 @@ class CommandeFournisseur extends CommonOrder
* @param User $user User making action
* @return int 0 if Ok, <0 if Ko
*/
function refuse($user)
public function refuse($user)
{
global $conf, $langs;
@ -988,7 +991,7 @@ class CommandeFournisseur extends CommonOrder
* @param string $comment Comment
* @return int <0 if KO, >0 if OK
*/
function commande($user, $date, $methode, $comment='')
public function commande($user, $date, $methode, $comment='')
{
global $langs;
dol_syslog(get_class($this)."::commande");
@ -1046,7 +1049,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $notrigger Disable all triggers
* @return int <0 if KO, Id of supplier order if OK
*/
function create($user, $notrigger=0)
public function create($user, $notrigger=0)
{
global $langs,$conf,$hookmanager;
@ -1217,7 +1220,7 @@ class CommandeFournisseur extends CommonOrder
*
* @return int New id of clone
*/
function createFromClone()
public function createFromClone()
{
global $conf,$user,$langs,$hookmanager;
@ -1304,7 +1307,7 @@ class CommandeFournisseur extends CommonOrder
* @param string $fk_unit Code of the unit to use. Null to use the default one
* @return int <=0 if KO, >0 if OK
*/
function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0.0, $txlocaltax2=0.0, $fk_product=0, $fk_prod_fourn_price=0, $fourn_ref='', $remise_percent=0.0, $price_base_type='HT', $pu_ttc=0.0, $type=0, $info_bits=0, $notrigger=false, $date_start=null, $date_end=null, $array_options=0, $fk_unit=null)
public function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0.0, $txlocaltax2=0.0, $fk_product=0, $fk_prod_fourn_price=0, $fourn_ref='', $remise_percent=0.0, $price_base_type='HT', $pu_ttc=0.0, $type=0, $info_bits=0, $notrigger=false, $date_start=null, $date_end=null, $array_options=0, $fk_unit=null)
{
global $langs,$mysoc,$conf;
@ -1420,77 +1423,80 @@ class CommandeFournisseur extends CommonOrder
$subprice = price2num($pu,'MU');
// TODO We should use here $this->line=new CommandeFournisseurLigne($this->db); and $this->line->insert(); to work loke other object (proposal, order, invoice)
$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande_fournisseurdet";
$sql.= " (fk_commande, label, description, date_start, date_end,";
$sql.= " fk_product, product_type,";
$sql.= " qty, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, remise_percent, subprice, ref,";
$sql.= " total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, fk_unit,";
$sql.= " fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc";
$sql.= ")";
$sql.= " VALUES (".$this->id.", '" . $this->db->escape($label) . "','" . $this->db->escape($desc) . "',";
$sql.= " ".($date_start?"'".$this->db->idate($date_start)."'":"null").",";
$sql.= " ".($date_end?"'".$this->db->idate($date_end)."'":"null").",";
if ($fk_product) { $sql.= $fk_product.","; }
else { $sql.= "null,"; }
$sql.= "'".$product_type."',";
$sql.= "'".$qty."', ".$txtva.", ".$txlocaltax1.", ".$txlocaltax2;
// Insert line
$this->line=new CommandeFournisseurLigne($this->db);
$sql.= ", '".$localtax1_type."',";
$sql.= " '".$localtax2_type."'";
$this->line->context = $this->context;
$sql.= ", ".$remise_percent.",'".price2num($subprice,'MU')."','".$ref."',";
$sql.= "'".price2num($total_ht)."',";
$sql.= "'".price2num($total_tva)."',";
$sql.= "'".price2num($total_localtax1)."',";
$sql.= "'".price2num($total_localtax2)."',";
$sql.= "'".price2num($total_ttc)."',";
$sql.= ($fk_unit ? "'".$this->db->escape($fk_unit)."'":"null");
$sql.= ", ".$this->fk_multicurrency;
$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
$sql.= ", ".price2num($pu_ht * $this->multicurrency_tx);
$sql.= ", ".$multicurrency_total_ht;
$sql.= ", ".$multicurrency_total_tva;
$sql.= ", ".$multicurrency_total_ttc;
$sql.= ")";
$this->line->fk_commande=$this->id;
$this->line->label=$label;
$this->line->desc=$desc;
$this->line->qty=$qty;
$this->line->tva_tx=$txtva;
$this->line->localtax1_tx=$txlocaltax1;
$this->line->localtax2_tx=$txlocaltax2;
$this->line->localtax1_type = $localtaxes_type[0];
$this->line->localtax2_type = $localtaxes_type[2];
$this->line->fk_product=$fk_product;
$this->line->product_type=$product_type;
$this->line->remise_percent=$remise_percent;
$this->line->subprice=$pu_ht;
$this->line->rang=$this->rang;
$this->line->info_bits=$info_bits;
$this->line->total_ht=$total_ht;
$this->line->total_tva=$total_tva;
$this->line->total_localtax1=$total_localtax1;
$this->line->total_localtax2=$total_localtax2;
$this->line->total_ttc=$total_ttc;
$this->line->product_type=$type;
$this->line->special_code=$this->special_code;
$this->line->origin=$this->origin;
$this->line->fk_unit=$fk_unit;
$resql=$this->db->query($sql);
//print $sql;
if ($resql)
$this->line->date_start=$date_start;
$this->line->date_end=$date_end;
// Multicurrency
$this->line->fk_multicurrency = $this->fk_multicurrency;
$this->line->multicurrency_code = $this->multicurrency_code;
$this->line->multicurrency_subprice = price2num($pu_ht * $this->multicurrency_tx);
$this->line->multicurrency_total_ht = $multicurrency_total_ht;
$this->line->multicurrency_total_tva = $multicurrency_total_tva;
$this->line->multicurrency_total_ttc = $multicurrency_total_ttc;
$this->line->subprice=$pu;
$this->line->price=$this->line->subprice;
$this->line->remise_percent=$remise_percent;
if (is_array($array_options) && count($array_options)>0) {
$this->line->array_options=$array_options;
}
$result=$this->line->insert($notrigger);
if ($result > 0)
{
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$linetmp = new CommandeFournisseurLigne($this->db);
$linetmp->id=$this->db->last_insert_id(MAIN_DB_PREFIX.'commande_fournisseurdet');
$linetmp->array_options = $array_options;
$result=$linetmp->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
// Reorder if child line
if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
if (! $error && ! $notrigger)
// Mise a jour informations denormalisees au niveau de la commande meme
$result=$this->update_price(1,'auto'); // This method is designed to add line from user input so total calculation must be done using 'auto' mode.
if ($result > 0)
{
global $conf, $langs, $user;
// Call trigger
$result=$this->call_trigger('LINEORDER_SUPPLIER_CREATE',$user);
if ($result < 0)
{
$this->db->rollback();
return -1;
}
// End call triggers
$this->db->commit();
return $this->line->id;
}
else
{
$this->db->rollback();
return -1;
}
$this->update_price('','auto');
$this->db->commit();
return 1;
}
else
{
$this->error=$this->db->error();
$this->error=$this->line->error;
dol_syslog(get_class($this)."::addline error=".$this->error, LOG_ERR);
$this->db->rollback();
return -1;
}
@ -1514,7 +1520,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $notrigger 1 = notrigger
* @return int <0 if KO, >0 if OK
*/
function dispatchProduct($user, $product, $qty, $entrepot, $price=0, $comment='', $eatby='', $sellby='', $batch='', $fk_commandefourndet=0, $notrigger=0)
public function dispatchProduct($user, $product, $qty, $entrepot, $price=0, $comment='', $eatby='', $sellby='', $batch='', $fk_commandefourndet=0, $notrigger=0)
{
global $conf, $langs;
@ -1616,9 +1622,10 @@ class CommandeFournisseur extends CommonOrder
* @param int $notrigger 1=Disable call to triggers
* @return <0 if KO, >0 if OK
*/
function deleteline($idline, $notrigger=0)
public function deleteline($idline, $notrigger=0)
{
global $user,$langs,$conf;
$error = 0;
if ($this->statut != 0)
{
@ -1671,7 +1678,7 @@ class CommandeFournisseur extends CommonOrder
* @param User $user Object user
* @return int <0 if KO, >0 if OK
*/
function delete($user='')
public function delete($user='')
{
global $langs,$conf;
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
@ -1822,7 +1829,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $status Filter on stats (-1 = no filter, 0 = lines draft to be approved, 1 = approved lines)
* @return array Array of lines
*/
function getDispachedLines($status=-1)
public function getDispachedLines($status=-1)
{
$ret = array();
@ -2048,7 +2055,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $comclientid Id of customer order to use as template
* @return int <0 if KO, >0 if OK
*/
function updateFromCommandeClient($user, $idc, $comclientid)
public function updateFromCommandeClient($user, $idc, $comclientid)
{
$comclient = new Commande($this->db);
$comclient->fetch($comclientid);
@ -2089,7 +2096,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $status New status
* @return int <0 if KO, >0 if OK
*/
function setStatus($user,$status)
public function setStatus($user,$status)
{
global $conf,$langs;
$error=0;
@ -2147,12 +2154,14 @@ class CommandeFournisseur extends CommonOrder
* @param string $fk_unit Code of the unit to use. Null to use the default one
* @return int < 0 if error, > 0 if ok
*/
function updateline($rowid, $desc, $pu, $qty, $remise_percent, $txtva, $txlocaltax1=0, $txlocaltax2=0, $price_base_type='HT', $info_bits=0, $type=0, $notrigger=false, $date_start='', $date_end='', $array_options=0, $fk_unit=null)
public function updateline($rowid, $desc, $pu, $qty, $remise_percent, $txtva, $txlocaltax1=0, $txlocaltax2=0, $price_base_type='HT', $info_bits=0, $type=0, $notrigger=false, $date_start='', $date_end='', $array_options=0, $fk_unit=null)
{
global $mysoc;
global $mysoc, $conf;
dol_syslog(get_class($this)."::updateline $rowid, $desc, $pu, $qty, $remise_percent, $txtva, $price_base_type, $info_bits, $type, $fk_unit");
include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
$error = 0;
if ($this->brouillon)
{
$this->db->begin();
@ -2202,83 +2211,62 @@ class CommandeFournisseur extends CommonOrder
$subprice = price2num($pu,'MU');
// Mise a jour ligne en base
$sql = "UPDATE ".MAIN_DB_PREFIX."commande_fournisseurdet SET";
$sql.= " description='".$this->db->escape($desc)."'";
$sql.= ",subprice='".price2num($subprice)."'";
//$sql.= ",remise='".price2num($remise)."'";
$sql.= ",remise_percent='".price2num($remise_percent)."'";
$sql.= ",tva_tx='".price2num($txtva)."'";
$sql.= ",localtax1_tx='".price2num($txlocaltax1)."'";
$sql.= ",localtax2_tx='".price2num($txlocaltax2)."'";
$sql.= ",localtax1_type='".$localtax1_type."'";
$sql.= ",localtax2_type='".$localtax2_type."'";
$sql.= ",qty='".price2num($qty)."'";
$sql.= ",date_start=".(! empty($date_start)?"'".$this->db->idate($date_start)."'":"null");
$sql.= ",date_end=".(! empty($date_end)?"'".$this->db->idate($date_end)."'":"null");
$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)."'";
$sql.= ",product_type=".$type;
$sql.= ($fk_unit ? ",fk_unit='".$this->db->escape($fk_unit)."'":", fk_unit=null");
// Multicurrency
$sql.= " , multicurrency_subprice=".price2num($subprice * $this->multicurrency_tx)."";
$sql.= " , multicurrency_total_ht=".price2num($multicurrency_total_ht)."";
$sql.= " , multicurrency_total_tva=".price2num($multicurrency_total_tva)."";
$sql.= " , multicurrency_total_ttc=".price2num($multicurrency_total_ttc)."";
$sql.= " WHERE rowid = ".$rowid;
$this->line=new CommandeFournisseurLigne($this->db);
$this->line->fetch($rowid);
dol_syslog(get_class($this)."::updateline", LOG_DEBUG);
$result = $this->db->query($sql);
if ($result > 0)
$this->line->context = $this->context;
$this->line->fk_commande=$this->id;
//$this->line->label=$label;
$this->line->desc=$desc;
$this->line->qty=$qty;
$this->line->tva_tx=$txtva;
$this->line->localtax1_tx=$txlocaltax1;
$this->line->localtax2_tx=$txlocaltax2;
$this->line->localtax1_type = $localtaxes_type[0];
$this->line->localtax2_type = $localtaxes_type[2];
$this->line->remise_percent=$remise_percent;
$this->line->subprice=$pu;
$this->line->rang=$this->rang;
$this->line->info_bits=$info_bits;
$this->line->total_ht=$total_ht;
$this->line->total_tva=$total_tva;
$this->line->total_localtax1=$total_localtax1;
$this->line->total_localtax2=$total_localtax2;
$this->line->total_ttc=$total_ttc;
$this->line->product_type=$type;
$this->line->special_code=$this->special_code;
$this->line->origin=$this->origin;
$this->line->fk_unit=$fk_unit;
$this->line->date_start=$date_start;
$this->line->date_end=$date_end;
// Multicurrency
$this->line->fk_multicurrency = $this->fk_multicurrency;
$this->line->multicurrency_code = $this->multicurrency_code;
$this->line->multicurrency_subprice = price2num($pu_ht * $this->multicurrency_tx);
$this->line->multicurrency_total_ht = $multicurrency_total_ht;
$this->line->multicurrency_total_tva = $multicurrency_total_tva;
$this->line->multicurrency_total_ttc = $multicurrency_total_ttc;
$this->line->subprice=$pu;
$this->line->price=$this->line->subprice;
$this->line->remise_percent=$remise_percent;
if (is_array($array_options) && count($array_options)>0) {
$this->line->array_options=$array_options;
}
$result=$this->line->update($notrigger);
// Mise a jour info denormalisees au niveau facture
if (! $error)
{
$this->rowid = $rowid;
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$tmpline = new CommandeFournisseurLigne($this->db);
$tmpline->id=$this->rowid;
$tmpline->array_options = $array_options;
$result=$tmpline->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
if (! $error && ! $notrigger)
{
global $conf, $langs, $user;
// Call trigger
$result=$this->call_trigger('LINEORDER_SUPPLIER_UPDATE',$user);
if ($result < 0)
{
$this->db->rollback();
return -1;
}
// End call triggers
}
// Mise a jour info denormalisees au niveau facture
if (! $error)
{
$this->update_price('','auto');
}
if (! $error)
{
$this->db->commit();
return $result;
}
else
{
$this->db->rollback();
return -1;
}
$this->update_price('','auto');
}
else
{
@ -2303,7 +2291,7 @@ class CommandeFournisseur extends CommonOrder
*
* @return void
*/
function initAsSpecimen()
public function initAsSpecimen()
{
global $user,$langs,$conf;
@ -2385,7 +2373,7 @@ class CommandeFournisseur extends CommonOrder
* @param int $id Id de la facture a charger
* @return void
*/
function info($id)
public function info($id)
{
$sql = 'SELECT c.rowid, date_creation as datec, tms as datem, date_valid as date_validation, date_approve as datea, date_approve2 as datea2,';
$sql.= ' fk_user_author, fk_user_modif, fk_user_valid, fk_user_approve, fk_user_approve2';
@ -2523,7 +2511,7 @@ class CommandeFournisseur extends CommonOrder
*
* @return string
*/
function getInputMethod()
public function getInputMethod()
{
global $db, $langs;
@ -2593,7 +2581,7 @@ class CommandeFournisseur extends CommonOrder
* @param Translate $langs Language object
* @return Translated string
*/
function getMaxDeliveryTimeDay($langs)
public function getMaxDeliveryTimeDay($langs)
{
if (empty($this->lines)) return '';
@ -2689,17 +2677,31 @@ class CommandeFournisseur extends CommonOrder
*/
class CommandeFournisseurLigne extends CommonOrderLine
{
public $element='commande_fournisseurdet';
public $element='commande_fournisseurdet';
public $table_element='commande_fournisseurdet';
public $oldline;
/**
* Id of parent order
* @var int
*/
public $fk_commande;
// From llx_commande_fournisseurdet
public $fk_parent_line;
public $fk_facture;
public $label;
public $rang = 0;
/**
* Unit price without taxes
* @var float
*/
public $pu_ht;
var $date_start;
var $date_end;
public $date_start;
public $date_end;
// From llx_product_fournisseur_price
@ -2715,7 +2717,9 @@ class CommandeFournisseurLigne extends CommonOrderLine
* Supplier reference
* @var string
*/
public $ref_supplier;
public $ref_supplier;
public $remise;
public $product_libelle;
/**
@ -2723,7 +2727,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
*
* @param DoliDB $db Database handler
*/
function __construct($db)
public function __construct($db)
{
$this->db= $db;
}
@ -2734,7 +2738,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
* @param int $rowid Id line order
* @return int <0 if KO, >0 if OK
*/
function fetch($rowid)
public 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,';
@ -2751,6 +2755,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
{
$objp = $this->db->fetch_object($result);
$this->rowid = $objp->rowid;
$this->id = $objp->rowid;
$this->fk_commande = $objp->fk_commande;
$this->desc = $objp->description;
$this->qty = $objp->qty;
@ -2770,6 +2775,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
$this->product_type = $objp->product_type;
$this->ref = $objp->product_ref;
$this->product_ref = $objp->product_ref;
$this->product_libelle = $objp->product_libelle;
$this->product_desc = $objp->product_desc;
@ -2792,7 +2798,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
*
* @return int <0 si ko, >0 si ok
*/
function update_total()
public function updateTotal()
{
$this->db->begin();
@ -2805,7 +2811,7 @@ class CommandeFournisseurLigne extends CommonOrderLine
$sql.= ",total_ttc='".price2num($this->total_ttc)."'";
$sql.= " WHERE rowid = ".$this->rowid;
dol_syslog("CommandeFournisseurLigne.class.php::update_total", LOG_DEBUG);
dol_syslog(get_class($this)."::updateTotal", LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
@ -2820,5 +2826,209 @@ class CommandeFournisseurLigne extends CommonOrderLine
return -2;
}
}
/**
* Insert line into database
*
* @param int $notrigger 1 = disable triggers
* @return int <0 if KO, >0 if OK
*/
public function insert($notrigger=0)
{
global $conf, $user;
$error=0;
dol_syslog(get_class($this)."::insert rang=".$this->rang);
// Clean parameters
if (empty($this->tva_tx)) $this->tva_tx=0;
if (empty($this->localtax1_tx)) $this->localtax1_tx=0;
if (empty($this->localtax2_tx)) $this->localtax2_tx=0;
if (empty($this->localtax1_type)) $this->localtax1_type=0;
if (empty($this->localtax2_type)) $this->localtax2_type=0;
if (empty($this->total_localtax1)) $this->total_localtax1=0;
if (empty($this->total_localtax2)) $this->total_localtax2=0;
if (empty($this->rang)) $this->rang=0;
if (empty($this->remise)) $this->remise=0;
if (empty($this->remise_percent)) $this->remise_percent=0;
if (empty($this->info_bits)) $this->info_bits=0;
if (empty($this->special_code)) $this->special_code=0;
if (empty($this->fk_parent_line)) $this->fk_parent_line=0;
if (empty($this->pa_ht)) $this->pa_ht=0;
// Check parameters
if ($this->product_type < 0) return -1;
$this->db->begin();
// Insertion dans base de la ligne
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element;
$sql.= " (fk_commande, label, description, date_start, date_end,";
$sql.= " fk_product, product_type,";
$sql.= " qty, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, remise_percent, subprice, ref,";
$sql.= " total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, fk_unit,";
$sql.= " fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc";
$sql.= ")";
$sql.= " VALUES (".$this->fk_commande.", '" . $this->db->escape($this->product_label) . "','" . $this->db->escape($this->desc) . "',";
$sql.= " ".($this->date_start?"'".$this->db->idate($this->date_start)."'":"null").",";
$sql.= " ".($this->date_end?"'".$this->db->idate($this->date_end)."'":"null").",";
if ($this->fk_product) { $sql.= $this->fk_product.","; }
else { $sql.= "null,"; }
$sql.= "'".$this->product_type."',";
$sql.= "'".$this->qty."', ".$this->tva_tx.", ".$this->localtax1_tx.", ".$this->localtax2_tx;
$sql.= ", '".$this->localtax1_type."',";
$sql.= " '".$this->localtax2_type."'";
$sql.= ", ".$this->remise_percent.",'".price2num($this->subprice,'MU')."','".$this->product_ref."',";
$sql.= "'".price2num($this->total_ht)."',";
$sql.= "'".price2num($this->total_tva)."',";
$sql.= "'".price2num($this->total_localtax1)."',";
$sql.= "'".price2num($this->total_localtax2)."',";
$sql.= "'".price2num($this->total_ttc)."',";
$sql.= ($this->fk_unit ? "'".$this->db->escape($this->fk_unit)."'":"null");
$sql.= ", ".$this->fk_multicurrency;
$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
$sql.= ", ".price2num($this->pu_ht * $this->multicurrency_tx);
$sql.= ", ".$this->multicurrency_total_ht;
$sql.= ", ".$this->multicurrency_total_tva;
$sql.= ", ".$this->multicurrency_total_ttc;
$sql.= ")";
dol_syslog(get_class($this)."::insert", LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
$this->id=$this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
$this->rowid =$this->id;
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$result=$this->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
if (! $error && ! $notrigger)
{
// Call trigger
$result=$this->call_trigger('LINEORDER_INSERT',$user);
if ($result < 0) $error++;
// End call triggers
}
if (!$error) {
$this->db->commit();
return 1;
}
foreach($this->errors as $errmsg)
{
dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
$this->errors[]=($this->errors?', '.$errmsg:$errmsg);
}
$this->db->rollback();
return -1*$error;
}
else
{
$this->errors[]=$this->db->error();
$this->db->rollback();
return -2;
}
}
/**
* Update the line object into db
*
* @param int $notrigger 1 = disable triggers
* @return int <0 si ko, >0 si ok
*/
public function update($notrigger=0)
{
global $conf,$user;
$error=0;
// Mise a jour ligne en base
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET";
$sql.= " description='".$this->db->escape($this->desc)."'";
$sql.= ",subprice='".price2num($this->subprice)."'";
//$sql.= ",remise='".price2num($remise)."'";
$sql.= ",remise_percent='".price2num($this->remise_percent)."'";
$sql.= ",tva_tx='".price2num($this->tva_tx)."'";
$sql.= ",localtax1_tx='".price2num($this->total_localtax1)."'";
$sql.= ",localtax2_tx='".price2num($this->total_localtax2)."'";
$sql.= ",localtax1_type='".$this->localtax1_type."'";
$sql.= ",localtax2_type='".$this->localtax2_type."'";
$sql.= ",qty='".price2num($this->qty)."'";
$sql.= ",date_start=".(! empty($this->date_start)?"'".$this->db->idate($this->date_start)."'":"null");
$sql.= ",date_end=".(! empty($this->date_end)?"'".$this->db->idate($this->date_end)."'":"null");
$sql.= ",info_bits='".$this->info_bits."'";
$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.= ",product_type=".$this->product_type;
$sql.= ($this->fk_unit ? ",fk_unit='".$this->db->escape($this->fk_unit)."'":", fk_unit=null");
// Multicurrency
$sql.= " , multicurrency_subprice=".price2num($this->subprice * $this->multicurrency_tx)."";
$sql.= " , multicurrency_total_ht=".price2num($this->multicurrency_total_ht)."";
$sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva)."";
$sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc)."";
$sql.= " WHERE rowid = ".$this->id;
dol_syslog(get_class($this)."::updateline", LOG_DEBUG);
$result = $this->db->query($sql);
if ($result > 0)
{
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$result=$this->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
if (! $error && ! $notrigger)
{
global $user;
// Call trigger
$result=$this->call_trigger('LINEORDER_SUPPLIER_UPDATE',$user);
if ($result < 0)
{
$this->db->rollback();
return -1;
}
// End call triggers
}
if (! $error)
{
$this->db->commit();
return $result;
}
else
{
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->lasterror();
$this->db->rollback();
return -1;
}
}
}

View File

@ -50,57 +50,57 @@ class FactureFournisseur extends CommonInvoice
*/
protected $table_ref_field = 'ref';
var $rowid;
var $ref;
var $product_ref;
var $ref_supplier;
var $socid;
public $rowid;
public $ref;
public $product_ref;
public $ref_supplier;
public $socid;
//Check constants for types
var $type = self::TYPE_STANDARD;
public $type = self::TYPE_STANDARD;
/**
* Supplier invoice status
* @var int
* @see FactureFournisseur::STATUS_DRAFT, FactureFournisseur::STATUS_VALIDATED, FactureFournisseur::STATUS_PAID, FactureFournisseur::STATUS_ABANDONED
*/
var $statut;
public $statut;
/**
* Set to 1 if the invoice is completely paid, otherwise is 0
* @var int
* @deprecated Use statuses stored in self::statut
*/
var $paye;
public $paye;
var $author;
var $libelle;
var $datec; // Creation date
var $tms; // Last update date
var $date; // Invoice date
var $date_echeance; // Max payment date
var $amount;
var $remise;
var $tva;
var $localtax1;
var $localtax2;
var $total_ht;
var $total_tva;
var $total_localtax1;
var $total_localtax2;
var $total_ttc;
public $author;
public $libelle;
public $datec; // Creation date
public $tms; // Last update date
public $date; // Invoice date
public $date_echeance; // Max payment date
public $amount;
public $remise;
public $tva;
public $localtax1;
public $localtax2;
public $total_ht;
public $total_tva;
public $total_localtax1;
public $total_localtax2;
public $total_ttc;
/**
* @deprecated
* @see note_private, note_public
*/
var $note;
var $note_private;
var $note_public;
var $propalid;
var $cond_reglement_id;
var $cond_reglement_code;
var $fk_account;
var $mode_reglement_id;
var $mode_reglement_code;
public $note;
public $note_private;
public $note_public;
public $propalid;
public $cond_reglement_id;
public $cond_reglement_code;
public $fk_account;
public $mode_reglement_id;
public $mode_reglement_code;
/**
* Invoice lines
@ -110,29 +110,29 @@ class FactureFournisseur extends CommonInvoice
/**
* @deprecated
*/
var $fournisseur;
public $fournisseur;
//Incorterms
var $fk_incoterms;
var $location_incoterms;
var $libelle_incoterms; //Used into tooltip
public $fk_incoterms;
public $location_incoterms;
public $libelle_incoterms; //Used into tooltip
var $extraparams=array();
public $extraparams=array();
// Multicurrency
var $fk_multicurrency;
var $multicurrency_code;
var $multicurrency_tx;
var $multicurrency_total_ht;
var $multicurrency_total_tva;
var $multicurrency_total_ttc;
public $fk_multicurrency;
public $multicurrency_code;
public $multicurrency_tx;
public $multicurrency_total_ht;
public $multicurrency_total_tva;
public $multicurrency_total_ttc;
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
public function __construct($db)
{
$this->db = $db;
@ -155,7 +155,7 @@ class FactureFournisseur extends CommonInvoice
* @param User $user object utilisateur qui cree
* @return int id facture si ok, < 0 si erreur
*/
function create($user)
public function create($user)
{
global $langs,$conf,$hookmanager;
@ -355,7 +355,7 @@ class FactureFournisseur extends CommonInvoice
* @param string $ref Ref supplier invoice
* @return int <0 if KO, >0 if OK, 0 if not found
*/
function fetch($id='',$ref='')
public function fetch($id='',$ref='')
{
global $langs;
@ -613,7 +613,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $notrigger 0=launch triggers after, 1=disable triggers
* @return int <0 if KO, >0 if OK
*/
function update($user=null, $notrigger=0)
public function update($user=null, $notrigger=0)
{
global $conf, $langs;
$error=0;
@ -741,7 +741,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $rowid Id of invoice to delete
* @return int <0 if KO, >0 if OK
*/
function delete($rowid)
public function delete($rowid)
{
global $user,$langs,$conf;
@ -955,7 +955,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $notrigger 1=Does not execute triggers, 0= execuete triggers
* @return int <0 if KO, =0 if nothing to do, >0 if OK
*/
function validate($user, $force_number='', $idwarehouse=0, $notrigger=0)
public function validate($user, $force_number='', $idwarehouse=0, $notrigger=0)
{
global $conf,$langs;
@ -1011,6 +1011,7 @@ class FactureFournisseur extends CommonInvoice
{
if ($this->lines[$i]->fk_product > 0)
{
$this->line = $this->lines[$i];
$mouvP = new MouvementStock($this->db);
$mouvP->origin = &$this;
// We increase stock for product
@ -1018,6 +1019,7 @@ class FactureFournisseur extends CommonInvoice
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("InvoiceValidatedInDolibarr",$num));
if ($result < 0) { $error++; }
unset($this->line);
}
}
}
@ -1194,14 +1196,16 @@ class FactureFournisseur extends CommonInvoice
* @param int $notrigger Disable triggers
* @param array $array_options extrafields array
* @param string $fk_unit Code of the unit to use. Null to use the default one
* @param int $origin_id id origin document
* @return int >0 if OK, <0 if KO
*
* FIXME Add field ref (that should be named ref_supplier) and label into update. For example can be filled when product line created from order.
*/
function addline($desc, $pu, $txtva, $txlocaltax1, $txlocaltax2, $qty, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $price_base_type='HT', $type=0, $rang=-1, $notrigger=false, $array_options=0, $fk_unit=null)
public function addline($desc, $pu, $txtva, $txlocaltax1, $txlocaltax2, $qty, $fk_product=0, $remise_percent=0, $date_start='', $date_end='', $ventil=0, $info_bits='', $price_base_type='HT', $type=0, $rang=-1, $notrigger=false, $array_options=0, $fk_unit=null, $origin_id=0)
{
dol_syslog(get_class($this)."::addline $desc,$pu,$qty,$txtva,$fk_product,$remise_percent,$date_start,$date_end,$ventil,$info_bits,$price_base_type,$type,$fk_unit", LOG_DEBUG);
include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
global $mysoc;
// Clean parameters
if (empty($remise_percent)) $remise_percent=0;
@ -1220,52 +1224,92 @@ class FactureFournisseur extends CommonInvoice
$txlocaltax1=price2num($txlocaltax1);
$txlocaltax2=price2num($txlocaltax2);
$localtaxes_type=getLocalTaxesFromRate($txtva,0,$mysoc, $this->thirdparty);
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $this->thirdparty, $localtaxes_type, 100, $this->multicurrency_tx);
$total_ht = $tabprice[0];
$total_tva = $tabprice[1];
$total_ttc = $tabprice[2];
$total_localtax1 = $tabprice[9];
$total_localtax2 = $tabprice[10];
// MultiCurrency
$multicurrency_total_ht = $tabprice[16];
$multicurrency_total_tva = $tabprice[17];
$multicurrency_total_ttc = $tabprice[18];
// Check parameters
if ($type < 0) return -1;
// Insert line
$this->line=new SupplierInvoiceLine($this->db);
$this->db->begin();
$this->line->context = $this->context;
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'facture_fourn_det (fk_facture_fourn)';
$sql.= ' VALUES ('.$this->id.')';
dol_syslog(get_class($this)."::addline", LOG_DEBUG);
$this->line->fk_facture_fourn=$this->id;
//$this->line->label=$label; // deprecated
$this->line->desc=$desc;
$this->line->qty= ($this->type==self::TYPE_CREDIT_NOTE?abs($qty):$qty); // For credit note, quantity is always positive and unit price negative
$this->line->tva_tx=$txtva;
$this->line->localtax1_tx=$txlocaltax1;
$this->line->localtax2_tx=$txlocaltax2;
$this->line->fk_product=$fk_product;
$this->line->product_type=$type;
$this->line->remise_percent=$remise_percent;
$this->line->subprice= ($this->type==self::TYPE_CREDIT_NOTE?-abs($pu):$pu); // For credit note, unit price always negative, always positive otherwise
$this->line->date_start=$date_start;
$this->line->date_end=$date_end;
$this->line->ventil=$ventil;
$this->line->rang=$rang;
$this->line->info_bits=$info_bits;
$this->line->total_ht= (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ht):$total_ht); // For credit note and if qty is negative, total is negative
$this->line->total_tva= $total_tva;
$this->line->total_localtax1=$total_localtax1;
$this->line->total_localtax2=$total_localtax2;
$this->line->localtax1_type = $localtaxes_type[0];
$this->line->localtax2_type = $localtaxes_type[2];
$this->line->total_ttc= (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ttc):$total_ttc);
$this->line->special_code=$this->special_code;
$this->line->fk_parent_line=$this->fk_parent_line;
$this->line->origin=$this->origin;
$this->line->origin_id=$origin_id;
$this->line->fk_unit=$fk_unit;
$resql = $this->db->query($sql);
if ($resql)
// Multicurrency
$this->line->fk_multicurrency = $this->fk_multicurrency;
$this->line->multicurrency_code = $this->multicurrency_code;
$this->line->multicurrency_subprice = price2num($this->line->subprice * $this->multicurrency_tx);
$this->line->multicurrency_total_ht = $multicurrency_total_ht;
$this->line->multicurrency_total_tva = $multicurrency_total_tva;
$this->line->multicurrency_total_ttc = $multicurrency_total_ttc;
if (is_array($array_options) && count($array_options)>0) {
$this->line->array_options=$array_options;
}
$result=$this->line->insert($notrigger);
if ($result > 0)
{
$idligne = $this->db->last_insert_id(MAIN_DB_PREFIX.'facture_fourn_det');
// Reorder if child line
if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
$result=$this->updateline($idligne, $desc, $pu, $txtva, $txlocaltax1, $txlocaltax2, $qty, $fk_product, $price_base_type, $info_bits, $type, $remise_percent, true, '', '', $array_options, $fk_unit);
// Mise a jour informations denormalisees au niveau de la facture meme
$result=$this->update_price(1,'auto',0,$mysoc); // The addline method is designed to add line from user input so total calculation with update_price must be done using 'auto' mode.
if ($result > 0)
{
$this->rowid = $idligne;
if (! $notrigger)
{
global $conf, $langs, $user;
// Call trigger
$result=$this->call_trigger('LINEBILL_SUPPLIER_CREATE',$user);
if ($result < 0)
{
$this->db->rollback();
return -1;
}
// End call triggers
}
$this->db->commit();
return 1;
return $this->line->id;
}
else
{
dol_syslog("Error after updateline error=".$this->error, LOG_ERR);
$this->error=$this->db->error();
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->lasterror();
$this->error=$this->line->error;
$this->db->rollback();
return -2;
}
@ -1293,7 +1337,7 @@ class FactureFournisseur extends CommonInvoice
* @param string $fk_unit Code of the unit to use. Null to use the default one
* @return int <0 if KO, >0 if OK
*/
function updateline($id, $desc, $pu, $vatrate, $txlocaltax1=0, $txlocaltax2=0, $qty=1, $idproduct=0, $price_base_type='HT', $info_bits=0, $type=0, $remise_percent=0, $notrigger=false, $date_start='', $date_end='', $array_options=0, $fk_unit = null)
public function updateline($id, $desc, $pu, $vatrate, $txlocaltax1=0, $txlocaltax2=0, $qty=1, $idproduct=0, $price_base_type='HT', $info_bits=0, $type=0, $remise_percent=0, $notrigger=false, $date_start='', $date_end='', $array_options=0, $fk_unit = null)
{
global $mysoc;
dol_syslog(get_class($this)."::updateline $id,$desc,$pu,$vatrate,$qty,$idproduct,$price_base_type,$info_bits,$type,$remise_percent,$fk_unit", LOG_DEBUG);
@ -1315,6 +1359,8 @@ class FactureFournisseur extends CommonInvoice
$txlocaltax1=price2num($txlocaltax1);
$txlocaltax2=price2num($txlocaltax2);
$localtaxes_type = array($txlocaltax1,$txlocaltax2);
// 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
@ -1404,7 +1450,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $notrigger 1=Does not execute triggers, 0= execute triggers
* @return int <0 if KO, >0 if OK
*/
function deleteline($rowid, $notrigger=0)
public function deleteline($rowid, $notrigger=0)
{
if (!$rowid) {
$rowid = $this->id;
@ -1434,7 +1480,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $id Id de la facture a charger
* @return void
*/
function info($id)
public function info($id)
{
$sql = 'SELECT c.rowid, datec, tms as datem, ';
$sql.= ' fk_user_author, fk_user_modif, fk_user_valid';
@ -1543,9 +1589,9 @@ class FactureFournisseur extends CommonInvoice
* @param int $max Max length of shown ref
* @return string Chaine avec URL
*/
function getNomUrl($withpicto=0,$option='',$max=0)
public function getNomUrl($withpicto=0,$option='',$max=0)
{
global $langs;
global $langs, $conf;
$result='';
$label = '<u>' . $langs->trans("ShowSupplierInvoice") . '</u>';
@ -1587,7 +1633,7 @@ class FactureFournisseur extends CommonInvoice
* @param string $mode 'next' for next value or 'last' for last value
* @return string free ref or last ref
*/
function getNextNumRef($soc,$mode='next')
public function getNextNumRef($soc,$mode='next')
{
global $db, $langs, $conf;
$langs->load("orders");
@ -1640,7 +1686,7 @@ class FactureFournisseur extends CommonInvoice
*
* @return void
*/
function initAsSpecimen()
public function initAsSpecimen()
{
global $langs,$conf;
include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
@ -1780,7 +1826,7 @@ class FactureFournisseur extends CommonInvoice
* @param int $invertdetail Reverse sign of amounts for lines
* @return int New id of clone
*/
function createFromClone($fromid,$invertdetail=0)
public function createFromClone($fromid,$invertdetail=0)
{
global $user,$langs;
@ -1942,7 +1988,7 @@ class SupplierInvoiceLine extends CommonObjectLine
public $element='facture_fourn_det';
public $table_element='facture_fourn_det';
var $oldline;
public $oldline;
/**
* @deprecated
@ -1999,22 +2045,22 @@ class SupplierInvoiceLine extends CommonObjectLine
* Id of the corresponding supplier invoice
* @var int
*/
var $fk_facture_fourn;
public $fk_facture_fourn;
/**
* Product label
* This field may contains label of product (when invoice create from order)
* @var string
*/
var $label;
public $label;
/**
* Description of the line
* @var string
*/
var $description;
public $description;
var $skip_update_total; // Skip update price total for special lines
public $skip_update_total; // Skip update price total for special lines
/**
* @var int Situation advance percentage
@ -2046,19 +2092,19 @@ class SupplierInvoiceLine extends CommonObjectLine
public $localtax2_type;
// Multicurrency
var $fk_multicurrency;
var $multicurrency_code;
var $multicurrency_subprice;
var $multicurrency_total_ht;
var $multicurrency_total_tva;
var $multicurrency_total_ttc;
public $fk_multicurrency;
public $multicurrency_code;
public $multicurrency_subprice;
public $multicurrency_total_ht;
public $multicurrency_total_tva;
public $multicurrency_total_ttc;
/**
* Constructor
*
* @param DoliDB $db Database handler
*/
function __construct($db)
public function __construct($db)
{
$this->db= $db;
}
@ -2292,5 +2338,146 @@ class SupplierInvoiceLine extends CommonObjectLine
$this->db->commit();
return 1;
}
/**
* Insert line into database
*
* @param int $notrigger 1 no triggers
* @return int <0 if KO, >0 if OK
*/
public function insert($notrigger=0)
{
global $user,$conf;
$error=0;
dol_syslog(get_class($this)."::insert rang=".$this->rang, LOG_DEBUG);
// Clean parameters
$this->desc=trim($this->desc);
if (empty($this->tva_tx)) $this->tva_tx=0;
if (empty($this->localtax1_tx)) $this->localtax1_tx=0;
if (empty($this->localtax2_tx)) $this->localtax2_tx=0;
if (empty($this->localtax1_type)) $this->localtax1_type=0;
if (empty($this->localtax2_type)) $this->localtax2_type=0;
if (empty($this->total_localtax1)) $this->total_localtax1=0;
if (empty($this->total_localtax2)) $this->total_localtax2=0;
if (empty($this->rang)) $this->rang=0;
if (empty($this->remise_percent)) $this->remise_percent=0;
if (empty($this->info_bits)) $this->info_bits=0;
if (empty($this->subprice)) $this->subprice=0;
if (empty($this->special_code)) $this->special_code=0;
if (empty($this->fk_parent_line)) $this->fk_parent_line=0;
if (! isset($this->situation_percent) || $this->situation_percent > 100 || (string) $this->situation_percent == '') $this->situation_percent = 100;
if (empty($this->pa_ht)) $this->pa_ht=0;
if (empty($this->multicurrency_subprice)) $this->multicurrency_subprice=0;
if (empty($this->multicurrency_total_ht)) $this->multicurrency_total_ht=0;
if (empty($this->multicurrency_total_tva)) $this->multicurrency_total_tva=0;
if (empty($this->multicurrency_total_ttc)) $this->multicurrency_total_ttc=0;
// Check parameters
if ($this->product_type < 0)
{
$this->error='ErrorProductTypeMustBe0orMore';
return -1;
}
if (! empty($this->fk_product))
{
// Check product exists
$result=Product::isExistingObject('product', $this->fk_product);
if ($result <= 0)
{
$this->error='ErrorProductIdDoesNotExists';
return -1;
}
}
$this->db->begin();
// Insertion dans base de la ligne
$sql = 'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element;
$sql.= ' (fk_facture_fourn, fk_parent_line, label, description, qty,';
$sql.= ' tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type,';
$sql.= ' fk_product, product_type, remise_percent, pu_ht, pu_ttc,';
$sql.= ' date_start, date_end, fk_code_ventilation, rang, special_code,';
$sql.= ' info_bits, total_ht, tva, total_ttc, total_localtax1, total_localtax2, fk_unit';
$sql.= ', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
$sql.= ')';
$sql.= " VALUES (".$this->fk_facture_fourn.",";
$sql.= " ".($this->fk_parent_line>0?"'".$this->fk_parent_line."'":"null").",";
$sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
$sql.= " '".$this->db->escape($this->desc)."',";
$sql.= " ".price2num($this->qty).",";
$sql.= " ".price2num($this->tva_tx).",";
$sql.= " ".price2num($this->localtax1_tx).",";
$sql.= " ".price2num($this->localtax2_tx).",";
$sql.= " '".$this->localtax1_type."',";
$sql.= " '".$this->localtax2_type."',";
$sql.= ' '.(! empty($this->fk_product)?$this->fk_product:"null").',';
$sql.= " ".$this->product_type.",";
$sql.= " ".price2num($this->remise_percent).",";
$sql.= " ".price2num($this->subprice).",";
$sql.= " ".price2num($this->total_ttc/$this->qty).",";
$sql.= " ".(! empty($this->date_start)?"'".$this->db->idate($this->date_start)."'":"null").",";
$sql.= " ".(! empty($this->date_end)?"'".$this->db->idate($this->date_end)."'":"null").",";
$sql.= ' '.(!empty($this->fk_code_ventilation)?$this->fk_code_ventilation:0).',';
$sql.= ' '.$this->rang.',';
$sql.= ' '.$this->special_code.',';
$sql.= " '".$this->info_bits."',";
$sql.= " ".price2num($this->total_ht).",";
$sql.= " ".price2num($this->total_tva).",";
$sql.= " ".price2num($this->total_ttc).",";
$sql.= " ".price2num($this->total_localtax1).",";
$sql.= " ".price2num($this->total_localtax2);
$sql .= ", ".(!$this->fk_unit ? 'NULL' : $this->fk_unit);
$sql.= ", ".(int) $this->fk_multicurrency;
$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
$sql.= ", ".price2num($this->multicurrency_subprice);
$sql.= ", ".price2num($this->multicurrency_total_ht);
$sql.= ", ".price2num($this->multicurrency_total_tva);
$sql.= ", ".price2num($this->multicurrency_total_ttc);
$sql.= ')';
dol_syslog(get_class($this)."::insert", LOG_DEBUG);
$resql=$this->db->query($sql);
if ($resql)
{
$this->id=$this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
$this->rowid=$this->id;
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
{
$result=$this->insertExtraFields();
if ($result < 0)
{
$error++;
}
}
if (! $notrigger)
{
// Call trigger
$result=$this->call_trigger('LINEBILL_SUPPLIER_CREATE',$user);
if ($result < 0)
{
$this->db->rollback();
return -2;
}
// End call triggers
}
$this->db->commit();
return $this->id;
}
else
{
$this->error=$this->db->error();
$this->db->rollback();
return -2;
}
}
}

View File

@ -476,7 +476,8 @@ if (empty($reshook))
$lines[$i]->rang,
0,
$lines[$i]->array_options,
$lines[$i]->fk_unit
$lines[$i]->fk_unit,
$lines[$i]->id
);
if ($result < 0)