diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index b7207f0cd42..9b106019642 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -61,8 +61,9 @@ class Commande extends CommonOrder
var $contactid;
var $fk_project;
var $statut; // -1=Canceled, 0=Draft, 1=Validated, (2=Accepted/On process not managed for customer orders), 3=Closed (Sent/Received, billed or not)
+ var $facturee; // deprecated
+ var $billed; // billed or not
- var $facturee; // Facturee ou non
var $brouillon;
var $cond_reglement_id;
var $cond_reglement_code;
@@ -435,6 +436,7 @@ class Commande extends CommonOrder
if ($this->statut != 3)
{
+ dol_syslog(get_class($this)."::set_reopen order has not status closed", LOG_WARNING);
return 0;
}
@@ -2482,6 +2484,131 @@ class Commande extends CommonOrder
}
}
+ /**
+ * Update database
+ *
+ * @param User $user User that modify
+ * @param int $notrigger 0=launch triggers after, 1=disable triggers
+ * @return int <0 if KO, >0 if OK
+ */
+ function update($user=null, $notrigger=0)
+ {
+ global $conf, $langs;
+ $error=0;
+
+ // Clean parameters
+ if (isset($this->ref)) $this->ref=trim($this->ref);
+ if (isset($this->ref_client)) $this->ref_client=trim($this->ref_client);
+ if (isset($this->note) || isset($this->note_private)) $this->note_private=(isset($this->note_private) ? trim($this->note_private) : trim($this->note));
+ if (isset($this->note_public)) $this->note_public=trim($this->note_public);
+ if (isset($this->modelpdf)) $this->modelpdf=trim($this->modelpdf);
+ if (isset($this->import_key)) $this->import_key=trim($this->import_key);
+
+ // Check parameters
+ // Put here code to add control on parameters values
+
+ // Update request
+ $sql = "UPDATE ".MAIN_DB_PREFIX."commande SET";
+
+ $sql.= " ref=".(isset($this->ref)?"'".$this->db->escape($this->ref)."'":"null").",";
+ $sql.= " ref_client=".(isset($this->ref_client)?"'".$this->db->escape($this->ref_client)."'":"null").",";
+ $sql.= " ref_ext=".(isset($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null").",";
+ $sql.= " fk_soc=".(isset($this->socid)?$this->socid:"null").",";
+ $sql.= " date_commande=".(strval($this->date_commande)!='' ? "'".$this->db->idate($this->date_commande)."'" : 'null').",";
+ $sql.= " date_valid=".(strval($this->date_validation)!='' ? "'".$this->db->idate($this->date_validation)."'" : 'null').",";
+ $sql.= " tva=".(isset($this->total_tva)?$this->total_tva:"null").",";
+ $sql.= " localtax1=".(isset($this->total_localtax1)?$this->total_localtax1:"null").",";
+ $sql.= " localtax2=".(isset($this->total_localtax2)?$this->total_localtax2:"null").",";
+ $sql.= " total_ht=".(isset($this->total_ht)?$this->total_ht:"null").",";
+ $sql.= " total_ttc=".(isset($this->total_ttc)?$this->total_ttc:"null").",";
+ $sql.= " fk_statut=".(isset($this->statut)?$this->statut:"null").",";
+ $sql.= " fk_user_author=".(isset($this->user_author)?$this->user_author:"null").",";
+ $sql.= " fk_user_valid=".(isset($this->fk_user_valid)?$this->fk_user_valid:"null").",";
+ $sql.= " fk_projet=".(isset($this->fk_project)?$this->fk_project:"null").",";
+ $sql.= " fk_cond_reglement=".(isset($this->cond_reglement_id)?$this->cond_reglement_id:"null").",";
+ $sql.= " fk_mode_reglement=".(isset($this->mode_reglement_id)?$this->mode_reglement_id:"null").",";
+ $sql.= " note_private=".(isset($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null").",";
+ $sql.= " note_public=".(isset($this->note_public)?"'".$this->db->escape($this->note_public)."'":"null").",";
+ $sql.= " model_pdf=".(isset($this->modelpdf)?"'".$this->db->escape($this->modelpdf)."'":"null").",";
+ $sql.= " import_key=".(isset($this->import_key)?"'".$this->db->escape($this->import_key)."'":"null")."";
+
+ $sql.= " WHERE rowid=".$this->id;
+
+ $this->db->begin();
+
+ dol_syslog(get_class($this)."::update", LOG_DEBUG);
+ $resql = $this->db->query($sql);
+ if (! $resql) {
+ $error++; $this->errors[]="Error ".$this->db->lasterror();
+ }
+
+ if (! $error)
+ {
+ if (! $notrigger)
+ {
+ // Call trigger
+ $result=$this->call_trigger('ORDER_MODIFY',$user);
+ if ($result < 0) $error++;
+ // End call triggers
+ }
+ }
+
+ // Commit or rollback
+ if ($error)
+ {
+ foreach($this->errors as $errmsg)
+ {
+ dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
+ $this->error.=($this->error?', '.$errmsg:$errmsg);
+ }
+ $this->db->rollback();
+ return -1*$error;
+ }
+ else
+ {
+ $this->db->commit();
+ return 1;
+ }
+ }
+
+ /**
+ * Update value of extrafields on order
+ *
+ * @param User $user Object user that modify
+ * @return int <0 if ko, >0 if ok
+ */
+ function update_extrafields($user)
+ {
+ $action='create';
+
+ // Actions on extra fields (by external module or standard code)
+ // FIXME le hook fait double emploi avec le trigger !!
+ $hookmanager->initHooks(array('orderdao'));
+ $parameters=array('id'=>$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++;
+
+ if (!$error)
+ {
+ return 1;
+ }
+ else
+ {
+ return -1;
+ }
+
+ }
/**
* Delete the customer order
@@ -2673,22 +2800,22 @@ class Commande extends CommonOrder
* Return label of status
*
* @param int $statut Id statut
- * @param int $facturee if invoiced
+ * @param int $billed If invoiced
* @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
* @return string Label of status
*/
- function LibStatut($statut,$facturee,$mode)
+ function LibStatut($statut,$billed,$mode)
{
global $langs;
- //print 'x'.$statut.'-'.$facturee;
+ //print 'x'.$statut.'-'.$billed;
if ($mode == 0)
{
if ($statut==-1) return $langs->trans('StatusOrderCanceled');
if ($statut==0) return $langs->trans('StatusOrderDraft');
if ($statut==1) return $langs->trans('StatusOrderValidated');
if ($statut==2) return $langs->trans('StatusOrderSentShort');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBill');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBill');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed');
}
elseif ($mode == 1)
{
@@ -2696,8 +2823,8 @@ class Commande extends CommonOrder
if ($statut==0) return $langs->trans('StatusOrderDraftShort');
if ($statut==1) return $langs->trans('StatusOrderValidatedShort');
if ($statut==2) return $langs->trans('StatusOrderSentShort');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBillShort');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBillShort');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed');
}
elseif ($mode == 2)
{
@@ -2705,8 +2832,8 @@ class Commande extends CommonOrder
if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraftShort');
if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$langs->trans('StatusOrderValidatedShort');
if ($statut==2) return img_picto($langs->trans('StatusOrderSent'),'statut3').' '.$langs->trans('StatusOrderSentShort');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBillShort');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessedShort');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBillShort');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessedShort');
}
elseif ($mode == 3)
{
@@ -2714,8 +2841,8 @@ class Commande extends CommonOrder
if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0');
if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1');
if ($statut==2) return img_picto($langs->trans('StatusOrderSentShort'),'statut3');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6');
}
elseif ($mode == 4)
{
@@ -2723,8 +2850,8 @@ class Commande extends CommonOrder
if ($statut==0) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraft');
if ($statut==1) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$langs->trans('StatusOrderValidated');
if ($statut==2) return img_picto($langs->trans('StatusOrderSentShort'),'statut3').' '.$langs->trans('StatusOrderSent');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBill');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessed');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut7').' '.$langs->trans('StatusOrderToBill');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed'),'statut6').' '.$langs->trans('StatusOrderProcessed');
}
elseif ($mode == 5)
{
@@ -2732,8 +2859,8 @@ class Commande extends CommonOrder
if ($statut==0) return ''.$langs->trans('StatusOrderDraftShort').' '.img_picto($langs->trans('StatusOrderDraft'),'statut0');
if ($statut==1) return ''.$langs->trans('StatusOrderValidatedShort').' '.img_picto($langs->trans('StatusOrderValidated'),'statut1');
if ($statut==2) return ''.$langs->trans('StatusOrderSentShort').' '.img_picto($langs->trans('StatusOrderSent'),'statut3');
- if ($statut==3 && (! $facturee && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return ''.$langs->trans('StatusOrderToBillShort').' '.img_picto($langs->trans('StatusOrderToBill'),'statut7');
- if ($statut==3 && ($facturee || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return ''.$langs->trans('StatusOrderProcessedShort').' '.img_picto($langs->trans('StatusOrderProcessed'),'statut6');
+ if ($statut==3 && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return ''.$langs->trans('StatusOrderToBillShort').' '.img_picto($langs->trans('StatusOrderToBill'),'statut7');
+ if ($statut==3 && ($billed || ! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return ''.$langs->trans('StatusOrderProcessedShort').' '.img_picto($langs->trans('StatusOrderProcessed'),'statut6');
}
}
@@ -2954,45 +3081,6 @@ class Commande extends CommonOrder
}
}
- /**
- * Update value of extrafields on order
- *
- * @param User $user Object user that modify
- * @return int <0 if ko, >0 if ok
- */
- function update_extrafields($user)
- {
- $action='create';
-
- // Actions on extra fields (by external module or standard code)
- // FIXME le hook fait double emploi avec le trigger !!
- $hookmanager->initHooks(array('orderdao'));
- $parameters=array('id'=>$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++;
-
- if (!$error)
- {
- return 1;
- }
- else
- {
- return -1;
- }
-
- }
-
/**
* Return an array of order lines
*
@@ -3106,8 +3194,7 @@ class Commande extends CommonOrder
/**
- * \class OrderLine
- * \brief Classe de gestion des lignes de commande
+ * Class to mange order lines
*/
class OrderLine extends CommonOrderLine
{
diff --git a/htdocs/webservices/server_order.php b/htdocs/webservices/server_order.php
index 2318780608c..9229d3b9c26 100644
--- a/htdocs/webservices/server_order.php
+++ b/htdocs/webservices/server_order.php
@@ -180,7 +180,7 @@ $order_fields = array(
'ref_int' => array('name'=>'ref_int','type'=>'xsd:string'),
'thirdparty_id' => array('name'=>'thirdparty_id','type'=>'xsd:int'),
'status' => array('name'=>'status','type'=>'xsd:int'),
- 'facturee' => array('name'=>'facturee','type'=>'xsd:string'),
+ 'billed' => array('name'=>'billed','type'=>'xsd:string'),
'total_net' => array('name'=>'total_net','type'=>'xsd:double'),
'total_vat' => array('name'=>'total_vat','type'=>'xsd:double'),
'total_localtax1' => array('name'=>'total_localtax1','type'=>'xsd:double'),
@@ -314,8 +314,17 @@ $server->register(
'WS to create an order'
);
+$server->register(
+ 'updateOrder',
+ array('authentication'=>'tns:authentication','order'=>'tns:order'), // Entry values
+ array('result'=>'tns:result','id'=>'xsd:string','ref'=>'xsd:string','ref_ext'=>'xsd:string'), // Exit values
+ $ns,
+ $ns.'#updateOrder',
+ $styledoc,
+ $styleuse,
+ 'WS to update an order'
+);
-// Register WSDL
$server->register(
'validOrder',
array('authentication'=>'tns:authentication','id'=>'xsd:string'), // Entry values
@@ -439,7 +448,7 @@ function getOrder($authentication,$id='',$ref='',$ref_ext='')
'remise_absolue' => $order->remise_absolue,
'source' => $order->source,
- 'facturee' => $order->facturee,
+ 'billed' => $order->billed,
'note_private' => $order->note_private,
'note_public' => $order->note_public,
'cond_reglement_id' => $order->cond_reglement_id,
@@ -596,7 +605,7 @@ function getOrdersForThirdParty($authentication,$idthirdparty)
'remise_absolue' => $order->remise_absolue,
'source' => $order->source,
- 'facturee' => $order->facturee,
+ 'billed' => $order->billed,
'note_private' => $order->note_private,
'note_public' => $order->note_public,
'cond_reglement_id' => $order->cond_reglement_id,
@@ -679,12 +688,12 @@ function createOrder($authentication,$order)
$newobject->note_private=$order['note_private'];
$newobject->note_public=$order['note_public'];
$newobject->statut=0; // We start with status draft
- $newobject->facturee=$order['facturee'];
+ $newobject->billed=$order['billed'];
$newobject->fk_project=$order['project_id'];
$newobject->cond_reglement_id=$order['cond_reglement_id'];
$newobject->demand_reason_id=$order['demand_reason_id'];
$newobject->date_creation=$now;
-
+
// Retrieve all extrafield for order
// fetch optionals attributes and labels
$extrafields=new ExtraFields($db);
@@ -717,7 +726,7 @@ function createOrder($authentication,$order)
$newline->total_ttc=$line['total'];
$newline->date_start=$line['date_start'];
$newline->date_end=$line['date_end'];
-
+
// Retrieve all extrafield for lines
// fetch optionals attributes and labels
$extrafields=new ExtraFields($db);
@@ -727,7 +736,7 @@ function createOrder($authentication,$order)
$key='options_'.$key;
$newline->array_options[$key]=$line[$key];
}
-
+
$newobject->lines[]=$newline;
}
@@ -862,5 +871,109 @@ function validOrder($authentication,$id='')
return $objectresp;
}
+/**
+ * Update an order
+ *
+ * @param array $authentication Array of authentication information
+ * @param array $order Order info
+ * @return array Array result
+ */
+function updateOrder($authentication,$order)
+{
+ global $db,$conf,$langs;
+
+ $now=dol_now();
+
+ dol_syslog("Function: updateOrder login=".$authentication['login']);
+
+ if ($authentication['entity']) $conf->entity=$authentication['entity'];
+
+ // Init and check authentication
+ $objectresp=array();
+ $errorcode='';$errorlabel='';
+ $error=0;
+ $fuser=check_authentication($authentication,$error,$errorcode,$errorlabel);
+ // Check parameters
+ if (empty($order['id']) && empty($order['ref']) && empty($order['ref_ext'])) {
+ $error++; $errorcode='KO'; $errorlabel="Order id or ref or ref_ext is mandatory.";
+ }
+
+ if (! $error)
+ {
+ $objectfound=false;
+
+ include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+
+ $object=new Commande($db);
+ $result=$object->fetch($order['id'],(empty($order['id'])?$order['ref']:''),(empty($order['id']) && empty($order['ref'])?$order['ref_ext']:''));
+
+ if (!empty($object->id)) {
+
+ $objectfound=true;
+
+ $db->begin();
+
+ if (isset($order['status']))
+ {
+ if ($order['status'] == -1) $result=$object->cancel($fuser);
+ if ($order['status'] == 1) $result=$object->valid($fuser);
+ if ($order['status'] == 0) $result=$object->set_reopen($fuser);
+ if ($order['status'] == 3) $result=$object->cloture($fuser);
+ }
+
+ if (isset($order['billed']))
+ {
+ if ($order['billed']) $result=$object->classifyBilled($fuser);
+ if (! $order['billed']) $result=$object->classifyBilled($fuser);
+ }
+
+ //Retreive all extrafield for object
+ // fetch optionals attributes and labels
+ $extrafields=new ExtraFields($db);
+ $extralabels=$extrafields->fetch_name_optionals_label('commande',true);
+ foreach($extrafields->attribute_label as $key=>$label)
+ {
+ $key='options_'.$key;
+ if (isset($order[$key]))
+ {
+ $result=$object->setValueFrom($key, $order[$key], 'commande_extrafields');
+ }
+ }
+
+ if ($result <= 0) {
+ $error++;
+ }
+ }
+
+ if ((! $error) && ($objectfound))
+ {
+ $db->commit();
+ $objectresp=array(
+ 'result'=>array('result_code'=>'OK', 'result_label'=>''),
+ 'id'=>$object->id
+ );
+ }
+ elseif ($objectfound)
+ {
+ $db->rollback();
+ $error++;
+ $errorcode='KO';
+ $errorlabel=$object->error;
+ } else {
+ $error++;
+ $errorcode='NOT_FOUND';
+ $errorlabel='Order id='.$order['id'].' ref='.$order['ref'].' ref_ext='.$order['ref_ext'].' cannot be found';
+ }
+ }
+
+ if ($error)
+ {
+ $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
+ }
+
+ return $objectresp;
+}
+
+
// Return the results.
$server->service(file_get_contents("php://input"));