diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php
index 71e687e2168d1286846082c36e11c6295d1b2ed4..37a60507d015946fba1a4a7715ad415e4762e7e0 100644
--- a/htdocs/comm/propal/card.php
+++ b/htdocs/comm/propal/card.php
@@ -1070,17 +1070,17 @@ if (empty($reshook))
 
 	// Set project
 	else if ($action == 'classin' && $user->rights->propal->creer) {
-		$object->setProject($_POST['projectid']);
+		$object->setProject(GETPOST('projectid','int'));
 	}
 
 	// Delai de livraison
 	else if ($action == 'setavailability' && $user->rights->propal->creer) {
-		$result = $object->availability($_POST['availability_id']);
+		$result = $object->set_availability($user, GETPOST('availability_id','int'));
 	}
 
 	// Origine de la propale
 	else if ($action == 'setdemandreason' && $user->rights->propal->creer) {
-		$result = $object->demand_reason($_POST['demand_reason_id']);
+		$result = $object->set_demand_reason($user, GETPOST('demand_reason_id','int'));
 	}
 
 	// Conditions de reglement
@@ -1701,10 +1701,10 @@ if ($action == 'create')
 
 
 	// Proposal card
-	
+
 	$linkback = '<a href="' . DOL_URL_ROOT . '/comm/propal/list.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
 
-	
+
 	$morehtmlref='<div class="refidno">';
 	// Ref customer
 	$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->propal->creer, 'string', '', 0, 1);
@@ -1744,17 +1744,17 @@ if ($action == 'create')
         }
     }
     $morehtmlref.='</div>';
-    
-    
+
+
 	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
-	
-    
+
+
     print '<div class="fichecenter">';
     print '<div class="fichehalfleft">';
     print '<div class="underbanner clearboth"></div>';
-    
+
 	print '<table class="border" width="100%">';
-    
+
     // Ref
     /*
 	print '<tr><td>' . $langs->trans('Ref') . '</td><td colspan="5">';
@@ -1784,7 +1784,7 @@ if ($action == 'create')
 	print '</td>';
 	print '</tr>';
     */
-	
+
 	// Company
 	/*
 	print '<tr><td>' . $langs->trans('Company') . '</td><td colspan="5">' . $soc->getNomUrl(1) . '</td>';
@@ -2107,42 +2107,42 @@ if ($action == 'create')
 	include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';
 
 	print '</table>';
-	
+
 	print '</div>';
 	print '<div class="fichehalfright">';
 	print '<div class="ficheaddleft">';
 	print '<div class="underbanner clearboth"></div>';
-	
+
     print '<table class="border centpercent">';
-    
+
     if (!empty($conf->multicurrency->enabled) && ($object->multicurrency_code != $conf->currency))
     {
         // Multicurrency Amount HT
         print '<tr><td class="titlefieldmiddle">' . fieldLabel('MulticurrencyAmountHT','multicurrency_total_ht') . '</td>';
         print '<td class="nowrap">' . price($object->multicurrency_total_ht, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . '</td>';
         print '</tr>';
-    
+
         // Multicurrency Amount VAT
         print '<tr><td>' . fieldLabel('MulticurrencyAmountVAT','multicurrency_total_tva') . '</td>';
         print '<td class="nowrap">' . price($object->multicurrency_total_tva, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . '</td>';
         print '</tr>';
-    
+
         // Multicurrency Amount TTC
         print '<tr><td>' . fieldLabel('MulticurrencyAmountTTC','multicurrency_total_ttc') . '</td>';
         print '<td class="nowrap">' . price($object->multicurrency_total_ttc, '', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)) . '</td>';
         print '</tr>';
     }
-        
+
 	// Amount HT
 	print '<tr><td class="titlefieldmiddle">' . $langs->trans('AmountHT') . '</td>';
 	print '<td class="nowrap">' . price($object->total_ht, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
 	print '</tr>';
-	
+
 	// Amount VAT
 	print '<tr><td>' . $langs->trans('AmountVAT') . '</td>';
 	print '<td class="nowrap">' . price($object->total_tva, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
 	print '</tr>';
-	
+
 	// Amount Local Taxes
 	if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) 	// Localtax1
 	{
@@ -2156,27 +2156,27 @@ if ($action == 'create')
 	    print '<td class="nowrap">' . price($object->total_localtax2, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
 	    print '</tr>';
 	}
-	
+
 	// Amount TTC
 	print '<tr><td>' . $langs->trans('AmountTTC') . '</td>';
 	print '<td class="nowrap">' . price($object->total_ttc, '', $langs, 0, - 1, - 1, $conf->currency) . '</td>';
 	print '</tr>';
-	
+
 	// Statut
 	//print '<tr><td height="10">' . $langs->trans('Status') . '</td><td align="left" colspan="2">' . $object->getLibStatut(4) . '</td></tr>';
-	
+
 	print '</table>';
-	
+
 	// Margin Infos
 	if (! empty($conf->margin->enabled))
 	{
 	    $formmargin->displayMarginInfos($object);
 	}
-	
+
 	print '</div>';
 	print '</div>';
 	print '</div>';
-	
+
 	print '<div class="clearboth"></div><br>';
 
 	if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
@@ -2232,7 +2232,7 @@ if ($action == 'create')
 
 	print '</table>';
     print '</div>';
-    
+
 	print "</form>\n";
 
 	dol_fiche_end();
@@ -2391,7 +2391,7 @@ if ($action == 'create')
 		// Show links to link elements
 		$linktoelem = $form->showLinkToObjectBlock($object, null, array('propal'));
 		$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
-		
+
 
 		print '</div><div class="fichehalfright"><div class="ficheaddleft">';
 
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index f03242a8868d885bacba8720c37b018b816c4c3c..b9f5e3be6ebe16fd326f2e5e1bf5367055cad5fa 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -50,7 +50,7 @@ class Propal extends CommonObject
     public $fk_element='fk_propal';
     protected $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     public $picto='propal';
-    
+
     /**
      * {@inheritdoc}
      */
@@ -503,7 +503,7 @@ class Propal extends CommonObject
             $this->line->label=$label;
             $this->line->desc=$desc;
             $this->line->qty=$qty;
-            
+
 			$this->line->vat_src_code=$vat_src_code;
             $this->line->tva_tx=$txtva;
             $this->line->localtax1_tx=$txlocaltax1;
@@ -638,7 +638,7 @@ class Propal extends CommonObject
             // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
 
             $localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
-            
+
             // Clean vat code
             $vat_src_code='';
             if (preg_match('/\((.*)\)/', $txtva, $reg))
@@ -1180,7 +1180,7 @@ class Propal extends CommonObject
         $clonedObj->ref = $modPropale->getNextValue($objsoc,$clonedObj);
 
         // Create clone
-        
+
         $result=$clonedObj->create($user);
         if ($result < 0) $error++;
         else
@@ -1541,7 +1541,7 @@ class Propal extends CommonObject
             dol_syslog(get_class($this)."::valid action abandonned: already validated", LOG_WARNING);
             return 0;
         }
-        
+
         if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->creer))
        	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->propal->propal_advance->validate))))
         {
@@ -1551,7 +1551,7 @@ class Propal extends CommonObject
         }
 
         $now=dol_now();
-            
+
         $this->db->begin();
 
         // Numbering module definition
@@ -1839,7 +1839,7 @@ class Propal extends CommonObject
      */
     function set_availability($user, $id, $notrigger=0)
     {
-        if (! empty($user->rights->propal->creer))
+        if (! empty($user->rights->propal->creer) && $this->statut >= self::STATUS_DRAFT)
         {
         	$error=0;
 
@@ -1849,7 +1849,7 @@ class Propal extends CommonObject
             $sql.= " SET fk_availability = '".$id."'";
             $sql.= " WHERE rowid = ".$this->id;
 
-            dol_syslog(__METHOD__, LOG_DEBUG);
+            dol_syslog(__METHOD__.' availability('.$availability_id.')', LOG_DEBUG);
             $resql=$this->db->query($sql);
             if (!$resql)
             {
@@ -1861,6 +1861,7 @@ class Propal extends CommonObject
             {
             	$this->oldcopy= clone $this;
             	$this->fk_availability = $id;
+            	$this->availability_id = $availability_id;
             }
 
             if (! $notrigger && empty($error))
@@ -1887,6 +1888,14 @@ class Propal extends CommonObject
             	return -1*$error;
             }
         }
+        else
+        {
+        	$error_str='Propal status do not meet requirement '.$this->statut;
+        	dol_syslog(__METHOD__.$error_str, LOG_ERR);
+        	$this->error=$error_str;
+        	$this->errors[]= $this->error;
+        	return -2;
+        }
     }
 
     /**
@@ -1899,14 +1908,14 @@ class Propal extends CommonObject
      */
     function set_demand_reason($user, $id, $notrigger=0)
     {
-        if (! empty($user->rights->propal->creer))
+        if (! empty($user->rights->propal->creer) && $this->statut >= self::STATUS_DRAFT)
         {
         	$error=0;
 
         	$this->db->begin();
 
             $sql = "UPDATE ".MAIN_DB_PREFIX."propal ";
-            $sql.= " SET fk_input_reason = '".$id."'";
+            $sql.= " SET fk_input_reason = ".$id;
             $sql.= " WHERE rowid = ".$this->id;
 
             dol_syslog(__METHOD__, LOG_DEBUG);
@@ -1922,6 +1931,7 @@ class Propal extends CommonObject
             {
             	$this->oldcopy= clone $this;
             	$this->fk_input_reason = $id;
+            	$this->demand_reason_id = $id;
             }
 
 
@@ -1949,6 +1959,14 @@ class Propal extends CommonObject
             	return -1*$error;
             }
         }
+        else
+        {
+        	$error_str='Propal status do not meet requirement '.$this->statut;
+        	dol_syslog(__METHOD__.$error_str, LOG_ERR);
+        	$this->error=$error_str;
+        	$this->errors[]= $this->error;
+        	return -2;
+        }
     }
 
     /**
@@ -2406,7 +2424,7 @@ class Propal extends CommonObject
         	$this->statut = self::STATUS_DRAFT;
             $this->brouillon = 1;
         }
-        
+
         if (! $notrigger && empty($error))
         {
         	// Call trigger
@@ -2733,6 +2751,7 @@ class Propal extends CommonObject
      *  @param	int	$availability_id	Id of new delivery time
      * 	@param	int	$notrigger			1=Does not execute triggers, 0= execute triggers
      *  @return int                  	>0 if OK, <0 if KO
+     *  @deprecated  use set_availability
      */
     function availability($availability_id, $notrigger=0)
     {
@@ -2753,7 +2772,7 @@ class Propal extends CommonObject
             	$this->errors[]=$this->db->error();
             	$error++;
             }
-            
+
             if (! $error)
             {
             	$this->oldcopy= clone $this;
@@ -2800,6 +2819,7 @@ class Propal extends CommonObject
      *	@param	int $demand_reason_id 	Id of new source demand
      * 	@param	int	$notrigger			1=Does not execute triggers, 0= execute triggers
      *	@return int						>0 si ok, <0 si ko
+     *	@deprecated use set_demand_reason
      */
     function demand_reason($demand_reason_id, $notrigger=0)
     {
@@ -2820,7 +2840,7 @@ class Propal extends CommonObject
             	$this->errors[]=$this->db->error();
             	$error++;
             }
-            
+
             if (! $error)
             {
             	$this->oldcopy= clone $this;
@@ -3241,7 +3261,7 @@ class Propal extends CommonObject
         global $langs, $conf, $user;
 
         if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
-        
+
         $result='';
         $label='';
         $url='';
@@ -3272,7 +3292,7 @@ class Propal extends CommonObject
                 $url = DOL_URL_ROOT.'/comm/propal/document.php?id='.$this->id. $get_params;
             }
         }
-        
+
         $linkclose='';
         if (empty($notooltip) && $user->rights->propal->lire)
         {
@@ -3284,9 +3304,9 @@ class Propal extends CommonObject
             $linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"';
             $linkclose.=' class="classfortooltip"';
         }
-        
+
         $linkstart = '<a href="'.$url.'"';
-        $linkstart.=$linkclose.'>';        
+        $linkstart.=$linkclose.'>';
         $linkend='</a>';
 
         if ($withpicto)
@@ -3350,7 +3370,7 @@ class Propal extends CommonObject
                 $this->lines[$i]->fk_remise_except 	= $obj->fk_remise_except;
                 $this->lines[$i]->remise_percent	= $obj->remise_percent;
 
-                $this->lines[$i]->vat_src_code      = $obj->vat_src_code; 
+                $this->lines[$i]->vat_src_code      = $obj->vat_src_code;
                 $this->lines[$i]->tva_tx			= $obj->tva_tx;
                 $this->lines[$i]->info_bits			= $obj->info_bits;
                 $this->lines[$i]->total_ht			= $obj->total_ht;
@@ -3684,7 +3704,7 @@ class PropaleLigne  extends CommonObjectLine
         if (empty($this->multicurrency_total_ht))  $this->multicurrency_total_ht=0;
         if (empty($this->multicurrency_total_tva)) $this->multicurrency_total_tva=0;
         if (empty($this->multicurrency_total_ttc)) $this->multicurrency_total_ttc=0;
-        
+
        // if buy price not defined, define buyprice as configured in margin admin
 		if ($this->pa_ht == 0 && $pa_ht_isemptystring)
 		{
diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php
index 83d4535660dbb41d3d86c581a9bb628dc8500ec7..176279643625383618708d6103a0d2745ed00a98 100644
--- a/htdocs/compta/facture/fiche-rec.php
+++ b/htdocs/compta/facture/fiche-rec.php
@@ -135,14 +135,14 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
 if (empty($reshook))
 {
     if (GETPOST('cancel')) $action='';
-    
+
     // Set note
     include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php';	// Must be include, not include_once
-    
+
     include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';		// Must be include, not include_once
-    
+
     include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';	// Must be include, not include_once
-    
+
     // Do we click on purge search criteria ?
     if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All test are required to be compatible with all browsers
     {
@@ -160,7 +160,7 @@ if (empty($reshook))
         $search_frequency='';
         $search_array_options=array();
     }
-    
+
     // Create predefined invoice
     if ($action == 'add')
     {
@@ -170,7 +170,7 @@ if (empty($reshook))
     		$action = "create";
     		$error++;
     	}
-    
+
     	$frequency=GETPOST('frequency', 'int');
     	$reyear=GETPOST('reyear');
     	$remonth=GETPOST('remonth');
@@ -179,14 +179,14 @@ if (empty($reshook))
     	$remin=GETPOST('remin');
     	$nb_gen_max=GETPOST('nb_gen_max', 'int');
     	//if (empty($nb_gen_max)) $nb_gen_max =0;
-    	
+
     	if (GETPOST('frequency'))
     	{
-    		if (empty($reyear) || empty($remonth) || empty($reday)) 
+    		if (empty($reyear) || empty($remonth) || empty($reday))
     		{
     			setEventMessages($langs->transnoentities("ErrorFieldRequired",$langs->trans("Date")), null, 'errors');
     			$action = "create";
-    			$error++;	
+    			$error++;
     		}
     		if ($nb_gen_max === '')
     		{
@@ -195,47 +195,47 @@ if (empty($reshook))
     			$error++;
     		}
     	}
-    
+
     	if (! $error)
     	{
     		$object->titre = GETPOST('titre', 'alpha');
     		$object->note_private = GETPOST('note_private');
     		$object->note_public  = GETPOST('note_public');
     		$object->usenewprice = GETPOST('usenewprice');
-    		
+
     		$object->frequency = $frequency;
     		$object->unit_frequency = GETPOST('unit_frequency', 'alpha');
     		$object->nb_gen_max = $nb_gen_max;
     		$object->auto_validate = GETPOST('auto_validate', 'int');
-    		
+
     		$object->fk_project = $projectid;
-    		
+
     		$date_next_execution = dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
     		$object->date_when = $date_next_execution;
-    
+
     		// Get first contract linked to invoice used to generate template
     		if ($id > 0)
     		{
     			$srcObject = new Facture($db);
     			$srcObject->fetch(GETPOST('facid','int'));
-    
+
     			$srcObject->fetchObjectLinked();
-    
+
     			if (! empty($srcObject->linkedObjectsIds['contrat']))
     			{
     				$contractidid = reset($srcObject->linkedObjectsIds['contrat']);
-    
+
     				$object->origin = 'contrat';
     				$object->origin_id = $contractidid;
     				$object->linked_objects[$object->origin] = $object->origin_id;
     			}
     		}
-    		
+
     		$db->begin();
-    
+
     		$oldinvoice = new Facture($db);
     		$oldinvoice->fetch($id);
-    		
+
     		$result = $object->create($user, $oldinvoice->id);
     		if ($result > 0)
     		{
@@ -253,25 +253,25 @@ if (empty($reshook))
     			setEventMessages($object->error, $object->errors, 'errors');
     			$action = "create";
     		}
-    			
+
     		if (! $error)
     		{
     			$db->commit();
-    			
+
     			header("Location: " . $_SERVER['PHP_SELF'] . '?facid=' . $object->id);
        			exit;
     		}
     		else
     		{
     			$db->rollback();
-    
+
     			$error++;
     			setEventMessages($object->error, $object->errors, 'errors');
     			$action = "create";
     		}
     	}
     }
-    
+
     // Delete
     if ($action == 'confirm_deleteinvoice' && $confirm == 'yes' && $user->rights->facture->supprimer)
     {
@@ -279,14 +279,14 @@ if (empty($reshook))
     	header("Location: " . $_SERVER['PHP_SELF'] );
     	exit;
     }
-    
-    
+
+
     // Update field
     // Set condition
     if ($action == 'setconditions' && $user->rights->facture->creer)
     {
     	$result=$object->setPaymentTerms(GETPOST('cond_reglement_id', 'int'));
-    
+
     }
     // Set mode
     elseif ($action == 'setmode' && $user->rights->facture->creer)
@@ -336,24 +336,24 @@ if (empty($reshook))
     {
     	$object->setAutoValidate(GETPOST('auto_validate', 'int'));
     }
-    
+
     // Delete line
     if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->facture->creer)
     {
     	$object->fetch($id);
     	$object->fetch_thirdparty();
-    
+
     	$db->begin();
-    
+
     	$line=new FactureLigneRec($db);
-    
+
     	// For triggers
     	$line->id = $lineid;
-    
+
     	if ($line->delete() > 0)
     	{
     		$result=$object->update_price(1);
-    
+
     		if ($result > 0)
     		{
     		    $db->commit();
@@ -371,13 +371,13 @@ if (empty($reshook))
     		setEventMessages($line->error, $line->errors, 'errors');
     	}
     }
-    
+
     // Add a new line
     if ($action == 'addline' && $user->rights->facture->creer)
     {
     	$langs->load('errors');
     	$error = 0;
-    
+
     	// Set if we used free entry or predefined product
     	$predef='';
     	$product_desc=(GETPOST('dp_desc')?GETPOST('dp_desc'):'');
@@ -392,10 +392,10 @@ if (empty($reshook))
     		$idprod=GETPOST('idprod', 'int');
     		$tva_tx = '';
     	}
-    
+
     	$qty = GETPOST('qty' . $predef);
     	$remise_percent = GETPOST('remise_percent' . $predef);
-    
+
     	// Extrafields
     	$extrafieldsline = new ExtraFields($db);
     	$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
@@ -408,7 +408,7 @@ if (empty($reshook))
     			unset($_POST["options_" . $key . $predef]);
     		}
     	}
-    
+
     	if (empty($idprod) && ($price_ht < 0) && ($qty < 0)) {
     		setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPriceHT'), $langs->transnoentitiesnoconv('Qty')), null, 'errors');
     		$error ++;
@@ -435,7 +435,7 @@ if (empty($reshook))
     		setEventMessages($langs->trans('ErrorQtyForCustomerInvoiceCantBeNegative'), null, 'errors');
     		$error ++;
     	}
-        
+
         if (! $error && ($qty >= 0) && (! empty($product_desc) || ! empty($idprod)))
         {
     	$ret = $object->fetch($id);
@@ -444,16 +444,16 @@ if (empty($reshook))
     		exit();
     	}
     	$ret = $object->fetch_thirdparty();
-    
+
     	// Clean parameters
     	$date_start = dol_mktime(GETPOST('date_start' . $predef . 'hour'), GETPOST('date_start' . $predef . 'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start' . $predef . 'month'), GETPOST('date_start' . $predef . 'day'), GETPOST('date_start' . $predef . 'year'));
     	$date_end = dol_mktime(GETPOST('date_end' . $predef . 'hour'), GETPOST('date_end' . $predef . 'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end' . $predef . 'month'), GETPOST('date_end' . $predef . 'day'), GETPOST('date_end' . $predef . 'year'));
     	$price_base_type = (GETPOST('price_base_type', 'alpha') ? GETPOST('price_base_type', 'alpha') : 'HT');
-    
+
     	// Define special_code for special lines
     	$special_code = 0;
     	// if (empty($_POST['qty'])) $special_code=3; // Options should not exists on invoices
-    
+
     	// Ecrase $pu par celui du produit
     	// Ecrase $desc par celui du produit
     	// Ecrase $txtva par celui du produit
@@ -463,19 +463,19 @@ if (empty($reshook))
             {
     		$prod = new Product($db);
     		$prod->fetch($idprod);
-    
+
     		$label = ((GETPOST('product_label') && GETPOST('product_label') != $prod->label) ? GETPOST('product_label') : '');
-    
+
     		// Update if prices fields are defined
     		$tva_tx = get_default_tva($mysoc, $object->thirdparty, $prod->id);
     		$tva_npr = get_default_npr($mysoc, $object->thirdparty, $prod->id);
     		if (empty($tva_tx)) $tva_npr=0;
-    
+
     		$pu_ht = $prod->price;
     		$pu_ttc = $prod->price_ttc;
     		$price_min = $prod->price_min;
     		$price_base_type = $prod->price_base_type;
-    
+
     		// We define price for product
     		if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($object->thirdparty->price_level))
     		{
@@ -493,11 +493,11 @@ if (empty($reshook))
     		elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
     		{
     			require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php';
-    
+
     			$prodcustprice = new Productcustomerprice($db);
-    
+
     			$filter = array('t.fk_product' => $prod->id,'t.fk_soc' => $object->thirdparty->id);
-    
+
     			$result = $prodcustprice->fetch_all('', '', 0, 0, $filter);
     			if ($result)
     			{
@@ -510,7 +510,7 @@ if (empty($reshook))
     				}
     			}
     		}
-    
+
     		// if price ht was forced (ie: from gui when calculated by margin rate and cost price)
     		if (! empty($price_ht))
     		{
@@ -530,11 +530,11 @@ if (empty($reshook))
     			    $pu_ttc = price2num($pu_ht * (1 + ($tva_tx / 100)), 'MU');
     			}
     		}
-    
+
     		$desc = '';
-    
+
     		// Define output language
-    		if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) 
+    		if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE))
     		{
     			$outputlangs = $langs;
     			$newlang = '';
@@ -547,16 +547,16 @@ if (empty($reshook))
     				$outputlangs = new Translate("", $conf);
     				$outputlangs->setDefaultLang($newlang);
     			}
-    
+
     			$desc = (! empty($prod->multilangs [$outputlangs->defaultlang] ["description"])) ? $prod->multilangs [$outputlangs->defaultlang] ["description"] : $prod->description;
     		}
     		else
     		{
     			$desc = $prod->description;
     		}
-    
+
                 	$desc = dol_concatdesc($desc, $product_desc);
-    
+
     		// Add custom code and origin country into description
     		if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code)))
     		{
@@ -569,13 +569,13 @@ if (empty($reshook))
     				$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
     			$tmptxt .= ')';
     			$desc = dol_concatdesc($desc, $tmptxt);
-    			
+
     		}
-    
+
     		$type = $prod->type;
     		$fk_unit = $prod->fk_unit;
-    		
-    	} 
+
+    	}
     	else
     	{
     		$pu_ht = price2num($price_ht, 'MU');
@@ -586,21 +586,21 @@ if (empty($reshook))
     		$label = (GETPOST('product_label') ? GETPOST('product_label') : '');
     		$desc = $product_desc;
     		$type = GETPOST('type');
-    		$fk_unit= GETPOST('units', 'alpha');	
+    		$fk_unit= GETPOST('units', 'alpha');
     	}
-    
+
     	// Margin
     	$fournprice = price2num(GETPOST('fournprice' . $predef) ? GETPOST('fournprice' . $predef) : '');
     	$buyingprice = price2num(GETPOST('buying_price' . $predef) != '' ? GETPOST('buying_price' . $predef) : '');    // If buying_price is '0', we must keep this value
-    
+
     	// Local Taxes
     	$localtax1_tx = get_localtax($tva_tx, 1, $object->thirdparty, $mysoc, $tva_npr);
     	$localtax2_tx = get_localtax($tva_tx, 2, $object->thirdparty, $mysoc, $tva_npr);
-    
+
     	$info_bits = 0;
     	if ($tva_npr)
     		$info_bits |= 0x01;
-    
+
     	if (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min)))
     	{
     		$mesg = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
@@ -610,7 +610,7 @@ if (empty($reshook))
     	{
     		// Insert line
     		$result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $idprod, $remise_percent, $price_base_type, $info_bits, '', $pu_ttc, $type, - 1, $special_code, $label, $fk_unit);
-    
+
     		if ($result > 0)
     		{
     			/*if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
@@ -626,14 +626,14 @@ if (empty($reshook))
     			    }
     			    $model=$object->modelpdf;
     			    $ret = $object->fetch($id); // Reload to get new records
-    
+
     			    $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
     			    if ($result < 0) setEventMessages($object->error, $object->errors, 'errors');
     			}*/
     			$object->fetch($object->id);    // Reload lines
-    
+
     			unset($_POST['prod_entry_mode']);
-    
+
     			unset($_POST['qty']);
     			unset($_POST['type']);
     			unset($_POST['remise_percent']);
@@ -651,7 +651,7 @@ if (empty($reshook))
     			unset($_POST['dp_desc']);
     			unset($_POST['idprod']);
     			unset($_POST['units']);
-    
+
     			unset($_POST['date_starthour']);
     			unset($_POST['date_startmin']);
     			unset($_POST['date_startsec']);
@@ -664,7 +664,7 @@ if (empty($reshook))
     			unset($_POST['date_endday']);
     			unset($_POST['date_endmonth']);
     			unset($_POST['date_endyear']);
-    
+
     			unset($_POST['situations']);
     			unset($_POST['progress']);
     		}
@@ -672,17 +672,17 @@ if (empty($reshook))
     		{
     			setEventMessages($object->error, $object->errors, 'errors');
     		}
-    
-    		$action = '';		
+
+    		$action = '';
     	}
         }
     }
-    
+
     elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('cancel'))
     {
     	if (! $object->fetch($id) > 0)	dol_print_error($db);
     	$object->fetch_thirdparty();
-    
+
     	// Clean parameters
     	$date_start = '';
     	$date_end = '';
@@ -692,27 +692,27 @@ if (empty($reshook))
     	$pu_ht = GETPOST('price_ht');
     	$vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
     	$qty = GETPOST('qty');
-    
+
     	// Define info_bits
     	$info_bits = 0;
     	if (preg_match('/\*/', $vat_rate))
             $info_bits |= 0x01;
-    
+
             // Define vat_rate
             $vat_rate = str_replace('*', '', $vat_rate);
             $localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty);
             $localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty);
-    
+
             // Add buying price
             $fournprice = price2num(GETPOST('fournprice') ? GETPOST('fournprice') : '');
             $buyingprice = price2num(GETPOST('buying_price') != '' ? GETPOST('buying_price') : '');       // If buying_price is '0', we muste keep this value
-    
+
             // Extrafields
             $extrafieldsline = new ExtraFields($db);
             $extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
             $array_options = $extrafieldsline->getOptionalsFromPost($extralabelsline);
             // Unset extrafield
-            if (is_array($extralabelsline)) 
+            if (is_array($extralabelsline))
     	    {
                 // Get extra fields
                 foreach ($extralabelsline as $key => $value)
@@ -720,15 +720,15 @@ if (empty($reshook))
     		         unset($_POST["options_" . $key]);
                 }
             }
-    
+
             // Define special_code for special lines
             $special_code=GETPOST('special_code');
             if (! GETPOST('qty')) $special_code=3;
-    
+
             /*$line = new FactureLigne($db);
             $line->fetch(GETPOST('lineid'));
             $percent = $line->get_prev_progress($object->id);
-    
+
             if (GETPOST('progress') < $percent)
             {
                 $mesg = '<div class="warning">' . $langs->trans("CantBeLessThanMinPercent") . '</div>';
@@ -736,22 +736,22 @@ if (empty($reshook))
                 $error++;
                 $result = -1;
             }*/
-    
+
             // Check minimum price
             $productid = GETPOST('productid', 'int');
             if (! empty($productid))
             {
     		$product = new Product($db);
     		$product->fetch($productid);
-    
+
     		$type = $product->type;
-    
+
     		$price_min = $product->price_min;
     		if (! empty($conf->global->PRODUIT_MULTIPRICES) && ! empty($object->thirdparty->price_level))
                     $price_min = $product->multiprices_min [$object->thirdparty->price_level];
-    
+
                     $label = ((GETPOST('update_label') && GETPOST('product_label')) ? GETPOST('product_label') : '');
-    
+
                     // Check price is not lower than minimum (check is done only for standard or replacement invoices)
                     if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) && $price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min))) {
                         setEventMessages($langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), null, 'errors');
@@ -760,7 +760,7 @@ if (empty($reshook))
             } else {
                 $type = GETPOST('type');
                 $label = (GETPOST('product_label') ? GETPOST('product_label') : '');
-    
+
                 // Check parameters
                 if (GETPOST('type') < 0) {
                     setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type")), null, 'errors');
@@ -772,14 +772,14 @@ if (empty($reshook))
                 setEventMessages($langs->trans('ErrorQtyForCustomerInvoiceCantBeNegative'), null, 'errors');
                 $error ++;
             }
-    
+
             // Update line
             if (! $error)
     	{
     		$result = $object->updateline(
     			GETPOST('lineid'),
     			$description,
-    			$pu_ht, 
+    			$pu_ht,
     			$qty,
                     	$vat_rate,
     			GETPOST('productid'),
@@ -787,14 +787,14 @@ if (empty($reshook))
     			'HT',
     			$info_bits,
     			0,
-    			0, 
+    			0,
     			$type,
     			0,
-    			$special_code, 
+    			$special_code,
     			$label,
     			GETPOST('units')
     		);
-    
+
     		if ($result >= 0)
     		{
                     /*if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
@@ -809,13 +809,13 @@ if (empty($reshook))
                                     $outputlangs = new Translate("", $conf);
                                     $outputlangs->setDefaultLang($newlang);
                                 }
-    
+
                                 $ret = $object->fetch($id); // Reload to get new records
                                 $object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
                     }*/
-    
+
     			$object->fetch($object->id);    // Reload lines
-    
+
     			unset($_POST['qty']);
     			unset($_POST['type']);
     			unset($_POST['productid']);
@@ -831,11 +831,11 @@ if (empty($reshook))
     			unset($_POST['buying_price']);
     			unset($_POST['np_marginRate']);
     			unset($_POST['np_markRate']);
-    
+
     			unset($_POST['dp_desc']);
     			unset($_POST['idprod']);
     			unset($_POST['units']);
-    
+
     			unset($_POST['date_starthour']);
     			unset($_POST['date_startmin']);
     			unset($_POST['date_startsec']);
@@ -848,7 +848,7 @@ if (empty($reshook))
     			unset($_POST['date_endday']);
     			unset($_POST['date_endmonth']);
     			unset($_POST['date_endyear']);
-    
+
     			unset($_POST['situations']);
     			unset($_POST['progress']);
     		}
@@ -875,7 +875,7 @@ $companystatic = new Societe($db);
 $now = dol_now();
 $tmparray=dol_getdate($now);
 $today = dol_mktime(23,59,59,$tmparray['mon'],$tmparray['mday'],$tmparray['year']);   // Today is last second of current day
-	  
+
 
 /*
  * Create mode
@@ -887,11 +887,11 @@ if ($action == 'create')
 	$object = new Facture($db);   // Source invoice
 	$product_static = new Product($db);
 	$formproject = new FormProjets($db);
-	
+
 	if ($object->fetch($id, $ref) > 0)
 	{
 		$result = $object->getLinesArray();
-				
+
 		print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
 		print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
 		print '<input type="hidden" name="action" value="add">';
@@ -933,14 +933,14 @@ if ($action == 'create')
 		    '__INVOICE_YEAR__' =>  $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($object->date,'%Y').')',
 		    '__INVOICE_NEXT_YEAR__' => $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($object->date, 1, 'y'),'%Y').')'
 		);
-		
+
 		$htmltext = '<i>'.$langs->trans("FollowingConstantsWillBeSubstituted").':<br>';
 		foreach($substitutionarray as $key => $val)
 		{
 		    $htmltext.=$key.' = '.$langs->trans($val).'<br>';
 		}
 		$htmltext.='</i>';
-		
+
 		// Public note
 		print '<tr>';
 		print '<td class="border tdtop">';
@@ -949,7 +949,7 @@ if ($action == 'create')
 		print '<td valign="top" colspan="2">';
 		$doleditor = new DolEditor('note_public', $note_public, '', 80, 'dolibarr_notes', 'In', 0, false, true, ROWS_3, '90%');
         print $doleditor->Create(1);
-		
+
 		// Private note
 		if (empty($user->societe_id))
 		{
@@ -963,7 +963,7 @@ if ($action == 'create')
 		    // print '<textarea name="note_private" wrap="soft" cols="70" rows="'.ROWS_3.'">'.$note_private.'.</textarea>
 		    print '</td></tr>';
 		}
-		
+
 		// Author
 		print "<tr><td>".$langs->trans("Author")."</td><td>".$user->getFullName($langs)."</td></tr>";
 
@@ -983,11 +983,11 @@ if ($action == 'create')
 			$projectid = GETPOST('projectid')?GETPOST('projectid'):$object->fk_project;
 			$langs->load('projects');
 			print '<tr><td>' . $langs->trans('Project') . '</td><td>';
-			$numprojet = $formproject->select_projects($socid, $projectid, 'projectid', 0);
-			print ' &nbsp; <a href="'.DOL_URL_ROOT.'/projet/card.php?socid=' . $soc->id . '&action=create&status=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create&socid='.$soc->id).'">' . $langs->trans("AddProject") . '</a>';
+			$numprojet = $formproject->select_projects($socid, $projectid, 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 0, $forceaddid=0, $morecss='');
+			print ' &nbsp; <a href="'.DOL_URL_ROOT.'/projet/card.php?socid=' . $object->thirdparty->id . '&action=create&status=1&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create&socid='.$object->thirdparty->id.(!empty($id)?'&id='.$id:'')).'">' . $langs->trans("AddProject") . '</a>';
 			print '</td></tr>';
 		}
-    	
+
 		// Bank account
 		if ($object->fk_account > 0)
 		{
@@ -1000,24 +1000,24 @@ if ($action == 'create')
 
 		print '<br><br>';
 
-		
+
 		// Autogeneration
 		$title = $langs->trans("Recurrence");
 		print load_fiche_titre($title, '', 'calendar');
-		
+
 		print '<table class="border" width="100%">';
-		
+
 		// Frequency
 		print '<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans("Frequency"), $langs->transnoentitiesnoconv('toolTipFrequency'))."</td><td>";
 		print "<input type='text' name='frequency' value='".GETPOST('frequency', 'int')."' size='4' />&nbsp;".$form->selectarray('unit_frequency', array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')), (GETPOST('unit_frequency')?GETPOST('unit_frequency'):'m'));
 		print "</td></tr>";
-		
+
 		// First date of execution for cron
 		print "<tr><td>".$langs->trans('NextDateToExecution')."</td><td>";
 		$date_next_execution = isset($date_next_execution) ? $date_next_execution : (GETPOST('remonth') ? dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')) : -1);
 		print $form->select_date($date_next_execution, '', 1, 1, '', "add", 1, 1, 1);
 		print "</td></tr>";
-		
+
 		// Number max of generation
 		print "<tr><td>".$langs->trans("MaxPeriodNumber")."</td><td>";
 		print '<input type="text" name="nb_gen_max" value="'.GETPOST('nb_gen_max').'" size="5" />';
@@ -1053,9 +1053,9 @@ if ($action == 'create')
 		    $disableremove=1;
 		    $ret = $object->printObjectLines('', $mysoc, $soc, $lineid, 0);      // No date selector for template invoice
 		}
-		
+
 		print "</table>\n";
-				
+
 		print '</td></tr>';
 
 		if ($flag_price_may_change)
@@ -1102,10 +1102,10 @@ else
 		}
 
 		print $formconfirm;
-    	
+
 		$author = new User($db);
 		$author->fetch($object->user_author);
-		
+
 		$head=array();
 		$h=0;
 		$head[$h][0] = $_SERVER["PHP_SELF"].'?id='.$object->id;
@@ -1115,13 +1115,13 @@ else
 		dol_fiche_head($head, 'card', $langs->trans("RepeatableInvoice"),0,'bill');	// Add a div
 
 		// Recurring invoice content
-		
+
 		$linkback = '<a href="' . DOL_URL_ROOT . '/compta/facture/fiche-rec.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
-		
+
 		$morehtmlref='';
 		if ($action != 'editref') $morehtmlref.=$form->editfieldkey($object->ref, 'ref', $object->ref, $object, $user->rights->facture->creer, '', '', 0, 2);
 		else $morehtmlref.= $form->editfieldval('', 'ref', $object->ref, $object, $user->rights->facture->creer, 'string');
-		
+
     	$morehtmlref.='<div class="refidno">';
     	// Ref customer
     	//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->facture->creer, 'string', '', 0, 1);
@@ -1161,15 +1161,15 @@ else
     	    }
     	}
     	$morehtmlref.='</div>';
-    	
+
 	    dol_banner_tab($object, 'ref', $linkback, 1, 'titre', 'none', $morehtmlref, '', 0, '', $morehtmlright);
-	    
+
     	print '<div class="fichecenter">';
     	print '<div class="fichehalfleft">';
     	print '<div class="underbanner clearboth"></div>';
-	
+
 	    print '<table class="border" width="100%">';
-		
+
 		print '<tr><td class="titlefield">'.$langs->trans("Author").'</td><td colspan="3">'.$author->getFullName($langs)."</td></tr>";
 
 		print '<tr><td>'.$langs->trans("AmountHT").'</td>';
@@ -1192,10 +1192,10 @@ else
 		print '</td><td colspan="3">';
 		if ($object->type != Facture::TYPE_CREDIT_NOTE)
 		{
-			if ($action == 'editconditions') 
+			if ($action == 'editconditions')
 			{
 				$form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->cond_reglement_id, 'cond_reglement_id');
-			} 
+			}
 			else
 			{
 				$form->form_conditions_reglement($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $object->cond_reglement_id, 'none');
@@ -1240,14 +1240,14 @@ else
 		    '__INVOICE_YEAR__' =>  $langs->trans("PreviousYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date($dateexample,'%Y').')',
 		    '__INVOICE_NEXT_YEAR__' => $langs->trans("NextYearOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, 1, 'y'),'%Y').')'
 		);
-		
+
 		$htmltext = '<i>'.$langs->trans("FollowingConstantsWillBeSubstituted").':<br>';
 		foreach($substitutionarray as $key => $val)
 		{
 		    $htmltext.=$key.' = '.$langs->trans($val).'<br>';
 		}
 		$htmltext.='</i>';
-		
+
 		// Note public
 		print '<tr><td>';
 		print $form->editfieldkey($form->textwithpicto($langs->trans('NotePublic'), $htmltext), 'note_public', $object->note_public, $object, $user->rights->facture->creer);
@@ -1255,7 +1255,7 @@ else
 		print $form->editfieldval($langs->trans("NotePublic"), 'note_public', $object->note_public, $object, $user->rights->facture->creer, 'textarea:'.ROWS_4.':60');
 		print '</td>';
 		print '</tr>';
-		
+
 		// Note private
 		print '<tr><td>';
 		print $form->editfieldkey($form->textwithpicto($langs->trans("NotePrivate"), $htmltext), 'note_private', $object->note_private, $object, $user->rights->facture->creer);
@@ -1285,20 +1285,20 @@ else
 		print '</tr>';
 
     	print '</table>';
-    	
+
     	print '</div>';
     	print '<div class="fichehalfright">';
     	print '<div class="ficheaddleft">';
     	print '<div class="underbanner clearboth"></div>';
-    	
+
     	print '<table class="border centpercent">';
-		
+
 		/*
 		 * Recurrence
 		 */
 		$title = $langs->trans("Recurrence");
 		print load_fiche_titre($title, '', 'calendar');
-		
+
 		print '<table class="border" width="100%">';
 
 		// if "frequency" is empty or = 0, the reccurence is disabled
@@ -1322,7 +1322,7 @@ else
 			print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
 			print '</tr></table></form>';
 		}
-		else 
+		else
 		{
 		    	if ($object->frequency > 0)
 		    	{
@@ -1334,7 +1334,7 @@ else
 			}
 		}
 		print '</td></tr>';
-		
+
 		// Date when
 		print '<tr><td>';
 		if ($action == 'date_when' || $object->frequency > 0)
@@ -1352,7 +1352,7 @@ else
 		}
 		print '</td>';
 		print '</tr>';
-				
+
 		// Max period / Rest period
 		print '<tr><td>';
 		if ($action == 'nb_gen_max' || $object->frequency > 0)
@@ -1374,7 +1374,7 @@ else
 		}
 		print '</td>';
 		print '</tr>';
-		
+
 		// Status of generated invoices
 		print '<tr><td>';
 		if ($action == 'auto_validate' || $object->frequency > 0)
@@ -1389,29 +1389,29 @@ else
 		}
 		print '</td>';
 		print '</tr>';
-		
+
 		print '</table>';
-		
+
     	// Frequencry/Recurring section
     	if ($object->frequency > 0)
     	{
     	    print '<br>';
-		
+
     	    if (empty($conf->cron->enabled))
     		{
-    			print info_admin($langs->trans("EnableAndSetupModuleCron", $langs->transnoentitiesnoconv("Module2300Name")));	
+    			print info_admin($langs->trans("EnableAndSetupModuleCron", $langs->transnoentitiesnoconv("Module2300Name")));
     		}
-    		
+
             print '<div class="underbanner clearboth"></div>';
             print '<table class="border centpercent">';
-    		
+
     		// Nb of generation already done
     		print '<tr><td style="width: 50%">'.$langs->trans("NbOfGenerationDone").'</td>';
     		print '<td>';
     		print $object->nb_gen_done?$object->nb_gen_done:'0';
     		print '</td>';
     		print '</tr>';
-    		
+
     		// Date last
     		print '<tr><td>';
     		print $langs->trans("DateLastGeneration");
@@ -1419,19 +1419,19 @@ else
     		print dol_print_date($object->date_last_gen, 'dayhour');
     		print '</td>';
     		print '</tr>';
-    		
+
     		print '</table>';
-    		
+
     		print '<br>';
-		}		
-		
+		}
+
 		print '</div>';
 		print '</div>';
 		print '</div>';
-		
+
 		print '<div class="clearboth"></div><br>';
-		
-		
+
+
 		// Lines
 		print '	<form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
         	<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
@@ -1439,11 +1439,11 @@ else
         	<input type="hidden" name="mode" value="">
         	<input type="hidden" name="id" value="' . $object->id . '">
         	';
-		
+
 		if (! empty($conf->use_javascript_ajax) && $object->statut == 0) {
 		    include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php';
 		}
-		
+
 		print '<table id="tablelines" class="noborder noshadow" width="100%">';
 		// Show object lines
 		if (! empty($object->lines))
@@ -1452,28 +1452,28 @@ else
 		    //$disablemove=1;
 		    $ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 0);      // No date selector for template invoice
 		}
-		
+
 		// Form to add new line
 		if ($object->statut == 0 && $user->rights->facture->creer && $action != 'valid' && $action != 'editline')
 		{
 		    if ($action != 'editline')
 		    {
     		    $var = true;
-    		
+
     		    // Add free products/services
-    		    $object->formAddObjectLine(0, $mysoc, $soc);                          // No date selector for template invoice  
-    		
+    		    $object->formAddObjectLine(0, $mysoc, $soc);                          // No date selector for template invoice
+
     		    $parameters = array();
     		    $reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
 		    }
 		}
-		
+
 		print "</table>\n";
-		
+
 		print "</form>\n";
 
 		dol_fiche_end();
-		
+
 
 		/**
 		 * Barre d'actions
@@ -1513,19 +1513,19 @@ else
 		}
 
 		print '</div>';
-		
-		
+
+
 
 		print '<div class="fichecenter"><div class="fichehalfleft">';
 		print '<a name="builddoc"></a>'; // ancre
-		
-		
+
+
 		// Show links to link elements
         $linktoelem = $form->showLinkToObjectBlock($object, null, array('invoice'));
-		
+
 		$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
-		
-		
+
+
         print '</div></div>';
 
 	}
@@ -1547,7 +1547,7 @@ else
 		if ($search_montant_ttc != '') $sql.= natural_search('f.total_ttc', $search_montant_ttc, 1);
 		if ($search_frequency == '1') $sql.= ' AND f.frequency > 0';
 		if ($search_frequency == '0') $sql.= ' AND (f.frequency IS NULL or f.frequency = 0)';
-		
+
 		if ($month > 0)
 		{
 		    if ($year > 0 && empty($day))
@@ -1573,7 +1573,7 @@ else
 		else if ($year_date_when > 0)
 		{
 		    $sql.= " AND f.date_when BETWEEN '".$db->idate(dol_get_first_day($year_date_when,1,false))."' AND '".$db->idate(dol_get_last_day($year_date_when,12,false))."'";
-		}        
+		}
 
 		$nbtotalofrecords = -1;
         	if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
@@ -1581,15 +1581,15 @@ else
         		$result = $db->query($sql);
         		$nbtotalofrecords = $db->num_rows($result);
         	}
-      
+
         	$sql.= $db->order($sortfield, $sortorder);
         	$sql.= $db->plimit($limit+1,$offset);
-		
+
 		$resql = $db->query($sql);
 		if ($resql)
 		{
 			$num = $db->num_rows($resql);
-			
+
 			$param='&socid='.$socid;
             		if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
 			if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
@@ -1614,9 +1614,9 @@ else
 			    $tmpkey=preg_replace('/search_options_/','',$key);
 			    if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
 			}
-			
+
 			$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
-				
+
             print '<form method="POST" name="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
             if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
         	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -1646,7 +1646,7 @@ else
 			print_liste_field_titre('');		// Field may contains ling text
 			print "</tr>\n";
 
-			
+
 			// Filters lines
 			print '<tr class="liste_titre">';
 			// Ref
@@ -1752,8 +1752,8 @@ else
 			print $searchpitco;
 			print '</td>';
 			print "</tr>\n";
-			
-			
+
+
 			if ($num > 0)
 			{
 				$var=true;
@@ -1777,7 +1777,7 @@ else
 					print '<td align="center">'.yn($objp->frequency?1:0).'</td>';
 					print '<td align="center">'.($objp->frequency ? dol_print_date($objp->date_last_gen,'day') : '').'</td>';
 					print '<td align="center">'.($objp->frequency ? dol_print_date($objp->date_when,'day') : '').'</td>';
-						
+
 					print '<td align="center">';
 					if ($user->rights->facture->creer)
 					{
@@ -1805,7 +1805,7 @@ else
 			print "</table>";
 			print "</div>";
 			print "</form>";
-			
+
 			$db->free($resql);
 		}
 		else