';
print $langs->trans("MyAvailability").': '.(($object->userassigned[$user->id]['transparency'] > 0)?$langs->trans("Busy"):$langs->trans("Available")); // We show nothing if event is assigned to nobody
print '
';
diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
index a66a4635281..d43e84ebe1e 100644
--- a/htdocs/comm/action/class/actioncomm.class.php
+++ b/htdocs/comm/action/class/actioncomm.class.php
@@ -225,11 +225,11 @@ class ActionComm extends CommonObject
if ($this->elementtype=='commande') $this->elementtype='order';
if ($this->elementtype=='contrat') $this->elementtype='contract';
- if (! is_array($this->userassigned) && ! empty($this->userassigned)) // For backward compatibility
+ if (! is_array($this->userassigned) && ! empty($this->userassigned)) // For backward compatibility when userassigned was an int instead fo array
{
$tmpid=$this->userassigned;
$this->userassigned=array();
- $this->userassigned[$tmpid]=array('id'=>$tmpid);
+ $this->userassigned[$tmpid]=array('id'=>$tmpid, 'transparency'=>$this->transparency);
}
if (is_object($this->contact) && isset($this->contact->id) && $this->contact->id > 0 && ! ($this->contactid > 0)) $this->contactid = $this->contact->id; // For backward compatibility. Using this->contact->xx is deprecated
@@ -240,7 +240,7 @@ class ActionComm extends CommonObject
// Be sure assigned user is defined as an array of array('id'=>,'mandatory'=>,...).
if (empty($this->userassigned) || count($this->userassigned) == 0 || ! is_array($this->userassigned))
- $this->userassigned = array($userownerid=>array('id'=>$userownerid));
+ $this->userassigned = array($userownerid=>array('id'=>$userownerid, 'transparency'=>$this->transparency));
if (! $this->type_id || ! $this->type_code)
{
diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php
index a15ed888a6e..85ba6f56981 100644
--- a/htdocs/comm/propal/card.php
+++ b/htdocs/comm/propal/card.php
@@ -808,6 +808,9 @@ if (empty($reshook))
$pu_ttc = price($prodcustprice->lines[0]->price_ttc);
$price_base_type = $prodcustprice->lines[0]->price_base_type;
$tva_tx = ($prodcustprice->lines[0]->default_vat_code ? $prodcustprice->lines[0]->tva_tx . ' ('.$prodcustprice->lines[0]->default_vat_code.' )' : $prodcustprice->lines[0]->tva_tx);
+ if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')';
+ $tva_npr = $prodcustprice->lines[0]->recuperableonly;
+ if (empty($tva_tx)) $tva_npr=0;
}
}
}
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index 54ff5e1afc0..f212b790e3d 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -364,42 +364,42 @@ class Propal extends CommonObject
}
}
- /**
- * Add a proposal line into database (linked to product/service or not)
- * The parameters are already supposed to be appropriate and with final values to the call
- * of this method. Also, for the VAT rate, it must have already been defined
- * by whose calling the method get_default_tva (societe_vendeuse, societe_acheteuse, '' product)
- * and desc must already have the right value (it's up to the caller to manage multilanguage)
- *
- * @param string $desc Description de la ligne
- * @param float $pu_ht Prix unitaire
- * @param float $qty Quantite
- * @param float $txtva Taux de tva
- * @param float $txlocaltax1 Local tax 1 rate
- * @param float $txlocaltax2 Local tax 2 rate
- * @param int $fk_product Id du produit/service predefini
- * @param float $remise_percent Pourcentage de remise de la ligne
- * @param string $price_base_type HT or TTC
- * @param float $pu_ttc Prix unitaire TTC
- * @param int $info_bits Bits de type de lignes
- * @param int $type Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used.
- * @param int $rang Position of line
- * @param int $special_code Special code (also used by externals modules!)
- * @param int $fk_parent_line Id of parent line
- * @param int $fk_fournprice Id supplier price
- * @param int $pa_ht Buying price without tax
- * @param string $label ???
- * @param int $date_start Start date of the line
- * @param int $date_end End date of the line
- * @param array $array_options extrafields array
- * @param string $fk_unit Code of the unit to use. Null to use the default one
- * @param string $origin 'order', ...
- * @param int $origin_id Id of origin object
- * @param double $pu_ht_devise Unit price in currency
- * @param int $fk_remise_except Id discount if line is from a discount
- * @return int >0 if OK, <0 if KO
- * @see add_product
- */
+ /**
+ * Add a proposal line into database (linked to product/service or not)
+ * The parameters are already supposed to be appropriate and with final values to the call
+ * of this method. Also, for the VAT rate, it must have already been defined
+ * by whose calling the method get_default_tva (societe_vendeuse, societe_acheteuse, '' product)
+ * and desc must already have the right value (it's up to the caller to manage multilanguage)
+ *
+ * @param string $desc Description of line
+ * @param float $pu_ht Unit price
+ * @param float $qty Quantity
+ * @param float $txtva Force Vat rate, -1 for auto (Can contain the vat_src_code too with syntax '9.9 (CODE)')
+ * @param float $txlocaltax1 Local tax 1 rate (deprecated, use instead txtva with code inside)
+ * @param float $txlocaltax2 Local tax 2 rate (deprecated, use instead txtva with code inside)
+ * @param int $fk_product Id du produit/service predefini
+ * @param float $remise_percent Pourcentage de remise de la ligne
+ * @param string $price_base_type HT or TTC
+ * @param float $pu_ttc Prix unitaire TTC
+ * @param int $info_bits Bits de type de lignes
+ * @param int $type Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used.
+ * @param int $rang Position of line
+ * @param int $special_code Special code (also used by externals modules!)
+ * @param int $fk_parent_line Id of parent line
+ * @param int $fk_fournprice Id supplier price
+ * @param int $pa_ht Buying price without tax
+ * @param string $label ???
+ * @param int $date_start Start date of the line
+ * @param int $date_end End date of the line
+ * @param array $array_options extrafields array
+ * @param string $fk_unit Code of the unit to use. Null to use the default one
+ * @param string $origin 'order', ...
+ * @param int $origin_id Id of origin object
+ * @param double $pu_ht_devise Unit price in currency
+ * @param int $fk_remise_except Id discount if line is from a discount
+ * @return int >0 if OK, <0 if KO
+ * @see add_product
+ */
function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0.0, $txlocaltax2=0.0, $fk_product=0, $remise_percent=0.0, $price_base_type='HT', $pu_ttc=0.0, $info_bits=0, $type=0, $rang=-1, $special_code=0, $fk_parent_line=0, $fk_fournprice=0, $pa_ht=0, $label='',$date_start='', $date_end='',$array_options=0, $fk_unit=null, $origin='', $origin_id=0, $pu_ht_devise=0, $fk_remise_except=0)
{
global $mysoc, $conf, $langs;
@@ -1018,11 +1018,15 @@ class Propal extends CommonObject
$fk_parent_line = 0;
}
+ // Complete vat rate with code
+ $vatrate = $this->lines[$i]->tva_tx;
+ if ($this->lines[$i]->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$this->lines[$i]->vat_src_code.')';
+
$result = $this->addline(
$this->lines[$i]->desc,
$this->lines[$i]->subprice,
$this->lines[$i]->qty,
- $this->lines[$i]->tva_tx,
+ $vatrate,
$this->lines[$i]->localtax1_tx,
$this->lines[$i]->localtax2_tx,
$this->lines[$i]->fk_product,
@@ -1234,7 +1238,6 @@ class Propal extends CommonObject
if (empty($conf->global->MAIN_KEEP_REF_CUSTOMER_ON_CLONING)) $clonedObj->ref_client = '';
// Create clone
-
$result=$clonedObj->create($user);
if ($result < 0) $error++;
else
diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php
index 238b677395e..bf0ee8aa993 100644
--- a/htdocs/commande/card.php
+++ b/htdocs/commande/card.php
@@ -761,10 +761,13 @@ if (empty($reshook))
{
if (count($prodcustprice->lines) > 0)
{
- $pu_ht = price($prodcustprice->lines [0]->price);
- $pu_ttc = price($prodcustprice->lines [0]->price_ttc);
- $price_base_type = $prodcustprice->lines [0]->price_base_type;
- $tva_tx = $prodcustprice->lines [0]->tva_tx;
+ $pu_ht = price($prodcustprice->lines[0]->price);
+ $pu_ttc = price($prodcustprice->lines[0]->price_ttc);
+ $price_base_type = $prodcustprice->lines[0]->price_base_type;
+ $tva_tx = $prodcustprice->lines[0]->tva_tx;
+ if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')';
+ $tva_npr = $prodcustprice->lines[0]->recuperableonly;
+ if (empty($tva_tx)) $tva_npr=0;
}
}
else
diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
index 26674818027..73c39e756df 100644
--- a/htdocs/commande/class/commande.class.php
+++ b/htdocs/commande/class/commande.class.php
@@ -824,11 +824,15 @@ class Commande extends CommonOrder
$fk_parent_line = 0;
}
+ // Complete vat rate with code
+ $vatrate = $line->tva_tx;
+ if ($line->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$line->vat_src_code.')';
+
$result = $this->addline(
$line->desc,
$line->subprice,
$line->qty,
- $line->tva_tx,
+ $vatrate,
$line->localtax1_tx,
$line->localtax2_tx,
$line->fk_product,
@@ -1215,9 +1219,9 @@ class Commande extends CommonOrder
* @param string $desc Description of line
* @param float $pu_ht Unit price (without tax)
* @param float $qty Quantite
- * @param float $txtva Taux de tva force, sinon -1
- * @param float $txlocaltax1 Local tax 1 rate
- * @param float $txlocaltax2 Local tax 2 rate
+ * @param float $txtva Force Vat rate, -1 for auto (Can contain the vat_src_code too with syntax '9.9 (CODE)')
+ * @param float $txlocaltax1 Local tax 1 rate (deprecated, use instead txtva with code inside)
+ * @param float $txlocaltax2 Local tax 2 rate (deprecated, use instead txtva with code inside)
* @param int $fk_product Id of product
* @param float $remise_percent Pourcentage de remise de la ligne
* @param int $info_bits Bits de type de lignes
diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
index 22edcdbd925..8ac3ed81951 100644
--- a/htdocs/compta/facture/card.php
+++ b/htdocs/compta/facture/card.php
@@ -1655,6 +1655,9 @@ if (empty($reshook))
$pu_ttc = price($prodcustprice->lines[0]->price_ttc);
$price_base_type = $prodcustprice->lines[0]->price_base_type;
$tva_tx = $prodcustprice->lines[0]->tva_tx;
+ if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')';
+ $tva_npr = $prodcustprice->lines[0]->recuperableonly;
+ if (empty($tva_tx)) $tva_npr=0;
}
}
}
diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
index 9801726246b..ea92156aca8 100644
--- a/htdocs/compta/facture/class/facture.class.php
+++ b/htdocs/compta/facture/class/facture.class.php
@@ -583,11 +583,15 @@ class Facture extends CommonInvoice
$fk_parent_line = 0;
}
+ // Complete vat rate with code
+ $vatrate = $line->tva_tx;
+ if ($line->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$line->vat_src_code.')';
+
$result = $this->addline(
$line->desc,
$line->subprice,
$line->qty,
- $line->tva_tx,
+ $vatrate,
$line->localtax1_tx,
$line->localtax2_tx,
$line->fk_product,
@@ -2486,8 +2490,8 @@ class Facture extends CommonInvoice
* @param double $pu_ht Unit price without tax (> 0 even for credit note)
* @param double $qty Quantity
* @param double $txtva Force Vat rate, -1 for auto (Can contain the vat_src_code too with syntax '9.9 (CODE)')
- * @param double $txlocaltax1 Local tax 1 rate (deprecated)
- * @param double $txlocaltax2 Local tax 2 rate (deprecated)
+ * @param double $txlocaltax1 Local tax 1 rate (deprecated, use instead txtva with code inside)
+ * @param double $txlocaltax2 Local tax 2 rate (deprecated, use instead txtva with code inside)
* @param int $fk_product Id of predefined product/service
* @param double $remise_percent Percent of discount on line
* @param int $date_start Date start of service
diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php
index 64e7eb3e15d..37570d0874f 100644
--- a/htdocs/compta/facture/fiche-rec.php
+++ b/htdocs/compta/facture/fiche-rec.php
@@ -545,6 +545,9 @@ if (empty($reshook))
$pu_ttc = price($prodcustprice->lines[0]->price_ttc);
$price_base_type = $prodcustprice->lines[0]->price_base_type;
$tva_tx = $prodcustprice->lines[0]->tva_tx;
+ if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')';
+ $tva_npr = $prodcustprice->lines[0]->recuperableonly;
+ if (empty($tva_tx)) $tva_npr=0;
}
}
}
diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php
index b761eb1864b..b014dd107f4 100644
--- a/htdocs/contrat/card.php
+++ b/htdocs/contrat/card.php
@@ -517,6 +517,9 @@ if (empty($reshook))
$pu_ttc = price($prodcustprice->lines [0]->price_ttc);
$price_base_type = $prodcustprice->lines [0]->price_base_type;
$tva_tx = $prodcustprice->lines [0]->tva_tx;
+ if ($prodcustprice->lines[0]->default_vat_code && ! preg_match('/\(.*\)/', $tva_tx)) $tva_tx.= ' ('.$prodcustprice->lines[0]->default_vat_code.')';
+ $tva_npr = $prodcustprice->lines[0]->recuperableonly;
+ if (empty($tva_tx)) $tva_npr=0;
}
}
}
diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php
index 45595712b68..c7e7cd572ef 100644
--- a/htdocs/contrat/class/api_contracts.class.php
+++ b/htdocs/contrat/class/api_contracts.class.php
@@ -346,6 +346,83 @@ class Contracts extends DolibarrApi
return false;
}
+ /**
+ * Activate a service line of a given contract
+ *
+ * @param int $id Id of contract to activate
+ * @param int $lineid Id of line to activate
+ * @param string $datestart {@from body} Date start {@type timestamp}
+ * @param string $datend {@from body} Date end {@type timestamp}
+ * @param string $comment {@from body} Comment
+ *
+ * @url PUT {id}/lines/{lineid}/activate
+ *
+ * @return object
+ */
+ function activateLine($id, $lineid, $datestart, $dateend = NULL, $comment = NULL) {
+ if(! DolibarrApiAccess::$user->rights->contrat->creer) {
+ throw new RestException(401);
+ }
+
+ $result = $this->contract->fetch($id);
+ if( ! $result ) {
+ throw new RestException(404, 'Contrat not found');
+ }
+
+ if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
+ throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
+ }
+
+ $updateRes = $this->contract->active_line(DolibarrApiAccess::$user, $lineid, $datestart, $dateend, $comment);
+
+ if ($updateRes > 0) {
+ $result = $this->get($id);
+ unset($result->line);
+ return $this->_cleanObjectDatas($result);
+ }
+
+ return false;
+ }
+
+ /**
+ * Unactivate a service line of a given contract
+ *
+ * @param int $id Id of contract to activate
+ * @param int $lineid Id of line to activate
+ * @param string $datestart {@from body} Date start {@type timestamp}
+ * @param string $comment {@from body} Comment
+ *
+ * @url PUT {id}/lines/{lineid}/unactivate
+ *
+ * @return object
+ */
+ function unactivateLine($id, $lineid, $datestart, $comment = NULL) {
+ if(! DolibarrApiAccess::$user->rights->contrat->creer) {
+ throw new RestException(401);
+ }
+
+ $result = $this->contract->fetch($id);
+ if( ! $result ) {
+ throw new RestException(404, 'Contrat not found');
+ }
+
+ if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
+ throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
+ }
+
+ $request_data = (object) $request_data;
+
+ $updateRes = $this->contract->close_line(DolibarrApiAccess::$user, $lineid, $datestart, $comment);
+
+ if ($updateRes > 0) {
+ $result = $this->get($id);
+ unset($result->line);
+ return $this->_cleanObjectDatas($result);
+ }
+
+ return false;
+ }
+
/**
* Delete a line to given contract
*
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index 1553c9f3e53..c73d260784d 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -3878,9 +3878,10 @@ abstract class CommonObject
$this->tpl['description'] = ' ';
}
- // VAT Rate
- $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
- if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
+ // VAT Rate
+ $this->tpl['vat_rate'] = vatrate($line->tva_tx, true);
+ $this->tpl['vat_rate'] .= (($line->info_bits & 1) == 1) ? '*' : '';
+ if (! empty($line->vat_src_code) && ! preg_match('/\(/', $this->tpl['vat_rate'])) $this->tpl['vat_rate'].=' ('.$line->vat_src_code.')';
$this->tpl['price'] = price($line->subprice);
$this->tpl['multicurrency_price'] = price($line->multicurrency_subprice);
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index 049f768b549..ee49d15cfac 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -615,7 +615,10 @@ class FormFile
$modelselected=$arraykeys[0];
}
$out.= $form->selectarray('model', $modellist, $modelselected, $showempty, 0, 0, '', 0, 0, 0, '', 'minwidth100');
- $out.= ajax_combobox('model');
+ if ($conf->use_javascript_ajax)
+ {
+ $out.= ajax_combobox('model');
+ }
}
else
{
diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php
index 432a7bb37de..565cd4310b4 100644
--- a/htdocs/core/class/html.formother.class.php
+++ b/htdocs/core/class/html.formother.class.php
@@ -1023,7 +1023,11 @@ class FormOther
$selectboxlist.=Form::selectarray('boxcombo', $arrayboxtoactivatelabel, -1, $langs->trans("ChooseBoxToAdd").'...', 0, 0, '', 0, 0, 0, 'ASC', 'maxwidth150onsmartphone', 0, 'hidden selected', 0, 1);
if (empty($conf->use_javascript_ajax)) $selectboxlist.=' ';
$selectboxlist.='';
- $selectboxlist.=ajax_combobox("boxcombo");
+ if (! empty($conf->use_javascript_ajax))
+ {
+ include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
+ $selectboxlist.=ajax_combobox("boxcombo");
+ }
}
// Javascript code for dynamic actions
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index bc3027f5aa4..6b759c8d2cc 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -5850,7 +5850,7 @@ function get_htmloutput_mesg($mesgstring='',$mesgarray='', $style='ok', $keepemb
// If inline message with no format, we add it.
if ((empty($conf->use_javascript_ajax) || ! empty($conf->global->MAIN_DISABLE_JQUERY_JNOTIFY) || $keepembedded) && ! preg_match('/
'."\n";
}
- if (is_array($moredata) && ! empty($moredata['searchform']))
+ if (is_array($moredata) && ! empty($moredata['searchform'])) // searchform can contains select2 code or link to show old search form or link to switch on search page
{
print "\n";
print "\n";
diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
index 9e88767f473..287e91947d4 100644
--- a/htdocs/core/menus/standard/eldy.lib.php
+++ b/htdocs/core/menus/standard/eldy.lib.php
@@ -484,7 +484,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
print '
'."\n";
}
- if (is_array($moredata) && ! empty($moredata['searchform']) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
+ if (is_array($moredata) && ! empty($moredata['searchform'])) // searchform can contains select2 code or link to show old search form or link to switch on search page
{
print "\n";
print "\n";
@@ -711,7 +711,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
if (! empty($conf->propal->enabled))
{
$langs->load("propal");
- $newmenu->add("/comm/propal/index.php?leftmenu=propals", $langs->trans("Prop"), 0, $user->rights->propale->lire, '', $mainmenu, 'propals', 100);
+ $newmenu->add("/comm/propal/index.php?leftmenu=propals", $langs->trans("Proposals"), 0, $user->rights->propale->lire, '', $mainmenu, 'propals', 100);
$newmenu->add("/comm/propal/card.php?action=create&leftmenu=propals", $langs->trans("NewPropal"), 1, $user->rights->propale->creer);
$newmenu->add("/comm/propal/list.php?leftmenu=propals", $langs->trans("List"), 1, $user->rights->propale->lire);
if ($usemenuhider || empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=0", $langs->trans("PropalsDraft"), 2, $user->rights->propale->lire);
diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php
index d4c97deecf0..214ce91b032 100644
--- a/htdocs/core/modules/import/import_xlsx.modules.php
+++ b/htdocs/core/modules/import/import_xlsx.modules.php
@@ -20,9 +20,9 @@
*/
/**
- * \file htdocs/core/modules/import/import_csv.modules.php
+ * \file htdocs/core/modules/import/import_xlsx.modules.php
* \ingroup import
- * \brief File to load import files with CSV format
+ * \brief File to load import files with Excel format
*/
require_once DOL_DOCUMENT_ROOT .'/core/modules/import/modules_import.php';
diff --git a/htdocs/core/search_page.php b/htdocs/core/search_page.php
index eb873d0e8f9..83ef016d3a9 100644
--- a/htdocs/core/search_page.php
+++ b/htdocs/core/search_page.php
@@ -1,5 +1,5 @@
+/* Copyright (C) 2005-2017 Laurent Destailleur
*
* This file is a modified version of datepicker.php from phpBSM to fix some
* bugs, to add new features and to dramatically increase speed.
@@ -20,7 +20,7 @@
/**
* \file htdocs/core/search_page.php
- * \brief File to return search box
+ * \brief File to return a page with search boxes
*/
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER','1'); // Not disabled cause need to load personalized language
@@ -78,7 +78,8 @@ if ($conf->use_javascript_ajax && 1 == 2) // select2 is ko with jmobile
else
{
$usedbyinclude = 1; // Used into next include
- include DOL_DOCUMENT_ROOT.'/core/ajax/selectsearchbox.php';
+ $showtitlebefore = GETPOST('showtitlebefore','int');
+ include DOL_DOCUMENT_ROOT.'/core/ajax/selectsearchbox.php';
$accesskeyalreadyassigned=array();
foreach($arrayresult as $key => $val)
@@ -94,7 +95,7 @@ else
$accesskey=$val['label'][0];
$accesskeyalreadyassigned[$accesskey]=$accesskey;
}
- $searchform.=printSearchForm($urlaction, $urlaction, $val['label'], 'minwidth200', $keysearch, $accesskey, $key, img_picto('',$val['img'],'', 0, 1));
+ $searchform.=printSearchForm($urlaction, $urlaction, $val['label'], 'minwidth200', $keysearch, $accesskey, $key, img_picto('',$val['img'],'', 0, 1), $showtitlebefore);
}
}
@@ -112,11 +113,9 @@ print "\n";
print "\n";
print '
*** Force page code and collation of tables into utf8 (for mysql/mariadb only)
';
+ print '
*** Force page code and collation of tables into utf8/utf8_unicode_ci (for mysql/mariadb only)
';
- if ($db->type == "mysql")
+ if ($db->type == "mysql" || $db->type == "mysqli")
{
$listoftables = $db->DDLListTables($db->database_name);
diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang
index 9eb795ea7d1..f5e1ee8f366 100644
--- a/htdocs/langs/en_US/boxes.lang
+++ b/htdocs/langs/en_US/boxes.lang
@@ -77,7 +77,7 @@ BoxTitleLastModifiedSupplierBills=Latest %s modified supplier bills
BoxTitleLatestModifiedSupplierOrders=Latest %s modified supplier orders
BoxTitleLastModifiedCustomerBills=Latest %s modified customer bills
BoxTitleLastModifiedCustomerOrders=Latest %s modified customer orders
-BoxTitleLastModifiedPropals=Latest %s modified propals
+BoxTitleLastModifiedPropals=Latest %s modified proposals
ForCustomersInvoices=Customers invoices
ForCustomersOrders=Customers orders
ForProposals=Proposals
diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang
index 43b8e3a6cbb..379027b6561 100644
--- a/htdocs/langs/en_US/main.lang
+++ b/htdocs/langs/en_US/main.lang
@@ -374,6 +374,7 @@ TotalLT1IN=Total CGST
TotalLT2IN=Total SGST
HT=Net of tax
TTC=Inc. tax
+INCVATONLY=Inc. VAT
INCT=Inc. all taxes
VAT=Sales tax
VATIN=IGST
diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang
index 2cbbc509076..29c4fe16b64 100644
--- a/htdocs/langs/en_US/propal.lang
+++ b/htdocs/langs/en_US/propal.lang
@@ -4,7 +4,6 @@ Proposal=Commercial proposal
ProposalShort=Proposal
ProposalsDraft=Draft commercial proposals
ProposalsOpened=Open commercial proposals
-Prop=Commercial proposals
CommercialProposal=Commercial proposal
PdfCommercialProposalTitle=Commercial proposal
ProposalCard=Proposal card
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index 88eb244713e..62d2e23e66c 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -135,7 +135,7 @@ DateMovement=Date of movement
InventoryCode=Movement or inventory code
IsInPackage=Contained into package
WarehouseAllowNegativeTransfer=Stock can be negative
-qtyToTranferIsNotEnough=You don't have enough stock from your source warehouse
+qtyToTranferIsNotEnough=You don't have enough stock from your source warehouse and your setup does not allow negative stocks.
ShowWarehouse=Show warehouse
MovementCorrectStock=Stock correction for product %s
MovementTransferStock=Stock transfer of product %s into another warehouse
diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
index 1d049e670c9..c2cbd0a48fc 100644
--- a/htdocs/main.inc.php
+++ b/htdocs/main.inc.php
@@ -1589,9 +1589,9 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
print "\n".''."\n".'
'."\n";
- print "\n";
+ if ($conf->browser->layout == 'phone') $conf->global->MAIN_USE_OLD_SEARCH_FORM=1; // Select into select2 is awfull on smartphone. TODO Is this still true with select2 v4 ?
- if ($conf->browser->layout == 'phone') $conf->global->MAIN_USE_OLD_SEARCH_FORM=1; // Select into select2 is awfull on smartphone
+ print "\n";
if ($conf->use_javascript_ajax && empty($conf->global->MAIN_USE_OLD_SEARCH_FORM))
{
if (! is_object($form)) $form=new Form($db);
@@ -1621,7 +1621,13 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
}
else $searchform=$hookmanager->resPrint;
- if ($conf->use_javascript_ajax && ! empty($conf->global->MAIN_USE_OLD_SEARCH_FORM))
+ // Force special value for $searchform
+ if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) || empty($conf->use_javascript_ajax))
+ {
+ $urltosearch=DOL_URL_ROOT.'/core/search_page.php?showtitlebefore=1';
+ $searchform='