Das Modul ot_loworderfee.php "Mindermengenzuschlag" besitzt einen Bug, wenn als Versandart die Selbstabholung eingestellt ist ("selfpickup").
Der Betrag und die MwSt. für den Mindermengenzuschlag berechnet sich anhand der Landes-ID des Versanlandes
$order->delivery['country_id']. Da bei Selbstabholung keine Versandadresse existiert, sind
$order->delivery['country_id'] und
$order->delivery['zone_id'] immer
null, was zur Auswahl des falschen Zuschlags und zur einer falschen Mehrwertsteuerberechnung führt.
Folgende Änderungen im Code beheben das Problem:
Aus Zeile 44 (in Shop-Version 2.0.6.0 rev 13500)
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) $pass = true;
$low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER;
sollte am besten werden:
case 'national': if ($order->delivery['country_id'] == STORE_COUNTRY
|| stripos($order->info['shipping_class'], 'selfpickup') !== false) $pass = true; $low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER
; Aus Zeile 53 (in Shop-Version 2.0.6.0 rev 13500)
case 'both':
if ($order->delivery['country_id'] == STORE_COUNTRY) {
$low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER;
$low_order_fee_value = MODULE_ORDER_TOTAL_LOWORDERFEE_FEE;
} else {
$low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER_INTERNATIONAL;
$low_order_fee_value = MODULE_ORDER_TOTAL_LOWORDERFEE_FEE_INTERNATIONAL;
}
sollte am besten werden:
case 'both': if ($order->delivery['country_id'] == STORE_COUNTRY
|| stripos($order->info['shipping_class'], 'selfpickup') !== false) { $low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER
; $low_order_fee_value = MODULE_ORDER_TOTAL_LOWORDERFEE_FEE
; } else { $low_order_fee_value_under = MODULE_ORDER_TOTAL_LOWORDERFEE_ORDER_UNDER_INTERNATIONAL
; $low_order_fee_value = MODULE_ORDER_TOTAL_LOWORDERFEE_FEE_INTERNATIONAL
; } Die obigen Abprüfungen auf "selfpickup" sorgen dafür, dass immer die nationalen inländischen Mindermengenzuschläge verwendet werden.
Entsprechend muss auch noch die Steuerberechnung angepasst werden. Hier muss die lokale Mehrwertsteuer für das Land des Shops (in dem ja abgeholt wird) verwendet werden. Dazu folgender Lösungsvorschlag:
Nach den Zeilen 72 und 73
$tax = xtc_get_tax_rate(MODULE_ORDER_TOTAL_LOWORDERFEE_TAX_CLASS, $order->delivery['country']['id'], $order->delivery['zone_id']);
$tax_description = xtc_get_tax_description(MODULE_ORDER_TOTAL_LOWORDERFEE_TAX_CLASS, $order->delivery['country']['id'], $order->delivery['zone_id']);
fügt man am besten noch ein:
if ( stripos($order->info['shipping_class'], 'selfpickup') !== false ) { $tax = xtc_get_tax_rate
(MODULE_ORDER_TOTAL_LOWORDERFEE_TAX_CLASS
, STORE_COUNTRY
, STORE_ZONE
); $tax_description = xtc_get_tax_description
(MODULE_ORDER_TOTAL_LOWORDERFEE_TAX_CLASS
, STORE_COUNTRY
, STORE_ZONE
); } [
EDIT Tomcraft 31.07.2021: Shopversion korrigiert, siehe:
FAQ: Wichtiger Hinweis bzgl. Angabe der Shopversion!]
Linkback: https://www.modified-shop.org/forum/index.php?topic=41958.0