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

SEO

¿Qué es SEO?

SEO, lo que necesitas saber para dar el primer paso en posicionar tu contenido en los buscadores.

Comienzo en NTT Data

Hace cuatro meses empecé una aventura laboral en NTT Data y me gustaría compartir mi experiencia. No fue un camino fácil entrar, la deslocalización y

Prestashop 8.0.4

Llega Prestashop 8.0.4

¡Actualización de Prestashop 8.0.4 disponible! Actualiza tu tienda online. Ventajas: mejor rendimiento, experiencia de usuario mejorada, más funciones, mayor seguridad y compatibilidad con dispositivos móviles. ¡Aprovecha esta oportunidad para impulsar tu negocio! #Prestashop8.0.4
#ActualizaciónTiendaOnline

Cristefe.es

Cristefe.es

Esta web es un regalo a mi pareja, mi primera página en wordpress y posiblemente la que más cambios a sufrido. Inconformista, detallista y siempre

¿Quién eres?