Понимание различий в ускоренной и супер срочной стоимости доставки в osCommerce - PullRequest
0 голосов
/ 24 июня 2011

Мне трудно понять, как osCommerce рассчитывает стоимость доставки для модулей доставки Expedited и Super Rush.

Я ищу объяснение того, как эти затраты рассчитываются на английском языке.Мне дали два файла, которые справляются с этим, но мне трудно понять, что происходит.

Ускоренный

function quote($method = '') {
    global $order, $cart, $shipping_weight, $shipping_num_boxes, $total_count;

    $porciento = ($cart->show_total() * MODULE_SHIPPING_TABLEEXPEDITE_PERCENTAGE) / 100 ;

    if ($porciento < MODULE_SHIPPING_TABLEEXPEDITE_FORMULA3) {
        $porciento = MODULE_SHIPPING_TABLEEXPEDITE_FORMULA3;
    }
    if (MODULE_SHIPPING_TABLEEXPEDITE_MODE == 'price') {
        $order_total = $cart->show_total();
    } else {
    $order_total = $shipping_weight;
    }

    $EXPEDITE_cost = split("[:,]" , MODULE_SHIPPING_TABLEEXPEDITE_COST);
    $size = sizeof($EXPEDITE_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
        if ($order_total <= $EXPEDITE_cost[$i]) {
            $shipping = $EXPEDITE_cost[$i+1];
            break;
        }
    }

    if (MODULE_SHIPPING_TABLEEXPEDITE_MODE == 'weight') {
        $shipping = $shipping * $shipping_num_boxes;
    }

    $prueba = MODULE_SHIPPING_TABLEEXPEDITE_HANDLING . ' ' . $total_count . ' ' . $shipping_weight;
    $coste = (MODULE_SHIPPING_TABLEEXPEDITE_HANDLING) + ($shipping_weight);

    $coste = ($coste * MODULE_SHIPPING_TABLEEXPEDITE_FORMULA1) + (MODULE_SHIPPING_TABLEEXPEDITE_FORMULA2);
    $coste = $coste + $porciento;

    if ($shipping_weight == 0) {
        $coste = 0;
    }

    if ($cart->show_weight() == 0) {
        $coste = MODULE_SHIPPING_TABLEEXPEDITE_GIFTCARD;
    }

    $coste = $coste * $total_count;

    $duedate = strftime('%A, %B %d, %Y',calcduedate(time(),MODULE_SHIPPING_TABLEEXPEDITE_BUSINESS_DAYS));

    $this->quotes = array('id' => $this->code,
                'module' => MODULE_SHIPPING_TABLEEXPEDITE_TEXT_TITLE,
                'methods' => array(array('id' => $this->code,
                'title' => MODULE_SHIPPING_TABLEEXPEDITE_TEXT_WAY,
                'porciento' => $porciento,
                'ordertotal' => $cart->show_total(),
                'duedate' => $duedate,
                'cost' => $coste)));

    if ($this->tax_class > 0) {
        $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);

    return $this->quotes;
}

Super Rush

function quote($method = '') {
    global $order, $cart, $shipping_weight, $shipping_num_boxes, $total_count;

    $porciento = ($cart->show_total() * MODULE_SHIPPING_TABLESUPERRUSH_PERCENTAGE) / 100 ;

    if ($porciento < MODULE_SHIPPING_TABLESUPERRUSH_FORMULA3) {
        $porciento = MODULE_SHIPPING_TABLESUPERRUSH_FORMULA3;
    }

    if (MODULE_SHIPPING_TABLESUPERRUSH_MODE == 'price') {
        $order_total = $cart->show_total();
    } else {
        $order_total = $shipping_weight;
    }

    $table_overnight_cost = split("[:,]" , MODULE_SHIPPING_TABLESUPERRUSH_COST);
    $size = sizeof($table_overnight_cost);
    for ($i=0, $n=$size; $i<$n; $i+=2) {
        if ($order_total <= $table_overnight_cost[$i]) {
            $shipping = $table_overnight_cost[$i+1];
            break;
        }
    }

    if (MODULE_SHIPPING_TABLESUPERRUSH_MODE == 'weight') {
        $shipping = $shipping * $shipping_num_boxes;
    }

    $prueba = MODULE_SHIPPING_TABLESUPERRUSH_HANDLING . ' ' . $total_count . ' ' . $shipping_weight;
    //echo $prueba;
    $coste = (MODULE_SHIPPING_TABLESUPERRUSH_HANDLING) + ($shipping_weight);

    $coste = ($coste * MODULE_SHIPPING_TABLESUPERRUSH_FORMULA1) + (MODULE_SHIPPING_TABLESUPERRUSH_FORMULA2);
    $coste = $coste + $porciento;

    if ($shipping_weight == 0) {
        $coste = 0;
    }
    if ($cart->show_weight() == 0) {
        $coste = MODULE_SHIPPING_TABLESUPERRUSH_GIFTCARD;
    }

    $coste = $coste * $total_count;

    $duedate = strftime('%A, %B %d, %Y',calcduedate(time(),MODULE_SHIPPING_TABLESUPERRUSH_BUSINESS_DAYS));

    $this->quotes = array('id' => $this->code,
                'module' => MODULE_SHIPPING_TABLESUPERRUSH_TEXT_TITLE,
                'methods' => array(array('id' => $this->code,
                'title' => MODULE_SHIPPING_TABLESUPERRUSH_TEXT_WAY,
                'duedate' => $duedate,                                                     
                'cost' => $coste)));

    if ($this->tax_class > 0) {
        $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    }

    if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title);

    return $this->quotes;
}

1 Ответ

2 голосов
/ 24 июня 2011

Оба файла рассчитывают стоимость доставки одинаково.Это тот же метод.Единственными различиями являются имена переменных и сохраненные значения для каждого модуля отгрузки.

Чтобы понять, почему указанные цены на доставку отличаются, сравните значения, сохраненные в admin / database для каждого из этих вариантов доставки.

Чтобы по-настоящему понять, откуда берутся значения, вам лучше иметь рядом с собой лист бумаги со значениями, поскольку они хранятся в конфигурации для этого модуля, и записывать значения и математику по мере продвижениячерез.

Вот перевод того, что происходит в методе для расчета стоимости:

  1. Проверьте, превышает ли процентная стоимость общей суммы корзины указанный порог
  2. Еслипроцентная стоимость (шаг 1) ниже окончательной корректировки значения, сделайте процентную стоимость равной корректировочному значению
  3. Рассчитать общую сумму заказа на основе общей стоимости или общего веса корзины
  4. Разбивка и перебрать таблицу затрат
  5. Если общая стоимость / вес корзины меньше или равна пределу вТаблица затрат (шаг 4), применяется в качестве стоимости доставки
  6. При расчете по весу умножьте стоимость доставки на количество необходимых коробок
  7. Добавьте плату за обработку (если есть) к стоимости доставки
  8. Наценка стоимости к значению, указанному в конфигурации.Добавьте дополнительное значение корректировки к этой стоимости
  9. Добавьте стоимость с процентной стоимостью (шаг 2)
  10. Если вес отгрузки равен нулю, стоимость отгрузки равна нулю (0) (игнорирует предыдущие девять шагов)
  11. Если общий вес корзины равен нулю, взимать плату за корзину, которая ничего не весит (стоимость подарочной карты)
  12. Стоимость доставки = стоимость доставки (шаги 1-11) * количество товаров в корзине
...