Pagina 1 di 1
Problema Sconti
Inviato: 07/11/2005, 16:25
da alank
Salve a tutti,
ho provato a sviluppare un modulo per effettuare degli sconti calcolandoli in modo "particolare".
Pagando con contrassegno, Bonifico, PayPal, sembra funzionare.
Per la carta di credito invece il pos della banca mi ignora lo sconto facendomi pagare il totale per intero.
Premetto che, nel modulo, il valore totale dell'ordine è modificato come segue:
$order->info['total'] -= $sconto;
Per ovviare al fatto che l'errore potesse essere del modulo che ho scritto io, mi sono istallato un modulo che ho trovato on line:
ot_discount_quant
E mi da lo stesso problema.
Per il pagamento con carta di credito utilizzo il modulo del consorzio triveneto.
Qualcuno può suggerirmi come uscirne?
Re: Problema Sconti
Inviato: 07/11/2005, 19:54
da marcus
alank ha scritto:Salve a tutti,
ho provato a sviluppare un modulo per effettuare degli sconti calcolandoli in modo "particolare".
Pagando con contrassegno, Bonifico, PayPal, sembra funzionare.
Per la carta di credito invece il pos della banca mi ignora lo sconto facendomi pagare il totale per intero.
Premetto che, nel modulo, il valore totale dell'ordine è modificato come segue:
$order->info['total'] -= $sconto;
Per ovviare al fatto che l'errore potesse essere del modulo che ho scritto io, mi sono istallato un modulo che ho trovato on line:
ot_discount_quant
E mi da lo stesso problema.
Per il pagamento con carta di credito utilizzo il modulo del consorzio triveneto.
Qualcuno può suggerirmi come uscirne?
Se usi il modulo Ctriv scaricabile da oscommerce.com sezione contrib, il problema è dovuto al fatto che in questa versione del modulo i dati vengono passati al gateway (richiesta PaymentInit), mediante il metodo pre_confirmation_check(), PRIMA che sia effettuata l'elaborazione dei moduli order total.
Questo fa si che qualsiasi sconto venga ignorato semplicemente perchè viene calcolato dopo.
Il problema non si presenta negli altri metodi di pagamento perchè il totale viene processato dopo la chiamata ad order_total.
Prova ad invertire le chiamate nel file checkout_confirmation.php, il problema dovrebbe risolversi.
Marcus
Inviato: 08/11/2005, 11:05
da alank
Grazie mille per l'aiuto.
Purtoppo però ho effettuato la modifica nel file checkout_confirmation.php
alle righe (circa):69
// load the selected shipping module
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping);
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
mettendole prima della riga 51 circa
// load the selected payment module
require(DIR_WS_CLASSES . 'payment.php');
$payment_modules = new payment($payment);
Ma non è cambiato nulla.
Il POS continua ad ignorare lo sconto.
O forse devo modificare dell'altro?
Grazie mille ancora
Inviato: 08/11/2005, 21:24
da marcus
alank ha scritto:Grazie mille per l'aiuto.
Purtoppo però ho effettuato la modifica nel file checkout_confirmation.php
alle righe (circa):69
// load the selected shipping module
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping);
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
mettendole prima della riga 51 circa
// load the selected payment module
require(DIR_WS_CLASSES . 'payment.php');
$payment_modules = new payment($payment);
Ma non è cambiato nulla.
Il POS continua ad ignorare lo sconto.
O forse devo modificare dell'altro?
Grazie mille ancora
Difficile rispondere senza vedere il codice che usi.
Prova a postare il codice del modulo Ctriv, del file checkout_confirmation e del tuo modulo sconti così ci diamo un occhiata.
Marcus
Inviato: 09/11/2005, 20:09
da marcus
Rispondo qui sul forum al tuo Pm perchè potrebbe essere utile anche ad altri.
Ho visto il codice e il problema è molto probabilmente quello di cui ti ho scritto ieri.
L'errore è dovuto al fatto che non basta spostare l'istanza
della classe order_total ma occorre anche invocare il metodo process PRIMA della chiamata a pre_confirmation.
Prova a sostituire il codice seguente del file
checkout_confirmation:
Codice: Seleziona tutto
// load the selected shipping module Spostati dalla riga 69
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping);
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
require(DIR_WS_CLASSES . 'payment.php');
$payment_modules = new payment($payment);
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
con questo in cui ho semplicemente aggiunto la chiamata a process:
Codice: Seleziona tutto
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping);
require(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
require(DIR_WS_CLASSES . 'payment.php');
$payment_modules = new payment($payment);
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
if (MODULE_ORDER_TOTAL_INSTALLED) {
$order_total_modules->process();
}
Dovrebbe funzionare correttamente.
Marcus
Inviato: 10/11/2005, 11:43
da alank
Ti ringrazio,
commentando anche ila chiamata alla riga 240
//$order_total_modules->process();
del file checkout_confirmation.php
sembra funzionare.
Il pos della banca mi fa pagare l'importo scontato.
Grazie davvero!