Pagina 1 di 1

Spedizione gratis e pagamento con Carta di credito

Inviato: 10/04/2007, 12:51
da amstaff
Cè modo di forzare la spedizione gratis e pagamento con carta di credito, cioè chi paga con carta di credito ha le spedizioni gratis.

Re: Spedizione gratis e pagamento con Carta di credito

Inviato: 11/04/2007, 18:51
da marcus
amstaff ha scritto:Cè modo di forzare la spedizione gratis e pagamento con carta di credito, cioè chi paga con carta di credito ha le spedizioni gratis.
Si, devi modificare il modulo:

includes/modules/order_total/ot_shipping.php

aggiungendo nel metodo process il codice seguente:

Codice: Seleziona tutto

if ($order->info['payment_method'] == 'Carta di Credito - PayPal'){
			$order->info['shipping_method'] = $this->title;
			$order->info['total'] -= $order->info['shipping_cost'];
			$order->info['shipping_cost'] = 0;
}
Il codice completo con in grassetto la parte aggiunta è:
function process() {
global $order, $currencies;

if (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') {
switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) $pass = true; break;
case 'international':
if ($order->delivery['country_id'] != STORE_COUNTRY) $pass = true; break;
case 'both':
$pass = true; break;
default:
$pass = false; break;
}

if ( ($pass == true) && ( ($order->info['total'] - $order->info['shipping_cost']) >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
$order->info['shipping_method'] = $this->title;
$order->info['total'] -= $order->info['shipping_cost'];
$order->info['shipping_cost'] = 0;
}
}


if ($order->info['payment_method'] == 'Carta di Credito - PayPal'){
$order->info['shipping_method'] = $this->title;
$order->info['total'] -= $order->info['shipping_cost'];
$order->info['shipping_cost'] = 0;
}

$module = substr($GLOBALS['shipping']['id'], 0, strpos($GLOBALS['shipping']['id'], '_'));

if (tep_not_null($order->info['shipping_method'])) {
if ($GLOBALS[$module]->tax_class > 0) {
$shipping_tax = tep_get_tax_rate($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
$shipping_tax_description = tep_get_tax_description($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);

$order->info['tax'] += tep_calculate_tax($order->info['shipping_cost'], $shipping_tax);
$order->info['tax_groups']["$shipping_tax_description"] += tep_calculate_tax($order->info['shipping_cost'], $shipping_tax);
$order->info['total'] += tep_calculate_tax($order->info['shipping_cost'], $shipping_tax);

if (DISPLAY_PRICE_WITH_TAX == 'true') $order->info['shipping_cost'] += tep_calculate_tax($order->info['shipping_cost'], $shipping_tax);
}

$this->output[] = array('title' => $order->info['shipping_method'] . ':',
'text' => $currencies->format($order->info['shipping_cost'], true, $order->info['currency'], $order->info['currency_value']),
'value' => $order->info['shipping_cost']);
}
}
Naturalmente devi sostituire la stringa 'Carta di Credito - PayPal' con quella relativa al modulo di pagamento che stai utilizzando.

NOTA: nel file checkout_process.php la chiamata di elaborazione dei moduli order_total deve precedere la chiamata al metodo before_process del modulo di pagamento. Nei files originali di osC questo non avviene, si tratta di un bug noto da tempo che può dare problemi nei pagamenti con CC.

Questo è il codice corretto:

Codice: Seleziona tutto

$order_totals = $order_total_modules->process();

// load the before_process function from the payment modules
$payment_modules->before_process();
Saluti
Marcus