Tabell priser frakt baserat på pris EFTER RABATT – Magento

Magento har en ganska stor bugg som gör att fraktmodulen kan beräkna fraktkostnader utan rabatt eller fraktregler (om de tillämpas).

Det kostade mig timmar att hitta en lösning, så om du använder den skulle jag verkligen uppskatta om du hänvisar till den här bloggen.

Hur jag fixade det

Gå till:

/app/code/local/Mage/Shipping/Model/Carrier/Tablerate.php

Lägg till följande kod runt rad 77 (i collectRates-funktionen):

$s_price = $request->getPackageValueWithDiscount();
$request->setPackageValue($s_price);

Nu beräknas fraktpriserna på delsumman minus rabatten. Jag hoppas att detta löser problemet (det gör det i 1.7)

26 reaktioner på ”Table rates shipping based on price AFTER DISCOUNT – Magento”

  1. Tack, detta löste vårt problem med att beräkna fraktkostnader vid användning av rabattkuponger i Magento 1.6.1.

  2. Hej, förlåt, jag har problem med att tillämpa dessa rader. Jag använder ett gratistillägg för fraktpriser "MATRIXRATE". Kan det vara annorlunda eftersom denna förlängning?

  3. Hej,

    äntligen fungerade det för mig att använda en matrisfrakthastighet när jag ändrade “PackageValue” för “PackageValueWithDiscount” och när jag märker att du måste ha \'tablerates\' fraktmetoden aktiv (i systemet – fraktmetoder) , även om kalkylarket är tomt, så får \'matrixrates\' den korrekta delsumman också.

    tack, vänliga hälsningar.

  4. Var ska man lägga till ????/
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
    if (!$this->getConfigFlag('active')) {
    returnera falskt;
    }

    // exkludera priset för virtuella produkter från paketvärdet om det är förkonfigurerat
    if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) {
    foreach ($request->getAllItems() som $item) {
    if ($item->getParentItem()) {
    fortsätta;
    }
    if ($item->getHasChildren() && $item->isShipSeparately()) {
    foreach ($item->getChildren() som $child) {
    if ($child->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValue() – $child->getBaseRowTotal());
    }
    }
    } elseif ($item->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValue() – $item->getBaseRowTotal());
    }

  5. Fungerade inte för mig i 1.9. Jag kanske saknar något? Om någon har det att fungera i 1.9 kan du posta som fil och kod? Tacka

  6. Hej.
    Jag använder en kampanjregel:
    – Fri frakt när landet är Spanien
    – Delsumman är lika med eller större än 49,59 euro.

    När folket har 49,59 Euro i vagnen fungerar detta bra.

    Jag har regel för kampanjvagn:
    – Rabattkod 10%

    Men när en rabattkupong på 10% tillämpas är fortfarande fri frakt och delsumman minus 49,59 med kupongen tillämpad.

    Hur kan jag lösa det?
    Tack så mycket.

    PD: Jag använder 2 moduler med tablerates.csv konfigurerat.

  7. Pingback: Magento, Versand per tabell-Rates & Rabattgutschein - alexander-steireif.com

  8. hej

    Stort tack, sparade mycket tid. Det fungerade för mig i magento 1.9.0.1. Tack kompis.

    Jag hade ersatt getPackageValue med getPackageValueWithDiscount i filen Tablerate.php.

    1. Hej,

      När jag skickar beställningen får jag ett felmeddelande efter att ha ändrat koden, "Det uppstod ett fel när jag bearbetade din beställning... vänligen ange fel för fraktmetod i magento med tabellpris". Snälla hjälp mig att lösa detta.

  9. Blir galen, gör precis som ovan men det kommer inte att fungera i 1.9.2.4

    public function collectRates(Mage_Shipping_Model_Rate_Request $request->getPackageValueWithDiscount())
    {
    if (!$this->getConfigFlag('active')) {
    returnera falskt;
    }

    // exkludera priset för virtuella produkter från paketvärdet om det är förkonfigurerat
    if (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) {
    foreach ($request->getAllItems() som $item) {
    if ($item->getParentItem()) {
    fortsätta;
    }
    if ($item->getHasChildren() && $item->isShipSeparately()) {
    foreach ($item->getChildren() som $child) {
    if ($child->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValueWithDiscount() – $child->getBaseRowTotal());
    }
    }
    } elseif ($item->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValueWithDiscount() – $item->getBaseRowTotal());
    }
    }
    }

  10. Bara för att förtydliga vad Raul sa för Matrixrate.php, detta är en webshopapps-plugin. Detta hack fungerar perfekt på Magento 1.9.2.4

    lägg till den här koden överst i collectRates-funktionen

    $s_price = $request->getPackageValueWithDiscount();
    $request->setPackageValue($s_price);

    Ändra sedan all "getPackageValue"-kod till "getPackageValueWithDiscount"

    Tack för den här tråden.
    -J

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen