Instalando Provincias en Prestashop

Aprovecharé para dejar a mano en esta entrada unos recursos de interés si vas a montar una tienda on-line basada en Prestashop, así te queda a mano lo que he tenido que revisar yo mismo.

Esta aportación está basada en la instalación base de Prestashop 1.5.2 pero seguro que otras versiones pueden tener similares procedimientos…

La idea es que una vez que tenemos la instalación base con los datos de ejemplo la vamos a personalizar para incluir las provincias españolas.

Alguna de la documentación con la que he trabajado se basa en la Organización Internacional de Estandarización ISO:

Códigos ISO de los países/estados/provincias: 
http://www.iso.org/iso/country_codes/country_codes

En mi instalación las zonas que hay preconfiguradas (Panel Administración->Localización->Zonas) son las siguientes:

1 Europe
2 North America
3 Asia
4 Africa
5 Oceania
6 South America
7 Europe (out E.U)
8 Central America/Antilla

Y el objetivo que me planteaba es desactivar esas e introducir 5 zonas de envío para transporte, que serían Galicia, Península, Baleares, Canarias, y Ceuta y Melilla, así que lo primero sería eliminar esas zonas… aunque habría que eliminar también los correspondientes países si no se van a utilizar. Lo podemos hacer a mano en el mismo panel de administración o a través del PHPmyadmin que nos permite ejecutar instrucciones SQL directas al motor de base de datos. Si no disponéis de acceso al PHPmyadmin tendréis que crearlas a mano o buscar algún programador que os resuelva el tema.

Precauciones:

1.- Hacer backup antes de aplicar estas modificaciones
2.- Comprobar los nombres de las tablas (es posible que hayáis cambiado el prefijo ps_ por otro durante el proceso de instalación)
3.- Si no habéis eliminado las otras zonas quedaos con el ID mayor (imaginemos que es el 8) y en el primer valor de cada línea cambiad los 9, 10, 11, 12 y 13 (siguiendo el ejemplo del 8 encontrado en la instalación por defecto) que aparecen aquí por 1, 2, 3, 4, y 5 respectivamente.

Para los ejemplos que vamos a usar partiremos de que hay datos en estas tablas, es decir, la configuración precargada en la instalación estándar, pero os será fácil adaptarla a vuestro caso.

En el cuadro de SQL introduciremos:

INSERT INTO `ps_zone` (`id_zone`, `name`, `active`) VALUES
(9, 'Península', 1),
(10, 'Canarias', 1),
(11, 'Baleares', 1),
(12, 'Ceuta y Melilla', 1),
(13, 'Galicia', 1);

Si ahora volvemos al panel veremos que las nuevas zonas son las 5 definidas aquí. Podéis hacer las vuestras basándoos un poco en esta definición por si queréis independizar vuestras provincias de España o poner por Comunidades autónomas o como consideréis oportuno, incluso si queréis adaptarlo a zonas de vuestra ciudad o provincia. El esquema es claro: Hay países y hay estados. Los estados pertenecen a países pero también pueden pertenecer a zonas que luego usamos para asignar impuestos o envíos.

Ahora tendremos que hacer modificaciones en los estados que es donde se almacenan las provincias. Si queremos eliminarlos todos deberemos eliminar las direcciones existentes en clientes y fabricantes, o eliminar todos los estados excepto los que estén en uso. Se seleccionan todos y se eliminan. En la instalación por defecto con datos precargados los estados de Illinois (IL) y Nueva York (NY) vienen en uso (IDs 13 y 32) que corresponden a los estados de los distribuidores preconfigurados (AppleStore y Shure). En mi instalación había 312 estados precargados de Estados Unidos, Italia y Japón que, como no usaré, eliminé.

Para cargar los estados de España, o sea, las provincias, aplicaremos las siguientes instrucciones:

ALTER TABLE `ps_state` MODIFY `iso_code` char(5) NOT NULL;

Con esto hemos conseguido modificar el tipo y tamaño del campo donde se almacenan los códigos ISO de los estados a 5 caracteres máximo.

A continuación insertamos todos los estados según la asignación anterior teniendo cuenta que usaremos como códigos ISO para cada provincia los que define la norma ISO 3166-2:2007, aunque he encontrado algunas por la web que usan como códigos ISO simplemente 2 o 3 letras de cada provincia, o incluso las matrículas, o incluso las 2 primeras cifras de las 5 del código postal que, por comodidad, las he asignado al id de cada estado. Así, la provincia de Pontevedra cuyos códigos postales son 36xxx será el id_state 36. Podemos ver que en el tercer campo de cada entrada hacemos referencia a los ID anteriormente creados de zonas

INSERT INTO `ps_state` (`id_state`,`id_country`, `id_zone`, `name`, `iso_code`, `tax_behavior`, `active`) VALUES
(1, 6, 9, 'Álava', 'ES-VI', 0, 1),
(2, 6, 9, 'Albacete' ,'ES-AB', 0, 1),
(3, 6, 9, 'Alicante', 'ES-A', 0, 1),
(4, 6, 9, 'Almería', 'ES-AL', 0, 1),
(5, 6, 9, 'Ávila', 'ES-AV', 0, 1),
(6, 6, 9, 'Badajoz', 'ES-BA', 0, 1),
(7, 6, 11, 'Islas Baleares', 'ES-PM', 0, 1),
(8, 6, 9, 'Barcelona', 'ES-B', 0, 1),
(9, 6, 9, 'Burgos', 'ES-BU', 0, 1),
(10, 6, 9, 'Cáceres', 'ES-CC', 0, 1),
(11, 6, 9, 'Cádiz', 'ES-CA', 0, 1),
(12, 6, 9, 'Castellón', 'ES-CS', 0, 1),
(13, 6, 9, 'Ciudad Real', 'ES-CR', 0, 1),
(14, 6, 9, 'Córdoba', 'ES-CO', 0, 1),
(15, 6, 13, 'A Coruña', 'ES-C', 0, 1),
(16, 6, 9, 'Cuenca', 'ES-CU', 0, 1),
(17, 6, 9, 'Girona', 'ES-GI', 0, 1),
(18, 6, 9, 'Granada', 'ES-GR', 0, 1),
(19, 6, 9, 'Guadalajara', 'ES-GU', 0, 1),
(20, 6, 9, 'Guipúzcoa', 'ES-SS', 0, 1),
(21, 6, 9, 'Huelva', 'ES-H', 0, 1),
(22, 6, 9, 'Huesca', 'ES-HU', 0, 1),
(23, 6, 9, 'Jaén', 'ES-J', 0, 1),
(24, 6, 9, 'La Rioja', 'ES-LO', 0, 1),
(25, 6, 9, 'León', 'ES-LE', 0, 1),
(26, 6, 9, 'Lleida', 'ES-L', 0, 1),
(27, 6, 13, 'Lugo', 'ES-LU', 0, 1),
(28, 6, 9, 'Madrid', 'ES-M', 0, 1),
(29, 6, 9, 'Málaga', 'ES-MA', 0, 1),
(30, 6, 9, 'Murcia', 'ES-MU', 0, 1),
(31, 6, 9, 'Navarra', 'ES-NA', 0, 1),
(32, 6, 13, 'Ourense', 'ES-OR', 0, 1),
(33, 6, 9, 'Asturias', 'ES-O', 0, 1),
(34, 6, 9, 'Palencia', 'ES-P', 0, 1),
(35, 6, 10, 'Las Palmas', 'ES-GC', 0, 1),
(36, 6, 13, 'Pontevedra', 'ES-PO', 0, 1),
(37, 6, 9, 'Salamanca', 'ES-SA', 0, 1),
(38, 6, 10, 'Santa Cruz de Tenerife', 'ES-TF', 0, 1),
(39, 6, 9, 'Cantabria', 'ES-S', 0, 1),
(40, 6, 9, 'Segovia', 'ES-SG', 0, 1),
(41, 6, 9, 'Sevilla', 'ES-SE', 0, 1),
(42, 6, 9, 'Soria', 'ES-SO', 0, 1),
(43, 6, 9, 'Tarragona', 'ES-T', 0, 1),
(44, 6, 9, 'Teruel', 'ES-TE', 0, 1),
(45, 6, 9, 'Toledo', 'ES-TO', 0, 1),
(46, 6, 9, 'Valencia', 'ES-V', 0, 1),
(47, 6, 9, 'Valladolid', 'ES-VA', 0, 1),
(48, 6, 9, 'Vizcaya', 'ES-BI', 0, 1),
(49, 6, 9, 'Zamora', 'ES-ZA', 0, 1),
(50, 6, 9, 'Zaragoza', 'ES-Z', 0, 1),
(51, 6, 12, 'Ceuta', 'ES-CE', 0, 1),
(52, 6, 12, 'Melilla', 'ES-ML', 0, 1);

 Una vez hecho esto tenemos que ir a la configuración de Localización->Países y editar el 6 que es España y hay una casilla que por defecto viene desactivada que indica si el país tiene estados o no. O, lo que viene a ser lo mismo, en SQL le meteríamos:

UPDATE `ps_country` SET `contains_states` = 1 WHERE `id_country` = 6;

Y con esto ya tenemos las provincias metidas en el sistema y agrupadas por zonas.