diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php
index 0b688790af763a37826e737f111c791d449aa626..6dc25efef4fb4254725bef3b17696f54e6aa8213 100644
--- a/htdocs/expensereport/card.php
+++ b/htdocs/expensereport/card.php
@@ -36,9 +36,11 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/expensereport.lib.php';
 require_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php';
 require_once DOL_DOCUMENT_ROOT . '/core/modules/expensereport/modules_expensereport.php';
 require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
+require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
 require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
 
 $langs->load("trips");
+$langs->load("bills");
 
 $action=GETPOST('action');
 $cancel=GETPOST('cancel');
@@ -1391,13 +1393,13 @@ else
 				$linkback = '<a href="'.DOL_URL_ROOT.'/expensereport/list.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
 
             	// Ref
-            	print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td>';
+            	print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td colspan="2">';
             	print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
             	print '</td></tr>';
 
 				print '<tr>';
 				print '<td>'.$langs->trans("Period").'</td>';
-				print '<td>';
+				print '<td colspan="2">';
 				print get_date_range($object->date_debut,$object->date_fin,'',$langs,0);
 				print '</td>';
 				print '</tr>';
@@ -1405,25 +1407,90 @@ else
 				{
 					print '<tr>';
 					print '<td>'.$langs->trans("ModePaiement").'</td>';
-					print '<td>'.$object->libelle_paiement.'</td>';
+					print '<td colspan="2">'.$object->libelle_paiement.'</td>';
 					print '</tr>';
 				}
 				// Status
 				print '<tr>';
 				print '<td>'.$langs->trans("Statut").'</td>';
-				print '<td>'.$object->getLibStatut(4).'</td>';
+				print '<td colspan="2">'.$object->getLibStatut(4).'</td>';
 				print '</tr>';
 				print '<tr>';
 				print '<td>'.$langs->trans("NotePublic").'</td>';
-				print '<td>'.$object->note_public.'</td>';
+				print '<td colspan="2">'.$object->note_public.'</td>';
 				print '</tr>';
 				print '<tr>';
 				print '<td>'.$langs->trans("NotePrivate").'</td>';
-				print '<td>'.$object->note_private.'</td>';
+				print '<td colspan="2">'.$object->note_private.'</td>';
 				print '</tr>';
 				print '<tr>';
 				print '<td>'.$langs->trans("AmountHT").'</td>';
 				print '<td>'.price($object->total_ht).'</td>';
+				print '<td rowspan="7" valign="top">';
+				/*
+				 * Payments
+				 */
+				$sql = "SELECT p.rowid, p.num_payment, p.datep as dp, p.amount,";
+				$sql.= "c.code as type_code,c.libelle as paiement_type";
+				$sql.= " FROM ".MAIN_DB_PREFIX."payment_expensereport as p";
+				$sql.= ", ".MAIN_DB_PREFIX."c_paiement as c ";
+				$sql.= ", ".MAIN_DB_PREFIX."expensereport as e";
+				$sql.= " WHERE e.rowid = '".$id."'";
+				$sql.= " AND p.fk_expensereport = e.rowid";
+				$sql.= " AND e.entity = ".$conf->entity;
+				$sql.= " AND p.fk_typepayment = c.id";
+				$sql.= " ORDER BY dp";
+
+				//print $sql;
+				$resql = $db->query($sql);
+				if ($resql)
+				{
+					$num = $db->num_rows($resql);
+					$i = 0; $total = 0;
+					print '<table class="nobordernopadding" width="100%">';
+					print '<tr class="liste_titre">';
+					print '<td>'.$langs->trans("RefPayment").'</td>';
+					print '<td>'.$langs->trans("Date").'</td>';
+					print '<td>'.$langs->trans("Type").'</td>';
+					print '<td align="right">'.$langs->trans("Amount").'</td>';
+					print '<td>&nbsp;</td>';
+					print '</tr>';
+
+					$var=True;
+					while ($i < $num)
+					{
+						$objp = $db->fetch_object($resql);
+						$var=!$var;
+						print "<tr ".$bc[$var]."><td>";
+						print '<a href="'.DOL_URL_ROOT.'/expensereport/payment/card.php?id='.$objp->rowid.'">'.img_object($langs->trans("Payment"),"payment").' '.$objp->rowid.'</a></td>';
+						print '<td>'.dol_print_date($db->jdate($objp->dp),'day')."</td>\n";
+							$labeltype=$langs->trans("PaymentType".$object->type_code)!=("PaymentType".$object->type_code)?$langs->trans("PaymentType".$object->type_code):$object->paiement_type;
+										   print "<td>".$labeltype.' '.$object->num_payment."</td>\n";
+						print '<td align="right">'.price($objp->total_ttc)."</td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td>\n";
+						print "</tr>";
+						$totalpaid += $objp->total_ttc;
+						$i++;
+					}
+
+					if ($object->paid == 0)
+					{
+						print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("AlreadyPaid")." :</td><td align=\"right\"><b>".price($totalpaid)."</b></td><td>&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
+						print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("AmountExpected")." :</td><td align=\"right\" bgcolor=\"#d0d0d0\">".price($object->amount)."</td><td bgcolor=\"#d0d0d0\">&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
+
+						$remaintopay = $object->total_ttc - $totalpaid;
+
+						print "<tr><td colspan=\"2\" align=\"right\">".$langs->trans("RemainderToPay")." :</td>";
+						print "<td align=\"right\" bgcolor=\"#f0f0f0\"><b>".price($remaintopay)."</b></td><td bgcolor=\"#f0f0f0\">&nbsp;".$langs->trans("Currency".$conf->currency)."</td></tr>\n";
+					}
+					print "</table>";
+					$db->free($resql);
+				}
+				else
+				{
+					dol_print_error($db);
+				}
+				print "</td>";
+	
 				print '</tr>';
 				print '<tr>';
 				print '<td>'.$langs->trans("AmountVAT").'</td>';
@@ -1643,7 +1710,7 @@ else
 							{
 									//modif ligne!!!!!
 									print '<tr '.$bc[$var].'>';
-									// Sélection date
+									// Select date
 									print '<td style="text-align:center;">';
 									$form->select_date($objp->date,'date');
 									print '</td>';
@@ -1872,9 +1939,9 @@ if ($action != 'create' && $action != 'edit')
 
 	/* Si l'état est "En attente d'approbation"
 	 *	ET user à droit de "approve"
-	*	ET fk_user_validator == user courant
-	*	Afficher : "Valider" / "Refuser" / "Supprimer"
-	*/
+	 *	ET fk_user_validator == user courant
+	 *	Afficher : "Valider" / "Refuser" / "Supprimer"
+	 */
 	if ($object->fk_statut == 2)
 	{
 		if ($object->fk_user_author == $user->id)
@@ -1906,14 +1973,22 @@ if ($action != 'create' && $action != 'edit')
 			print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
 		}
 	}
-
+	
 	/* Si l'état est "A payer"
 	 *	ET user à droit de "to_paid"
-	*	Afficher : "Annuler" / "Payer" / "Supprimer"
-	*/
-	if ($user->rights->expensereport->to_paid && $object->fk_statut == 5)
+	 *	Afficher : "Annuler" / "Payer" / "Supprimer"
+	 */
+	if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && round($remaintopay) == 0 && $object->paid == 0 && $object->fk_statut == 5)
 	{
 		// Pay
+		if ($remaintopay == 0)
+		{
+			print '<div class="inline-block divButAction"><span class="butActionRefused" title="' . $langs->trans("DisabledBecauseRemainderToPayIsZero") . '">' . $langs->trans('DoPayment') . '</span></div>';
+		}
+		else
+		{
+			print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/expensereport/payment/payment.php?rowid=' . $object->id . '&amp;action=create">' . $langs->trans('DoPayment') . '</a></div>';
+		}
 		print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=paid&id='.$object->id.'">'.$langs->trans('TO_PAID').'</a>';
 
 		// Cancel
@@ -1931,9 +2006,9 @@ if ($action != 'create' && $action != 'edit')
 
 	/* Si l'état est "Payée"
 	 *	ET user à droit "approve"
-	*	ET user à droit "to_paid"
-	*	Afficher : "Annuler"
-	*/
+	 *	ET user à droit "to_paid"
+	 *	Afficher : "Annuler"
+	 */
 	if ($user->rights->expensereport->approve && $user->rights->expensereport->to_paid && $object->fk_statut==6)
 	{
 		// Cancel