Post by kelgonar » Thu Nov 28, 2013 1:18 am

Hola a todos tengo opencart 1.4.9.4, y quiero añadir varias subtiendas a la que tengo, os explico, la base de datos de productos me vale 100%, lo que necesito es que antes de entrar a cada tienda preguntare de que provincia es, eso no es problema por php me lo hago, de esta forma se le redirigirá a una tienda u a otra, por ejmplo león, Valladolid, burgos, Palencia.
Quiero que las 4 tiendas compartan la base de datos de productos, para así modificarlos solo una vez y no 4, y que el pedido de Valladolid le llegue al administrador de Valladolid y asi par el resto de provincias.

¿es posible poner un email para cada tienda? yo no veo esa opción al crear las siguientes tiendas. y no se si compartirán la base de datos.

Un saludo y gracias de antemano

Newbie

Posts

Joined
Thu Nov 28, 2013 1:11 am

Post by kelgonar » Wed Dec 04, 2013 1:26 am

solucionadooo, me he ido a catalog->model->checkout->order.php

ahí he cogido el id de zona, al principio se saca mediante consulta a la BD, que equivale a la provincia que ha marcado el comprador, y mas abajo, sobre la línea 400, es donde se mandan los mails de pedido al administrador, pues en esa zona he hecho un switch en función de zona_id, según la zona manda el mail a una dirección o a otra.

De esta forma conseguimos mandar emails a distintos administradores en función de algún parámetro utilizado para la orden del pedido, en este caso la provincia.

Newbie

Posts

Joined
Thu Nov 28, 2013 1:11 am

Post by tesyplantas » Thu Dec 05, 2013 12:28 am

Hola Kelgonar, será que puedas poner la parte del código de como quedó, claro utilizando correos falsos de ejemplo. Te agradecería mucho y así aprendemos los demás. Saludos y gracias de antemano.

New member

Posts

Joined
Mon Jul 29, 2013 2:36 am

Post by kelgonar » Fri Dec 06, 2013 1:36 am

Voy a explicar antes un poco, para que quede más claro, para qué hice esto.

Muchos de nosotros nos encontramos con el problema de que Opencart sólo soporta un email de administrador.
Se nos pueden dar varios casos :
1.- Que queramos tener varias subtiendas, y que cada subtienda tenga un email de administrador distinto para recibir los pedidos.
2.- Que sólo queramos una tienda, pero que nos interese por algún motivo tener varios emails, para que los pedidos según algún parámetro vaya a un email u a otro.

Este último es mi caso, necesitaba que en cada provincia de Galicia hubiera un responsable de tramitar los pedidos, por lo que para que fuera automático la recepción de los pedidos para cada provincia hice esto.

Fui a catalog->model->checkout-> order.php, este documento es el que manda los emials después de que el pedido esté confirmado.
Pues bien en mi caso si os fijais en la línea 4 y la linea 17 o muy próxima tenemos este código:

$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");

****esta primera consulta a la base de datos accede a la tabale order y obtiene el ID de del pedido actual (order_id) y el resultado lo guarda en la variable $order_query***

$zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'");


*** esta consulta accede a la tabla zone, esta tabla tiene todas las provincias de todos los países, y extrae la provincia del pedido actual****
Después con los resultados de estas consultadas se opera para extraer el código por ejmplo España, Es, Asturias, AS, que ha nosotros nos da igual, pero afortunadamente para mi ya tenemos el ID de la provincia guardado en la variable $zone_query.

Bajando más en el fichero llegamos a esta zona sobre línea 363

$mail->setSubject($subject);
$mail->setTo($this->config->get('config_email'));
$mail->setHtml($html);
$mail->send();

// Send to additional alert emails
//$pattern = '/^[A-Z0-9._%-+]+@[A-Z0-9][A-Z0-9.-]{0,61}[A-Z0-9]\.[A-Z]{2,6}$/i';
//$emails = explode(',', $this->config->get('config_alert_emails'));
//foreach ($emails as $email) {
//if (strlen($email) > 0 && preg_match($pattern, $email)) {
//$mail->setTo($email);
//$mail->send();
//}

**** Aque es donde se mandan los emails ya estructurados mas arriba en el código con todos los datos.
EN mi caso he comentado la zona de enviar alertas , esta zona es donde coge los emails de configurcicon alertas adicionales y he puesto un par de if

//**********************************************************************************************************************************
//primero acceso a la base de datos y saco de nuevo el id de la provincia
$xorder_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$order_id . "'");

//inicio if si el resultado de la consulta no es nullo
if ($xorder_query->num_rows) {



if(($xorder_query->row['shipping_zone_id']) == 1) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();
}

elseif (($xorder_query->row['shipping_zone_id']) == 2) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();
}

elseif (($xorder_query->row['shipping_zone_id']) == 3) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();
}

elseif (($xorder_query->row['shipping_zone_id']) == 4) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();
}

elseif (($xorder_query->row['shipping_zone_id']) == 5) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();
}

elseif(($xorder_query->row['shipping_zone_id']) == 6) {


$mail->setTo("aaaaaa@aa.es");
$mail->send();}

}
//fin if rows


así que básicamente, y para aclararlo aun más en este punto, el pedido ya esta confirmado, y de la tabla order de la base de datos y con algún conocimiento de sql podemos extraer cualquier dato del pedido guardado en order, o con el dato extraído de order buscarlo en otra tabla.
En este caso con el id de provincia extraído del pedido, he hecho 6 if, en los que si el id de provincia== x siendo x mis disntitos id´s de provincias manda el email a una cuenta o a otra.
Tengo que aclarar que modifique los id_zone (id de provincias), para que las que me interesen sean del 1 al 6, lo podemos cambiar en la base de datos en la tabla zone. Sino los queréis cambiar no pasa nada pero tenéis que sustituir el 1 ... 6 por el numero que vuestra provincia tenga como id, RECORDAR la tabla zone de la base de datos contiene todas las provincias.

Si tenéis dudas, preguntadme

Newbie

Posts

Joined
Thu Nov 28, 2013 1:11 am

Post by tesyplantas » Fri Dec 06, 2013 2:46 am

Muchas gracias Kelgonar por tu explicación y buena voluntad de compartir. Tu redacción es digna de ser un artículo de revista. Gracias de nuevo.

PD. Guardé la respuesta para un uso futuro.

New member

Posts

Joined
Mon Jul 29, 2013 2:36 am

Post by kelgonar » Sun Dec 08, 2013 3:35 am

Gracias a ti, yo creo que aunque Opencart esté listo para funcionar, es bueno que nos atrevamos a modificarlo para hacerlo exacto a lo que queramos sin tener que depender de los módulos que existen.
En mi caso en la carrera Ingenieria Informatica de Gestión no toque nada php ni lenguajes dedicados a web server, pero bueno poco a poco me voy poniendo las pilas.
Lo que si controlo es sql, con lo que al ver como está una sentencia estructurada en php, la entiendo rápido, es más para modificar impuestos y cosas similares o incrementar en % los precios, lo hago directamente con SQL y Update, me resulta más rápido que Opencart o que modificar los productos uno a uno.

Un saludo y espero que esto os sirva de ayuda.

Newbie

Posts

Joined
Thu Nov 28, 2013 1:11 am
Who is online

Users browsing this forum: No registered users and 5 guests