Jump to content

Recommended Posts

Hola buenas tardes.

 

Me llamo Paula y desde hace casi un año estoy administrando la web https://www.electronicamente.com/ es la versión 1.6 y tema leo_moonsun. 

 

Antes teníamos una tarifa plana para los envíos de 5.90€. Pero recientemente hemos añadido dos opciones: 

 

--> 3.50€: Para algunas categorías especificas y cuya compra sea menor de 30€. Solo para la península y baleares.

 

--> Envío gratuito : Para 20 productos específicos, pero con la condición de que si hay un producto de envío gratuito en el carrito de compra, el resto de artículos añadidos deben ser también gratuitos. Solo para península y baleares. 

 

No puedo incluir los transportes a cada articulo, porque no cumpliría la condición que se me solicita para envió gratuito.

A excepción del precio y zona no hay nada más que pueda usar de las opciones del transporte. 

En prioridades de producto tengo que el envío de 5.90€ sea la prioridad, al menos hasta que lo haya solucionado. 

 

Para que se pudiera implementar de forma inmediata, lo que hice fue modificar el order-carrier.tpl, para que solo salgan las opciones de envío según unas condiciones. No puede ser más que una solución temporal. Di por hecho que a estas alturas lo tendría solucionado. 

 

Pensé que la solución es un override de Carrier.php de la función

 getCarriersForOrder()

Elimine esta condición:

if ($shipping_method != Carrier::SHIPPING_METHOD_FREE){}

Y añadí este código:

 

//especificaciones unicas para el transporte gratuito
            if ($row['id_carrier'] == 39 || $row['id_carrier'] == 42 || $row['id_carrier'] == 43 || $row['id_carrier'] == 46)
            {
                $products = $cart->getProducts();
                foreach ($products as $product) {
                    $r = $product['reference'];
                    if ($r == 'H000186' || $r ==  'C000138' ||  $r ==  'C000077' ||  $r ==  'C000084' || $r == 'C000238' ||  $r == 'C000250'
                        ||  $r == 'c000251' || $r == 'C000234' ||  $r ==  'C000235' ||  $r ==  'C000257' ||  $r ==  'c000258'
                        ||  $r ==  'XPRO64/4W' ||  $r ==  'XPRO64/4B' ||  $r ==  'B000151' ||  $r == 'B000150' ||  $r == 'B000147'
                        ||  $r ==  'B000146' ||  $r ==  'B000174' || $r ==  'VXM401' ||  $r ==  'VXM400')
                    {
                        /*envio gratis para todos*/
                        print_r(' envio gratis para todos');
                    }
                    else{
                        print_r('Nada de envío gratis');
                        unset($result[$k]);
                        continue;
                    }
                }
            }

El problema viene cuando me sale por pantalla que he entrado al else 'nada de envío gratis', pero el transportista es el gratuito.

 

Y tengo listo para implementar, que no lo implementare hasta que haya solucionado primero los gratuitos, el siguiente añadido:

 

 

//especificaciones unicas para el transporte Paquete 72 horas
if ($row['id_carrier']==36 || $row['id_carrier']==38 || $row['id_carrier']==40 || $row['id_carrier']==44 || $row['id_carrier']==48 || $row['id_carrier']==49)
{
	$products = $cart->getProducts();
	foreach ($products as $product){
		$id=$product['id_product'];
		print_r('id_product');
		print_r($id);
		$idResultado=Db::getInstance()->getValue('  
			select id_product
			from ps_product 
			where price*1.21<30
			and (id_category_default = 1099
			or id_category_default =  1100
			or id_category_default = 1101
			or id_category_default = 1102
			or id_category_default = 1103
			or id_category_default = 1108
			or id_category_default = 1109
			or id_category_default = 1111
			or id_category_default = 1028
			or id_category_default = 925
			or id_category_default = 141
			or id_category_default = 932
			or id_category_default = 98
			or id_category_default = 124
			or id_category_default = 171
			or id_category_default = 275
			or id_category_default = 122
			or id_category_default = 946
			or id_category_default = 272
			or id_category_default = 1043
			or id_category_default = 142
			or id_category_default = 1022
			or id_category_default = 970
			or id_category_default = 86
			or id_category_default = 89
			or id_category_default = 93
			or id_category_default = 184
			or id_category_default = 892
			or id_category_default = 959
			or id_category_default = 81
			or id_category_default = 82
			or id_category_default = 99
			or id_category_default = 100
			or id_category_default = 186
			or id_category_default = 187
			or id_category_default = 188
			or id_category_default = 190
			or id_category_default = 191
			or id_category_default = 194
			or id_category_default = 195
			or id_category_default = 954
			or id_category_default = 965
			or id_category_default = 1076
			or id_category_default = 87)
			and id_product='.$id.';');
		print_r('resultado');
		print_r($idResultado);
		if(empty($idResultado)){
			print_r('Si la consulta da un resultado vacío destruye los resultados');
			unset($result[$k]);
			continue;
		}
	}
} 
 
Estos cambios los estoy probando en una versión no publica que tengo para pruebas de la web. Donde tengo la misma configuración mencionada a excepción del .tpl, que esta sin modificar, y  de las prioridades que están en orden del más barato primero. 
 
Os paso captura del problema y el override en archivos adjuntos. 
 
Esta es la primera vez que añado un tema al foro. Gracias por vuestra ayuda.
 
Paula

 

 

Carrier.zip

post-1285380-0-08628400-1496074895_thumb.png

Edited by PaulaF (see edit history)
Link to comment
Share on other sites

Me auto contesto  :P

 

Conseguí que el código funcionará a un 50%, unas veces sí, otras no. Al no encontrar la variable que hace que a veces funcione, y a veces no. Descarte el código. Lo que hice fue poner los transportistas producto por producto y un vale descuento con acción envío gratuito y en las condiciones añadir una nueva regla de grupo al que añadí los productos. De esa manera lo que hace que el transportista de 5.90 lo pone como gratuito. No es que seleccione el transporte gratuito pero nos valdrá igual. 

 

Si no funciona a la primera debes ponerle un código al azar, guardar y luego eliminar el código y volver a guardar. Así os funcionara según la condición y sin necesidad de que el cliente deba poner un código. 

 

Os adjunto captura de pantalla. 

 

He aprendido mucho sobre la configuración de transportistas y vales descuento por aquí, así que igualmente es como si el foro me hubiera ayudado. Pero especial agradecimiento a mi compañero Dani que fue el que me dio la idea de los vales. 

 

Saludos

Paula

Edited by PaulaF (see edit history)
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...