Jump to content
pepitofgg

[Aporte] Modificaciones en algunos apartados del back office

Recommended Posts

En algunos apartados del back office echaba de menos que las tablas presentaran ciertos
datos extra, para que el trabajo resulte más cómodo. Por ejemplo, en la tabla de productos,
para mí es útil tener a la vista el peso de cada producto; o en la tabla de pedidos,
saber qué transportista ha elegido el cliente para cada pedido.

Igualmente, en algunos apartados se presentan datos que, al menos en mi caso, son irrelevantes.
Por ejemplo, en la tabla de clientes, a mí no me sirve para nada la columna de edad.

Así que he hecho algunos cambios para que las tablas me resulten más útiles, y por si
a alguien le interesa, dejo aquí las instrucciones. Además, como puede verse no es demasiado
complicado, y puede servir como guía para quien quiera hacer sus propios cambios.

Lo he hecho sobre Prestashop 1.5.4.1, pero supongo que no será difícil adaptarlo a
otras versiones.

Quede claro que mis conocimientos de programación php son muy básicos, así que es más
que probable que esto se pueda hacer mucho mejor. Lo que sí es cierto es que como yo
lo he hecho, funciona perfectamente.

En este sentido, probablemente se podrían haber hecho los cambios utilizando overrides.
Yo lo intenté y me encontré con algunos problemas, así que descarté este método (además,
no creo demasiado en las supuestas ventajas de usar overrides). En cualquier caso, animo
a que algún programador más experto lo haga, y publique la solución.

 

Un par de notas importantes:

1º. Antes de hacer cualquier cambio en un fichero, guardad copia del fichero con otro
nombre (por ejemplo añadiéndole ".old"), por si hubiera que volver atrás.

2º. Después de modificar ficheros, para que los cambios tengan efecto, es necesario
borrar la cache de Prestashop, para forzarlo a que tome los nuevos ficheros. Para ello,
hay que hacer lo siguiente:

a) Eliminar todos los ficheros menos index.php, y todas las sub carpetas, en las carpetas:
    - /cache/smarty/compile
    - /cache/smarty/cache
    - /img/tmp

B) Eliminar el fichero /cache/class_index.php

c) Refrescar la página en el navegador (pulsando F5).

En los siguientes 5 posts pongo cada una de las modificaciones que he hecho. Espero que os sean útiles.
 

Share this post


Link to post
Share on other sites

1º. Añadir una columna con el peso de cada producto a la tabla "Catálogo - Productos".

a) El primer fichero que hay que modificar es "/controllers/admin/AdminProductsController.php", para añadir la columna de peso de cada producto. Aproximadamente en la línea 244 tendremos algo así:

...
	$this->fields_list['price_final'] = array(
		'title' => $this->l('Final price'),
		'width' => 90,
		'type' => 'price',
		'align' => 'right',
		'havingFilter' => true,
		'orderby' => false
	);
	$this->fields_list['sav_quantity'] = array(
		'title' => $this->l('Quantity'),
		'width' => 90,
		'align' => 'right',
		'filter_key' => 'sav!quantity',
		'orderby' => true,
		'hint' => $this->l('This is the quantity available in the current shop/group.'),
	);
...

Tenemos que insertar el código necesario para que muestre la columna de peso. Debe quedar así:

...
	$this->fields_list['price_final'] = array(
		'title' => $this->l('Final price'),
		'width' => 90,
		'type' => 'price',
		'align' => 'right',
		'havingFilter' => true,
		'orderby' => false
	);

/*  AÑADIDO PARA QUE PRESENTE UNA COLUMNA CON EL PESO */
$this->fields_list['weight'] = array(
	'title' => $this->l('Weight'),
	'width' => 90,
	'type' => 'weight_kg',  //tipo añadido en /classes/helper/HelperList.php
	'align' => 'right',
	'havingFilter' => true,
	'orderby' => true
);
/*  /AÑADIDO PARA QUE PRESENTE UNA COLUMNA CON EL PESO */

	$this->fields_list['sav_quantity'] = array(
		'title' => $this->l('Quantity'),
		'width' => 90,
		'align' => 'right',
		'filter_key' => 'sav!quantity',
		'orderby' => true,
		'hint' => $this->l('This is the quantity available in the current shop/group.'),
	);
...

B) Con la modificación anterior, ya tendremos una columna con el peso. Sin embargo, éste aparece como un número formateado al estilo inglés (coma para los millares y punto decimal), y sin unidades. Para corregirlo, hay que modificar el fichero "/classes/helper/HelperList.php", para añadir el tipo de dato "weight_kg", que permite presentar el peso en kg con el formato adecuado. En este caso se ha adaptado al formato español, es decir, número con 3 decimales, punto para miles, y coma para decimales, seguido de "kg".

Editamos el fichero "/classes/helper/HelperList.php", y aproximadamente en la línea 280 habrá algo parecido a esto:

...
	elseif (isset($params['type']) && $params['type'] == 'price')
	{
		$currency = (isset($params['currency']) && $params['currency']) ? Currency::getCurrencyInstance($tr['id_currency']) : $this->context->currency;
		$this->_list[$index][$key] = Tools::displayPrice($tr[$key], $currency, false);
	}
	elseif (isset($params['type']) && $params['type'] == 'date')
		$this->_list[$index][$key] = Tools::displayDate($tr[$key], $this->context->language->id);
...

Tenemos que insertar un nuevo elseif, de manera que quede así:

...
	elseif (isset($params['type']) && $params['type'] == 'price')
	{
		$currency = (isset($params['currency']) && $params['currency']) ? Currency::getCurrencyInstance($tr['id_currency']) : $this->context->currency;
		$this->_list[$index][$key] = Tools::displayPrice($tr[$key], $currency, false);
	}

/*  AÑADIDO EL TIPO "weight_kg". */
elseif (isset($params['type']) && $params['type'] == 'weight_kg')
{
	$this->_list[$index][$key] = number_format($tr[$key],3,',','.').' kg';
}
/*  /AÑADIDO EL TIPO "weight_kg". */

	elseif (isset($params['type']) && $params['type'] == 'date')
		$this->_list[$index][$key] = Tools::displayDate($tr[$key], $this->context->language->id);
...

Una vez hechos estos cambios hay que borrar la cache de Prestashop y forzarlo a que compile (ver instrucciones en el primer post).

Según el tamaño de pantalla utilizado, puede ser necesario retocar los valores 'width' de las distintas columnas, para que las columnas estén a vuestro gusto.

Para terminar, hay que ir al menú "Localización - Traducción de mensajes", elegir "Traducciones del panel de administración", elegir idioma español (o el que tengáis configurado para el back office), buscar las traducciones de "AdminProducts", y añadir la traducción de "Weight" = "Peso" (es posible que ya esté), y guardar los cambios.
 

  • Like 1

Share this post


Link to post
Share on other sites

2º. Añadir una columna con el transportista, y otra con el peso del pedido, en la tabla "Pedidos".

a) El primer fichero que hay que modificar es "/controllers/admin/AdminOrdersController.php", para añadir las columnas de transportista y peso de cada pedido. En este fichero hay que hacer dos modificaciones:

Aproximadamente en la línea 43 tendremos algo así:

...
	$this->_select = '
	a.id_currency,
	a.id_order AS id_pdf,
	CONCAT(c.`firstname`, \' \', c.`lastname`) AS `customer`,
	osl.`name` AS `osname`,
	os.`color`,
	IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new';
	$this->_join = '
	LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`)
	LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`)
	LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')';
	$this->_orderBy = 'id_order';
	$this->_orderWay = 'DESC';
...

Y debe quedar así:

...
	$this->_select = '
	a.id_currency,
	a.id_order AS id_pdf,
	CONCAT(c.`firstname`, \' \', c.`lastname`) AS `customer`,
/*  AÑADIDO */
car.`name` AS `carrier_name`,
oc.`weight` AS `weight`,
/*  /AÑADIDO */
	osl.`name` AS `osname`,
	os.`color`,
	IF((SELECT COUNT(so.id_order) FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer) > 1, 0, 1) as new';
	$this->_join = '
	LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`)
/*  AÑADIDO */
LEFT JOIN `'._DB_PREFIX_.'carrier` car ON (car.`id_carrier` = a.`id_carrier`)
LEFT JOIN `'._DB_PREFIX_.'order_carrier` oc ON (oc.`id_order` = a.`id_order`)
/*  /AÑADIDO */
	LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`)
	LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')';
	$this->_orderBy = 'id_order';
	$this->_orderWay = 'DESC';
...

En el mismo fichero, aproximadamente en la línea 98 habrá algo así:

...
	'customer' => array(
		'title' => $this->l('Customer'),
		'havingFilter' => true,
	),
	'total_paid_tax_incl' => array(
		'title' => $this->l('Total'),
		'width' => 70,
		'align' => 'right',
		'prefix' => '<b>',
		'suffix' => '</b>',
		'type' => 'price',
		'currency' => true
	),
...

Y debe quedar así:

...
	'customer' => array(
		'title' => $this->l('Customer'),
		'havingFilter' => true,
	),

/*  AÑADIDO */
'carrier_name' => array(
	'title' => $this->l('Carrier'),
	'width' => 100,
	'havingFilter' => true,
	'orderby' => true,
),
'weight' => array(
	'title' => $this->l('Weight'),
	'width' => 70,
	'type' => 'weight_kg',  //tipo añadido en classes\helper\HelperList.php
	'align' => 'right',
	'havingFilter' => true,
	'orderby' => true,
),
/*  /AÑADIDO */

	'total_paid_tax_incl' => array(
		'title' => $this->l('Total'),
		'width' => 70,
		'align' => 'right',
		'prefix' => '<b>',
		'suffix' => '</b>',
		'type' => 'price',
		'currency' => true
	),
...

B) El segundo fichero que hay que cambiar es "/classes/helper/HelperList.php", y la modificación es exactamente la misma que se describe en el punto B) del post anterior. Si ya se ha hecho antes, no hay que añadir nada más.

Una vez hechos estos cambios hay que borrar la cache de Prestashop y forzarlo a que compile (ver instrucciones en el primer post).

Según el tamaño de pantalla utilizado, puede ser necesario retocar los valores 'width' de las distintas columnas, para que las columnas estén a vuestro gusto.

Para terminar, hay que ir al menú "Localización - Traducción de mensajes", elegir "Traducciones del panel de administración", elegir idioma español (o el que tengáis configurado para el back office), buscar las traducciones de "AdminOrders", y añadir la traducción de "Carrier" = "Transportista" y "Weight" = "Peso" (es posible que alguna ya esté), y guardar los cambios.
 

Share this post


Link to post
Share on other sites

3º. Eliminar la columna de edad y añadir una columna con el grupo al que pertenece cada cliente, en la tabla "Clientes".

Para consegirlo, hay que editar el fichero /controllers/admin/AdminCustomersController.php y hacer las siguientes modificaciones:

Aproximadamente en la línea 54 tenemos:

...
	$this->default_form_language = $this->context->language->id;

	$genders = array();
	$genders_icon = array();
...

Y debe quedar así:

...
	$this->default_form_language = $this->context->language->id;

/*  AÑADIDO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */
	$groups = Group::getGroups($this->context->language->id);
	foreach ($groups as $group)
		$this->groups_array[$group['id_group']] = $group['name'];
/*  /AÑADIDO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */

	$genders = array();
	$genders_icon = array();
...

Aproximadamente en la línea 75 tenemos:

...
	$this->_select = '
	a.date_add,
	IF (YEAR(`birthday`) = 0, "-", (YEAR(CURRENT_DATE)-YEAR(`birthday`)) - (RIGHT(CURRENT_DATE, 5) < RIGHT(birthday, 5))) AS `age`, (
		SELECT c.date_add FROM '._DB_PREFIX_.'guest g
		LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest
		WHERE g.id_customer = a.id_customer
		ORDER BY c.date_add DESC
		LIMIT 1
	) as connect';
...

Y hay que sustituirlo por esto:

...
/*  MODIFICADO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */
	$this->_select = '
	a.date_add,
	IF (YEAR(`birthday`) = 0, "-", (YEAR(CURRENT_DATE)-YEAR(`birthday`)) - (RIGHT(CURRENT_DATE, 5) < RIGHT(birthday, 5))) AS `age`, (
		SELECT c.date_add FROM '._DB_PREFIX_.'guest g
		LEFT JOIN '._DB_PREFIX_.'connections c ON c.id_guest = g.id_guest
		WHERE g.id_customer = a.id_customer
		ORDER BY c.date_add DESC
		LIMIT 1
	) as connect,
	gl.`name` as customer_group';
	$this->_join = 'LEFT JOIN `'._DB_PREFIX_.'group_lang` gl ON (gl.`id_group` = a.`id_default_group` AND gl.`id_lang` = '.(int)$this->context->language->id.')';
/*  /MODIFICADO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */
...

Aproximadamente en la línea 115 tenemos:

...
	'email' => array(
		'title' => $this->l('Email address'),
		'width' => 180,
	),
	'age' => array(
		'title' => $this->l('Age'),
		'width' => 20,
		'search' => false,
		'align' => 'center'
	),
	'active' => array(
		'title' => $this->l('Enabled'),
		'width' => 70,
		'align' => 'center',
		'active' => 'status',
		'type' => 'bool',
		'orderby' => false,
		'filter_key' => 'a!active',
	),
...

Y debe quedar así:

...
	'email' => array(
		'title' => $this->l('Email address'),
		'width' => 180,
	),

/*  ELIMINADA LA COLUMNA DE EDAD */

/*  AÑADIDO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */
	'customer_group' => array(
		'title' => $this->l('Group'),
		'width' => 80,
		'align' => 'left',
		'type' => 'select',
		'list' => $this->groups_array,
		'filter_key' => 'gl!id_group'
	),
/*  /AÑADIDO PARA INCLUIR UNA COLUMNA CON EL GRUPO AL QUE PERTENECE EL CLIENTE. */

	'active' => array(
		'title' => $this->l('Enabled'),
		'width' => 70,
		'align' => 'center',
		'active' => 'status',
		'type' => 'bool',
		'orderby' => true,
		'filter_key' => 'a!active',
	),
...

Una vez hechos estos cambios hay que borrar la cache de Prestashop y forzarlo a que compile (ver instrucciones en el primer post).

Según el tamaño de pantalla utilizado, puede ser necesario retocar los valores 'width' de las distintas columnas, para que las columnas estén a vuestro gusto.

Para terminar, hay que ir al menú "Localización - Traducción de mensajes", elegir "Traducciones del panel de administración", elegir idioma español (o el que tengáis configurado para el back office), buscar las traducciones de "AdminCustomers", y añadir la traducción de "Group" = "Grupo" (es posible que ya esté), y guardar los cambios.
 

Share this post


Link to post
Share on other sites

4º. Añadir una columna con el email y otra con el alias de la dirección, a la tabla "Clientes - Direcciones".

Editamos el fichero /controllers/admin/AdminAddressesController.php y aproximadamente en la línea 59 tendremos:

...
	'id_address' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
	'firstname' => array('title' => $this->l('First Name'), 'width' => 120, 'filter_key' => 'a!firstname'),
	'lastname' => array('title' => $this->l('Last Name'), 'width' => 140, 'filter_key' => 'a!lastname'),
...

Y debe quedar así:

...
	'id_address' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),

/*  AÑADIDO PARA INCLUIR UNA COLUMNA CON EL EMAIL Y OTRA CON EL ALIAS DE LA DIRECCIÓN */
	'email' => array('title' => $this->l('Email'), 'width' => 150),
	'alias' => array('title' => $this->l('Alias'), 'width' => 130),
/*  /AÑADIDO PARA INCLUIR UNA COLUMNA CON EL EMAIL Y OTRA CON EL ALIAS DE LA DIRECCIÓN */

	'firstname' => array('title' => $this->l('First Name'), 'width' => 120, 'filter_key' => 'a!firstname'),
	'lastname' => array('title' => $this->l('Last Name'), 'width' => 140, 'filter_key' => 'a!lastname'),
...

Una vez hechos estos cambios hay que borrar la cache de Prestashop y forzarlo a que compile (ver instrucciones en el primer post).

Según el tamaño de pantalla utilizado, puede ser necesario retocar los valores 'width' de las distintas columnas, para que las columnas estén a vuestro gusto.
 

Share this post


Link to post
Share on other sites

5º. Añadir la posibilidad de seleccionar y borrar varios carritos de una vez, en la tabla "Clientes - Carritos".

Editamos el fichero /controllers/admin/AdminCartsController.php y aproximadamente en la línea 36 tendremos:

...
	$this->addRowAction('view');
	$this->addRowAction('delete');
	$this->allow_export = true;
	$this->_select = 'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) `customer`, a.id_cart total, ca.name carrier, o.id_order, IF(co.id_guest, 1, 0) id_guest';
...

Y debe quedar así:

...
	$this->addRowAction('view');
	$this->addRowAction('delete');
	$this->allow_export = true;

/*  AÑADIDO PARA QUE PRESENTE CASILLAS DE SELECCION PARA BORRAR VARIOS CARRITOS DE UNA VEZ */
 	$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')));
/*  /AÑADIDO PARA QUE PRESENTE CASILLAS DE SELECCION PARA BORRAR VARIOS CARRITOS DE UNA VEZ */

	$this->_select = 'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) `customer`, a.id_cart total, ca.name carrier, o.id_order, IF(co.id_guest, 1, 0) id_guest';
...

Una vez hechos estos cambios hay que borrar la cache de Prestashop y forzarlo a que compile (ver instrucciones en el primer post).

Para terminar, hay que ir al menú "Localización - Traducción de mensajes", elegir "Traducciones del panel de administración", elegir idioma español (o el que tengáis configurado para el back office), buscar las traducciones de "AdminCarts", y añadir la traducción de "Delete selected" = "Borrar seleccionados" y "Delete selected items?" = "¿Borrar carritos seleccionados?", y guardar los cambios.
 

Share this post


Link to post
Share on other sites

TOMA YA,

 

gracias pepitofgg, la verdad es que una vez empiezas y viendo lo sencillo que es adaptar el backoffice a los gustos de cada uno no se puede parar...

Share this post


Link to post
Share on other sites

TOMA YA,

 

gracias pepitofgg, la verdad es que una vez empiezas y viendo lo sencillo que es adaptar el backoffice a los gustos de cada uno no se puede parar...

 

Sí, algunos cambios son sorprendentemente fáciles. Por ejemplo, lo de poder borrar varios carritos de una vez, que te ahorra un montón de tiempo, se soluciona añadiendo sólo una línea de código, que copié y pegué de otro fichero (para otros cambios hay que currárselo un poco más).

 

La pena es lo poco documentado que está el tema. Lo tienes que hacer todo guiándote un poco por la lógica, pero sobre todo a base de pruebas y errores.

 

Y el tema de los overrides (que habría sido más "elegante") está poco documentado, y bastante mal implementado. Haces un override con la función que te interesa modificar, y tu función funciona (valga la redundancia), pero te aparecen unas cuantas cosas que dejan de funcionar, sin un motivo fácil de determinar.

Share this post


Link to post
Share on other sites

Grandisimo aporte  :)

 

Como seria para que aparezca el numero de factura en la tabla "Pedidos"

 

Me atrevería solo, pero no quiero meter la pata.

Share this post


Link to post
Share on other sites

Grandisimo aporte  :)

 

Como seria para que aparezca el numero de factura en la tabla "Pedidos"

 

Me atrevería solo, pero no quiero meter la pata.

 

Hola luico.

 

A ver, te doy un par de soluciones:

 

1. Solución simple:

Te presentará una columna con el número de factura, pero sin el prefijo ni los ceros a la izquierda, y cuando no haya factura te pondrá nº de factura 0. Si te vale con eso, sólo tienes que editar el fichero controllers\admin\AdminOrdersController.php y añadir un par de cosas.

 

Sobre la línea 44, donde pone

		$this->_select = '
		a.id_currency,
		a.id_order AS id_pdf,
		CONCAT(c.`firstname`, \' \', c.`lastname`) AS `customer`,

Debe quedar así (esto incluye el nº de factura en la consulta a la base de datos):

		$this->_select = '
		a.id_currency,
		a.id_order AS id_pdf,

/*	AÑADIDO PARA INCLUIR Nº DE FACTURA*/
		a.invoice_number AS numFra,
/*	/AÑADIDO PARA INCLUIR Nº DE FACTURA*/

		CONCAT(c.`firstname`, \' \', c.`lastname`) AS `customer`,

Y sobre la línea 110, donde pone:

		'payment' => array(
			'title' => $this->l('Payment: '),
			'width' => 160
		),

		'osname' => array(
			'title' => $this->l('Status'),
			'color' => 'color',

Debe quedar así (esto añade la columna con el nº de factura):

		'payment' => array(
			'title' => $this->l('Payment: '),
			'width' => 160
		),

/*  AÑADIDO PARA INCLUIR Nº DE FACTURA*/
		'numFra' => array(
			'title' => $this->l('Invoice'),
			'width' => 70,
			'align' => 'center',
			'havingFilter' => true,
		),
/*  /AÑADIDO PARA INCLUIR Nº DE FACTURA*/

		'osname' => array(
			'title' => $this->l('Status'),
			'color' => 'color',

En este caso he puesto la columna "factura" entre las columnas "modo de pago" y "estado de pedido", pero puedes insertarla donde más te guste.

 

 

2. Solución más elaborada:

Te presentará una columna con el nº de factura completo, tal como aparecería en la factura, y si aún no se ha emitido factura, te pondrá un guión. Para ello, además de los cambios de la solución 1, tendrás que hacer algunos más:

 

Edita el mismo fichero controllers\admin\AdminOrdersController.php, y sobre la línea 41, donde pone:

		$this->deleted = false;
		$this->context = Context::getContext();

		$this->_select = '
		a.id_currency,

Debe quedar así (esto hace una consulta a la base de datos para averiguar el prefijo que hayas configurado para las facturas):

		$this->deleted = false;
		$this->context = Context::getContext();

/*	AÑADIDO PARA INCLUIR Nº DE FACTURA*/
		$q = 'SELECT distinctrow cl.value AS prefix_lang, c.value AS prefix FROM '._DB_PREFIX_.'configuration_lang AS cl LEFT JOIN '._DB_PREFIX_.'configuration AS c ON c.name = "PS_INVOICE_PREFIX" WHERE (c.id_configuration = cl.id_configuration) AND (cl.id_lang = "'.(int)$this->context->language->id.'")';
		$res = Db::getInstance()->ExecuteS($q);
		if (isset($res[0])) {
			if (strval($res[0]['prefix_lang']) != "")
				$this->prefijo = $res[0]['prefix_lang'];
			else
				$this->prefijo = $res[0]['prefix'];
		} else
			$this->prefijo = "";
/*	/AÑADIDO PARA INCLUIR Nº DE FACTURA*/

		$this->_select = '
		a.id_currency,

En el mismo fichero, donde hayas añadido la nueva columna tendrás:

/*  AÑADIDO PARA INCLUIR Nº DE FACTURA*/
		'numFra' => array(
			'title' => $this->l('Invoice'),
			'width' => 70,
			'align' => 'center',
			'havingFilter' => true,
		),
/*  /AÑADIDO PARA INCLUIR Nº DE FACTURA*/

Y debe quedar así (esto añade el prefijo y el tipo de dato entre los datos que le pasará al helper, que es el que mostrará el listado):

/*  AÑADIDO PARA INCLUIR Nº DE FACTURA*/
		'numFra' => array(
			'title' => $this->l('Invoice'),
			'width' => 70,
			'align' => 'center',
			'prefijo' => $this->prefijo,
			'type' => 'invoice_number_format',  //tipo añadido en classes\helper\HelperList.php
			'havingFilter' => true,
		),
/*  /AÑADIDO PARA INCLUIR Nº DE FACTURA*/

Por último, tenemos que decirle qué hacer con el nuevo tipo que hemos añadido (invoice_number_format). Para ello, edita el fichero classes\helper\HelperList.php, y sobre la línea 280, donde pone:

				elseif (isset($params['type']) && $params['type'] == 'price')
				{
					$currency = (isset($params['currency']) && $params['currency']) ? Currency::getCurrencyInstance($tr['id_currency']) : $this->context->currency;
					$this->_list[$index][$key] = Tools::displayPrice($tr[$key], $currency, false);
				}

				elseif (isset($params['type']) && $params['type'] == 'date')
					$this->_list[$index][$key] = Tools::displayDate($tr[$key], $this->context->language->id);

Debe quedar así:

				elseif (isset($params['type']) && $params['type'] == 'price')
				{
					$currency = (isset($params['currency']) && $params['currency']) ? Currency::getCurrencyInstance($tr['id_currency']) : $this->context->currency;
					$this->_list[$index][$key] = Tools::displayPrice($tr[$key], $currency, false);
				}

/*	AÑADIDO EL TIPO "invoice_number_format"	*/
				elseif (isset($params['type']) && $params['type'] == 'invoice_number_format')
				{
					if(isset($params['prefijo']))
						$prefijo = $params['prefijo'];
					else
						$prefijo = "";

					if (intval($tr[$key]) == 0)
						$this->_list[$index][$key] = "-";
					else {
						$formato =  $prefijo.'%1$06d';
						$this->_list[$index][$key] = sprintf($formato,$tr[$key]);
					}
				}
/*	/AÑADIDO EL TIPO "invoice_number_format"	*/

				elseif (isset($params['type']) && $params['type'] == 'date')
					$this->_list[$index][$key] = Tools::displayDate($tr[$key], $this->context->language->id);

Pruébalo y dime qué tal va. Yo lo he hecho sobre PS 1.5.4.1, aunque supongo que en cualquier 1.5 o posterior debería funcionar. Y no olvides hacer copia de los ficheros antes de modificar nada, por si las moscas.

Edited by pepitofgg (see edit history)

Share this post


Link to post
Share on other sites

Mil gracias por la rapidez, expectacular.

 

Muy bien la primera parte  :)  :wub:

 

Con la segunda he tenido mas problemas y de momento no consigo que funcione. mañana volveré a probar.

 

Graciassssssss

Share this post


Link to post
Share on other sites

CONSEGUIDO  :ph34r:

 

Espectacular, ahora solo falta para poner la guinda al pastel que cuando le demos a exportar a CSV también nos aparezca el prefijo de la factura y ya tenemos nuestro resumen de IVA particular  :D

Share this post


Link to post
Share on other sites

CONSEGUIDO  :ph34r:

 

Espectacular, ahora solo falta para poner la guinda al pastel que cuando le demos a exportar a CSV también nos aparezca el prefijo de la factura y ya tenemos nuestro resumen de IVA particular  :D

 

Me alegro de que te funcione. ¿Podrías decir qué versión de Prestashop usas, por curiosidad?.

 

Lo de exportar facturas yo no lo uso, porque lo hago de otra forma. Me hice un módulo que me descarga un fichero CSV de facturas con los datos que me interesan, y luego en local, un programita en Visual Basic que me las pasa a Contaplus, y ya el resumen de IVA y todo eso lo hago desde Contaplus.

 

De todas formas le echaré un ojo, y si no es muy complicado te digo como hacerlo.

Share this post


Link to post
Share on other sites

Uso la PrestaShop™ 1.5.6.2

 

Es que al exportar en CSV sale el numero de factura que has creado pero en formato reducido.

 

De todas maneras ya es todo un logro.

Yo lo utilizo así por llevar un resumen en excel y para pesarle este archivo al asesor para que el lo meta en el programa pertinente.

Share this post


Link to post
Share on other sites

CONSEGUIDO  :ph34r:

 

Espectacular, ahora solo falta para poner la guinda al pastel que cuando le demos a exportar a CSV también nos aparezca el prefijo de la factura y ya tenemos nuestro resumen de IVA particular  :D

 

No es muy complicado. Luego te digo lo que hay que hacer.

 

Mientras tanto, fíjate que he cambiado una cosilla en el código que había puesto. He editado el post y ahora está como interesa, pero para que no tengas que rehacerlo todo, sólo fíjate que en el fichero controllers\admin\AdminOrdersController.php, donde antes ponía $prefijo ahora pone $this->prefijo (aparece en 4 sitios).

 

Este cambio interesa para poder hacer lo otro (ahora no me da tiempo a ponerlo).

Share this post


Link to post
Share on other sites

Ok perfecto.

Lo tengo en cuenta.

 

Vale, pues ahora tienes que editar el fichero classes\controller\AdminController.php, y en la función public function processExport() sobre la línea 590, donde pone:

		$content = array();
		foreach ($this->_list as $i => $row)
		{
			$content[$i] = array();
			foreach ($this->fields_list as $key => $value)
				if (isset($row[$key]))
					$content[$i][] = Tools::htmlentitiesDecodeUTF8($row[$key]);
				
		}

Lo modificas para que ponga esto:

		$content = array();
		foreach ($this->_list as $i => $row)
		{
			$content[$i] = array();

//	MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE
//			foreach ($this->fields_list as $key => $value)
//				if (isset($row[$key]))
//					$content[$i][] = Tools::htmlentitiesDecodeUTF8($row[$key]);
			foreach ($this->fields_list as $key => $value){
				if (isset($row[$key])) {
					$valor = Tools::htmlentitiesDecodeUTF8($row[$key]);
					if ($key == 'numFra'){
						if(isset($this->prefijo))
							$prefijo = $this->prefijo;
						else
							$prefijo = "";
						if (intval($valor) == 0)
							$valor = "-";
						else {
							$formato =  $prefijo.'%1$06d';
							$valor = sprintf($formato,$valor);
						}
					}
					$content[$i][] = $valor;
				}
				else $content[$i][] = "";
			}
//	/MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE

		}

Con esto ya debería salirte bien al exportar.

 

Una cosa, este cambio incluye la corrección de una cosa que, a mi modo de ver, era un error de Prestashop (al menos en la versión 1.5.4.1).

 

Originalmente, en el listado exportado, si un campo de una fila está vacío, Prestashop no lo exporta, de manera que en ese caso te encuentras con que esa fila tiene un campo menos, y si abres el CSV, por ejemplo en Excel, se te descuadra todo, porque en esa fila el resto de campos salen corridos una casilla a la izquierda.

 

Ignoro por qué lo hicieron así, y personalmente me parece un error, así que lo he cambiado para que en caso de que un campo no exista, en lugar de no exportarlo, lo exporte como un campo vacío.

 

Si lo prefieres de la otra forma, es decir, que no exporte los campos vacíos, elimina o comenta (poniendo delante //) la línea del último "else".

 

Ya me contarás.

Share this post


Link to post
Share on other sites

Una cosa, este cambio incluye la corrección de una cosa que, a mi modo de ver, era un error de Prestashop (al menos en la versión 1.5.4.1).

 

Originalmente, en el listado exportado, si un campo de una fila está vacío, Prestashop no lo exporta, de manera que en ese caso te encuentras con que esa fila tiene un campo menos, y si abres el CSV, por ejemplo en Excel, se te descuadra todo, porque en esa fila el resto de campos salen corridos una casilla a la izquierda.

 

Acabo de mirar y en la versión 1.6.0.1 ya viene esto corregido, así que, efectivamente, era un error de Prestashop.

Share this post


Link to post
Share on other sites

Mi código no es exactamente igual. Lo he dejado así

		$headers = array();
		foreach ($this->fields_list as $datas)
			$headers[] = Tools::htmlentitiesDecodeUTF8($datas['title']);
		$content = array();
		foreach ($this->_list as $i => $row)
		{
			$content[$i] = array();
			//	MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE
			//			foreach ($this->fields_list as $key => $value)
			//				if (isset($row[$key]))
			//					$content[$i][] = Tools::htmlentitiesDecodeUTF8($row[$key]);
			foreach ($this->fields_list as $key => $value){
				if (isset($row[$key])) {
					$valor = Tools::htmlentitiesDecodeUTF8($row[$key]);
					if ($key == 'numFra'){
						if(isset($this->prefijo))
							$prefijo = $this->prefijo;
						else
							$prefijo = "";
						if (intval($valor) == 0)
							$valor = "-";
						else {
							$formato =  $prefijo.'%1$06d';
							$valor = sprintf($formato,$valor);
						}
					}
					$content[$i][] = $valor;
				}
				else $content[$i][] = "";
			}
			//	/MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE
			
			$path_to_image = false;
			

			foreach ($this->fields_list as $key => $params)
			{
				$field_value = isset($row[$key]) ? Tools::htmlentitiesDecodeUTF8($row[$key]) : '';
				if ($key == 'image')

pero en el CSV se me repiten los campos unos con titulo y después de todos estos sin títulos.

Share this post


Link to post
Share on other sites

Mi código no es exactamente igual. Lo he dejado así

...

pero en el CSV se me repiten los campos unos con titulo y después de todos estos sin títulos.

 

Es que en tu versión (1.5.6.2) esa función es distinta (de hecho, es igual que en la 1.6), y la modificación, tal como la has hecho no puede funcionar bien.

 

A ver, si no me equivoco, en PS 1.5.6.2, en el fichero classes\controller\AdminController.php, una vez deshechos los cambios que habías hecho, sobre la línea 635 tendrás algo así:

			foreach ($this->fields_list as $key => $params)
			{
				$field_value = isset($row[$key]) ? Tools::htmlentitiesDecodeUTF8($row[$key]) : '';
				if ($key == 'image')
				{
					if ($params['image'] != 'p' || Configuration::get('PS_LEGACY_IMAGES'))
						$path_to_image = Tools::getShopDomain(true)._PS_IMG_.$params['image'].'/'.$row['id_'.$this->table].(isset($row['id_image']) ? '-'.(int)$row['id_image'] : '').'.'.$this->imageType;
					else
						$path_to_image = Tools::getShopDomain(true)._PS_IMG_.$params['image'].'/'.Image::getImgFolderStatic($row['id_image']).(int)$row['id_image'].'.'.$this->imageType;
					if ($path_to_image)
						$field_value = $path_to_image;  
				}
				$content[$i][] = $field_value;
			}

Y tienes que insertar un trozo de código para que quede así:

			foreach ($this->fields_list as $key => $params)
			{
				$field_value = isset($row[$key]) ? Tools::htmlentitiesDecodeUTF8($row[$key]) : '';
				if ($key == 'image')
				{
					if ($params['image'] != 'p' || Configuration::get('PS_LEGACY_IMAGES'))
						$path_to_image = Tools::getShopDomain(true)._PS_IMG_.$params['image'].'/'.$row['id_'.$this->table].(isset($row['id_image']) ? '-'.(int)$row['id_image'] : '').'.'.$this->imageType;
					else
						$path_to_image = Tools::getShopDomain(true)._PS_IMG_.$params['image'].'/'.Image::getImgFolderStatic($row['id_image']).(int)$row['id_image'].'.'.$this->imageType;
					if ($path_to_image)
						$field_value = $path_to_image;  
				}

//	MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE
				elseif ($key == 'numFra')
				{
					if(isset($this->prefijo))
						$prefijo = $this->prefijo;
					else
						$prefijo = "";
					if (intval($field_value) == 0)
						$field_value = "-";
					else {
						$formato =  $prefijo.'%1$06d';
						$field_value = sprintf($formato,$field_value);
					}
				}
//	MODIFICACIÓN PARA QUE EN "PEDIDOS-EXPORTAR" SALGA Nº DE FACTURA FORMATEADO CORRECTAMENTE

				$content[$i][] = $field_value;
			}

Creo que con eso debería funcionar, aunque no lo he probado, porque no tengo esa versión instalada. Prueba y me dices si va bien.

Edited by pepitofgg (see edit history)

Share this post


Link to post
Share on other sites

Pepitofgg mil gracias.

 

Funciona de maravilla  :)

 

Eso es lo que necesitaba.

 

Este es el resultado de la exportación para el que le interese

ID	Referencia	Nuevo	Cliente	Total	Modo de pago	Factura	Estado	Fecha	PDF
520	GCERSCYFV	0	P. Store	11.95	Tarjeta de credito	14/000447	Tarjeta de credito	06/10/2014 21:04	520
519	YDNEGDXMY	0	P. Store	17.90	Al contado	14/000446	Al contado	06/10/2014 20:45	519
518	GDQRYMJVP	0	P. Store	5.90	Al contado	14/000445	Al contado	06/10/2014 19:33	518

Share this post


Link to post
Share on other sites

 

Pepitofgg mil gracias.

 

Funciona de maravilla  :)

 

 

No hay de qué. Me alegro de que te sirva.

Share this post


Link to post
Share on other sites

Hola, somos nuevos usuarios de prestashop y aun nos falta por aprender bastante sobre el manejo de la tienda, entendemos muchas cosas pero quisieramos preguntar lo siguiente:

 

Cómo podemos mostrar en la pantalla de cada tipo de productos el precio junto a la unidad, ejemplo:

$1.500 x Libra o Lb, sin tener que dar click en el producto?

 

nuestra tienda: www.nativorganico.com/pedidos

 

gracias por su ayuda

 

cordial saludo

 

Nativo Colombia

Share this post


Link to post
Share on other sites

Cómo podemos mostrar en la pantalla de cada tipo de productos el precio junto a la unidad, ejemplo:

$1.500 x Libra o Lb, sin tener que dar click en el producto?

 

Si quieres que te respondan, deberías dar más detalles. ¿Te refieres al back end o al front end? ¿En el listado de productos de una categoría o en la página de un producto? ¿En qué versión de Prestashop?

 

Por cierto, muy bonita vuestra página.

  • Like 1

Share this post


Link to post
Share on other sites

Si quieres que te respondan, deberías dar más detalles. ¿Te refieres al back end o al front end? ¿En el listado de productos de una categoría o en la página de un producto? ¿En qué versión de Prestashop?

 

Por cierto, muy bonita vuestra página.

Hola, antes que nada gracias por tu respuesta y por el consejo, soy un novato en este tema entonces espero entiendan mis errores.

 

Mi duda es referente a la pagina que ve el cliente, supongo que será el front end.

Entonces cuando un cliente entra y se loguea en mi tienda, quisiera que a primera vista y sin cliquear nada,

la persona pudiera ver el precio por unidad de medida... ($1.500 Lb)...

 ...creo que uso la versión de prestashop más actual que es la 1.6.0.9

 

ah y muchas gracias por lo de la página la he trabajado bastante y aún falta!

 

saludos

Share this post


Link to post
Share on other sites

Nativocolombia, como hablas del front end, creo que este no es el mejor sitio para preguntar. Si te fijas en el topic, verás que este hilo es sobre el back office o back end, es decir, la parte que sólo ve el vendedor, no la que ve el cliente.

 

De todas formas parece que no es fácil lo que quieres. Pon en google "prestashop precio por kg" (sin las comillas) y te saldrán varios hilos hablando del tema.

Share this post


Link to post
Share on other sites

Hola a todos

me está pareciendo muy interesante todo lo que estoy leyendo. A mi me gustaría saber si alguien podría ayudarme con esto que quiero hacer.

 

Yo necesito que cuando un cliente compre, los descuentos, el iva y la suma de precios totales se haga teniendo en cuenta el wholesale-price o precio mayorista sin IVA, no el precio base o Our price.

 

El motivo es que nosotros no vendemos a clientes finales, sino a tiendas. manejamos dos precios precio tienda y pvp. El precio tienda lo he colocado en el Precio mayorista sin IVA 

 

Sabe alguien como puedo hacer esto?

Muchas gracias de antemano,

Share this post


Link to post
Share on other sites

malloco, yo creo que eso que quieres es bastante complicado, porque no se trata de cambiar lo que te presenta o como te lo presenta, sino de cambiar los algoritmos de suma de totales y todo eso.

A lo mejor digo una tontería, pero se me ocurre que quizás lo más fácil sea tener dos tiendas paralelas, una con los PVP y otra con los precios tienda.

Share this post


Link to post
Share on other sites

malloco, yo creo que eso que quieres es bastante complicado, porque no se trata de cambiar lo que te presenta o como te lo presenta, sino de cambiar los algoritmos de suma de totales y todo eso.

A lo mejor digo una tontería, pero se me ocurre que quizás lo más fácil sea tener dos tiendas paralelas, una con los PVP y otra con los precios tienda.

 

ya, es que es trastocar cosas muy sensibles...

 

te parece descabellado darle la vuelta a los precios? es decir, poner el de la tienda en el del PVP y viceversa?

 

Gracias por tu ayuda y saludos,

Share this post


Link to post
Share on other sites

ya, es que es trastocar cosas muy sensibles...

 

te parece descabellado darle la vuelta a los precios? es decir, poner el de la tienda en el del PVP y viceversa?

 

Gracias por tu ayuda y saludos,

 

Es que no sé si te he entendido bien. Pensaba que, según el tipo de cliente, querías presentar el PVP o el precio tienda.

 

Si quieres presentar uno u otro según el cliente, no vas a arreglar nada cambiando uno por otro.

 

Si sólo vas a usar el precio tienda, tampoco le veo sentido. Ponle a cada producto el precio tienda en vez del PVP y ya está. Si quieres los precios sin IVA para todo, puedes configurar un IVA al 0%. Si quieres que no presente el IVA pero luego sí lo aplique en factura, configura el IVA al 21% y que presente precios sin IVA.

 

No sé, no me entero de donde está el problema.

  • Like 1

Share this post


Link to post
Share on other sites

Hola a todos

me está pareciendo muy interesante todo lo que estoy leyendo. A mi me gustaría saber si alguien podría ayudarme con esto que quiero hacer.

 

Yo necesito que cuando un cliente compre, los descuentos, el iva y la suma de precios totales se haga teniendo en cuenta el wholesale-price o precio mayorista sin IVA, no el precio base o Our price.

 

El motivo es que nosotros no vendemos a clientes finales, sino a tiendas. manejamos dos precios precio tienda y pvp. El precio tienda lo he colocado en el Precio mayorista sin IVA 

 

Sabe alguien como puedo hacer esto?

Muchas gracias de antemano,

 

Hola,

Creo que lo que tendrías que hacer es un grupo de usuarios donde metieses a todas las tiendas y a ese grupo le aplicaras un descuento equivalente al IVA.

 

Aunque si vendes a tiendas seguramente lo que necesites sea aplicarle el recargo de equivalencia. para eso revisa este hilo:

http://www.prestashop.com/forums/topic/190882-pshop-15-impuestos-y-facturacion-recargo-de-equivalencia/

 

Share this post


Link to post
Share on other sites

Es que no sé si te he entendido bien. Pensaba que, según el tipo de cliente, querías presentar el PVP o el precio tienda.

 

Si quieres presentar uno u otro según el cliente, no vas a arreglar nada cambiando uno por otro.

 

Si sólo vas a usar el precio tienda, tampoco le veo sentido. Ponle a cada producto el precio tienda en vez del PVP y ya está. Si quieres los precios sin IVA para todo, puedes configurar un IVA al 0%. Si quieres que no presente el IVA pero luego sí lo aplique en factura, configura el IVA al 21% y que presente precios sin IVA.

 

No sé, no me entero de donde está el problema.

 

Hola, te explico un poco mejor.

Somos una distribuidora y como tal vendemos a las tiendas (no al público final). Tenemos acceso restringido para acceder al front de la página. Necesito que las tiendas compren al precio tienda y a su vez que vean el precio de venta al público. De tal forma que ven dos precios y el iva en el front, Por ejemplo:

 

Zapatillas de señora

Precio tienda: 6.05 €

Precio venta al público: 10.00 €

Iva que aplica: 21% 

 

Esto es lo que ven ellos en el front 

 

 

Esta información es así porque ellas necesitan saber cual es el precio de venta al publico como dato informativo.

 

Yo ahora lo tengo configurado 

Wholesale price: Precio tienda

Our price: Precio al público sin iva

Retail price: PVP con iva

 

y me sale bien en el front. No obstante cuando una tienda compra, todo el proceso de compra se produce en función de OUR PRICE, por eso decía lo de darle la vuelta, es decir:

 

Wholesale price: POner en este campo PVP 

Our price: Precio tienda sin iva

Retail price: Precio tienda con iva

Share this post


Link to post
Share on other sites

 

Hola a todos

me está pareciendo muy interesante todo lo que estoy leyendo. A mi me gustaría saber si alguien podría ayudarme con esto que quiero hacer.

 

Yo necesito que cuando un cliente compre, los descuentos, el iva y la suma de precios totales se haga teniendo en cuenta el wholesale-price o precio mayorista sin IVA, no el precio base o Our price.

 

El motivo es que nosotros no vendemos a clientes finales, sino a tiendas. manejamos dos precios precio tienda y pvp. El precio tienda lo he colocado en el Precio mayorista sin IVA 

 

Sabe alguien como puedo hacer esto?

Muchas gracias de antemano,

 

Hola,

Creo que lo que tendrías que hacer es un grupo de usuarios donde metieses a todas las tiendas y a ese grupo le aplicaras un descuento equivalente al IVA.

 

Aunque si vendes a tiendas seguramente lo que necesites sea aplicarle el recargo de equivalencia. para eso revisa este hilo:

http://www.prestashop.com/forums/topic/190882-pshop-15-impuestos-y-facturacion-recargo-de-equivalencia/

 

 

Gracias Luico

Voy a ponerme a leer esto a ver si hay alguna otra forma de hacerlo

Un saludo

Share this post


Link to post
Share on other sites

Hola, te explico un poco mejor.

Somos una distribuidora y como tal vendemos a las tiendas (no al público final). Tenemos acceso restringido para acceder al front de la página. Necesito que las tiendas compren al precio tienda y a su vez que vean el precio de venta al público. De tal forma que ven dos precios y el iva en el front, Por ejemplo:

 

Zapatillas de señora

Precio tienda: 6.05 €

Precio venta al público: 10.00 €

Iva que aplica: 21% 

 

Esto es lo que ven ellos en el front 

 

 

Esta información es así porque ellas necesitan saber cual es el precio de venta al publico como dato informativo.

 

Yo ahora lo tengo configurado 

Wholesale price: Precio tienda

Our price: Precio al público sin iva

Retail price: PVP con iva

 

y me sale bien en el front. No obstante cuando una tienda compra, todo el proceso de compra se produce en función de OUR PRICE, por eso decía lo de darle la vuelta, es decir:

 

Wholesale price: POner en este campo PVP 

Our price: Precio tienda sin iva

Retail price: Precio tienda con iva

 

El problema es que tardaría mucho en hacerlo porque son más de 2000 productos y preguntaba si existe algún truco o cambio que pudiera hacer para ahorrarme tiempo.

Gracias de todas formas a todos por vuestras aportaciones,

Share this post


Link to post
Share on other sites

Hola pepitofgg, te pido un favor más a ver si fuera posible para terminar de mejorar las funcionalidades de catalogo  > Productos

Tengo un problema; al parecer cuando estamos en catalogo  > Productos en el campo de Referencia este solo busca en la referencia puesta en el producto dentro de la pestaña información cuando a mi entender también tendría que buscar dentro de las referencias internas de las combinaciones del producto "attribute_reference".

 

 

 
 
 

post-512864-0-46811300-1421845091.png

 

Y ya para rizar el rizo en "attribute_ean13" , "attribute_upc" y "ean13" , "upc"

 

Así nos encontraría cualquiera de las posibilidades de referencia de nuestros productos para luego poder editar su ficha con comodidad.

 

He localizado un articulo que parece hablar de ello, pero además de estar en francés, es de una versión muy antigua, https://www.prestashop.com/forums/topic/57330-recherche-de-reference-sur-les-declinaisons-dans-le-bo/ y no termino de aclararme, y como a ti se te da muy bien esto, recurro a tu sabiduría 

Share this post


Link to post
Share on other sites

Hola a todos,

 

lo primero agradecer a todos los aportes sobre cambios y modificaciones de código. Para los que nos estamos muy duchos en esta materia del php es en dos palabras FAN TASTICO.

 

Por otro lado, lo moderadores dirán si mi consulta debe de estar o no este topic.

 

Lo que llevo un tiempo intentando encontrar es la forma de cambiar el código para incorporar EL DICHOSO RECARGO DE EQUIVALENCIA. Algo que veo que parece tabú o que nadie lo considera importante como proporcionarnos una solución que no sea otra que comprar un módulo de PAGO.

 

Dicho esto, mi pregunta es si alguien sabe como modificar el código para que si un cliente solicita el R.E. se le añada al precio de los productos y aparezca desglosado en las facturas. Yo lo he intentado a través de las reglas de impuestos pero éstas sólo funcionan para zonas, paises, etc. pero no hay forma de hacer esto para los grupos de clientes. Es decir, que si un cliente solicita el R.E., automáticamente en el carro y las facturas aparezcan y se le sumen tanto el IVA como el R.E. al haberle asignado ambos impuestos.

 

Bueno un saludo y Dios bendiga a los desarrolladores por su trabajo.

Edited by mikel EPALZA (see edit history)

Share this post


Link to post
Share on other sites

Yo no soy para nada un experto en php, todo lo contrario, pero creo que lo que quieres será bastante complicado.

En este mismo thread, en un post anterior, ponen el enlace a otro thread que trata ese tema, y por lo que he visto, hay un módulo que añade esa prestación por 60 euros, que no es ninguna barbaridad.

Share this post


Link to post
Share on other sites

hola, esta es una consulta para pepitofgg o para quien me pueda ayudar, es un poco mas tecnica, son 3 modificaciones que necesito hacer en el backoffice de la tienda que tengo.

 

1.- mostrar en el adminorder, 2 campos que tengo guardados en otra tabla, (modulo de fecha de entrega), para visualizarlos junto al pedido

2.- poder mostrar estos mismos campos en el apartado shipping dentro del adminorder

3.- lograr no hacer esto con un modulo, sino implementarlo directameente en la tabla ps_order (tiene un campo delivery_date, me gustaria agregar un delivery_hour), y mostrarlo de la misma manera, asignarlo a mi tabla carrier para que lo guarde como fecha de entrega.

 

ojala me puedan ayudar, cuando tenga un ejemplo grafico se los enviare en un post

Share this post


Link to post
Share on other sites

Hola.

Estoy intentado agregar una columna a catalogo>productos, donde se pueda activar o desactivar el "disponible para la compra". 

Es para un cliente que necesita verlo reflejado en el listado.

 

Share this post


Link to post
Share on other sites

Hola, buenos dias 

Estoy intentando de añadir un apartado nuevo que sea comentario pero no encuentro nada

Alguien me puede ayudar 

 

Gracias a todos

Share this post


Link to post
Share on other sites

Buenas tardes, Pepitofgg

Necesito tu ayuda, espero tengas tiempo para atenderme.

En la generación del PDF de la factura, deseo hacer dos cambios.

1. Del cuerpo de la factura, deseo eliminar la columna "Precio base" y,

2. Como puedo hacer para que el generador del pdf no me corte los artículos. Me explico... Al final de la página 1, puedes ver que deja el nombre del artículo, con su cantidad y precio, pero la imagen la manda al inicio de la siguiente página. Lo mismo sucede con el artículo al final de la página 2 e inicio de la 3.

Agradezco de antemano la atención que me brindes.
Saludos,
Alicia

GN000278.pdf

Share this post


Link to post
Share on other sites

Olvidé mencionarte:

Versión de PrestaShop 1.6.1.24

Versión de PHP 7.2.21

Espero tus comentarios y muchas gracias.

Share this post


Link to post
Share on other sites
8 hours ago, AliceCAD said:

Buenas tardes, Pepitofgg

Necesito tu ayuda, espero tengas tiempo para atenderme.

En la generación del PDF de la factura, deseo hacer dos cambios.

1. Del cuerpo de la factura, deseo eliminar la columna "Precio base" y,

2. Como puedo hacer para que el generador del pdf no me corte los artículos. Me explico... Al final de la página 1, puedes ver que deja el nombre del artículo, con su cantidad y precio, pero la imagen la manda al inicio de la siguiente página. Lo mismo sucede con el artículo al final de la página 2 e inicio de la 3.

Agradezco de antemano la atención que me brindes.
Saludos,
Alicia

GN000278.pdf

Hola Alicia.

Siento no poder ayudarte, pero hace años que estoy completamente desligado de este tema, y ni siquiera tengo un Prestashop instalado.

Share this post


Link to post
Share on other sites

Hola AliceCAD,

soy empresario y despues de muchos años he aprendido a hacer ciertas cosas. voy a ver si puedo ayudarte.

1º ELIMINAR LA COLUMNA PRECIO BASE

1.1) entra en la carpeta pdf de tu tienda online. descarga y edita con un editor de texto (te recomiento el " notepad ++ " que es gratis) el archivo " INVOICE.PRODUCT-TAB.TPL "

1.2) veras una linea que dice lo siguiente:

         {if isset($layout.before_discount)}
            <th class="product header small" width="{$layout.unit_price_tax_excl.width}%">{l s='Base price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th>
        {/if}

1.3) añade lo que te he puesto al principio y al final en negrita:

        {if isset($layout.before_discount)}
            <!--     <th class="product header small" width="{$layout.unit_price_tax_excl.width}%">{l s='Base price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th>     -->
        {/if}

        NOTA: COMPARA CON TU ARCHIVO QUE EL CODIGO ES EL MISMO, SINO LO ES TENDRAS QUE BUSCAR UNO PARECIDO QUE ESTE ENTRE " <th> ... </th> " Y QUE MENCIONE LA EXPRESION  " {l s='Base price' pdf='true'} ". LAS EXPRESIONES " <!-- " AL PRINCIPIO Y " -->" LO QUE HACEN ES DESCOMENTAR ESE CODIGO Y POR LO TANTO SE CONVIERTE EN INFORMACION NADA MAS.

-----------

2º AJUSTAR LA IMAGEN

2.1 en el mismo archivo, más abajo veras el código siguiente:

        <!-- PRODUCTOS -->

        .....

        ......

        <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>

2.2 si te fijas hay 4 porcentajes, los importantes son 15%, 5% y 80%. Tendras que jugar con esos porcentajes a ver si reduciendo el espacio que ocupa la imagen se te mantiene en la misma línea.

2.3 si la modificacion de los porcentajes no funciona, seguramente tendras que ir a PREFERENCIAS --> IMAGENES y modificar el tamaño de la imagen que se usa para el carrito que no se si sera " cart-default " o bien " small-default ".

2.4 si has tenido que seguir el paso 2.3, tendras que regenerar las imagenes en esa misma seccion donde hiciste la modificación, pero no todas... SOLAMENTE LA QUE HAS MODIFICADO.

       NOTA CON EL PUNTO 2.4: no se que tipo de servidor tendrás pero en la mayoría de los casos, al hacerse algo como eso te aparecera error 500 o algo asi. sigue las instrucciones que te vienen justo al final de esa sección.

        "Selecciona "No" sólo si se agotó el tiempo de tu servidor y necesitas continuar con la regeneración."

2.5 la solución más facil sería desactivar las imagenes en las facturas. tendras que ir a PEDIDOS --> FACTURAS y al final tienes unas opciones.

ESPERO HABERTE AYUDADO.

SALUDOS Y SUERTE.

Share this post


Link to post
Share on other sites
2 hours ago, mikel EPALZA said:

Hola AliceCAD,

soy empresario y despues de muchos años he aprendido a hacer ciertas cosas. voy a ver si puedo ayudarte.

1º ELIMINAR LA COLUMNA PRECIO BASE

1.1) entra en la carpeta pdf de tu tienda online. descarga y edita con un editor de texto (te recomiento el " notepad ++ " que es gratis) el archivo " INVOICE.PRODUCT-TAB.TPL "

1.2) veras una linea que dice lo siguiente:

         {if isset($layout.before_discount)}
            <th class="product header small" width="{$layout.unit_price_tax_excl.width}%">{l s='Base price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th>
        {/if}

1.3) añade lo que te he puesto al principio y al final en negrita:

        {if isset($layout.before_discount)}
            <!--     <th class="product header small" width="{$layout.unit_price_tax_excl.width}%">{l s='Base price' pdf='true'} <br /> {l s='(Tax excl.)' pdf='true'}</th>     -->
        {/if}

        NOTA: COMPARA CON TU ARCHIVO QUE EL CODIGO ES EL MISMO, SINO LO ES TENDRAS QUE BUSCAR UNO PARECIDO QUE ESTE ENTRE " <th> ... </th> " Y QUE MENCIONE LA EXPRESION  " {l s='Base price' pdf='true'} ". LAS EXPRESIONES " <!-- " AL PRINCIPIO Y " -->" LO QUE HACEN ES DESCOMENTAR ESE CODIGO Y POR LO TANTO SE CONVIERTE EN INFORMACION NADA MAS.

-----------

2º AJUSTAR LA IMAGEN

2.1 en el mismo archivo, más abajo veras el código siguiente:

        <!-- PRODUCTOS -->

        .....

        ......

        <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>

2.2 si te fijas hay 4 porcentajes, los importantes son 15%, 5% y 80%. Tendras que jugar con esos porcentajes a ver si reduciendo el espacio que ocupa la imagen se te mantiene en la misma línea.

2.3 si la modificacion de los porcentajes no funciona, seguramente tendras que ir a PREFERENCIAS --> IMAGENES y modificar el tamaño de la imagen que se usa para el carrito que no se si sera " cart-default " o bien " small-default ".

2.4 si has tenido que seguir el paso 2.3, tendras que regenerar las imagenes en esa misma seccion donde hiciste la modificación, pero no todas... SOLAMENTE LA QUE HAS MODIFICADO.

       NOTA CON EL PUNTO 2.4: no se que tipo de servidor tendrás pero en la mayoría de los casos, al hacerse algo como eso te aparecera error 500 o algo asi. sigue las instrucciones que te vienen justo al final de esa sección.

        "Selecciona "No" sólo si se agotó el tiempo de tu servidor y necesitas continuar con la regeneración."

2.5 la solución más facil sería desactivar las imagenes en las facturas. tendras que ir a PEDIDOS --> FACTURAS y al final tienes unas opciones.

ESPERO HABERTE AYUDADO.

SALUDOS Y SUERTE.

Mikel... Buenas tardes.

Muchísimas gracias por tu ayuda. Con la ayuda de todos ustedes he ido avanzando poco a poco.

Te adjunto mis avances.

Saludos cordiales,

AliceCAD

GN002323.pdf

Share this post


Link to post
Share on other sites

hola,

bueno el primer fallo de mi solución es que sólo hemos quitado de la cabecera la columna "precio base", pero no la columna entera con lo cual se te desplazan las columnas hacia la izquierda y no te coinciden con las cabeceras.

he estado mirando en los archivos pdf pero no encuentro como desactivar toda la columna, principalmente porque en mis facturas no aparece, quizas sea porque uso la factura b2b de prestashop.

asi que no se voy a poder ayudarte. entre tanto yo activaria de nuevo la expresion de la cabecera paraque por lo menos no se quede tan fea de cara al cliente.

saludos.

Share this post


Link to post
Share on other sites
7 hours ago, mikel EPALZA said:

hola,

bueno el primer fallo de mi solución es que sólo hemos quitado de la cabecera la columna "precio base", pero no la columna entera con lo cual se te desplazan las columnas hacia la izquierda y no te coinciden con las cabeceras.

he estado mirando en los archivos pdf pero no encuentro como desactivar toda la columna, principalmente porque en mis facturas no aparece, quizas sea porque uso la factura b2b de prestashop.

asi que no se voy a poder ayudarte. entre tanto yo activaria de nuevo la expresion de la cabecera paraque por lo menos no se quede tan fea de cara al cliente.

saludos.

Hola, Mikel.

Buenas tardes.

Te agradezco infinitamente tu ayuda. Por supuesto que me ayudaste. Con tu ayuda y la de Gerardo, tuve el valor de abrir los archivos y comenzar a mover valores. Aunque tengo amplia experiencia en el uso y entrenamiento de herramientas de CAD/CAM/CAE, el renglón de la programación no es uno de mis fuertes.

Deseo que tengas un excelente fin de semana.
Gracias por tu enseñanza.
Saludos,
AliceCAD

Share this post


Link to post
Share on other sites

Hola de nuevo,

creo que ya se que más tienes que desactivar en tus facturas. esta todo en el mismo archivo mencionado anteriormente.

lo primero es desactivar (como has hecho en los mensajes anteriores) la cabecera.

despues más abajo tienes esta linea de codigo, en mi archivo esta mas o menos en la linea 77 y es este codigo:

          {if isset($layout.before_discount)}
                <td class="product center">
                    {if isset($order_detail.unit_price_tax_excl_before_specific_price)}
                        {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_before_specific_price}
                    {else}
                        --
                    {/if}
                </td>
            {/if}

asi que tienes que dejarlo asi: (fijate en las dos expresiones en negrita antes y despues de <td ... />td

{if isset($layout.before_discount)}
               <!--  <td class="product center">
                    {if isset($order_detail.unit_price_tax_excl_before_specific_price)}
                        {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_before_specific_price}
                    {else}
                        --
                    {/if}
                </td> -->
            {/if}

prueba a ver si se te ha de solucionado.

por otro lado, veo en tus facturas que la letra de las direcciones de entrega y facturacion es un poco grande, yo la haría más pequeña desde el archivo " invoice.style-tab.tpl "

en las primeras líneas tienes:

{assign var=color_header value="#F0F0F0"}
{assign var=color_border value="#000000"}
{assign var=color_border_lighter value="#CCCCCC"}
{assign var=color_line_even value="#FFFFFF"}
{assign var=color_line_odd value="#F9F9F9"}
{assign var=font_size_text value="9pt"}
{assign var=font_size_header value="9pt"}
{assign var=font_size_product value="9pt"}
{assign var=height_header value="20px"}
{assign var=table_padding value="4px"}

aqui tienes que jugar con los valores "... font_size ..." poniendo 8pt, 10pt... etc. 8 seria más pequeño y 10 más grande.

ademas si bajas en este archivo o si haces una busqueda de texto en el archivo tienes la expresion "font-weight" y donde aparece "bold" quiere decir que ese texto aparecera en negrita.

pero si cambias "bold" por "normal" aparecera el texto normal. valgame la redundancia. Entonces en la factura te apareceran las direcciones con letra normal que es más pequeña.

 

saludos y ya me comentaras

Share this post


Link to post
Share on other sites
On 9/7/2019 at 2:55 AM, mikel EPALZA said:

Hola de nuevo,

creo que ya se que más tienes que desactivar en tus facturas. esta todo en el mismo archivo mencionado anteriormente.

lo primero es desactivar (como has hecho en los mensajes anteriores) la cabecera.

despues más abajo tienes esta linea de codigo, en mi archivo esta mas o menos en la linea 77 y es este codigo:

          {if isset($layout.before_discount)}
                <td class="product center">
                    {if isset($order_detail.unit_price_tax_excl_before_specific_price)}
                        {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_before_specific_price}
                    {else}
                        --
                    {/if}
                </td>
            {/if}

asi que tienes que dejarlo asi: (fijate en las dos expresiones en negrita antes y despues de <td ... />td

{if isset($layout.before_discount)}
               <!--  <td class="product center">
                    {if isset($order_detail.unit_price_tax_excl_before_specific_price)}
                        {displayPrice currency=$order->id_currency price=$order_detail.unit_price_tax_excl_before_specific_price}
                    {else}
                        --
                    {/if}
                </td> -->
            {/if}

prueba a ver si se te ha de solucionado.

por otro lado, veo en tus facturas que la letra de las direcciones de entrega y facturacion es un poco grande, yo la haría más pequeña desde el archivo " invoice.style-tab.tpl "

en las primeras líneas tienes:

{assign var=color_header value="#F0F0F0"}
{assign var=color_border value="#000000"}
{assign var=color_border_lighter value="#CCCCCC"}
{assign var=color_line_even value="#FFFFFF"}
{assign var=color_line_odd value="#F9F9F9"}
{assign var=font_size_text value="9pt"}
{assign var=font_size_header value="9pt"}
{assign var=font_size_product value="9pt"}
{assign var=height_header value="20px"}
{assign var=table_padding value="4px"}

aqui tienes que jugar con los valores "... font_size ..." poniendo 8pt, 10pt... etc. 8 seria más pequeño y 10 más grande.

ademas si bajas en este archivo o si haces una busqueda de texto en el archivo tienes la expresion "font-weight" y donde aparece "bold" quiere decir que ese texto aparecera en negrita.

pero si cambias "bold" por "normal" aparecera el texto normal. valgame la redundancia. Entonces en la factura te apareceran las direcciones con letra normal que es más pequeña.

 

saludos y ya me comentaras

Muchas gracias Mikael, por todo el tiempo que me has dedicado.

Te anexo un archivo de pedido para que veas los avances.

Solo me falta poder quitar el bloque (en la parte superior) de los datos de domicilio de facturación. Me encontré un archivo llamado invoice.addresses-tab.tpl y estuve jugando con comentar secciones en él, pero no obtuve el resultado deseado. Le seguiré buscando, para que solo me ponga un bloque.

Saludos cordiales,

AliceCAD

GN002355.pdf

Share this post


Link to post
Share on other sites

Hola Alice,

Bueno por lo pronto me alegro mucho de que hayas conseguido ya arreglar lo del precio base y la imagen, ahora la factura se te ve bien.

Por lo que me preguntas de quitar la dirección de facturación. Antes de hacer nada, yo consultaria si en tu pais se permite eso. En España desde luego tiene que constar obligatoriamente el nombre y dirección de facturación asi como el documento de identidad del cliente.

dame algo de tiempo para ver si consigo quitarlo y te digo como se hace. En principio en el archivo "invoice.addresses-tab.tpl" imagino que descomentarias la columna siguiente, ¿verdad?

<table id="addresses-tab" cellspacing="0" cellpadding="0">
    <tr>
        <td width="33%"><span style="font-size:10px;"> </span><br/><br/>
            {if isset($order_invoice)}{$order_invoice->shop_address}{/if}
        </td>
        <td width="33%">{if $delivery_address}<span style="font-size:10px;">{l s='Delivery Address' pdf='true'}</span><br/><br/>
                {$delivery_address}
            {/if}
        </td>

 

       <!--
        <td width="33%"><span style="font-size:10px;">{l s='Billing Address' pdf='true'}</span><br/><br/>
                {$invoice_address}
        </td>

      -->


    </tr>
</table>

Y ahora que lo estaba poniendo aqui, creo que ya se que es lo que te pasa a ti, que si eliminamos una columna, las otras siguen ocupando el mismo espacio.

Me explico, si te fijas en el codigo hay 3 columnas que cada una ocupa un 33% del total del espacio (100%). Por lo tanto, si eliminamos una, las otras tienen que ocupar es mismo total de espacio (100%), asi que ponles un 50% a cada una; y si se te descuadra pon 49% y 50%, o un 30% y 70%. eso ya a tu gusto.

POSDATA: de momento volveria a cambiar el tamaño de la letra de las direcciones porque a mi parece se sigue viendo grande. pero claro lo digo como se ve en el ordenador, no se si una vez impresa la factura se vera mejor. Ademas la letra donde van las fechas y los numeros de factura es demasiado pequeña a mi entender, tambien tendrías que cambiarla.

saludos y ya me dices como te ha ido.

Edited by mikel EPALZA (see edit history)

Share this post


Link to post
Share on other sites
10 hours ago, mikel EPALZA said:

Hola Alice,

Bueno por lo pronto me alegro mucho de que hayas conseguido ya arreglar lo del precio base y la imagen, ahora la factura se te ve bien.

Por lo que me preguntas de quitar la dirección de facturación. Antes de hacer nada, yo consultaria si en tu pais se permite eso. En España desde luego tiene que constar obligatoriamente el nombre y dirección de facturación asi como el documento de identidad del cliente.

dame algo de tiempo para ver si consigo quitarlo y te digo como se hace. En principio en el archivo "invoice.addresses-tab.tpl" imagino que descomentarias la columna siguiente, ¿verdad?

<table id="addresses-tab" cellspacing="0" cellpadding="0">
    <tr>
        <td width="33%"><span style="font-size:10px;"> </span><br/><br/>
            {if isset($order_invoice)}{$order_invoice->shop_address}{/if}
        </td>
        <td width="33%">{if $delivery_address}<span style="font-size:10px;">{l s='Delivery Address' pdf='true'}</span><br/><br/>
                {$delivery_address}
            {/if}
        </td>

 

       <!--
        <td width="33%"><span style="font-size:10px;">{l s='Billing Address' pdf='true'}</span><br/><br/>
                {$invoice_address}
        </td>

      -->


    </tr>
</table>

Y ahora que lo estaba poniendo aqui, creo que ya se que es lo que te pasa a ti, que si eliminamos una columna, las otras siguen ocupando el mismo espacio.

Me explico, si te fijas en el codigo hay 3 columnas que cada una ocupa un 33% del total del espacio (100%). Por lo tanto, si eliminamos una, las otras tienen que ocupar es mismo total de espacio (100%), asi que ponles un 50% a cada una; y si se te descuadra pon 49% y 50%, o un 30% y 70%. eso ya a tu gusto.

POSDATA: de momento volveria a cambiar el tamaño de la letra de las direcciones porque a mi parece se sigue viendo grande. pero claro lo digo como se ve en el ordenador, no se si una vez impresa la factura se vera mejor. Ademas la letra donde van las fechas y los numeros de factura es demasiado pequeña a mi entender, tambien tendrías que cambiarla.

saludos y ya me dices como te ha ido.

Muchas gracias por tu atención y ayuda.

Ya hice los cambios en el archivo invoice.style-tab.tpl (te lo adjunto) y, sin embargo, no se ve mucho el cambio de las leyendas pequeñas y cambió poco el de las grandes.

Te adjunto también cómo se ven ahora los pedidos.

Muchísimas gracias por todo.

Saludos,
AliceCAD

GN002355.pdf invoice.style-tab.tpl

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More