diff -ur orig/uc_ratequote/uc_ratequote.install uc_ratequote/uc_ratequote.install --- orig/uc_ratequote/uc_ratequote.install 2007-08-02 12:32:04.000000000 -0400 +++ uc_ratequote/uc_ratequote.install 2007-09-17 01:50:30.000000000 -0400 @@ -9,7 +9,8 @@ `qid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `min` float NOT NULL default '0', `max` float NOT NULL default '0', - `rate` float NOT NULL default '0' + `rate` float NOT NULL default '0', + `percent` float NOT NULL default '0' ) /*!40100 DEFAULT CHARACTER SET UTF8 */ ;"); break; case 'pgsql': @@ -19,3 +20,9 @@ function uc_ratequote_uninstall(){ db_query("DROP TABLE IF EXISTS {uc_ratequotes}"); } + +function uc_ratequote_update_1() { + $items = array(); + $items[] = update_sql("ALTER TABLE add percent float NOT NULL default '0'"); + return $items; +} diff -ur orig/uc_ratequote/uc_ratequote.module uc_ratequote/uc_ratequote.module --- orig/uc_ratequote/uc_ratequote.module 2007-08-01 14:49:08.000000000 -0400 +++ uc_ratequote/uc_ratequote.module 2007-09-17 01:55:29.000000000 -0400 @@ -142,6 +142,12 @@ '#field_prefix' => variable_get('uc_sign_after_amount', FALSE) ? '' : variable_get('uc_currency_sign', '$'), '#field_suffix' => variable_get('uc_sign_after_amount', FALSE) ? variable_get('uc_currency_sign', '$') : '', ); + $form['uc_ratequote']['uc_ratequote_order_percent'] = array('#type' => 'textfield', + '#title' => t('Shipping Percentage'), + '#default_value' => variable_get('uc_ratequote_order_percent', 0), + '#size' => 12, + '#field_suffix' => variable_get('uc_percentage_sign', '%'), + ); $form['buttons']['submit'] = array('#type' => 'submit', '#value' => t('Submit Changes') ); return $form; @@ -153,8 +159,9 @@ form_set_error('uc_ratequote_order_minimum', t('Order Minimum must be a number not less than 0.')); if ($form_values['uc_ratequote_order_maximum'] < 0 || !is_numeric($form_values['uc_ratequote_order_maximum'])) form_set_error('uc_ratequote_order_maximum', t('Order Maximum must be a number greater than 0.')); - if ($form_values['uc_ratequote_order_rate'] < 0 || !is_numeric($form_values['uc_ratequote_order_rate'])) - form_set_error('uc_ratequote_order_rate', t('Shipping rate must be a number not less than 0.')); + if ( ($form_values['uc_ratequote_order_rate'] < 0 && $form_values['uc_ratequote_order_percent'] < 0) || + (!is_numeric($form_values['uc_ratequote_order_rate']) && !is_numeric($form_values['uc_ratequote_order_percent'])) ) + form_set_error('uc_ratequote_order_rate', t('Shipping rate or percent must be a number not less than 0.')); // check that max is bigger than min if ($form_values['uc_ratequote_order_maximum'] < $form_values['uc_ratequote_order_minimum']) @@ -182,23 +189,25 @@ // check for and insert new rate quote if ($form_values['uc_ratequote_order_maximum'] > $form_values['uc_ratequote_order_minimum'] && $form_values['uc_ratequote_order_maximum'] > 0){ - db_query("INSERT INTO {uc_ratequotes} (min, max, rate) VALUES (%f, %f, %f)", $form_values['uc_ratequote_order_minimum'], $form_values['uc_ratequote_order_maximum'], $form_values['uc_ratequote_order_rate']); + db_query("INSERT INTO {uc_ratequotes} (min, max, rate, percent) VALUES (%f, %f, %f, %f)", $form_values['uc_ratequote_order_minimum'], $form_values['uc_ratequote_order_maximum'], $form_values['uc_ratequote_order_rate'], $form_values['uc_ratequote_order_percent']); } drupal_set_message(t('The configuration options have been saved.')); } function theme_uc_ratequote_admin_settings($form){ - $header = array(t('Delete'), t('Order Minimum'), t('Order Maximum'), t('Shipping Rate')); + $header = array(t('Delete'), t('Order Minimum'), t('Order Maximum'), t('Shipping Rate'), t('Shipping Percentage')); $result = db_query("SELECT * FROM {uc_ratequotes} ORDER BY min"); while ($r = db_fetch_object($result)) { $row = array(); $qid = $r->qid; $r->rate > 0 ? $rate = uc_currency_format($r->rate) : $rate = 'Free'; + $r->percent > 0 ? $percent = $r->percent . "%" : $percent = 'Free'; $row[] = drupal_render($form['rates'][$qid]['delete']); $row[] = uc_currency_format($r->min); $row[] = uc_currency_format($r->max); $row[] = $rate; + $row[] = $percent; $rows[] = $row; } $output .= theme('table', $header, $rows); @@ -234,22 +243,35 @@ $result = db_query("SELECT * FROM {uc_ratequotes}"); while ($r = db_fetch_object($result)) { - if($total <= $r->max && $total >= $r->min) + if($total <= $r->max && $total >= $r->min) { $rate = $r->rate; + $percent = $r->percent; +# debug +# ob_start(); print_r($r); +# drupal_set_message(ob_get_contents()); +# ob_end_clean(); + } } $method = uc_ratequote_shipping_method(); - $quotes[] = array('rate' => $rate, 'format' => uc_currency_format($rate), 'option_label' => $method['ratequote']['quote']['accessorials'][0]); + if ($rate > 0) { + $quotes[] = array('rate' => $rate, 'format' => uc_currency_format($rate), 'option_label' => $method['ratequote']['quote']['accessorials'][0]); + } else { + $rate = $total * ($percent / 100); + $quotes[] = array('rate' => $rate, 'format' => uc_currency_format($rate), 'option_label' => $method['ratequote']['quote']['accessorials'][0]); + } return $quotes; } +# unused? mebbe not.. function uc_ratequote_quote_order($products, $details){ $method = uc_ratequote_shipping_method(); $rate = variable_get('uc_ratequote_order_rate', 0); + $percent = variable_get('uc_ratequote_order_percent', 0); $quotes[] = array('rate' => $rate, 'format' => uc_currency_format($rate), 'option_label' => $method['order_rate']['quote']['accessorials'][0]); - return drupal_to_js($quotes); + $quotes; }