Magento tiene un error bastante grande que permite que el módulo de envío calcule los costos de envío sin descuentos ni reglas de envío (si se aplican).
Me llevó horas encontrar una solución, así que si la usas, te agradecería mucho que consultaras este blog.
Cómo lo arreglé
Ir a:
/app/code/local/Mage/Shipping/Model/Carrier/Tablerate.php
Agregue el siguiente código alrededor de la línea 77 (en la función collectRates):
$s_price = $request->obtenerValorDePaqueteConDescuento();
$request->establecerValorPaquete($s_precio);
Ahora, las tarifas de envío se calculan sobre el subtotal menos el descuento. Espero que esto resuelva el problema (funciona en la versión 1.7).
De hecho, esto resolvió el problema en Magento 1.7.
Gracias, esto resolvió nuestro problema con el cálculo de los costos de envío al usar cupones de descuento en Magento 1.6.1.
Gracias por esto. Funciona en 1.8.1.0
¡Me sorprendió que este tipo de cosas necesitaran un 'truco' realmente! 🙂
Hola, lo siento, tengo algunos problemas para aplicar esas líneas. Estoy usando una extensión gratuita para las tarifas de envío “MATRIXRATE”. ¿Puede ser diferente debido a esta extensión?
Hola,
Finalmente me funcionó usar una matriz de tarifas de envío al cambiar el “PackageValue” por “PackageValueWithDiscount” y cuando noto que debes tener activo el método de envío 'tablerates' (en el sistema – métodos de envío), incluso si la hoja de cálculo está vacía, entonces el complemento 'matrixrates' también obtiene el subtotal correcto.
Gracias, un cordial saludo.
Fantástico, gracias por la ayuda, este pequeño fragmento sobre cómo habilitar las tarifas de mesa resolvió mis problemas.
Funciona de maravillas.
Muchas gracias amigo.
¿Dónde agregar ?????/
función pública collectRates(Mage_Shipping_Model_Rate_Request $request)
{
si (!$this->getConfigFlag('activo')) {
devuelve falso;
}
// excluir el precio de los productos virtuales del valor del paquete si está preconfigurado
si (!$this->getConfigFlag('incluir_precio_virtual') && $request->getAllItems()) {
foreach ($request->getAllItems() como $item) {
si ($item->getParentItem()) {
continuar;
}
si ($item->getHasChildren() y $item->isShipSeparately()) {
foreach ($item->getChildren() como $child) {
si ($child->getProduct()->isVirtual()) {
$request->establecerValorDePaquete($request->obtenerValorDePaquete() – $child->obtenerTotalDeFilaBase());
}
}
} elseif ($item->obtenerProducto()->isVirtual()) {
$request->establecerValorDePaquete($request->obtenerValorDePaquete() – $item->obtenerTotalDeFilaBase());
}
Yo… te amo. Pasé muchas horas luchando con esto, ¡gracias!
¡¡¡Eres el tipo!!! Gracias, amigo 🙂
Está funcionando bien.
Gracias.
¿Conseguiste que esto funcionara en 1.9?
No me funcionó en la versión 1.9. ¿Quizás me estoy perdiendo algo? Si alguien lo tiene funcionando en la versión 1.9, ¿puede publicar un archivo y un código? Gracias.
Reemplace getPackageValue con getPackageValueWithDiscount en todos los archivos. Probado en 1.9 y funciona
Puedo confirmar que esta solución también funciona en 1.9.2.
Hola.
Estoy usando una regla de carrito de promoción:
– Envío gratuito cuando el país sea España
– El subtotal es igual o mayor a 49,59 Euros.
Cuando la gente tiene 49,59 euros en el carrito, esto funciona bien.
Tengo la siguiente regla para el carrito de promociones:
– Código de descuento 10%
Pero cuando se aplica un cupón de descuento de 10% entonces sigue siendo gratis y el subtotal es menos de 49,59 con el cupón aplicado.
¿Como puedo solucionarlo?
Muchas gracias.
PD: Estoy usando 2 módulos con tablerates.csv configurado.
He creado este hilo. Esto es exactamente lo que necesitas.
Lo usé para magento 1.9.2
https://community.magento.com/t5/Admin-Configuration-Questions/How-to-setup-Free-Shipping-with-minimum-amount-for-selected/td-p/17674
Retroenlace: Magento, Versand per Table-Rates & Rabattgutschein - alexander-steireif.com
Genial, incluso funciona en 1.5.1 🙂
Hola ,
Genial, muchas gracias, me ahorró mucho tiempo. Me funcionó en Magento 1.9.0.1. Gracias, amigo.
Reemplacé getPackageValue con getPackageValueWithDiscount en el archivo Tablerate.php.
Hola,
Cuando realizo un pedido, aparece un mensaje de error después de cambiar el código: “Se produjo un error al procesar su pedido... Por favor, especifique el método de envío en Magento con la tarifa de la tabla”. Por favor, ayúdenme a resolver esto.
Me estoy volviendo loco, haciendo exactamente lo mismo que se indica arriba, pero no funcionará en 1.9.2.4
función pública collectRates(Mage_Shipping_Model_Rate_Request $request->getPackageValueWithDiscount())
{
si (!$this->getConfigFlag('activo')) {
devuelve falso;
}
// excluir el precio de los productos virtuales del valor del paquete si está preconfigurado
si (!$this->getConfigFlag('incluir_precio_virtual') && $request->getAllItems()) {
foreach ($request->getAllItems() como $item) {
si ($item->getParentItem()) {
continuar;
}
si ($item->getHasChildren() y $item->isShipSeparately()) {
foreach ($item->getChildren() como $child) {
si ($child->getProduct()->isVirtual()) {
$request->establecerValorDePaquete($request->obtenerValorDePaqueteConDescuento() – $child->obtenerTotalDeFilaBase());
}
}
} elseif ($item->obtenerProducto()->isVirtual()) {
$request->establecerValorDePaquete($request->obtenerValorDePaqueteConDescuento() – $item->obtenerTotalDeFilaBase());
}
}
}
Solo para aclarar lo que dijo Raúl sobre Matrixrate.php, este es un complemento de aplicaciones para tiendas web. Este truco funciona perfectamente en Magento 1.9.2.4
Agregue este código en la parte superior de la función collectRates
$s_price = $request->obtenerValorDePaqueteConDescuento();
$request->establecerValorPaquete($s_precio);
Luego cambia todo el código “getPackageValue” a “getPackageValueWithDiscount”
Gracias por este hilo.
-J
¡Muchas gracias! ¡Esto ha solucionado este desconcertante problema!
Funciona perfectamente en Magento 1.9.3.8
¡¡Muchas gracias!!
¿Existe alguna solución para magento 2?