/**
  * Method to calculate the content type of a cart
  *
  * @param boolean whether to test for Gift Vouchers only
  * @return string
  */
 function get_content_type($gv_only = 'false')
 {
     global $db;
     $this->content_type = false;
     $gift_voucher = 0;
     //      if ( (DOWNLOAD_ENABLED == 'true') && ($this->count_contents() > 0) ) {
     if ($this->count_contents() > 0) {
         reset($this->contents);
         while (list($products_id, ) = each($this->contents)) {
             $free_ship_check = $db->Execute("select products_virtual, products_model, products_price, product_is_always_free_shipping from " . TABLE_PRODUCTS . " where products_id = '" . zen_get_prid($products_id) . "'");
             $virtual_check = false;
             if (preg_match('/^GIFT/', addslashes($free_ship_check->fields['products_model']))) {
                 // @TODO - fix GIFT price in cart special/attribute
                 $gift_special = zen_get_products_special_price(zen_get_prid($products_id), true);
                 $gift_pba = zen_get_products_price_is_priced_by_attributes(zen_get_prid($products_id));
                 //echo '$products_id: ' . zen_get_prid($products_id) . ' price: ' . ($free_ship_check->fields['products_price'] + $this->attributes_price($products_id)) . ' vs special price: ' . $gift_special . ' qty: ' . $this->contents[$products_id]['qty'] . ' PBA: ' . ($gift_pba ? 'YES' : 'NO') . '<br>';
                 if (!$gift_pba && $gift_special != 0 && $gift_special != $free_ship_check->fields['products_price']) {
                     $gift_voucher += $gift_special * $this->contents[$products_id]['qty'];
                 } else {
                     $gift_voucher += ($free_ship_check->fields['products_price'] + $this->attributes_price($products_id)) * $this->contents[$products_id]['qty'];
                 }
             }
             // product_is_always_free_shipping = 2 is special requires shipping
             // Example: Product with download
             if (isset($this->contents[$products_id]['attributes']) and $free_ship_check->fields['product_is_always_free_shipping'] != 2) {
                 reset($this->contents[$products_id]['attributes']);
                 while (list(, $value) = each($this->contents[$products_id]['attributes'])) {
                     $virtual_check_query = "select count(*) as total\n                                      from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad\n                                      where pa.products_id = '" . (int) $products_id . "'\n                                      and pa.options_values_id = '" . (int) $value . "'\n                                      and pa.products_attributes_id = pad.products_attributes_id";
                     $virtual_check = $db->Execute($virtual_check_query);
                     if ($virtual_check->fields['total'] > 0) {
                         switch ($this->content_type) {
                             case 'physical':
                                 $this->content_type = 'mixed';
                                 if ($gv_only == 'true') {
                                     return $gift_voucher;
                                 } else {
                                     return $this->content_type;
                                 }
                                 break;
                             default:
                                 $this->content_type = 'virtual';
                                 break;
                         }
                     } else {
                         switch ($this->content_type) {
                             case 'virtual':
                                 if ($free_ship_check->fields['products_virtual'] == '1') {
                                     $this->content_type = 'virtual';
                                 } else {
                                     $this->content_type = 'mixed';
                                     if ($gv_only == 'true') {
                                         return $gift_voucher;
                                     } else {
                                         return $this->content_type;
                                     }
                                 }
                                 break;
                             case 'physical':
                                 if ($free_ship_check->fields['products_virtual'] == '1') {
                                     $this->content_type = 'mixed';
                                     if ($gv_only == 'true') {
                                         return $gift_voucher;
                                     } else {
                                         return $this->content_type;
                                     }
                                 } else {
                                     $this->content_type = 'physical';
                                 }
                                 break;
                             default:
                                 if ($free_ship_check->fields['products_virtual'] == '1') {
                                     $this->content_type = 'virtual';
                                 } else {
                                     $this->content_type = 'physical';
                                 }
                         }
                     }
                 }
             } else {
                 switch ($this->content_type) {
                     case 'virtual':
                         if ($free_ship_check->fields['products_virtual'] == '1') {
                             $this->content_type = 'virtual';
                         } else {
                             $this->content_type = 'mixed';
                             if ($gv_only == 'true') {
                                 return $gift_voucher;
                             } else {
                                 return $this->content_type;
                             }
                         }
                         break;
                     case 'physical':
                         if ($free_ship_check->fields['products_virtual'] == '1') {
                             $this->content_type = 'mixed';
                             if ($gv_only == 'true') {
                                 return $gift_voucher;
                             } else {
                                 return $this->content_type;
                             }
                         } else {
                             $this->content_type = 'physical';
                         }
                         break;
                     default:
                         if ($free_ship_check->fields['products_virtual'] == '1') {
                             $this->content_type = 'virtual';
                         } else {
                             $this->content_type = 'physical';
                         }
                 }
             }
         }
     } else {
         $this->content_type = 'physical';
     }
     if ($gv_only == 'true') {
         return $gift_voucher;
     } else {
         return $this->content_type;
     }
 }
        <td colspan="2"><table border="0" cellspacing="0" cellpadding="2">

<?php 
        if ($_GET['products_filter'] != '') {
            ?>
          <tr>
            <td class="main" width="200" align="left" valign="top">&nbsp;</td>
            <td colspan="2" class="main"><?php 
            echo TEXT_PRODUCT_TO_VIEW;
            ?>
</td>
          </tr>
          <tr>
            <td class="main" width="200" align="center" valign="top">
<?php 
            $display_priced_by_attributes = zen_get_products_price_is_priced_by_attributes($_GET['products_filter']);
            echo $display_priced_by_attributes ? '<span class="alert">' . TEXT_PRICED_BY_ATTRIBUTES . '</span>' . '<br />' : '';
            echo zen_get_products_display_price($_GET['products_filter']) . '<br /><br />';
            echo zen_get_products_quantity_min_units_display($_GET['products_filter'], $include_break = true);
            ?>
            </td>
            <td class="attributes-even" align="center"><?php 
            echo zen_draw_products_pull_down('products_filter', 'size="10"', '', true, $_GET['products_filter'], true, true);
            ?>
</td>
            <td class="main" align="right" valign="top"><?php 
            echo zen_image_submit('button_display.gif', IMAGE_DISPLAY);
            ?>
</td>
          </tr>
        </table></td>
function zen_get_discount_calc($product_id, $attributes_id = false, $attributes_amount = false, $check_qty = false)
{
    global $discount_type_id, $sale_maker_discount;
    global $cart;
    // no charge
    if ($attributes_id > 0 and $attributes_amount == 0) {
        return 0;
    }
    $new_products_price = zen_get_products_base_price($product_id);
    $new_special_price = zen_get_products_special_price($product_id, true);
    $new_sale_price = zen_get_products_special_price($product_id, false);
    $discount_type_id = zen_get_products_sale_discount_type($product_id);
    if ($new_products_price != 0) {
        $special_price_discount = $new_special_price != 0 ? $new_special_price / $new_products_price : 1;
    } else {
        $special_price_discount = '';
    }
    $sale_maker_discount = zen_get_products_sale_discount_type($product_id, '', 'amount');
    // percentage adjustment of discount
    if ($discount_type_id == 120 or $discount_type_id == 1209 or ($discount_type_id == 110 or $discount_type_id == 1109)) {
        $sale_maker_discount = $sale_maker_discount != 0 ? (100 - $sale_maker_discount) / 100 : 1;
    }
    $qty = $check_qty;
    // fix here
    // BOF: percentage discounts apply to price
    switch (true) {
        case zen_get_discount_qty($product_id, $qty) and !$attributes_id:
            // discount quanties exist and this is not an attribute
            // $this->contents[$products_id]['qty']
            $check_discount_qty_price = zen_get_products_discount_price_qty($product_id, $qty, $attributes_amount);
            //echo 'How much 1 ' . $qty . ' : ' . $attributes_amount . ' vs ' . $check_discount_qty_price . '<br />';
            return $check_discount_qty_price;
            break;
        case zen_get_discount_qty($product_id, $qty) and zen_get_products_price_is_priced_by_attributes($product_id):
            // discount quanties exist and this is not an attribute
            // $this->contents[$products_id]['qty']
            $check_discount_qty_price = zen_get_products_discount_price_qty($product_id, $qty, $attributes_amount);
            //echo 'How much 2 ' . $qty . ' : ' . $attributes_amount . ' vs ' . $check_discount_qty_price . '<br />';
            return $check_discount_qty_price;
            break;
        case $discount_type_id == 5:
            // No Sale and No Special
            //        $sale_maker_discount = 1;
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    if ($special_price_discount != 0) {
                        $calc = $attributes_amount * $special_price_discount;
                    } else {
                        $calc = $attributes_amount;
                    }
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            //echo 'How much 3 - ' . $qty . ' : ' . $product_id . ' : ' . $qty . ' x ' .  $attributes_amount . ' vs ' . $check_discount_qty_price . ' - ' . $sale_maker_discount . '<br />';
            break;
        case $discount_type_id == 59:
            // No Sale and Special
            //        $sale_maker_discount = $special_price_discount;
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: percentage discount apply to price
            // BOF: percentage discounts apply to Sale
        // EOF: percentage discount apply to price
        // BOF: percentage discounts apply to Sale
        case $discount_type_id == 120:
            // percentage discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $sale_maker_discount;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
        case $discount_type_id == 1209:
            // percentage discount on Sale and Special with a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $calc2 = $calc - $calc * $sale_maker_discount;
                    $sale_maker_discount = $calc - $calc2;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: percentage discounts apply to Sale
            // BOF: percentage discounts skip specials
        // EOF: percentage discounts apply to Sale
        // BOF: percentage discounts skip specials
        case $discount_type_id == 110:
            // percentage discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $sale_maker_discount;
                    $sale_maker_discount = $calc;
                } else {
                    //            $sale_maker_discount = $sale_maker_discount;
                    if ($attributes_amount != 0) {
                        //            $calc = ($attributes_amount * $special_price_discount);
                        //            $calc2 = $calc - ($calc * $sale_maker_discount);
                        //            $sale_maker_discount = $calc - $calc2;
                        $calc = $attributes_amount - $attributes_amount * $sale_maker_discount;
                        $sale_maker_discount = $calc;
                    } else {
                        $sale_maker_discount = $sale_maker_discount;
                    }
                }
            }
            break;
        case $discount_type_id == 1109:
            // percentage discount on Sale and Special with a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    //            $calc2 = $calc - ($calc * $sale_maker_discount);
                    //            $sale_maker_discount = $calc - $calc2;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: percentage discounts skip specials
            // BOF: flat amount discounts
        // EOF: percentage discounts skip specials
        // BOF: flat amount discounts
        case $discount_type_id == 20:
            // flat amount discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount - $sale_maker_discount;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
        case $discount_type_id == 209:
            // flat amount discount on Sale and Special with a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $calc2 = $calc - $sale_maker_discount;
                    $sale_maker_discount = $calc2;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: flat amount discounts
            // BOF: flat amount discounts Skip Special
        // EOF: flat amount discounts
        // BOF: flat amount discounts Skip Special
        case $discount_type_id == 10:
            // flat amount discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount - $sale_maker_discount;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
        case $discount_type_id == 109:
            // flat amount discount on Sale and Special with a special
            if (!$attributes_id) {
                $sale_maker_discount = 1;
            } else {
                // compute attribute amount based on Special
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: flat amount discounts Skip Special
            // BOF: New Price amount discounts
        // EOF: flat amount discounts Skip Special
        // BOF: New Price amount discounts
        case $discount_type_id == 220:
            // New Price amount discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $sale_maker_discount = $calc;
                    //echo '<br />attr ' . $attributes_amount . ' spec ' . $special_price_discount . ' Calc ' . $calc . 'Calc2 ' . $calc2 . '<br />';
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
        case $discount_type_id == 2209:
            // New Price amount discount on Sale and Special with a special
            if (!$attributes_id) {
                //          $sale_maker_discount = $sale_maker_discount;
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    //echo '<br />attr ' . $attributes_amount . ' spec ' . $special_price_discount . ' Calc ' . $calc . 'Calc2 ' . $calc2 . '<br />';
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: New Price amount discounts
            // BOF: New Price amount discounts - Skip Special
        // EOF: New Price amount discounts
        // BOF: New Price amount discounts - Skip Special
        case $discount_type_id == 210:
            // New Price amount discount Sale and Special without a special
            if (!$attributes_id) {
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    $sale_maker_discount = $calc;
                    //echo '<br />attr ' . $attributes_amount . ' spec ' . $special_price_discount . ' Calc ' . $calc . 'Calc2 ' . $calc2 . '<br />';
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
        case $discount_type_id == 2109:
            // New Price amount discount on Sale and Special with a special
            if (!$attributes_id) {
                //          $sale_maker_discount = $sale_maker_discount;
                $sale_maker_discount = $sale_maker_discount;
            } else {
                // compute attribute amount
                if ($attributes_amount != 0) {
                    $calc = $attributes_amount * $special_price_discount;
                    //echo '<br />attr ' . $attributes_amount . ' spec ' . $special_price_discount . ' Calc ' . $calc . 'Calc2 ' . $calc2 . '<br />';
                    $sale_maker_discount = $calc;
                } else {
                    $sale_maker_discount = $sale_maker_discount;
                }
            }
            break;
            // EOF: New Price amount discounts - Skip Special
        // EOF: New Price amount discounts - Skip Special
        case $discount_type_id == 0 or $discount_type_id == 9:
            // flat discount
            return $sale_maker_discount;
            break;
        default:
            $sale_maker_discount = 7000;
            break;
    }
    return $sale_maker_discount;
}
Exemple #4
0
 /**
  * queue or release newly-purchased GV's
  */
 function update_credit_account($i)
 {
     global $db, $order, $insert_id;
     // only act on newly-purchased gift certificates
     if (preg_match('/^GIFT/', addslashes($order->products[$i]['model']))) {
         // determine how much GV was purchased
         // check if GV was purchased on Special
         $gv_original_price = zen_products_lookup((int) $order->products[$i]['id'], 'products_price');
         // if prices differ assume Special ang get Special Price
         // Do not use this on GVs Priced by Attribute
         if (MODULE_ORDER_TOTAL_GV_SPECIAL == 'true' && ($gv_original_price != 0 && $gv_original_price != $order->products[$i]['final_price'] && !zen_get_products_price_is_priced_by_attributes((int) $order->products[$i]['id']))) {
             $gv_order_amount = $gv_original_price * $order->products[$i]['qty'];
         } else {
             $gv_order_amount = $order->products[$i]['final_price'] * $order->products[$i]['qty'];
         }
         // if tax is to be calculated on purchased GVs, calculate it
         if ($this->credit_tax == 'true') {
             $gv_order_amount = $gv_order_amount * (100 + $order->products[$i]['tax']) / 100;
         }
         $gv_order_amount = $gv_order_amount * 100 / 100;
         if (MODULE_ORDER_TOTAL_GV_QUEUE == 'false') {
             // GV_QUEUE is false so release amount to account immediately
             $gv_result = $this->user_has_gv_account($_SESSION['customer_id']);
             $customer_gv = false;
             $total_gv_amount = 0;
             if ($gv_result) {
                 $total_gv_amount = $gv_result;
                 $customer_gv = true;
             }
             $total_gv_amount = $total_gv_amount + $gv_order_amount;
             if ($customer_gv) {
                 $db->Execute("update " . TABLE_COUPON_GV_CUSTOMER . " set amount = '" . $total_gv_amount . "' where customer_id = '" . (int) $_SESSION['customer_id'] . "'");
             } else {
                 $db->Execute("insert into " . TABLE_COUPON_GV_CUSTOMER . " (customer_id, amount) values ('" . (int) $_SESSION['customer_id'] . "', '" . $total_gv_amount . "')");
             }
         } else {
             // GV_QUEUE is true - so queue the gv for release by store owner
             $db->Execute("insert into " . TABLE_COUPON_GV_QUEUE . " (customer_id, order_id, amount, date_created, ipaddr) values ('" . (int) $_SESSION['customer_id'] . "', '" . (int) $insert_id . "', '" . $gv_order_amount . "', NOW(), '" . $_SERVER['REMOTE_ADDR'] . "')");
         }
     }
 }
            <tr>
              <td class="main" align="left"><?php 
    echo TEXT_PRODUCTS_DISCOUNT_QTY_TITLE;
    ?>
</td>
              <td class="main" align="left"><?php 
    echo TEXT_PRODUCTS_DISCOUNT_QTY;
    ?>
</td>
              <td class="main" align="left" style="border-right:0;"><?php 
    echo TEXT_PRODUCTS_DISCOUNT_PRICE;
    ?>
</td>
            </tr>
  <?php 
    $display_priced_by_attributes = zen_get_products_price_is_priced_by_attributes($category_id);
    $display_price = zen_get_products_base_price($category_id);
    $display_specials_price = zen_get_products_special_price($category_id, true);
    $discount_query = "SELECT discount_id,discount_qty,discount_price FROM " . TABLE_CATEGORIES_DISCOUNT_QUANTITY . " WHERE categories_id = " . $category_id;
    $discount = $db->Execute($discount_query);
    $i = 0;
    while (!$discount->EOF) {
        $i++;
        $discount_name[] = array('id' => $i, 'discount_qty' => $discount->fields['discount_qty'], 'discount_price' => $discount->fields['discount_price']);
        $discount->MoveNext();
    }
    for ($i = 0, $n = 6; $i < $n; $i++) {
        switch ($pInfo->products_discount_type) {
            // none
            case '0':
                $discounted_price = 0;