Selaa lähdekoodia

FIX Presentation of qty already order duplicated on reception card

Laurent Destailleur 3 vuotta sitten
vanhempi
commit
4b5792899e
2 muutettua tiedostoa jossa 108 lisäystä ja 76 poistoa
  1. 3 2
      htdocs/fourn/commande/dispatch.php
  2. 105 74
      htdocs/reception/card.php

+ 3 - 2
htdocs/fourn/commande/dispatch.php

@@ -612,10 +612,11 @@ if ($id > 0 || !empty($ref)) {
 	// if ($mesg) print $mesg;
 	print '<br>';
 
-	$disabled = 1;
+	/*$disabled = 1;
 	if (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)) {
 		$disabled = 0;
-	}
+	}*/
+	$disabled = 0;	// This is used to disable or not the bulk selection of target warehouse. No reason to have it disabled so forced to 0.
 
 	// Line of orders
 	if ($object->statut <= CommandeFournisseur::STATUS_ACCEPTED || $object->statut >= CommandeFournisseur::STATUS_CANCELED) {

+ 105 - 74
htdocs/reception/card.php

@@ -1031,9 +1031,17 @@ if ($action == 'create') {
 				print "</tr>\n";
 			}
 
+			// $objectsrc->lines contains the line of the purchase order
+			// $dispatchLines is list of lines with dispatching detail (with product, qty and warehouse). One purchase order line may have n of this dispatch lines.
+
+			$arrayofpurchaselinealreadyoutput= array();
+
+			// $_POST contains fk_commandefourndet_X_Y    where Y is num of product line and X is number of splitted line
 			$indiceAsked = 1;
-			while ($indiceAsked <= $numAsked) {
+			while ($indiceAsked <= $numAsked) {	// Loop on $dispatchLines. Warning: $dispatchLines must be sorted by fk_commandefourndet (it is a regroupment key on output)
 				$product = new Product($db);
+
+				// We search the purchase order line that is linked to the dispatchLines
 				foreach ($objectsrc->lines as $supplierLine) {
 					if ($dispatchLines[$indiceAsked]['fk_commandefourndet'] == $supplierLine->id) {
 						$line = $supplierLine;
@@ -1055,7 +1063,6 @@ if ($action == 'create') {
 				print '<!-- line fk_commandefourndet='.$line->id.' for product='.$line->fk_product.' -->'."\n";
 				print '<tr class="oddeven">'."\n";
 
-
 				// Product label
 				if ($line->fk_product > 0) {  // If predefined product
 					$product->fetch($line->fk_product);
@@ -1064,42 +1071,45 @@ if ($action == 'create') {
 
 					print '<td>';
 					print '<a name="'.$line->id.'"></a>'; // ancre pour retourner sur la ligne
-					print '<input type="hidden" name="productid'.$indiceAsked.'" value="'.$line->fk_product.'">';
+					if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {	// Add test to avoid to show qty twice
+						print '<input type="hidden" name="productid'.$indiceAsked.'" value="'.$line->fk_product.'">';
 
-					// Show product and description
-					$product_static = $product;
+						// Show product and description
+						$product_static = $product;
 
-					$text = $product_static->getNomUrl(1);
-					$text .= ' - '.(!empty($line->label) ? $line->label : $line->product_label);
-					$description = ($conf->global->PRODUIT_DESC_IN_FORM ? '' : dol_htmlentitiesbr($line->desc));
-					print $form->textwithtooltip($text, $description, 3, '', '', $i);
+						$text = $product_static->getNomUrl(1);
+						$text .= ' - '.(!empty($line->label) ? $line->label : $line->product_label);
+						$description = ($conf->global->PRODUIT_DESC_IN_FORM ? '' : dol_htmlentitiesbr($line->desc));
+						print $form->textwithtooltip($text, $description, 3, '', '', $i);
 
-					// Show range
-					print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
+						// Show range
+						print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
 
-					// Add description in form
-					if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
-						print ($line->desc && $line->desc != $line->product_label) ? '<br>'.dol_htmlentitiesbr($line->desc) : '';
+						// Add description in form
+						if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
+							print ($line->desc && $line->desc != $line->product_label) ? '<br>'.dol_htmlentitiesbr($line->desc) : '';
+						}
 					}
-
 					print '</td>';
 				} else {
 					print "<td>";
-					if ($type == 1) {
-						$text = img_object($langs->trans('Service'), 'service');
-					} else {
-						$text = img_object($langs->trans('Product'), 'product');
-					}
+					if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {	// Add test to avoid to show qty twice
+						if ($type == 1) {
+							$text = img_object($langs->trans('Service'), 'service');
+						} else {
+							$text = img_object($langs->trans('Product'), 'product');
+						}
 
-					if (!empty($line->label)) {
-						$text .= ' <strong>'.$line->label.'</strong>';
-						print $form->textwithtooltip($text, $line->desc, 3, '', '', $i);
-					} else {
-						print $text.' '.nl2br($line->desc);
-					}
+						if (!empty($line->label)) {
+							$text .= ' <strong>'.$line->label.'</strong>';
+							print $form->textwithtooltip($text, $line->desc, 3, '', '', $i);
+						} else {
+							print $text.' '.nl2br($line->desc);
+						}
 
-					// Show range
-					print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
+						// Show range
+						print_date_range($db->jdate($line->date_start), $db->jdate($line->date_end));
+					}
 					print "</td>\n";
 				}
 
@@ -1110,8 +1120,11 @@ if ($action == 'create') {
 				print '<input type="text" class="maxwidth100" name="comment'.$indiceAsked.'" value="'.$defaultcomment.'">';
 				print '</td>';
 
-				// Qty
-				print '<td class="center">'.$line->qty;
+				// Qty in source purchase order line
+				print '<td class="center">';
+				if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {	// Add test to avoid to show qty twice
+					print $line->qty;
+				}
 				print '<input type="hidden" name="fk_commandefournisseurdet'.$indiceAsked.'" value="'.$line->id.'">';
 				print '<input type="hidden" name="pul'.$indiceAsked.'" value="'.$line->pu_ht.'">';
 				print '<input name="qtyasked'.$indiceAsked.'" id="qtyasked'.$indiceAsked.'" type="hidden" value="'.$line->qty.'">';
@@ -1121,7 +1134,9 @@ if ($action == 'create') {
 				// Qty already received
 				print '<td class="center">';
 				$quantityDelivered = $objectsrc->receptions[$line->id];
-				print $quantityDelivered;
+				if (! array_key_exists($line->id, $arrayofpurchaselinealreadyoutput)) {	// Add test to avoid to show qty twice
+					print $quantityDelivered;
+				}
 				print '<input name="qtydelivered'.$indiceAsked.'" id="qtydelivered'.$indiceAsked.'" type="hidden" value="'.$quantityDelivered.'">';
 				print '</td>';
 
@@ -1190,6 +1205,9 @@ if ($action == 'create') {
 						}
 					}
 				}
+
+				$arrayofpurchaselinealreadyoutput[$line->id] = $line->id;
+
 				print "</tr>\n";
 
 				$extralabelslines = $extrafields->attributes[$line->table_element];
@@ -1756,7 +1774,9 @@ if ($action == 'create') {
 			//var_dump($alreadysent);
 		}
 
-		// Loop on each product to send/sent
+		$arrayofpurchaselinealreadyoutput = array();
+
+		// Loop on each product to send/sent. Warning: $lines must be sorted by ->fk_commandefourndet (it is a regroupment key on output)
 		for ($i = 0; $i < $num_prod; $i++) {
 			print '<!-- origin line id = '.$lines[$i]->origin_line_id.' -->'; // id of order line
 			print '<tr class="oddeven">';
@@ -1778,32 +1798,35 @@ if ($action == 'create') {
 				}
 
 				print '<td>';
-
-				$text = $lines[$i]->product->getNomUrl(1);
-				$text .= ' - '.$label;
-				$description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($lines[$i]->product->description));
-				print $form->textwithtooltip($text, $description, 3, '', '', $i);
-				print_date_range($lines[$i]->date_start, $lines[$i]->date_end);
-				if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
-					print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ? '<br>'.dol_htmlentitiesbr($lines[$i]->description) : '';
+				if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
+					$text = $lines[$i]->product->getNomUrl(1);
+					$text .= ' - '.$label;
+					$description = (!empty($conf->global->PRODUIT_DESC_IN_FORM) ? '' : dol_htmlentitiesbr($lines[$i]->product->description));
+					print $form->textwithtooltip($text, $description, 3, '', '', $i);
+					print_date_range($lines[$i]->date_start, $lines[$i]->date_end);
+					if (!empty($conf->global->PRODUIT_DESC_IN_FORM)) {
+						print (!empty($lines[$i]->product->description) && $lines[$i]->description != $lines[$i]->product->description) ? '<br>'.dol_htmlentitiesbr($lines[$i]->description) : '';
+					}
 				}
 				print "</td>\n";
 			} else {
 				print "<td>";
-				if ($lines[$i]->product_type == Product::TYPE_SERVICE) {
-					$text = img_object($langs->trans('Service'), 'service');
-				} else {
-					$text = img_object($langs->trans('Product'), 'product');
-				}
+				if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
+					if ($lines[$i]->product_type == Product::TYPE_SERVICE) {
+						$text = img_object($langs->trans('Service'), 'service');
+					} else {
+						$text = img_object($langs->trans('Product'), 'product');
+					}
 
-				if (!empty($lines[$i]->label)) {
-					$text .= ' <strong>'.$lines[$i]->label.'</strong>';
-					print $form->textwithtooltip($text, $lines[$i]->description, 3, '', '', $i);
-				} else {
-					print $text.' '.nl2br($lines[$i]->description);
-				}
+					if (!empty($lines[$i]->label)) {
+						$text .= ' <strong>'.$lines[$i]->label.'</strong>';
+						print $form->textwithtooltip($text, $lines[$i]->description, 3, '', '', $i);
+					} else {
+						print $text.' '.nl2br($lines[$i]->description);
+					}
 
-				print_date_range($lines[$i]->date_start, $lines[$i]->date_end);
+					print_date_range($lines[$i]->date_start, $lines[$i]->date_end);
+				}
 				print "</td>\n";
 			}
 
@@ -1815,33 +1838,39 @@ if ($action == 'create') {
 
 
 			// Qty ordered
-			print '<td class="center">'.$lines[$i]->qty_asked.'</td>';
+			print '<td class="center">';
+			if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
+				print $lines[$i]->qty_asked;
+			}
+			print '</td>';
 
 			// Qty in other receptions (with reception and warehouse used)
 			if ($origin && $origin_id > 0) {
 				print '<td class="center nowrap">';
-				foreach ($alreadysent as $key => $val) {
-					if ($lines[$i]->fk_commandefourndet == $key) {
-						$j = 0;
-						foreach ($val as $receptionline_id => $receptionline_var) {
-							if ($receptionline_var['reception_id'] == $lines[$i]->fk_reception) {
-								continue; // We want to show only "other receptions"
-							}
-
-							$j++;
-							if ($j > 1) {
-								print '<br>';
+				if (!array_key_exists($lines[$i]->fk_commandefourndet, $arrayofpurchaselinealreadyoutput)) {
+					foreach ($alreadysent as $key => $val) {
+						if ($lines[$i]->fk_commandefourndet == $key) {
+							$j = 0;
+							foreach ($val as $receptionline_id => $receptionline_var) {
+								if ($receptionline_var['reception_id'] == $lines[$i]->fk_reception) {
+									continue; // We want to show only "other receptions"
+								}
+
+								$j++;
+								if ($j > 1) {
+									print '<br>';
+								}
+								$reception_static->fetch($receptionline_var['reception_id']);
+								print $reception_static->getNomUrl(1);
+								print ' - '.$receptionline_var['qty'];
+
+								$htmltext = $langs->trans("DateValidation").' : '.(empty($receptionline_var['date_valid']) ? $langs->trans("Draft") : dol_print_date($receptionline_var['date_valid'], 'dayhour'));
+								if (!empty($conf->stock->enabled) && $receptionline_var['warehouse'] > 0) {
+									$warehousestatic->fetch($receptionline_var['warehouse']);
+									$htmltext .= '<br>'.$langs->trans("From").' : '.$warehousestatic->getNomUrl(1, '', 0, 1);
+								}
+								print ' '.$form->textwithpicto('', $htmltext, 1);
 							}
-							$reception_static->fetch($receptionline_var['reception_id']);
-							print $reception_static->getNomUrl(1);
-							print ' - '.$receptionline_var['qty'];
-
-							$htmltext = $langs->trans("DateValidation").' : '.(empty($receptionline_var['date_valid']) ? $langs->trans("Draft") : dol_print_date($receptionline_var['date_valid'], 'dayhour'));
-							if (!empty($conf->stock->enabled) && $receptionline_var['warehouse'] > 0) {
-								$warehousestatic->fetch($receptionline_var['warehouse']);
-								$htmltext .= '<br>'.$langs->trans("From").' : '.$warehousestatic->getNomUrl(1, '', 0, 1);
-							}
-							print ' '.$form->textwithpicto('', $htmltext, 1);
 						}
 					}
 				}
@@ -1971,6 +2000,8 @@ if ($action == 'create') {
 			}
 			print "</tr>";
 
+			$arrayofpurchaselinealreadyoutput[$lines[$i]->fk_commandefourndet] = $lines[$i]->fk_commandefourndet;
+
 			// Display lines extrafields
 			$extralabelslines = $extrafields->attributes[$lines[$i]->table_element];
 			if (is_array($extralabelslines) && count($extralabelslines) > 0) {