From cdcad62967cfd6c7988c98a634a6c62d9f27169f Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Thu, 25 Feb 2016 18:18:00 +0100
Subject: [PATCH] FIX Array of linked elements for PDF contains duplicates and
 missing data

---
 htdocs/core/lib/pdf.lib.php | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php
index c6df0040e4e..a4d5a734472 100644
--- a/htdocs/core/lib/pdf.lib.php
+++ b/htdocs/core/lib/pdf.lib.php
@@ -1838,10 +1838,10 @@ function pdf_getLinkedObjects($object,$outputlangs)
 	$linkedobjects=array();
 
 	$object->fetchObjectLinked();
-
+	
 	foreach($object->linkedObjects as $objecttype => $objects)
 	{
-		if ($objecttype == 'propal')
+	    if ($objecttype == 'propal')
 		{
 			$outputlangs->load('propal');
 
@@ -1879,26 +1879,28 @@ function pdf_getLinkedObjects($object,$outputlangs)
 		{
 			$outputlangs->load('orders');
 			$outputlangs->load('sendings');
-			foreach($objects as $elementobject)
+			foreach($objects as $x => $elementobject)
 			{
 				$elementobject->fetchObjectLinked();
-
+				
 				$order = reset($elementobject->linkedObjects['commande']);
 
-				if (! empty($object->linkedObjects['commande']))	// There is already a link to order so we show only info of shipment
+				// We concat this record info into fields xxx_value. title is overwrote.
+				if (! empty($object->linkedObjects['commande']) || $object->element == 'commande')	// There is already a link to order or object is the order, so we show only info of shipment
 				{
 					$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefSending");
+					if (! empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'].=' / ';
 					$linkedobjects[$objecttype]['ref_value'].= $outputlangs->transnoentities($elementobject->ref);
 					$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("DateSending");
 					$linkedobjects[$objecttype]['date_value'].= dol_print_date($elementobject->date_delivery,'day','',$outputlangs);
 				}
-				else	// We show both info of order and shipment
+				else	// We show both info of order and shipment.
 				{
 					$linkedobjects[$objecttype]['ref_title'] = $outputlangs->transnoentities("RefOrder") . ' / ' . $outputlangs->transnoentities("RefSending");
-					$linkedobjects[$objecttype]['ref_value'] = $outputlangs->convToOutputCharset($order->ref) . ($order->ref_client ? ' ('.$order->ref_client.')' : '');
+					if (empty($linkedobjects[$objecttype]['ref_value'])) $linkedobjects[$objecttype]['ref_value'] = $outputlangs->convToOutputCharset($order->ref) . ($order->ref_client ? ' ('.$order->ref_client.')' : '');
 					$linkedobjects[$objecttype]['ref_value'].= ' / ' . $outputlangs->transnoentities($elementobject->ref);
 					$linkedobjects[$objecttype]['date_title'] = $outputlangs->transnoentities("OrderDate") . ($elementobject->date_delivery ? ' / ' . $outputlangs->transnoentities("DateSending") : '');
-					$linkedobjects[$objecttype]['date_value'] = dol_print_date($order->date,'day','',$outputlangs);
+					if (empty($linkedobjects[$objecttype]['date_value'])) $linkedobjects[$objecttype]['date_value'] = dol_print_date($order->date,'day','',$outputlangs);
 					$linkedobjects[$objecttype]['date_value'].= ($elementobject->date_delivery ? ' / ' . dol_print_date($elementobject->date_delivery,'day','',$outputlangs) : '');
 				}
 			}
-- 
GitLab