Pagina 1 di 1

Scelta tipologia pagamento

Inviato: 08/08/2007, 10:05
da titto
Salve a tutti,
avrei la necessità di selezionare i tipi di pagamento in base all'importo della spedizione. Se il prezzo è superiore ad un certo importo, allora non devo permettere il pagamento alla consegna ma solo tramite bonifico o carta di credito.
Esiste una contrib in tal senso?
Grazie,
Antonio

Inviato: 09/08/2007, 21:48
da Spiderweb
Ciao,
la disabilitazione di un metodo di pagamento in base all'importo io l'ho fatta modificando la contribution inversa, cioè per disabilitare se l'importo è troppo basso.

Ti provo a postare tutto il codice del file cod.php (pagamento alla consegna appunto) e ti metto in rosso le righe da aggiungere.

<?php
/*
$Id: cod.php,v 1.28 2003/02/14 05:51:31 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright (c) 2003 osCommerce

Released under the GNU General Public License
*/

class cod {
var $code, $title, $description, $enabled;

// class constructor
function cod() {
global $order;

$this->code = 'cod';
$this->title = MODULE_PAYMENT_COD_TEXT_TITLE;
$this->description = MODULE_PAYMENT_COD_TEXT_DESCRIPTION;
$this->sort_order = MODULE_PAYMENT_COD_SORT_ORDER;
$this->enabled = ((MODULE_PAYMENT_COD_STATUS == 'True') ? true : false);

if ((int)MODULE_PAYMENT_COD_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_COD_ORDER_STATUS_ID;
}

if (is_object($order)) $this->update_status();
}

// class methods
function update_status() {
global $order;

if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_COD_ZONE > 0) ) {
$check_flag = false;
$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_COD_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
while ($check = tep_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
} elseif ($check['zone_id'] == $order->delivery['zone_id']) {
$check_flag = true;
break;
}
}

if ($check_flag == false) {
$this->enabled = false;
}
}

// disable the module if the order only contains virtual products
if ($this->enabled == true) {
if ($order->content_type == 'virtual') {
$this->enabled = false;
}
}
$max_amount_allowed = MODULE_PAYMENT_COD_MAX_AMOUNT_ALLOWED;
if ( ($this->enabled == true) && ( $order->info['total'] > (int)$max_amount_allowed) && ( $max_amount_allowed != "" ) ) $this->enabled = false;
}


function javascript_validation() {
return false;
}

function selection() {
return array('id' => $this->code,
'module' => $this->title);
}

function pre_confirmation_check() {
return false;
}

function confirmation() {
return false;
}

function process_button() {
return false;
}

function before_process() {
return false;
}

function after_process() {
return false;
}

function get_error() {
return false;
}

function check() {
if (!isset($this->_check)) {
$check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_COD_STATUS'");
$this->_check = tep_db_num_rows($check_query);
}
return $this->_check;
}

function install() {
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Cash On Delivery Module', 'MODULE_PAYMENT_COD_STATUS', 'True', 'Do you want to accept Cash On Delevery payments?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Payment Zone', 'MODULE_PAYMENT_COD_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'tep_get_zone_class_title', 'tep_cfg_pull_down_zone_classes(', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_COD_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Set Order Status', 'MODULE_PAYMENT_COD_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");
tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Massimo ammontare accettato.', 'MODULE_PAYMENT_COD_MAX_AMOUNT_ALLOWED', '99999', 'Valore massimo accettato, in Euro, per questo modulo.', '6', '0', now())");
}

function remove() {
tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
}

function keys() {
return array('MODULE_PAYMENT_COD_STATUS', 'MODULE_PAYMENT_COD_ZONE', 'MODULE_PAYMENT_COD_ORDER_STATUS_ID', 'MODULE_PAYMENT_COD_MAX_AMOUNT_ALLOWED', 'MODULE_PAYMENT_COD_SORT_ORDER');
}
}
?>

Non dovrei essermi dimenticato niente....cmq per sicurezza fai un backup prima di modificare il codice, non si sa mai :wink:

Quelle righe le puoi mettere in qualunque metodo di pagamento e, come ti ho detto, se vuoi le puoi usare anche per la funzione inversa, cioè per non far accettare un pagamento se l'importo è troppo basso rispetto a quello che te stabilisci, basta cambiare il segno > in < e dove c'è la scritta MAX metti MIN :)

Ciao, Stefano

Re: Scelta tipologia pagamento

Inviato: 22/01/2009, 15:57
da turi64
Salve,

vorrei anche io far apparire il pagamento alla consegna solo ad alcuni clienti appartenenti ad un certo gruppo.

Come potrei fare?

Grazie mille.

Salvatore