miércoles, 20 de marzo de 2013

Añadir Código de barras a la factura en prestashop 1.5

Saludos cordiales.
En la comunidad de Prestashop de G+ de la que soy miembro se comentaba hoy sobre como hacer esto y he encontrado un método bastante sencillo. Usando esta herramienta, php-barcode, y retocando un par de archivos se puede añadir un código de barras EAN13 (por ejemplo) en el centro de la parte superior de nuestra factura.
Descomprimir el archivo.zip dentro de la carpeta tools/ de prestashop. Yo le acorté el nombre para que se llamase solo php_barcode

A continuación modificaremos el contenido de
override/classes/pdf/HTMLTemplate.php

Ese archivo deberá quedar así.


<?php

abstract class HTMLTemplate extends HTMLTemplateCore
{

/**
* Returns the template's HTML header
* @return string HTML header
*/
public function getHeader()
{
$shop_name = Configuration::get('PS_SHOP_NAME');
$path_logo = $this->getLogo();

$width = 0;

$height = 0;



$info_barcode = "1234567890128";
$tipo_barcode = "EAN";


if (!empty($path_logo))
list($width, $height) = getimagesize($path_logo);

$this->smarty->assign(array(
'logo_path' => $path_logo,
'img_ps_dir' => 'http://'.Tools::getMediaServer(_PS_IMG_)._PS_IMG_,
'img_update_time' => Configuration::get('PS_IMG_UPDATE_TIME'),
'title' => $this->title,
'date' => $this->date,
'shop_name' => $shop_name,
'width_logo' => $width,
'height_logo' => $height,
'barcode_path' => "http://localhost/prestashop/tools/php_barcode/barcode.php?code=".$info_barcode."&encoding=".$tipo_barcode."&mode=jpg&size=2"
));

return $this->smarty->fetch($this->getTemplate('header_barcode'));
}
}

Las lineas resaltadas en rojo contienen la una solución provisional para crear un código de barras EAN13 que contendrá la cadena 1234567890128 en su interior.

Ahora vamos a mostrar ese nuevo dato en la factura.
Dentro de la carpeta pdf/ estan los archivos que conforman las facturas. Crear una copia del archivo header.tpl y llamarlo header_barcode.tpl

Modificarlo para que quede así.


<table style="width: 100%">
<tr>
<td style="width: 33%">
{if $logo_path}
<img src="{$logo_path}" style="width:{$width_logo}px; height:{$height_logo}px;" />
{/if}
</td>
<td style="width: 33%;text-align:center;">
{if $barcode_path}
<img src="{$barcode_path}" alt="barcode" height="{$height_logo}px"/>
{/if}
</td>
<td style="width: 33%; text-align: right;">
<table style="width: 100%">
<tr>
<td style="font-weight: bold; font-size: 14pt; color: #444; width: 100%">{$shop_name|escape:'htmlall':'UTF-8'}</td>
</tr>
<tr>
<td style="font-size: 14pt; color: #9E9F9E">{$date|escape:'htmlall':'UTF-8'}</td>
</tr>
<tr>
<td style="font-size: 14pt; color: #9E9F9E">{$title|escape:'htmlall':'UTF-8'}</td>
</tr>
</table>
</td>
</tr>
</table>




Ya podéis disfrutar de vuestro código de barras en la parte superior de la factura. Deberíais poder ver algo así:

Espero que resulte útil.
Disculpadme si con las prisas por explicarlo me he dejado algo en el tintero.

Testeado en prestashop 1.5.2

EDITO

Haciendo uso de la propia clase que trae prestashop se puede añadir el código de barras de igual modo. Lo único que he hecho ha sido crear una herramienta que he ubicado dentro de tools/mybarcode/mybarcode.php

Este archivo se verá tal que así

<?php
require_once('/var/www/prestashop/tools/tcpdf/barcodes.php');
$code=$_GET["code"];
$type=$_GET["type"];
$tcpdfbarcode = new TCPDFBarcode($code, $type);
$tcpdfbarcode->getBarcodePNG(2, 30, array(0,0,0));
?>


Ahora cambiando sutilmente el archivo HTMLTemplate.php que se indicaba más arriba para que apunte a este script en lugar de al php_barcode, ya tendremos el código de barras insertado dentro de la factura.

El aspecto de la factura será así:

1 comentario:

  1. Saludos Amigo al tratar de implementar el script me esta arrojando este error:

    TCPDF ERROR: [Image] Unable to get image: http://prestashop16.loc/tools/php_barcode/barcode.php?code=1234567890128&encoding=EAN&mode=jpg&size=2

    te sucedio algo parecido?.

    ResponderEliminar