[FAQ] Comment indiquer le poids total d'une commande sur le bon de livraison de PrestaShop 1.7 ?

Photo by Jen Theodore on Unsplash

Si vous indiquez convenablement le poids de chaque article dans votre installation PrestaShop, il peut être intéressant de récupérer l'information directement sur le bon de livraison qui vous aide à préparer vos colis afin de vous éviter de peser celui-ci après emballage.

Bien entendu vous devrez connaître aussi le poids de vos emballages, mais souvent c'est standardisé, donc faite vous une petite fiche listant les poids de chaque type de carton pour faciliter votre préparation des étiquettes de colis auprès de votre fournisseur de livraison.

Cette astuce est assez simple à mettre en oeuvre.

Je rappelle que tous les fichiers peuvent être personnalisés directement dans le template.

Par exemple le fichier //pdf/toto.tpl peut être personnalisé en l'enregistrant dans votre template //themes/votre_theme/pdf/toto.tpl.

ouvrez le fichier //pdf/delivery-slip.payment-tab.tpl.

Voici le contenu original sur une version 1.7.6.5.

<table id="payment-tab" width="100%" cellpadding="4" cellspacing="0">
	<tr>
		<td class="payment center small grey bold" width="44%">{l s='Payment Method' d='Shop.Pdf' pdf='true'}</td>
		<td class="payment left white" width="56%">
			<table width="100%" border="0">
				{foreach from=$order_invoice->getOrderPaymentCollection() item=payment}
					<tr>
						<td class="right small">{$payment->payment_method}</td>
						<td class="right small">{displayPrice currency=$payment->id_currency price=$payment->amount}</td>
					</tr>
				{foreachelse}
					<tr>
						<td>{l s='No payment' d='Shop.Pdf' pdf='true'}</td>
					</tr>
				{/foreach}
			</table>
		</td>
	</tr>
</table>

Ajoutons une ligne à ce tableau pour afficher le poids de la commande.

<table id="payment-tab" width="100%" cellpadding="4" cellspacing="0">
	<tr>
		{...}
	</tr>
	<tr>
		<td class="payment center small grey bold" width="44%">{l s='Order weight' d='Shop.Pdf' pdf='true'}</td>
		<td class="payment right white small" width="56%">
			{$order->getTotalWeight()}
		</td>
	</tr>
</table>

et nous obtenons ce résultat

C'est cool, le poids apparait bien sur le bon de livraison mais il manque un élément important, l'unité de poids.

Dans ce genre de cas, comme je n'ai jamais la science infuse des méthodes utilisées par PrestaShop, je me plonge toujours sur un fichier affichant l'élément et je trouve le truc qui va bien. Ici, c'est simple comme bonjour : Configuration::get('PS_WEIGHT_UNIT').

Ce qui va nous donner dans notre fichier le code complet suivant :

<table id="payment-tab" width="100%" cellpadding="4" cellspacing="0">
	<tr>
		<td class="payment center small grey bold" width="44%">{l s='Payment Method' d='Shop.Pdf' pdf='true'}</td>
		<td class="payment left white" width="56%">
			<table width="100%" border="0">
				{foreach from=$order_invoice->getOrderPaymentCollection() item=payment}
					<tr>
						<td class="right small">{$payment->payment_method}</td>
						<td class="right small">{displayPrice currency=$payment->id_currency price=$payment->amount}</td>
					</tr>
				{foreachelse}
					<tr>
						<td>{l s='No payment' d='Shop.Pdf' pdf='true'}</td>
					</tr>
				{/foreach}
			</table>
		</td>
	</tr>
	<tr>
		<td class="payment center small grey bold" width="44%">{l s='Order weight' d='Shop.Pdf' pdf='true'}</td>
		<td class="payment right white small" width="56%">
			{$order->getTotalWeight()} {Configuration::get('PS_WEIGHT_UNIT')}
		</td>
	</tr>
</table>

et ce résultat visuel sur le bon de livraison :

Discussions