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)
Detta löste faktiskt problemet i Magento 1.7
Tack, detta löste vårt problem med att beräkna fraktkostnader vid användning av rabattkuponger i Magento 1.6.1.
Tack för detta. Fungerar i 1.8.1.0
Blev förvånad över att sånt här behövde ett "hack" verkligen! 🙂
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?
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.
Fantastiskt, tack för hjälpen, det här lilla utdraget om att aktivera tabellpriser löste mina problem.
Fungerar som en charm.
Mycket tacksam amigo.
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());
}
Jag... Jag älskar dig. Många timmar ägnat åt att kämpa med detta, tack!
Du är The Dude!!! Tack kompis 🙂
det fungerar bra.
Tack.
Fick du detta att fungera i 1.9?
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
ersätt getPackageValue med getPackageValueWithDiscount i all fil. Testad på 1.9 och fungerar
Jag kan bekräfta att denna fix fungerar på 1.9.2 också.
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.
Jag skapade den här tråden. Detta är precis vad du behöver.
Jag använde för 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
Pingback: Magento, Versand per tabell-Rates & Rabattgutschein - alexander-steireif.com
Bra, det fungerar till och med i 1.5.1 🙂
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.
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.
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());
}
}
}
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
tack så mycket, detta har löst detta förvirrande problem!
Fungerar perfekt i Magento 1.9.3.8
Tack så mycket!!
Finns det någon lösning för magento 2?