diff --git a/ChangeLog b/ChangeLog
index af001a3c0ef..15f31a52fbe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -61,6 +61,7 @@ For users:
- New: Can send an email from thirdparty card.
- New: Can cancel holidays that were previously validated.
- Fix: [bug #1022] correct margin calculation for credit notes.
+- New: Can choose contact on event (action com) creation, and filtred by thirdparty
For translators:
- Qual: Normalized sort order of all languages files with english reference files.
@@ -91,6 +92,7 @@ For developers:
- New: Add trigger CATEGORY_LINK and CATEGORY_UNLINK.
- New: A trigger can return an array of error strings instead of one error string.
- New: Add method to use a dictionnary as a combo box.
+- New: Add update method for web service product.
WARNING: Following change may create regression for some external modules, but was necessary to make
Dolibarr better:
diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php
index 0607fdd6e0e..f03d09cd5a5 100644
--- a/htdocs/comm/action/fiche.php
+++ b/htdocs/comm/action/fiche.php
@@ -564,23 +564,23 @@ if ($action == 'create')
}
else
{
+
+ $events=array();
+ $events[]=array('method' => 'getContacts', 'url' => dol_buildpath('/core/ajax/contacts.php',1), 'htmlname' => 'contactid', 'params' => array('add-customer-contact' => 'disabled'));
//For external user force the company to user company
if (!empty($user->societe_id)) {
- print $form->select_company($user->societe_id,'socid','',1,1);
+ print $form->select_company($user->societe_id,'socid','',1,1,0,$events);
} else {
- print $form->select_company('','socid','',1,1);
+ print $form->select_company('','socid','',1,1,0,$events);
}
}
print '';
- // If company is forced, we propose contacts (may be contact is also forced)
- if (GETPOST("contactid") > 0 || GETPOST('socid','int') > 0)
- {
- print '
| '.$langs->trans("ActionOnContact").' | ';
- $form->select_contacts(GETPOST('socid','int'),GETPOST('contactid'),'contactid',1);
- print ' |
';
- }
+ print '| '.$langs->trans("ActionOnContact").' | ';
+ $form->select_contacts(GETPOST('socid','int'),GETPOST('contactid'),'contactid',1);
+ print ' |
';
+
// Project
if (! empty($conf->projet->enabled))
@@ -809,12 +809,14 @@ if ($id > 0)
{
print '| '.$langs->trans("ActionOnCompany").' | ';
print '';
- print $form->select_company($act->societe->id,'socid','',1,1);
+ $events=array();
+ $events[]=array('method' => 'getContacts', 'url' => dol_buildpath('/core/ajax/contacts.php',1), 'htmlname' => 'contactid', 'params' => array('add-customer-contact' => 'disabled'));
+ print $form->select_company($act->societe->id,'socid','',1,1,0,$events);
print ' | ';
// Contact
print ''.$langs->trans("Contact").' | ';
- print $form->selectarray("contactid", (empty($act->societe->id)?array():$act->societe->contact_array()), $act->contact->id, 1);
+ $form->select_contacts($act->societe->id, $act->contact->id,'contactid',1);
print ' |
';
}
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index 5690f2fbb8e..97ad7b33ef5 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -453,10 +453,11 @@ class Product extends CommonObject
$this->volume_units = trim($this->volume_units);
if (empty($this->tva_tx)) $this->tva_tx = 0;
if (empty($this->tva_npr)) $this->tva_npr = 0;
- //Local taxes
if (empty($this->localtax1_tx)) $this->localtax1_tx = 0;
if (empty($this->localtax2_tx)) $this->localtax2_tx = 0;
-
+ if (empty($this->status)) $this->status = 0;
+ if (empty($this->status_buy)) $this->status_buy = 0;
+
if (empty($this->country_id)) $this->country_id = 0;
$this->accountancy_code_buy = trim($this->accountancy_code_buy);
@@ -464,33 +465,32 @@ class Product extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."product";
$sql.= " SET label = '" . $this->db->escape($this->libelle) ."'";
- $sql.= ",ref = '" . $this->ref ."'";
- $sql.= ",tva_tx = " . $this->tva_tx;
- $sql.= ",recuperableonly = " . $this->tva_npr;
+ $sql.= ", ref = '" . $this->ref ."'";
+ $sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
+ $sql.= ", tva_tx = " . $this->tva_tx;
+ $sql.= ", recuperableonly = " . $this->tva_npr;
+ $sql.= ", localtax1_tx = " . $this->localtax1_tx;
+ $sql.= ", localtax2_tx = " . $this->localtax2_tx;
- //Local taxes
- $sql.= ",localtax1_tx = " . $this->localtax1_tx;
- $sql.= ",localtax2_tx = " . $this->localtax2_tx;
-
- $sql.= ",tosell = " . $this->status;
- $sql.= ",tobuy = " . $this->status_buy;
- $sql.= ",finished = " . ((empty($this->finished) || $this->finished < 0) ? "null" : $this->finished);
- $sql.= ",weight = " . ($this->weight!='' ? "'".$this->weight."'" : 'null');
- $sql.= ",weight_units = " . ($this->weight_units!='' ? "'".$this->weight_units."'": 'null');
- $sql.= ",length = " . ($this->length!='' ? "'".$this->length."'" : 'null');
- $sql.= ",length_units = " . ($this->length_units!='' ? "'".$this->length_units."'" : 'null');
- $sql.= ",surface = " . ($this->surface!='' ? "'".$this->surface."'" : 'null');
- $sql.= ",surface_units = " . ($this->surface_units!='' ? "'".$this->surface_units."'" : 'null');
- $sql.= ",volume = " . ($this->volume!='' ? "'".$this->volume."'" : 'null');
- $sql.= ",volume_units = " . ($this->volume_units!='' ? "'".$this->volume_units."'" : 'null');
- $sql.= ",seuil_stock_alerte = " . ((isset($this->seuil_stock_alerte) && $this->seuil_stock_alerte != '') ? "'".$this->seuil_stock_alerte."'" : "null");
- $sql.= ",description = '" . $this->db->escape($this->description) ."'";
- $sql.= ",customcode = '" . $this->db->escape($this->customcode) ."'";
- $sql.= ",fk_country = " . ($this->country_id > 0 ? $this->country_id : 'null');
- $sql.= ",note = '" . $this->db->escape($this->note) ."'";
- $sql.= ",duration = '" . $this->duration_value . $this->duration_unit ."'";
- $sql.= ",accountancy_code_buy = '" . $this->accountancy_code_buy."'";
- $sql.= ",accountancy_code_sell= '" . $this->accountancy_code_sell."'";
+ $sql.= ", tosell = " . $this->status;
+ $sql.= ", tobuy = " . $this->status_buy;
+ $sql.= ", finished = " . ((empty($this->finished) || $this->finished < 0) ? "null" : $this->finished);
+ $sql.= ", weight = " . ($this->weight!='' ? "'".$this->weight."'" : 'null');
+ $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->weight_units."'": 'null');
+ $sql.= ", length = " . ($this->length!='' ? "'".$this->length."'" : 'null');
+ $sql.= ", length_units = " . ($this->length_units!='' ? "'".$this->length_units."'" : 'null');
+ $sql.= ", surface = " . ($this->surface!='' ? "'".$this->surface."'" : 'null');
+ $sql.= ", surface_units = " . ($this->surface_units!='' ? "'".$this->surface_units."'" : 'null');
+ $sql.= ", volume = " . ($this->volume!='' ? "'".$this->volume."'" : 'null');
+ $sql.= ", volume_units = " . ($this->volume_units!='' ? "'".$this->volume_units."'" : 'null');
+ $sql.= ", seuil_stock_alerte = " . ((isset($this->seuil_stock_alerte) && $this->seuil_stock_alerte != '') ? "'".$this->seuil_stock_alerte."'" : "null");
+ $sql.= ", description = '" . $this->db->escape($this->description) ."'";
+ $sql.= ", customcode = '" . $this->db->escape($this->customcode) ."'";
+ $sql.= ", fk_country = " . ($this->country_id > 0 ? $this->country_id : 'null');
+ $sql.= ", note = '" . $this->db->escape($this->note) ."'";
+ $sql.= ", duration = '" . $this->duration_value . $this->duration_unit ."'";
+ $sql.= ", accountancy_code_buy = '" . $this->accountancy_code_buy."'";
+ $sql.= ", accountancy_code_sell= '" . $this->accountancy_code_sell."'";
$sql.= ", desiredstock = " . ((isset($this->desiredstock) && $this->desiredstock != '') ? $this->desiredstock : "null");
$sql.= " WHERE rowid = " . $id;
diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php
index d32209262ab..4e8e80a5c03 100644
--- a/htdocs/webservices/server_productorservice.php
+++ b/htdocs/webservices/server_productorservice.php
@@ -253,6 +253,20 @@ $server->register(
'WS to create a product or service'
);
+// Register WSDL
+$server->register(
+ 'updateProductOrService',
+ // Entry values
+ array('authentication'=>'tns:authentication','product'=>'tns:product'),
+ // Exit values
+ array('result'=>'tns:result','id'=>'xsd:string'),
+ $ns,
+ $ns.'#updateProductOrService',
+ $styledoc,
+ $styleuse,
+ 'WS to update a product or service'
+);
+
// Register WSDL
$server->register(
'getListOfProductsOrServices',
@@ -497,6 +511,117 @@ function createProductOrService($authentication,$product)
}
+/**
+ * Update an invoice
+ *
+ * @param array $authentication Array of authentication information
+ * @param Product $product Product
+ * @return array Array result
+ */
+function updateProductOrService($authentication,$product)
+{
+ global $db,$conf,$langs;
+
+ $now=dol_now();
+
+ dol_syslog("Function: updateProductOrService 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 ($product['price_net'] > 0) $product['price_base_type']='HT';
+ if ($product['price'] > 0) $product['price_base_type']='TTC';
+
+ if ($product['price_net'] > 0 && $product['price'] > 0)
+ {
+ $error++; $errorcode='KO'; $errorlabel="You must choose between price or price_net to provide price.";
+ }
+
+
+ if (! $error)
+ {
+ include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
+
+ $newobject=new Product($db);
+ $newobject->fetch($product['id'],$product['ref']);
+
+ if (isset($product['ref'])) $newobject->ref=$product['ref'];
+ if (isset($product['ref_ext'])) $newobject->ref_ext=$product['ref_ext'];
+ $newobject->type=$product['type'];
+ $newobject->libelle=$product['label']; // TODO deprecated
+ $newobject->label=$product['label'];
+ $newobject->description=$product['description'];
+ $newobject->note=$product['note'];
+ $newobject->status=$product['status_tosell'];
+ $newobject->status_buy=$product['status_tobuy'];
+ $newobject->price=$product['price_net'];
+ $newobject->price_ttc=$product['price'];
+ $newobject->tva_tx=$product['vat_rate'];
+ $newobject->price_base_type=$product['price_base_type'];
+ $newobject->date_creation=$now;
+
+ $newobject->stock_reel=$product['stock_real'];
+ $newobject->pmp=$product['pmp'];
+ $newobject->seuil_stock_alert=$product['stock_alert'];
+
+ $newobject->country_id=$product['country_id'];
+ if ($product['country_code']) $newobject->country_id=getCountry($product['country_code'],3);
+ $newobject->customcode=$product['customcode'];
+
+ $newobject->canvas=$product['canvas'];
+ /*foreach($product['lines'] as $line)
+ {
+ $newline=new FactureLigne($db);
+ $newline->type=$line['type'];
+ $newline->desc=$line['desc'];
+ $newline->fk_product=$line['fk_product'];
+ $newline->total_ht=$line['total_net'];
+ $newline->total_vat=$line['total_vat'];
+ $newline->total_ttc=$line['total'];
+ $newline->vat=$line['vat_rate'];
+ $newline->qty=$line['qty'];
+ $newline->fk_product=$line['product_id'];
+ }*/
+ //var_dump($product['ref_ext']);
+ //var_dump($product['lines'][0]['type']);
+
+ $db->begin();
+
+ $result=$newobject->update($newobject->id,$fuser);
+ if ($result <= 0)
+ {
+ $error++;
+ }
+
+ if (! $error)
+ {
+ $db->commit();
+ $objectresp=array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$newobject->id,'ref'=>$newobject->ref);
+ }
+ else
+ {
+ $db->rollback();
+ $error++;
+ $errorcode='KO';
+ $errorlabel=$newobject->error;
+ }
+
+ }
+
+ if ($error)
+ {
+ $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
+ }
+
+ return $objectresp;
+}
+
+
/**
* getListOfProductsOrServices
*