Browse Source

Merge remote-tracking branch 'origin/3.7' into develop

Conflicts:
	htdocs/core/class/html.form.class.php
	htdocs/core/lib/ecm.lib.php
Laurent Destailleur 10 years ago
parent
commit
2a3bb96c34
35 changed files with 337 additions and 154 deletions
  1. 147 0
      dev/initdata/mysqldump_dolibarr_3.7.0.sql
  2. 3 1
      dev/initdata/savedemo.sh
  3. 1 1
      dev/skeletons/skeleton_webservice_server.php
  4. 1 1
      htdocs/adherents/class/adherent.class.php
  5. 8 0
      htdocs/admin/system/perf.php
  6. 1 1
      htdocs/admin/system/phpinfo.php
  7. 2 4
      htdocs/compta/bank/class/bankcateg.class.php
  8. 6 6
      htdocs/compta/facture/class/facture.class.php
  9. 2 2
      htdocs/compta/prelevement/class/bonprelevement.class.php
  10. 56 53
      htdocs/compta/stats/index.php
  11. 1 1
      htdocs/compta/tva/class/tva.class.php
  12. 1 1
      htdocs/contrat/class/contrat.class.php
  13. 57 31
      htdocs/core/class/html.form.class.php
  14. 2 2
      htdocs/core/db/pgsql.class.php
  15. 2 2
      htdocs/core/db/sqlite.class.php
  16. 2 0
      htdocs/core/lib/ecm.lib.php
  17. 1 1
      htdocs/core/lib/pdf.lib.php
  18. 13 7
      htdocs/core/lib/project.lib.php
  19. 1 1
      htdocs/core/modules/syslog/logHandlerInterface.php
  20. 6 4
      htdocs/expedition/class/expedition.class.php
  21. 1 1
      htdocs/fichinter/class/fichinter.class.php
  22. 1 1
      htdocs/fourn/class/fournisseur.facture.class.php
  23. 1 1
      htdocs/holiday/tomergewithdefine_holiday.php
  24. 1 1
      htdocs/projet/activity/list.php
  25. 0 2
      htdocs/projet/tasks/contact.php
  26. 0 2
      htdocs/projet/tasks/document.php
  27. 0 2
      htdocs/projet/tasks/note.php
  28. 0 2
      htdocs/projet/tasks/task.php
  29. 4 7
      htdocs/projet/tasks/time.php
  30. 1 1
      htdocs/societe/class/societe.class.php
  31. BIN
      htdocs/theme/eldy/img/object_action.png
  32. 1 1
      htdocs/user/class/user.class.php
  33. 1 1
      htdocs/webservices/server_contact.php
  34. 12 12
      htdocs/webservices/server_productorservice.php
  35. 1 1
      htdocs/webservices/server_user.php

File diff suppressed because it is too large
+ 147 - 0
dev/initdata/mysqldump_dolibarr_3.7.0.sql


+ 3 - 1
dev/initdata/savedemo.sh

@@ -193,13 +193,15 @@ export list="
 	--ignore-table=$base.llx_cabinetmed_societe
 	--ignore-table=$base.llx_fournisseur_ca
 	--ignore-table=$base.llx_google_maps
+	--ignore-table=$base.llx_notes
 	--ignore-table=$base.llx_pos_paiement_ticket
 	--ignore-table=$base.llx_pos_places
 	--ignore-table=$base.llx_pos_ticket
 	--ignore-table=$base.llx_publi_c_contact_list 
 	--ignore-table=$base.llx_publi_c_dnd_list
 	--ignore-table=$base.llx_publi_c_method_list
-	--ignore-table=$base.llx_ultimatepdf 
+	--ignore-table=$base.llx_ultimatepdf
+	--ignore-table=$base.llx_ventilation_achat
 	" 
 echo "mysqldump -P$port -u$admin -p***** $list $base > $mydir/$dumpfile"
 mysqldump -P$port -u$admin $passwd $list $base > $mydir/$dumpfile

+ 1 - 1
dev/skeletons/skeleton_webservice_server.php

@@ -141,7 +141,7 @@ $server->register(
  * @param	array		$authentication		Array of authentication information
  * @param	int			$id					Id of object
  * @param	string		$ref				Ref of object
- * @param	ref_ext		$ref_ext			Ref external of object
+ * @param	string		$ref_ext			Ref external of object
  * @return	mixed
  */
 function getSkeleton($authentication,$id,$ref='',$ref_ext='')

+ 1 - 1
htdocs/adherents/class/adherent.class.php

@@ -1045,7 +1045,7 @@ class Adherent extends CommonObject
      *	@param	int		$rowid      Id of object to load
      * 	@param	string	$ref		To load member from its ref
      * 	@param	int		$fk_soc		To load member from its link to third party
-     * 	@param	int		$ref_ext	External reference
+     * 	@param	string	$ref_ext	External reference
      *	@return int         		>0 if OK, 0 if not found, <0 if KO
      */
     function fetch($rowid,$ref='',$fk_soc='',$ref_ext='')

+ 8 - 0
htdocs/admin/system/perf.php

@@ -24,6 +24,7 @@ require '../../main.inc.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
 
 $langs->load("admin");
 $langs->load("install");
@@ -51,6 +52,13 @@ print_fiche_titre($langs->trans("PerfDolibarr"),'','setup');
 
 print $langs->trans("YouMayFindPerfAdviceHere",'http://wiki.dolibarr.org/index.php/FAQ_Increase_Performance').' (<a href="'.$_SERVER["PHP_SELF"].'">'.$langs->trans("Reload").'</a>)<br>';
 
+// Recupere la version de PHP
+$phpversion=version_php();
+print "<br>PHP - ".$langs->trans("Version").": ".$phpversion."<br>\n";
+
+// Recupere la version du serveur web
+print "<br>Web server - ".$langs->trans("Version").": ".$_SERVER["SERVER_SOFTWARE"]."<br>\n";
+
 // XDebug
 print '<br>';
 print '<strong>'.$langs->trans("XDebug").'</strong>: ';

+ 1 - 1
htdocs/admin/system/phpinfo.php

@@ -54,7 +54,7 @@ print "\n";
 
 $var=false;
 
-// Recupere la version de l'OS
+// Recupere la version de PHP
 $phpversion=version_php();
 print "<tr ".$bc[$var].'><td  width="220px">'.$langs->trans("Version")."</td><td>".$phpversion."</td></tr>\n";
 

+ 2 - 4
htdocs/compta/bank/class/bankcateg.class.php

@@ -30,9 +30,7 @@
 
 
 /**
- *      \class      BankCateg
- *      \brief      Class to manage bank categories
- *		\remarks	Initialy built by build_class_from_table on 2009-01-02 15:26
+ *	Class to manage bank categories
  */
 class BankCateg // extends CommonObject
 {
@@ -300,7 +298,7 @@ class BankCateg // extends CommonObject
 
         $error=0;
 
-        $object=new Bank_categ($this->db);
+        $object=new BankCateg($this->db);
 
         $this->db->begin();
 

+ 6 - 6
htdocs/compta/facture/class/facture.class.php

@@ -2479,7 +2479,7 @@ class Facture extends CommonInvoice
 	 *      Return next reference of customer invoice not already used (or last reference)
 	 *      according to numbering module defined into constant FACTURE_ADDON
 	 *
-	 *      @param	   Society		$soc		object company
+	 *      @param	   Societe		$soc		object company
 	 *      @param     string		$mode		'next' for next value or 'last' for last value
 	 *      @return    string					free ref or last ref
 	 */
@@ -2838,7 +2838,7 @@ class Facture extends CommonInvoice
 	function demande_prelevement($user)
 	{
 		$error=0;
-		
+
 		dol_syslog(get_class($this)."::demande_prelevement", LOG_DEBUG);
 
 		if ($this->statut > 0 && $this->paye == 0)
@@ -2896,12 +2896,12 @@ class Facture extends CommonInvoice
         			{
         				// Force payment mode of invoice to withdraw
         				$payment_mode_id = dol_getIdFromCode($this->db, 'PRE', 'c_paiement');
-        				if ($payment_mode_id > 0) 
+        				if ($payment_mode_id > 0)
         				{
         					$result=$this->setPaymentMethods($payment_mode_id);
         				}
-        			}            
-                    
+        			}
+
                     if ($error) return -1;
                     return 1;
                 }
@@ -3519,7 +3519,7 @@ class FactureLigne extends CommonInvoiceLine
 				return -1;
 			}
 		}
-		
+
 		// POS or by external module, take lowest buying price
 		if (!empty($this->fk_product) && empty($this->fk_fournprice) && empty($this->pa_ht)) {
 		    include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';

+ 2 - 2
htdocs/compta/prelevement/class/bonprelevement.class.php

@@ -58,7 +58,7 @@ class BonPrelevement extends CommonObject
 
     var $invoice_in_error=array();
 
-    
+
     /**
      *	Constructor
      *
@@ -1634,7 +1634,7 @@ class BonPrelevement extends CommonObject
      *	@param	int		$nombre			0 or 1
      *	@param	float	$total			Total
      *	@param	string	$CrLf			End of line character
-     *	@return	SEPA
+     *	@return	string					String with SEAP Sender
      */
     function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf='\n')
     {	// SEPA INITIALISATION

+ 56 - 53
htdocs/compta/stats/index.php

@@ -209,6 +209,8 @@ $maxyear=substr($maxyearmonth,0,4);
 $nowyear=strftime("%Y",dol_now());
 $nowyearmonth=strftime("%Y-%m",dol_now());
 $maxyearmonth=max($maxyearmonth,$nowyearmonth);
+$now=dol_now();
+$casenow = dol_print_date($now,"%Y-%m");
 
 // Loop on each month
 $nb_mois_decalage = $conf->global->SOCIETE_FISCAL_MONTH_START?($conf->global->SOCIETE_FISCAL_MONTH_START-1):0;
@@ -220,22 +222,37 @@ for ($mois = 1+$nb_mois_decalage ; $mois <= 12+$nb_mois_decalage ; $mois++)
 	print "<tr ".$bc[$var].">";
 
 	print "<td>".dol_print_date(dol_mktime(12,0,0,$mois_modulo,1,2000),"%B")."</td>";
-	for ($annee = $year_start ; $annee <= $year_end ; $annee++)
+	for ($annee = $year_start -1 ; $annee <= $year_end ; $annee++)	// We start one year before to have data to be able to make delta
 	{
-		$now=dol_now();
 		$annee_decalage=$annee;
 		if ($mois>12) {$annee_decalage=$annee+1;}
-		$casenow = dol_print_date($now,"%Y-%m");
 		$case = dol_print_date(dol_mktime(1,1,1,$mois_modulo,1,$annee_decalage),"%Y-%m");
 		$caseprev = dol_print_date(dol_mktime(1,1,1,$mois_modulo,1,$annee_decalage-1),"%Y-%m");
 
-		if ($modecompta == 'CREANCES-DETTES') {
-			// Valeur CA du mois w/o VAT
+		if ($annee >= $year_start)
+		{
+			if ($modecompta == 'CREANCES-DETTES') {
+				// Valeur CA du mois w/o VAT
+				print '<td align="right">';
+				if ($cum_ht[$case])
+				{
+					$now_show_delta=1;  // On a trouve le premier mois de la premiere annee generant du chiffre.
+					print '<a href="casoc.php?year='.$annee_decalage.'&month='.$mois_modulo.($modecompta?'&modecompta='.$modecompta:'').'">'.price($cum_ht[$case],1).'</a>';
+				}
+				else
+				{
+					if ($minyearmonth < $case && $case <= max($maxyearmonth,$nowyearmonth)) { print '0'; }
+					else { print '&nbsp;'; }
+				}
+				print "</td>";
+			}
+
+			// Valeur CA du mois
 			print '<td align="right">';
-			if ($cum_ht[$case])
+			if ($cum[$case])
 			{
 				$now_show_delta=1;  // On a trouve le premier mois de la premiere annee generant du chiffre.
-				print '<a href="casoc.php?year='.$annee_decalage.'&month='.$mois_modulo.($modecompta?'&modecompta='.$modecompta:'').'">'.price($cum_ht[$case],1).'</a>';
+				print '<a href="casoc.php?year='.$annee_decalage.'&month='.$mois_modulo.($modecompta?'&modecompta='.$modecompta:'').'">'.price($cum[$case],1).'</a>';
 			}
 			else
 			{
@@ -243,60 +260,46 @@ for ($mois = 1+$nb_mois_decalage ; $mois <= 12+$nb_mois_decalage ; $mois++)
 				else { print '&nbsp;'; }
 			}
 			print "</td>";
-		}
 
-		// Valeur CA du mois
-		print '<td align="right">';
-		if ($cum[$case])
-		{
-			$now_show_delta=1;  // On a trouve le premier mois de la premiere annee generant du chiffre.
-			print '<a href="casoc.php?year='.$annee_decalage.'&month='.$mois_modulo.($modecompta?'&modecompta='.$modecompta:'').'">'.price($cum[$case],1).'</a>';
-		}
-		else
-		{
-			if ($minyearmonth < $case && $case <= max($maxyearmonth,$nowyearmonth)) { print '0'; }
-			else { print '&nbsp;'; }
-		}
-		print "</td>";
-
-		// Pourcentage du mois
-		if ($annee_decalage > $minyear && $case <= $casenow)
-		{
-			if ($cum[$caseprev] && $cum[$case])
+			// Pourcentage du mois
+			if ($annee_decalage > $minyear && $case <= $casenow)
 			{
-				$percent=(round(($cum[$case]-$cum[$caseprev])/$cum[$caseprev],4)*100);
-				//print "X $cum[$case] - $cum[$caseprev] - $cum[$caseprev] - $percent X";
-				print '<td align="right" class="borderrightlight">'.($percent>=0?"+$percent":"$percent").'%</td>';
+				if ($cum[$caseprev] && $cum[$case])
+				{
+					$percent=(round(($cum[$case]-$cum[$caseprev])/$cum[$caseprev],4)*100);
+					//print "X $cum[$case] - $cum[$caseprev] - $cum[$caseprev] - $percent X";
+					print '<td align="right" class="borderrightlight">'.($percent>=0?"+$percent":"$percent").'%</td>';
+				}
+				if ($cum[$caseprev] && ! $cum[$case])
+				{
+					print '<td align="right" class="borderrightlight">-100%</td>';
+				}
+				if (! $cum[$caseprev] && $cum[$case])
+				{
+					//print '<td align="right">+Inf%</td>';
+					print '<td align="right" class="borderrightlight">-</td>';
+				}
+				if (isset($cum[$caseprev]) && ! $cum[$caseprev] && ! $cum[$case])
+				{
+					print '<td align="right" class="borderrightlight">+0%</td>';
+				}
+				if (! isset($cum[$caseprev]) && ! $cum[$case])
+				{
+					print '<td align="right" class="borderrightlight">-</td>';
+				}
 			}
-			if ($cum[$caseprev] && ! $cum[$case])
-			{
-				print '<td align="right" class="borderrightlight">-100%</td>';
-			}
-			if (! $cum[$caseprev] && $cum[$case])
-			{
-				//print '<td align="right">+Inf%</td>';
-				print '<td align="right" class="borderrightlight">-</td>';
-			}
-			if (isset($cum[$caseprev]) && ! $cum[$caseprev] && ! $cum[$case])
-			{
-				print '<td align="right" class="borderrightlight">+0%</td>';
-			}
-			if (! isset($cum[$caseprev]) && ! $cum[$case])
+			else
 			{
-				print '<td align="right" class="borderrightlight">-</td>';
+				print '<td align="right" class="borderrightlight">';
+				if ($minyearmonth <= $case && $case <= $maxyearmonth) { print '-'; }
+				else { print '&nbsp;'; }
+				print '</td>';
 			}
-		}
-		else
-		{
-			print '<td align="right" class="borderrightlight">';
-			if ($minyearmonth <= $case && $case <= $maxyearmonth) { print '-'; }
-			else { print '&nbsp;'; }
-			print '</td>';
+			if ($annee_decalage != $year_end) print '<td width="15">&nbsp;</td>';
 		}
 
 		$total_ht[$annee]+=!empty($cum_ht[$case]) ? $cum_ht[$case] : 0;;
 		$total[$annee]+=$cum[$case];
-		if ($annee_decalage != $year_end) print '<td width="15">&nbsp;</td>';
 	}
 
 	print '</tr>';
@@ -406,7 +409,7 @@ for ($annee = $year_start ; $annee <= $year_end ; $annee++)
 		}
 		if (! $total[$annee-1] && $total[$annee])
 		{
-			print '<td align="right" class="borderrightlight">+Inf%</td>';
+			print '<td align="right" class="borderrightlight">+zzzz'.$total[$annee-1].$langs->trans('Inf').'%</td>';
 		}
 		if (! $total[$annee-1] && ! $total[$annee])
 		{

+ 1 - 1
htdocs/compta/tva/class/tva.class.php

@@ -343,7 +343,7 @@ class Tva extends CommonObject
     }
 
     /**
-     * 	Total of the VAT from invoices emitted by the society.
+     * 	Total of the VAT from invoices emitted by the thirdparty.
      *
      *	@param	int		$year		Year
      *	@return	double				Amount

+ 1 - 1
htdocs/contrat/class/contrat.class.php

@@ -88,7 +88,7 @@ class Contrat extends CommonObject
 	/**
 	 *	Return next contract ref
 	 *
-	 *	@param	Societe		$soc		objet society
+	 *	@param	Societe		$soc		Thirdparty object
 	 *	@return string					free reference for contract
 	 */
 	function getNextNumRef($soc)

+ 57 - 31
htdocs/core/class/html.form.class.php

@@ -1201,7 +1201,7 @@ class Form
         if (is_array($exclude) && $excludeUsers) $sql.= " AND u.rowid NOT IN ('".$excludeUsers."')";
         if (is_array($include) && $includeUsers) $sql.= " AND u.rowid IN ('".$includeUsers."')";
         if (! empty($conf->global->USER_HIDE_INACTIVE_IN_COMBOBOX)) $sql.= " AND u.statut <> 0";
-        if (! empty($morefilter)) $sql.=$morefilter;
+        if (! empty($morefilter)) $sql.=" ".$morefilter;
         $sql.= " ORDER BY u.lastname ASC";
 
         dol_syslog(get_class($this)."::select_dolusers", LOG_DEBUG);
@@ -1219,7 +1219,7 @@ class Form
 		           	$out.= ajax_combobox($htmlname);
 	            	$nodatarole=' data-role="none"';
 	            }
-            	
+
                 $out.= '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.($disabled?' disabled="disabled"':'').$nodatarole.'>';
                 if ($show_empty) $out.= '<option value="-1"'.((empty($selected) || $selected==-1)?' selected="selected"':'').'>&nbsp;</option>'."\n";
 
@@ -3773,7 +3773,7 @@ class Form
      *	@param	string		$prefix			Prefix for fields name
      *	@param	int			$h				1=Show also hours
      *	@param	int			$m				1=Show also minutes
-     *	@param	int			$empty			0=Fields required, 1=Empty input is allowed
+     *	@param	int			$empty			0=Fields required, 1=Empty inputs are allowed, 2=Empty inputs are allowed for hours only
      *	@param	string		$form_name 		Not used
      *	@param	int			$d				1=Show days, month, years
      * 	@param	int			$addnowbutton	Add a button "Now"
@@ -3792,9 +3792,13 @@ class Form
         if($prefix=='') $prefix='re';
         if($h == '') $h=0;
         if($m == '') $m=0;
-        if($empty == '') $empty=0;
+        $emptydate=0;
+        $emptyhours=0;
+    	if ($empty == 1) { $emptydate=1; $emptyhours=1; }
+    	if ($empty == 2) { $emptydate=0; $emptyhours=1; }
+		$orig_set_time=$set_time;
 
-        if ($set_time === '' && $empty == 0)
+        if ($set_time === '' && $emptydate == 0)
         {
         	include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
         	$set_time = dol_now('tzuser')-(getServerTimeZoneInt('now')*3600); // set_time must be relative to PHP server timezone
@@ -3816,8 +3820,11 @@ class Form
             $syear = dol_print_date($set_time, "%Y");
             $smonth = dol_print_date($set_time, "%m");
             $sday = dol_print_date($set_time, "%d");
-            $shour = dol_print_date($set_time, "%H");
-            $smin = dol_print_date($set_time, "%M");
+            if ($orig_set_time != '')
+            {
+            	$shour = dol_print_date($set_time, "%H");
+            	$smin = dol_print_date($set_time, "%M");
+            }
         }
         else
         {
@@ -3879,7 +3886,7 @@ class Form
                 // Day
                 $retstring.='<select'.($disabled?' disabled="disabled"':'').' class="flat" name="'.$prefix.'day">';
 
-                if ($empty || $set_time == -1)
+                if ($emptydate || $set_time == -1)
                 {
                     $retstring.='<option value="0" selected="selected">&nbsp;</option>';
                 }
@@ -3892,7 +3899,7 @@ class Form
                 $retstring.="</select>";
 
                 $retstring.='<select'.($disabled?' disabled="disabled"':'').' class="flat" name="'.$prefix.'month">';
-                if ($empty || $set_time == -1)
+                if ($emptydate || $set_time == -1)
                 {
                     $retstring.='<option value="0" selected="selected">&nbsp;</option>';
                 }
@@ -3907,7 +3914,7 @@ class Form
                 $retstring.="</select>";
 
                 // Year
-                if ($empty || $set_time == -1)
+                if ($emptydate || $set_time == -1)
                 {
                     $retstring.='<input'.($disabled?' disabled="disabled"':'').' placeholder="'.dol_escape_htmltag($langs->trans("Year")).'" class="flat" type="text" size="3" maxlength="4" name="'.$prefix.'year" value="'.$syear.'">';
                 }
@@ -3930,7 +3937,7 @@ class Form
         {
             // Show hour
             $retstring.='<select'.($disabled?' disabled="disabled"':'').' class="flat '.($fullday?$fullday.'hour':'').'" name="'.$prefix.'hour">';
-            if ($empty) $retstring.='<option value="-1">&nbsp;</option>';
+            if ($emptyhours) $retstring.='<option value="-1">&nbsp;</option>';
             for ($hour = 0; $hour < 24; $hour++)
             {
                 if (strlen($hour) < 2) $hour = "0" . $hour;
@@ -3944,7 +3951,7 @@ class Form
         {
             // Show minutes
             $retstring.='<select'.($disabled?' disabled="disabled"':'').' class="flat '.($fullday?$fullday.'min':'').'" name="'.$prefix.'min">';
-            if ($empty) $retstring.='<option value="-1">&nbsp;</option>';
+            if ($emptyhours) $retstring.='<option value="-1">&nbsp;</option>';
             for ($min = 0; $min < 60 ; $min++)
             {
                 if (strlen($min) < 2) $min = "0" . $min;
@@ -4003,18 +4010,22 @@ class Form
     /**
      *	Function to show a form to select a duration on a page
      *
-     *	@param	string	$prefix   		Prefix
+     *	@param	string	$prefix   		Prefix for input fields
      *	@param  int		$iSecond  		Default preselected duration (number of seconds)
      * 	@param	int		$disabled		Disable the combo box
      * 	@param	string	$typehour		If 'select' then input hour and input min is a combo, if 'text' input hour is in text and input min is a combo
      *  @param	string	$minunderhours	If 1, show minutes selection under the hours
+     * 	@param	int		$nooutput		Do not output html string but return it
      *  @return	void
      */
-    function select_duration($prefix, $iSecond='', $disabled=0, $typehour='select', $minunderhours=0)
+    function select_duration($prefix, $iSecond='', $disabled=0, $typehour='select', $minunderhours=0, $nooutput=0)
     {
     	global $langs;
 
+    	$retstring='';
+
     	$hourSelected=0; $minSelected=0;
+
         if ($iSecond)
         {
             require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
@@ -4025,36 +4036,51 @@ class Form
 
         if ($typehour=='select')
         {
-	        print '<select class="flat" name="'.$prefix.'hour"'.($disabled?' disabled="disabled"':'').'>';
+	        $retstring.='<select class="flat" name="'.$prefix.'hour"'.($disabled?' disabled="disabled"':'').'>';
 	        for ($hour = 0; $hour < 25; $hour++)	// For a duration, we allow 24 hours
 	        {
-	            print '<option value="'.$hour.'"';
+	            $retstring.='<option value="'.$hour.'"';
 	            if ($hourSelected == $hour)
 	            {
-	                print " selected=\"true\"";
+	                $retstring.=" selected=\"true\"";
 	            }
-	            print ">".$hour."</option>";
+	            $retstring.=">".$hour."</option>";
 	        }
-	        print "</select>";
+	        $retstring.="</select>";
         }
         elseif ($typehour=='text')
         {
-        	print '<input type="text" size="3" name="'.$prefix.'hour"'.($disabled?' disabled="disabled"':'').' class="flat" value="'.((int) $hourSelected).'">';
+        	$retstring.='<input type="text" size="2" name="'.$prefix.'hour"'.($disabled?' disabled="disabled"':'').' class="flat" value="'.($hourSelected?((int) $hourSelected):'').'">';
         }
-        print ' '.$langs->trans('HourShort');
+        else return 'BadValueForParameterTypeHour';
 
-        if ($minunderhours) print '<br>';
-        else print "&nbsp;";
+        $retstring.=' '.$langs->trans('HourShort');
 
-        print '<select class="flat" name="'.$prefix.'min"'.($disabled?' disabled="disabled"':'').'>';
-        for ($min = 0; $min <= 55; $min=$min+5)
+        if ($minunderhours) $retstring.='<br>';
+        else $retstring.="&nbsp;";
+
+        if ($typehour=='select')
+        {
+	        $retstring.='<select class="flat" name="'.$prefix.'min"'.($disabled?' disabled="disabled"':'').'>';
+	        for ($min = 0; $min <= 55; $min=$min+5)
+	        {
+	            $retstring.='<option value="'.$min.'"';
+	            if ($minSelected == $min) $retstring.=' selected="selected"';
+	            $retstring.='>'.$min.'</option>';
+	        }
+	        $retstring.="</select>";
+        }
+        elseif ($typehour=='text')
         {
-            print '<option value="'.$min.'"';
-            if ($minSelected == $min) print ' selected="selected"';
-            print '>'.$min.'</option>';
+        	$retstring.='<input type="text" size="2" name="'.$prefix.'min"'.($disabled?' disabled="disabled"':'').' class="flat" value="'.($minSelected?((int) $minSelected):'').'">';
         }
-        print "</select>";
-        print ' '.$langs->trans('MinuteShort'). "&nbsp;";
+        $retstring.=' '.$langs->trans('MinuteShort');
+        $retstring.="&nbsp;";
+
+        if (! empty($nooutput)) return $retstring;
+
+        print $retstring;
+        return;
     }
 
 
@@ -4524,7 +4550,7 @@ class Form
             }
 
             $out.= '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'"'.($disabled?' disabled="disabled"':'').$nodatarole.'>';
-            
+
         	$num = $this->db->num_rows($resql);
             $i = 0;
             if ($num)

+ 2 - 2
htdocs/core/db/pgsql.class.php

@@ -668,7 +668,7 @@ class DoliDBPgsql extends DoliDB
 	/**
 	 * Renvoie le code erreur generique de l'operation precedente.
 	 *
-	 * @return    error_num       (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
+	 * @return	string		Error code (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
 	 */
 	function errno()
 	{
@@ -734,7 +734,7 @@ class DoliDBPgsql extends DoliDB
 	/**
 	 * Renvoie le texte de l'erreur pgsql de l'operation precedente
 	 *
-	 * @return		error_text
+	 * @return	string		Error text
 	 */
 	function error()
 	{

+ 2 - 2
htdocs/core/db/sqlite.class.php

@@ -535,7 +535,7 @@ class DoliDBSqlite extends DoliDB
     /**
      *	Renvoie le code erreur generique de l'operation precedente.
      *
-     *	@return	string	$error_num       (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
+     *	@return	string		Error code (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
      */
     function errno()
     {
@@ -597,7 +597,7 @@ class DoliDBSqlite extends DoliDB
     /**
      *	Renvoie le texte de l'erreur mysql de l'operation precedente.
      *
-     *	@return	string	$error_text
+     *	@return	string	Error text
      */
     function error()
     {

+ 2 - 0
htdocs/core/lib/ecm.lib.php

@@ -32,6 +32,8 @@
 function ecm_prepare_dasboard_head($object)
 {
 	global $langs, $conf, $user, $form;
+	global $helptext1, $helptext2;
+
 	$h = 0;
 	$head = array();
     $helptext =$langs->trans("ECMAreaDesc").'<br>';

+ 1 - 1
htdocs/core/lib/pdf.lib.php

@@ -1273,7 +1273,7 @@ function pdf_getlineupexcltax($object,$i,$outputlangs,$hidedetails=0)
  *
  *	@param	Object		$object				Object
  *	@param	int			$i					Current line number
- *  @param  Tranlate	$outputlangs		Object langs for output
+ *  @param  Translate	$outputlangs		Object langs for output
  *  @param	int			$hidedetails		Hide value (0 = no,	1 = yes, 2 = just special lines)
  *  @return	void
  */

+ 13 - 7
htdocs/core/lib/project.lib.php

@@ -384,10 +384,13 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
 				else print '</a>';
 				print '</td>';
 
-				// Progress calculated
-				// Note: ->duration is in fact time spent i think
+				// Progress calculated (Note: ->duration is time spent)
 				print '<td align="right">';
-				if ($lines[$i]->planned_workload) print round(100 * $lines[$i]->duration / $lines[$i]->planned_workload,2).' %';
+				if ($lines[$i]->planned_workload || $lines[$i]->duration)
+				{
+					if ($lines[$i]->planned_workload) print round(100 * $lines[$i]->duration / $lines[$i]->planned_workload,2).' %';
+					else print $langs->trans('WorkloadNotDefined');
+				}
 				print '</td>';
 
 				// Tick to drag and drop
@@ -430,7 +433,7 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
 		print convertSecondToTime($total_projectlinesa_spent, 'allhourmin');
 		print '</td>';
 		print '<td align="right" class="nowrap liste_total">';
-		if ($total_projectlinesa_planned) print round(100 * $total_projectlinesa_spent_if_planned / $total_projectlinesa_planned,2).' %';
+		if ($total_projectlinesa_planned) print round(100 * $total_projectlinesa_spent / $total_projectlinesa_planned,2).' %';
 		print '</td>';
 		if ($addordertick) print '<td class="hideonsmartphone"></td>';
 		print '</tr>';
@@ -562,13 +565,16 @@ function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksr
 					$disabledtask=1;
 				}
 
-				print '<td class="nowrap">';
-				$s =$form->select_date('',$lines[$i]->id,'','','',"addtime",1,0,1,$disabledtask);
+				// Form to add new time
+				print '<td class="nowrap" align="right">';
+				$s='';
+				$s.=$form->select_date('',$lines[$i]->id,0,0,2,"addtime",1,0,1,$disabledtask);
 				$s.='&nbsp;&nbsp;&nbsp;';
-				$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text');
+				$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text',0,1);
 				$s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">';
 				print $s;
 				print '</td>';
+
 				print '<td align="right">';
 				if ((! $lines[$i]->public) && $disabledproject) print $form->textwithpicto('',$langs->trans("YouAreNotContactOfProject"));
 				else if ($disabledtask) print $form->textwithpicto('',$langs->trans("TaskIsNotAffectedToYou"));

+ 1 - 1
htdocs/core/modules/syslog/logHandlerInterface.php

@@ -44,7 +44,7 @@ interface LogHandlerInterface
 	/**
 	 * 	Return if logger active
 	 *
-	 * 	@return	boolen		True if active
+	 * 	@return	boolean		True if active
 	 */
 	public function isActive();
 

+ 6 - 4
htdocs/expedition/class/expedition.class.php

@@ -113,7 +113,7 @@ class Expedition extends CommonObject
 	/**
 	 *	Return next contract ref
 	 *
-	 *	@param	Societe		$soc	Objet society
+	 *	@param	Societe		$soc	Thirdparty object
 	 *	@return string				Free reference for contract
 	 */
 	function getNextNumRef($soc)
@@ -604,9 +604,11 @@ class Expedition extends CommonObject
 
 					if (! empty($conf->productbatch->enabled)) {
 						$details=ExpeditionLigneBatch::FetchAll($this->db,$obj->rowid);
-						foreach ($details as $dbatch) {
-							$result=$mouvS->livraison_batch($dbatch->fk_origin_stock,$dbatch->dluo_qty);
-							if ($result < 0) { $error++; $this->errors[]=$mouvS->$error; break 2; }
+						if (! empty($details)) {
+							foreach ($details as $dbatch) {
+								$result=$mouvS->livraison_batch($dbatch->fk_origin_stock,$dbatch->dluo_qty);
+								if ($result < 0) { $error++; $this->errors[]=$mouvS->$error; break 2; }
+							}
 						}
 					}
 				}

+ 1 - 1
htdocs/fichinter/class/fichinter.class.php

@@ -561,7 +561,7 @@ class Fichinter extends CommonObject
 	 *	Returns the next non used reference of intervention
 	 *	depending on the module numbering assets within FICHEINTER_ADDON
 	 *
-	 *	@param	    Societe		$soc		Object society
+	 *	@param	    Societe		$soc		Thirdparty object
 	 *	@return     string					Free reference for intervention
 	 */
 	function getNextNumRef($soc)

+ 1 - 1
htdocs/fourn/class/fournisseur.facture.class.php

@@ -1493,7 +1493,7 @@ class FactureFournisseur extends CommonInvoice
       *      Return next reference of supplier invoice not already used (or last reference)
       *      according to numbering module defined into constant INVOICE_SUPPLIER_ADDON_NUMBER
       *
-      *      @param	   Society		$soc		object company
+      *      @param	   Societe		$soc		Thirdparty object
       *      @param    string		$mode		'next' for next value or 'last' for last value
       *      @return   string					free ref or last ref
       */

+ 1 - 1
htdocs/holiday/tomergewithdefine_holiday.php

@@ -46,7 +46,7 @@ llxHeader(array(),$langs->trans('CPTitreMenu'));
 
 print_fiche_titre($langs->trans('MenuConfCP'));
 
-$congespayes = new Holidays($db);
+$congespayes = new Holiday($db);
 $listUsers = $congespayes->fetchUsers(false, true);
 
 // Si il y a une action de mise à jour

+ 1 - 1
htdocs/projet/activity/list.php

@@ -181,7 +181,7 @@ print '<td align="center">'.$langs->trans("DateEnd").'</td>';
 print '<td align="right">'.$langs->trans("PlannedWorkload").'</td>';
 print '<td align="right">'.$langs->trans("ProgressDeclared").'</td>';
 print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
-print '<td colspan="2">'.$langs->trans("AddDuration").'</td>';
+print '<td colspan="2" align="right">'.$langs->trans("NewTimeSpent").'</td>';
 print "</tr>\n";
 
 // By default, we can edit only tasks we are assigned to

+ 0 - 2
htdocs/projet/tasks/contact.php

@@ -215,8 +215,6 @@ if ($id > 0 || ! empty($ref))
     		print '</table>';
 
     		dol_fiche_end();
-
-    		print '<br>';
 		}
 
 		// To verify role of users

+ 0 - 2
htdocs/projet/tasks/document.php

@@ -179,8 +179,6 @@ if ($object->id > 0)
 		print '</table>';
 
 		dol_fiche_end();
-
-		print '<br>';
 	}
 
 	$head = task_prepare_head($object);

+ 0 - 2
htdocs/projet/tasks/note.php

@@ -161,8 +161,6 @@ if ($object->id > 0)
 		print '</table>';
 
 		dol_fiche_end();
-
-		print '<br>';
 	}
 
 	$head = task_prepare_head($object);

+ 0 - 2
htdocs/projet/tasks/task.php

@@ -262,8 +262,6 @@ if ($id > 0 || ! empty($ref))
 			print '</table>';
 
 			dol_fiche_end();
-
-			print '<br>';
 		}
 
 		/*

+ 4 - 7
htdocs/projet/tasks/time.php

@@ -259,8 +259,6 @@ if ($id > 0 || ! empty($ref))
 			print '</table>';
 
 			dol_fiche_end();
-
-			print '<br>';
 		}
 
 		$head=task_prepare_head($object);
@@ -362,8 +360,7 @@ if ($id > 0 || ! empty($ref))
 			print '<td>'.$langs->trans("By").'</td>';
 			print '<td>'.$langs->trans("Note").'</td>';
 			print '<td>'.$langs->trans("ProgressDeclared").'</td>';
-			print '<td align="right">'.$langs->trans("Duration").'</td>';
-			print '<td width="80">&nbsp;</td>';
+			print '<td align="right" colspan="2">'.$langs->trans("NewTimeSpent").'</td>';
 			print "</tr>\n";
 
 			print '<tr '.$bc[false].'>';
@@ -396,7 +393,7 @@ if ($id > 0 || ! empty($ref))
 			print $formother->select_percent(GETPOST('progress')?GETPOST('progress'):$object->progress,'progress');
 			print '</td>';
 
-			// Duration
+			// Duration - Time spent
 			print '<td class="nowrap" align="right">';
 			print $form->select_duration('timespent_duration', ($_POST['timespent_duration']?$_POST['timespent_duration']:''), 0, 'text');
 			print '</td>';
@@ -446,13 +443,13 @@ if ($id > 0 || ! empty($ref))
 		print '<input type="hidden" name="action" value="updateline">';
 		print '<input type="hidden" name="id" value="'.$object->id.'">';
 		print '<input type="hidden" name="withproject" value="'.$withproject.'">';
-		
+
 		print '<table class="noborder" width="100%">';
 		print '<tr class="liste_titre">';
 		print '<td width="100">'.$langs->trans("Date").'</td>';
 		print '<td>'.$langs->trans("By").'</td>';
 		print '<td align="left">'.$langs->trans("Note").'</td>';
-		print '<td align="right">'.$langs->trans("Duration").'</td>';
+		print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
 		print '<td>&nbsp;</td>';
 		print "</tr>\n";
 

+ 1 - 1
htdocs/societe/class/societe.class.php

@@ -2382,7 +2382,7 @@ class Societe extends CommonObject
      *
      *    @param	int		$idprof		1,2,3,4 (Example: 1=siren,2=siret,3=naf,4=rcs/rm)
      *    @param	string	$value		Value of profid
-     *    @param	int		$socid		Id of society if update
+     *    @param	int		$socid		Id of thirdparty if update
      *    @return   boolean				true if exists, false if not
      */
     function id_prof_exists($idprof,$value,$socid=0)

BIN
htdocs/theme/eldy/img/object_action.png


+ 1 - 1
htdocs/user/class/user.class.php

@@ -138,7 +138,7 @@ class User extends CommonObject
 	 *
 	 *	@param	int		$id		       		Si defini, id a utiliser pour recherche
 	 * 	@param  string	$login       		Si defini, login a utiliser pour recherche
-	 *	@param  strinf	$sid				Si defini, sid a utiliser pour recherche
+	 *	@param  string	$sid				Si defini, sid a utiliser pour recherche
 	 * 	@param	int		$loadpersonalconf	Also load personal conf of user (in $user->conf->xxx)
 	 * 	@return	int							<0 if KO, 0 not found, >0 if OK
 	 */

+ 1 - 1
htdocs/webservices/server_contact.php

@@ -234,7 +234,7 @@ $server->register(
  * @param	array		$authentication		Array of authentication information
  * @param	int			$id					Id of object
  * @param	string		$ref				Ref of object
- * @param	ref_ext		$ref_ext			Ref external of object
+ * @param	string		$ref_ext			Ref external of object
  * @return	mixed
  */
 function getContact($authentication,$id,$ref='',$ref_ext='')

+ 12 - 12
htdocs/webservices/server_productorservice.php

@@ -327,7 +327,7 @@ $server->register(
  * @param	array		$authentication		Array of authentication information
  * @param	int			$id					Id of object
  * @param	string		$ref				Ref of object
- * @param	ref_ext		$ref_ext			Ref external of object
+ * @param	string		$ref_ext			Ref external of object
  * @param   string      $lang               Lang to force
  * @return	mixed
  */
@@ -378,7 +378,7 @@ function getProductOrService($authentication,$id='',$ref='',$ref_ext='',$lang=''
             	if (! empty($product->multilangs[$langs->defaultlang]["label"]))     		$product->label =  $product->multilangs[$langs->defaultlang]["label"];
             	if (! empty($product->multilangs[$langs->defaultlang]["description"]))     	$product->description =  $product->multilangs[$langs->defaultlang]["description"];
             	if (! empty($product->multilangs[$langs->defaultlang]["note"]))     		$product->note =  $product->multilangs[$langs->defaultlang]["note"];
-		
+
 		$productorservice_result_fields = array(
 		    'id' => $product->id,
 	   	    'ref' => $product->ref,
@@ -396,7 +396,7 @@ function getProductOrService($authentication,$id='',$ref='',$ref_ext='',$lang=''
 		    'country_id' => $product->country_id>0?$product->country_id:'',
 		    'country_code' => $product->country_code,
 		    'custom_code' => $product->customcode,
-	
+
 	            'price_net' => $product->price,
 	            'price' => $product->price_ttc,
 	            'price_min_net' => $product->price_min,
@@ -408,7 +408,7 @@ function getProductOrService($authentication,$id='',$ref='',$ref_ext='',$lang=''
 		    //! Spanish local taxes
 		    'localtax1_tx' => $product->localtax1_tx,
 		    'localtax2_tx' => $product->localtax2_tx,
-	
+
 		    'stock_real' => $product->stock_reel,
 		    'stock_alert' => $product->seuil_stock_alerte,
 		    'pmp' => $product->pmp,
@@ -416,19 +416,19 @@ function getProductOrService($authentication,$id='',$ref='',$ref_ext='',$lang=''
 		    'dir' => $pdir,
 		    'images' => $product->liste_photos($dir,$nbmax=10)
                 );
-                
+
                 //Retreive all extrafield for thirdsparty
             	// fetch optionals attributes and labels
             	$extrafields=new ExtraFields($db);
             	$extralabels=$extrafields->fetch_name_optionals_label('product',true);
             	//Get extrafield values
             	$product->fetch_optionals($product->id,$extralabels);
-            	
+
             	foreach($extrafields->attribute_label as $key=>$label)
             	{
             		$productorservice_result_fields=array_merge($productorservice_result_fields,array('options_'.$key => $product->array_options['options_'.$key]));
             	}
-		
+
                 // Create
                 $objectresp = array(
 			    	'result'=>array('result_code'=>'OK', 'result_label'=>''),
@@ -533,7 +533,7 @@ function createProductOrService($authentication,$product)
         }*/
         //var_dump($product['ref_ext']);
         //var_dump($product['lines'][0]['type']);
-        
+
         $extrafields=new ExtraFields($db);
 	$extralabels=$extrafields->fetch_name_optionals_label('product',true);
 	foreach($extrafields->attribute_label as $key=>$label)
@@ -652,7 +652,7 @@ function updateProductOrService($authentication,$product)
         }*/
         //var_dump($product['ref_ext']);
         //var_dump($product['lines'][0]['type']);
-        
+
 	$extrafields=new ExtraFields($db);
 	$extralabels=$extrafields->fetch_name_optionals_label('product',true);
 	foreach($extrafields->attribute_label as $key=>$label)
@@ -965,19 +965,19 @@ function getProductsForCategory($authentication,$id,$lang='')
 		                		'dir' => $pdir,
 		                		'images' => $obj->liste_photos($dir,$nbmax=10)
 							);
-							
+
 							//Retreive all extrafield for thirdsparty
 							// fetch optionals attributes and labels
 							$extrafields=new ExtraFields($db);
 							$extralabels=$extrafields->fetch_name_optionals_label('product',true);
 							//Get extrafield values
 							$product->fetch_optionals($obj->id,$extralabels);
-							
+
 							foreach($extrafields->attribute_label as $key=>$label)
 							{
 								$products[$iProduct]=array_merge($products[$iProduct],array('options_'.$key => $product->array_options['options_'.$key]));
 							}
-							
+
 							$iProduct++;
 						}
 

+ 1 - 1
htdocs/webservices/server_user.php

@@ -299,7 +299,7 @@ $server->register(
  * @param	array		$authentication		Array of authentication information
  * @param	int			$id					Id of object
  * @param	string		$ref				Ref of object
- * @param	ref_ext		$ref_ext			Ref external of object
+ * @param	string		$ref_ext			Ref external of object
  * @return	mixed
  */
 function getUser($authentication,$id,$ref='',$ref_ext='')

Some files were not shown because too many files changed in this diff