Умножение цены на курс в Ubercart 2

Главные вкладки

Аватар пользователя kstukstu kstukstu 23 января 2012 в 13:26

Все цены на сайте забиваются в долларах. Выводить их необходимо в другой валюте умножением на курс. Создал модуль примерно такого содержания:

<?phpfunction uc_multi_currency_menu() { 
   $items['admin/content/multi_currency'] = array(
      'title' => 'Курс валюты',
      'description' => 'Ручное изменение курса валюты',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('uc_multi_currency_form'),
      'access callback' => 'user_access',
      'access arguments' => array('change currency'),
      'type' => MENU_NORMAL_ITEM,
   );
   return $items;
}

/**
 * Implementation of hook_perm().
 */
function uc_multi_currency_perm() {
  return array('change currency');
}

/**
  * Define the form.
  */

function uc_multi_currency_form($form_state) {

    $form['currency_rate'] = array(
      '#type' => 'textfield',
      '#title' => t('Курс валюты'),
      '#default_value' => variable_get('currency_rate', 8),
      '#description' => t('Существующий курс для доллара США.')
   );

   $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Установить'),
   );
   return $form;
}

/**
  * Handle submission of the form and saving
  * of the data to the database.
  */

function uc_multi_currency_form_submit($form, $form_state) {   
   $currency_rate = $form_state['values']['currency_rate'];
   variable_set('currency_rate', $currency_rate);
}

/**
 * Implementation of hook_uc_price_handler().
 */
function uc_multi_currency_uc_price_handler() {
  return array(
    'alter' => array(
      'title' => t('Мульти валюта'),
      'description' => t('Изменение цены товара в зависимости от валюты'),
      'callback' => 'uc_multi_currency_price_handler_alter',
    ),    
  );
}

function uc_multi_currency_order($op, &$arg1, $arg2)
{
 // on the final update do the work we want
  if ($op == 'update' &&
      $arg1->order_status == "payment_received" &&
      $arg2 == "completed")
  {
    $arg1[order_total] *= variable_get('currency_rate', $currency_rate);
    $arg1[products][0][price] *= variable_get('currency_rate', $currency_rate);
    $arg1[line_items][0][amount] *= variable_get('currency_rate', $currency_rate);
  }
}

/**
 * Изменение цены товара в зависимости от валюты
 * 
 */
function uc_multi_currency_price_handler_alter(&$price, &$context, &$options) {
  /*if ($context['subject']['node']->field_currency[0]['value'] == "usd") {*/
    $price['price'] *= variable_get('currency_rate', $currency_rate);
  /*}  */
}
?>

Этот код создает поле для ввода курса доллара по отношению к выводимой валюте и почти все прекрасно работает. За исключением того, что неверно подсчитывается сумма Подитога и Итога при оформлении платежа и неверно подсчитывается стоимость доставки.

Подскажите как решить указанные проблемы.
Сейчас модуль работает на сайте www.chajnaja.com

Комментарии