diff --git a/htdocs/comm/addpropal.php b/htdocs/comm/addpropal.php
index 9ea8683e8d1f1100986a0649fbaa369e38f03f97..cbdfb02f455db43326e7625afad0763550051cde 100644
--- a/htdocs/comm/addpropal.php
+++ b/htdocs/comm/addpropal.php
@@ -161,6 +161,11 @@ if ($_GET["action"] == 'create')
 	print '<tr><td>'.$langs->trans('PaymentMode').'</td><td colspan="2">';
 	$html->select_types_paiements($soc->mode_reglement,'mode_reglement_id');
 	print '</td></tr>';
+	
+	// Source de propale
+    print '<tr><td>'.$langs->trans('Source').'</td><td>';
+    $html->select_demand_reason($soc->demand_reason,'demand_reason_id');
+    print '</td></tr>';
 
 	// delai de livraison
     print '<tr><td>'.$langs->trans('AvailabilityPeriod').'</td><td colspan="2">';
diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php
index a2f833704d5d9e0b0b1104e96c9fda0ad2624b7a..d09cf9b934b3c1f808fa88a7ce1066f860faf022 100644
--- a/htdocs/comm/propal.php
+++ b/htdocs/comm/propal.php
@@ -6,6 +6,7 @@
  * Copyright (C) 2005-2011 Regis Houssin         <regis@dolibarr.fr>
  * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
  * Copyright (C) 2010-2011 Juanjo Menent         <jmenent@2byte.es>
+ * Copyright (C) 2010-2011 Philippe Grand        <philippe.grand@atoo-net.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -259,6 +260,7 @@ if ($_POST['action'] == 'add' && $user->rights->propale->creer)
 			$object->datep 					= dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
 			$object->date_livraison 		= dol_mktime(12, 0, 0, $_POST['liv_month'], $_POST['liv_day'], $_POST['liv_year']);
 			$object->availability_id 		= $_POST['availability_id'];
+			$object->demand_reason_id       = $_POST['demand_reason_id'];
 			$object->fk_delivery_address 	= $_POST['fk_address'];
 			$object->duree_validite			= $_POST['duree_validite'];
 			$object->cond_reglement_id 		= $_POST['cond_reglement_id'];
@@ -287,6 +289,7 @@ if ($_POST['action'] == 'add' && $user->rights->propale->creer)
 		$object->datep 					= dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
 		$object->date_livraison 		= dol_mktime(12, 0, 0, $_POST['liv_month'], $_POST['liv_day'], $_POST['liv_year']);
 		$object->availability_id 		= $_POST['availability_id'];
+		$object->demand_reason_id       = $_POST['demand_reason_id'];
 		$object->fk_delivery_address 	= $_POST['fk_address'];
 		$object->duree_validite 		= $_POST['duree_validite'];
 		$object->cond_reglement_id 		= $_POST['cond_reglement_id'];
@@ -894,6 +897,14 @@ if ($_POST["action"] == 'setavailability')
 	$_GET['id']=$_REQUEST['id'];
 }
 
+// Origine de la propale
+if ($_POST["action"] == 'setdemandreason')
+{
+	$object->fetch($_REQUEST['id']);
+	$result = $object->demand_reason($_POST['demand_reason_id']);
+	$_GET['id']=$_REQUEST['id'];
+}
+
 // Conditions de reglement
 if ($_POST["action"] == 'setconditions')
 {
@@ -1119,7 +1130,7 @@ if ($id > 0 || ! empty($ref))
 	print '</td>';
 	print '</tr>';
 
-	$rowspan=10;
+	$rowspan=11;
 
 	// Company
 	print '<tr><td>'.$langs->trans('Company').'</td><td colspan="5">'.$soc->getNomUrl(1).'</td>';
@@ -1299,6 +1310,26 @@ if ($id > 0 || ! empty($ref))
 		$html->form_availability($_SERVER['PHP_SELF'].'?id='.$object->id,$object->availability_id,'none');
 	}
 
+	print '</td>';
+	print '</tr>';
+	
+	// Origine de la demande
+	print '<tr><td>';
+	print '<table class="nobordernopadding" width="100%"><tr><td>';
+	print $langs->trans('Source');
+	print '</td>';
+	if ($_GET['action'] != 'editdemandreason' && $object->brouillon) print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editdemandreason&amp;id='.$object->id.'">'.img_edit($langs->trans('SetDemandReason'),1).'</a></td>';
+	print '</tr></table>';
+	print '</td><td colspan="3">';
+	if ($_GET['action'] == 'editdemandreason')
+	{
+		$html->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'demand_reason_id');
+	}
+	else
+	{
+		$html->form_demand_reason($_SERVER['PHP_SELF'].'?id='.$object->id,$object->demand_reason_id,'none');
+	}
+
 	print '</td>';
 	print '</tr>';
 
diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
index e39d711c19b312955a23cee287b34317a1ffc55a..ba6b90b46cc3725ca6ec964d6b1d85549a151fe2 100644
--- a/htdocs/comm/propal/class/propal.class.php
+++ b/htdocs/comm/propal/class/propal.class.php
@@ -7,6 +7,7 @@
  * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
  * Copyright (C) 2008      Raphael Bertrand (Resultic)   <raphael.bertrand@resultic.fr>
  * Copyright (C) 2010-2011 Juanjo Menent         <jmenent@2byte.es>
+ * Copyright (C) 2010-2011 Philippe Grand        <philippe.grand@atoo-net.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -97,6 +98,8 @@ class Propal extends CommonObject
 	var $adresse;
 	var $availability_id;
 	var $availability_code;
+	var $demand_reason_id;
+	var $demand_reason_code;
 
 	var $products=array();
 
@@ -631,6 +634,7 @@ class Propal extends CommonObject
 		$sql.= ", ref_client";
 		$sql.= ", date_livraison";
 		$sql.= ", fk_availability";
+		$sql.= ", fk_demand_reason";
 		$sql.= ", entity";
 		$sql.= ") ";
 		$sql.= " VALUES (";
@@ -654,6 +658,7 @@ class Propal extends CommonObject
 		$sql.= ", '".$this->db->escape($this->ref_client)."'";
 		$sql.= ", ".($this->date_livraison!=''?"'".$this->db->idate($this->date_livraison)."'":'null');
 		$sql.= ", ".$this->availability_id;
+		$sql.= ", ".$this->demand_reason_id;
 		$sql.= ", ".$conf->entity;
 		$sql.= ")";
 
@@ -954,6 +959,7 @@ class Propal extends CommonObject
 		$sql.= ", fk_user_author, fk_user_valid, fk_user_cloture";
 		$sql.= ", fk_adresse_livraison";
 		$sql.= ", p.fk_availability";
+		$sql.= ", p.fk_demand_reason";
 		$sql.= ", p.fk_cond_reglement";
 		$sql.= ", p.fk_mode_reglement";
 		$sql.= ", c.label as statut_label";
@@ -963,6 +969,7 @@ class Propal extends CommonObject
 		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as cp ON p.fk_mode_reglement = cp.id';
 		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON p.fk_cond_reglement = cr.rowid';
 		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON p.fk_availability = ca.rowid';
+		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_demand_reason as dr ON p.fk_demand_reason = dr.rowid';
 		$sql.= " WHERE p.fk_statut = c.id";
 		$sql.= " AND p.entity = ".$conf->entity;
 		if ($ref) $sql.= " AND p.ref='".$ref."'";
@@ -1006,6 +1013,9 @@ class Propal extends CommonObject
 				$this->availability_id      = $obj->fk_availability;
 				$this->availability_code    = $obj->availability_code;
 				$this->availability         = $obj->availability;
+				$this->demand_reason_id     = $obj->fk_demand_reason;
+				$this->demand_reason_code   = $obj->demand_reason_code;
+				$this->demand_reason        = $obj->demand_reason;
 				$this->fk_delivery_address  = $obj->fk_adresse_livraison;	// TODO obsolete
 				$this->fk_address  			= $obj->fk_adresse_livraison;
 
@@ -1307,6 +1317,34 @@ class Propal extends CommonObject
 		}
 	}
 
+	/**
+	 *      \brief      Set source of demand
+	 *      \param      user		  Objet utilisateur qui modifie
+	 *      \param      demand_reason  source of demand
+	 *      \return     int           <0 si ko, >0 si ok
+	 */
+	function set_demand_reason($user, $id)
+	{
+		if ($user->rights->propale->creer)
+		{
+			$sql = "UPDATE ".MAIN_DB_PREFIX."propal ";
+			$sql.= " SET fk_demand_reason = '".$id."'";
+			$sql.= " WHERE rowid = ".$this->id;
+
+			if ($this->db->query($sql))
+			{
+				$this->fk_demand_reason = $id;
+				return 1;
+			}
+			else
+			{
+				$this->error=$this->db->error();
+				dol_syslog("Propal::set_demand_reason Erreur SQL");
+				return -1;
+			}
+		}
+	}
+	
 	/**
 	 *      \brief      Positionne numero reference client
 	 *      \param      user            Utilisateur qui modifie
@@ -1858,6 +1896,39 @@ class Propal extends CommonObject
 			return -2;
 		}
 	}
+	
+	/**
+	 *   \brief      Change l'origine de la demande
+	 *   \param      demand_reason_id      Id de la nouvelle origine de demande
+	 *   \return     int                    >0 si ok, <0 si ko
+	 */
+	function demand_reason($demand_reason_id)
+	{
+		dol_syslog('Propale::demand_reason('.$demand_reason_id.')');
+		if ($this->statut >= 0)
+		{
+			$sql = 'UPDATE '.MAIN_DB_PREFIX.'propal';
+			$sql .= ' SET fk_demand_reason = '.$demand_reason_id;
+			$sql .= ' WHERE rowid='.$this->id;
+			if ( $this->db->query($sql) )
+			{
+				$this->demand_reason_id = $demand_reason_id;
+				return 1;
+			}
+			else
+			{
+				dol_syslog('Propale::demand_reason Erreur '.$sql.' - '.$this->db->error());
+				$this->error=$this->db->error();
+				return -1;
+			}
+		}
+		else
+		{
+			dol_syslog('Propale::demand_reason, etat propale incompatible');
+			$this->error='Etat propale incompatible '.$this->statut;
+			return -2;
+		}
+	}
 
 
 	/**
@@ -2078,6 +2149,8 @@ class Propal extends CommonObject
 		$this->mode_reglement_code = 'CHQ';
 		$this->availability_id     = 1;
 		$this->availability_code   = 'DSP';
+		$this->demand_reason_id    = 1;
+		$this->demand_reason_code  = 'SRC_00';
 		$this->note_public='This is a comment (public)';
 		$this->note='This is a comment (private)';
 		// Lines
diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
index a106b09e2021486eb8210e96ab4a619890a8b139..0811450a548f4b3ea34d327bb0beccd0cff02ba0 100755
--- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
+++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
@@ -16,6 +16,7 @@ RENAME TABLE llx_c_source TO llx_c_demand_reason;
 ALTER TABLE llx_adherent MODIFY login varchar(50);
 
 ALTER TABLE llx_c_actioncomm ADD COLUMN position integer NOT NULL DEFAULT 0;
+ALTER TABLE llx_propal ADD COLUMN fk_demand_reason integer NULL DEFAULT 0;
 
 ALTER TABLE llx_commande_fournisseur MODIFY model_pdf varchar(255);
 ALTER TABLE llx_commande MODIFY model_pdf varchar(255);