Tabla de tarifas de envío según precio DESPUÉS DEL DESCUENTO – Magento

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

Pensamientos de 26 en “Table rates shipping based on price AFTER DISCOUNT – Magento”

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

  2. Gracias por esto. Funciona en 1.8.1.0

    ¡Me sorprendió que este tipo de cosas necesitaran un 'truco' realmente! 🙂

  3. 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?

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

  5. ¿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());
    }

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

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

  8. Retroenlace: Magento, Versand per Table-Rates & Rabattgutschein - alexander-steireif.com

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

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

  10. 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());
    }
    }
    }

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol
Ir arriba