Como añadir código de barras en albarán impreso.

Imprimir EAN

Añadir código de barras en albaranes o facturas es una practica habitual.

En el caso de los albaranes puede facilitar e incluso controlar la eficiencia del servicio de preparación de paquete(picking) incluso facilitar el uso de almacenes robotizados con este tipo de sistemas.

En cuanto a las facturas puede ser una manera precias de contabilizar o enlazar el sistema de prestashop con alguna ERP existente.

Os planteo una forma sencilla, seguramente mejorable pero funcional. Probada en prestashop 1.7 aprovechando que prestashop usa PHP y podemos usarlo de manera sencilla.

Crearemos un fichero en nuestra carpeta raíz barcode.php y lo rellenamos con este sencillo código.

<?php

require 'vendor/autoload.php';

$code = empty($_GET['code']) ? '' : $_GET['code'];
$type = empty($_GET['type']) ? 'C39' : $_GET['type']; //En este caso usamos CODE39

$barcode = new TCPDFBarcode($code, $type);

echo base64_encode($barcode->getBarcodePNG()); // Admite opciones para tamaño

exit;

Con este archivo ya podemos crear imágenes de código de barras que usar en nuestros pdf, para ello necesitaremos modificar los .tpl encargados de generar estos documentos. Los podemos encontrar en /pdf

Para hacer la demostración vamos a modificar las líneas de producto de un albarán para mostrar en lugar de la referencia del producto un código de barras del mismo valor.

En primer lugar localizaremos el archivo delivery-slip.product-tab.tpl dentro de la carpeta pdf. Os muestro el código original:

<table class="product" width="100%" cellpadding="4" cellspacing="0">

	<thead>
		<tr>
			<th class="product header small" width="25%">{l s='Reference' d='Shop.Pdf' pdf='true'}</th>
			<th class="product header small" width="65%">{l s='Product' d='Shop.Pdf' pdf='true'}</th>
			<th class="product header small" width="10%">{l s='Qty' d='Shop.Pdf' pdf='true'}</th>
		</tr>
	</thead>

	<tbody>
		<!-- PRODUCTS -->
		{foreach $order_details as $order_detail}
			{cycle values=["color_line_even", "color_line_odd"] assign=bgcolor_class}
			<tr class="product {$bgcolor_class}">

				<td class="product left">
					{if empty($order_detail.product_reference)}
						---
					{else}
						{$order_detail.product_reference}
					{/if}
				</td>
				<td class="product left">
					{if $display_product_images}
						<table width="100%">
							<tr>
								<td width="15%">
									{if isset($order_detail.image) && $order_detail.image->id}
										{$order_detail.image_tag}
									{/if}
								</td>
								<td width="5%">&nbsp;</td>
								<td width="80%">
									{$order_detail.product_name}
								</td>
							</tr>
						</table>
					{else}
						{$order_detail.product_name}
					{/if}
				</td>
				<td class="product center">
					{$order_detail.product_quantity}
				</td>

			</tr>

			{foreach $order_detail.customizedDatas as $customizationPerAddress}
				{foreach $customizationPerAddress as $customizationId => $customization}
					<tr class="customization_data {$bgcolor_class}">
						<td class="center"> &nbsp;</td>

						<td>
							{if isset($customization.datas[Product::CUSTOMIZE_TEXTFIELD]) && count($customization.datas[Product::CUSTOMIZE_TEXTFIELD]) > 0}
								<table style="width: 100%;">
									{foreach $customization.datas[Product::CUSTOMIZE_TEXTFIELD] as $customization_infos}
										<tr>
											<td style="width: 30%;">
												{$customization_infos.name|string_format:{l s='%s:' d='Shop.Pdf' pdf='true'}}
											</td>
											<td>{$customization_infos.value}</td>
										</tr>
									{/foreach}
								</table>
							{/if}

							{if isset($customization.datas[Product::CUSTOMIZE_FILE]) && count($customization.datas[Product::CUSTOMIZE_FILE]) > 0}
								<table style="width: 100%;">
									<tr>
										<td style="width: 30%;">{l s='image(s):' d='Shop.Pdf' pdf='true'}</td>
										<td>{count($customization.datas[Product::CUSTOMIZE_FILE])}</td>
									</tr>
								</table>
							{/if}
						</td>

						<td class="center">
							({if $customization.quantity == 0}1{else}{$customization.quantity}{/if})
						</td>

					</tr>
				{/foreach}
			{/foreach}



		{/foreach}
		<!-- END PRODUCTS -->
	</tbody>

</table>

Y ahora el código modificado:

<table class="product" width="100%" cellpadding="4" cellspacing="0">

	<thead>
		<tr>
			<th class="product header small" width="25%">{l s='Reference' d='Shop.Pdf' pdf='true'}</th>
			<th class="product header small" width="65%">{l s='Product' d='Shop.Pdf' pdf='true'}</th>
			<th class="product header small" width="10%">{l s='Qty' d='Shop.Pdf' pdf='true'}</th>
		</tr>
	</thead>

	<tbody>
		<!-- PRODUCTS -->
		{foreach $order_details as $order_detail}
			{cycle values=["color_line_even", "color_line_odd"] assign=bgcolor_class}
			<tr class="product {$bgcolor_class}">

				<td class="product left">
					{if empty($order_detail.product_reference)}
						---
					{else}
						<img src="https://proveil.es/barcode.php?code={$order_detail.product_reference}" alt="barcode" style="width:150px; height:50px;" />
						<!-- Le pasamos el codigo a nuestra función php que la converira en imagen del codigo de barras -->
					{/if}
				</td>
				<td class="product left">
					{if $display_product_images}
						<table width="100%">
							<tr>
								<td width="15%">
									{if isset($order_detail.image) && $order_detail.image->id}
										{$order_detail.image_tag}
									{/if}
								</td>
								<td width="5%">&nbsp;</td>
								<td width="80%">
									{$order_detail.product_name}
								</td>
							</tr>
						</table>
					{else}
						{$order_detail.product_name}
					{/if}
				</td>
				<td class="product center">
					{$order_detail.product_quantity}
				</td>

			</tr>

			{foreach $order_detail.customizedDatas as $customizationPerAddress}
				{foreach $customizationPerAddress as $customizationId => $customization}
					<tr class="customization_data {$bgcolor_class}">
						<td class="center"> &nbsp;</td>

						<td>
							{if isset($customization.datas[Product::CUSTOMIZE_TEXTFIELD]) && count($customization.datas[Product::CUSTOMIZE_TEXTFIELD]) > 0}
								<table style="width: 100%;">
									{foreach $customization.datas[Product::CUSTOMIZE_TEXTFIELD] as $customization_infos}
										<tr>
											<td style="width: 30%;">
												{$customization_infos.name|string_format:{l s='%s:' d='Shop.Pdf' pdf='true'}}
											</td>
											<td>{$customization_infos.value}</td>
										</tr>
									{/foreach}
								</table>
							{/if}

							{if isset($customization.datas[Product::CUSTOMIZE_FILE]) && count($customization.datas[Product::CUSTOMIZE_FILE]) > 0}
								<table style="width: 100%;">
									<tr>
										<td style="width: 30%;">{l s='image(s):' d='Shop.Pdf' pdf='true'}</td>
										<td>{count($customization.datas[Product::CUSTOMIZE_FILE])}</td>
									</tr>
								</table>
							{/if}
						</td>

						<td class="center">
							({if $customization.quantity == 0}1{else}{$customization.quantity}{/if})
						</td>

					</tr>
				{/foreach}
			{/foreach}



		{/foreach}
		<!-- END PRODUCTS -->
	</tbody>

</table>

Con estas modificaciones podremos ver los códigos de barras, en cualquier pdf que le indiquemos. Si tienes dudas puedes ponerte en contacto a través de todos los medios disponibles.

Compartir

Otros post

estelles

EstellesEstudio.com

Cris y Belén estaban comenzando con un nuevo proyecto en Instagram y querían dar el salto a la web para poder llegar a más gente

studio 3t

Studio 3T

Si buscas un administrador visual para tus conexiones con MongoDB has encontrado el post indicado.

¿Quién eres?