403 Permission Denied With Zen Cart Category

When a category named Extras is selected from store front a 403 error is display like so:

403 Permission Denied

You do not have permission for this request /extras.

The problem is due to name conflict between a product category named “Extras” and a folder named “extras.” Change the the folder name to something else fixed the problem.

Bookmark and Share

Discount coupon code amount greater than cart order total

When discount coupon code amount is greater than cart order total, calculated order total is wrong. For example coupon code amount is $40.63 and cart order total is $35.95. Here are two steps to fix this problem. In ot_coupon.php make these changes.

1. In function calculate_deductions function comment one line.

           if ($coupon->fields['coupon_type'] == 'P') {
            $od_amount['total'] = round($orderTotal*($coupon->fields['coupon_amount']/100), 2);
            $od_amount['type'] = 'P';
            $ratio = $od_amount['total']/$orderTotal;
          } elseif ($coupon->fields['coupon_type'] == 'F') {
            $od_amount['total'] = round($coupon->fields['coupon_amount'] * ($orderTotal>0), 2);
            $od_amount['type'] = 'F';
            $ratio = $od_amount['total']/$orderTotal;
          }

          // comment this line so that the actual coupon amount is propagated.
          //if ($od_amount['total'] > $orderTotal) $od_amount['total'] = $orderTotal;
          //
          switch ($this->calculate_tax) {
            case 'None':
              if ($this->include_tax == 'true') {
                reset($order->info['tax_groups']);
                foreach ($order->info['tax_groups'] as $key=>$value) {
                  $od_amount['tax_groups'][$key] = $order->info['tax_groups'][$key] * $ratio;
                }
              }
            break;
            case 'Standard': ...

2. Comment three lines in process function

  function process() {
    global $order, $currencies;
    $order_total = $this->get_order_total();
    $od_amount = $this->calculate_deductions($order_total['total']);
    $this->deduction = $od_amount['total'];
    if ($od_amount['total'] > 0) {
      reset($order->info['tax_groups']);
      $tax = 0;
      while (list($key, $value) = each($order->info['tax_groups'])) {
        if ($od_amount['tax_groups'][$key]) {
          $order->info['tax_groups'][$key] -= $od_amount['tax_groups'][$key];
          $tax += $od_amount['tax_groups'][$key];
        }
      }
      if ($od_amount['type'] == 'S') $order->info['shipping_cost'] = 0;
      $order->info['total'] = $order->info['total'] - $od_amount['total'];

      //comment these lines
      //if (DISPLAY_PRICE_WITH_TAX != 'true') {
      //  $order->info['total'] -= $tax;
      //}

      $order->info['tax'] = $order->info['tax'] - $tax;
      //      if ($this->calculate_tax == "Standard") $order->info['total'] -= $tax;
      if ($order->info['total'] < 0) $order->info['total'] = 0;
      $this->output[] = array('title' => $this->title . ': ' . $this->coupon_code . ' :',
                              'text' => '-' . $currencies->format($od_amount['total']),
                              'value' => $od_amount['total']);
    }
  }

Finally check discount coupon configuration in admin to make sure it does not include shipping.

Bookmark and Share