/** calculate totals for the items in the cart */ public static function calculate_totals() { $_tax = &new jigoshop_tax(); self::$total = 0; self::$cart_contents_total = 0; self::$cart_contents_total_ex_tax = 0; self::$cart_contents_weight = 0; self::$cart_contents_count = 0; self::$cart_contents_tax = 0; self::$tax_total = 0; self::$shipping_tax_total = 0; self::$subtotal = 0; self::$subtotal_ex_tax = 0; self::$discount_total = 0; self::$shipping_total = 0; self::$cart_dl_count = 0; if (sizeof(self::$cart_contents)>0) : foreach (self::$cart_contents as $item_id => $values) : $_product = $values['data']; if ($_product->exists() && $values['quantity']>0) : self::$cart_contents_count = self::$cart_contents_count + $values['quantity']; // If product is downloadable don't apply to product if( $_product->product_type == 'downloadable' ) { self::$cart_dl_count = self::$cart_dl_count + $values['quantity']; } self::$cart_contents_weight = self::$cart_contents_weight + ($_product->get_weight() * $values['quantity']); $total_item_price = $_product->get_price() * $values['quantity'] * 100; // Into pounds if ( get_option('jigoshop_calc_taxes')=='yes') : if ( $_product->is_taxable() ) : $rate = $_tax->get_rate( $_product->data['tax_class'] ); if (get_option('jigoshop_prices_include_tax')=='yes') : $tax_amount = $_tax->calc_tax( $total_item_price, $rate, true ); else : $tax_amount = $_tax->calc_tax( $total_item_price, $rate, false ); endif; if (get_option('jigoshop_prices_include_tax')=='yes' && jigoshop_customer::is_customer_outside_base() && defined('JIGOSHOP_CHECKOUT') && JIGOSHOP_CHECKOUT ) : /** * Our prices include tax so we need to take the base tax rate into consideration of our shop's country * * Lets get the base rate first */ $base_rate = $_tax->get_shop_base_rate( $_product->data['tax_class'] ); // Calc tax for base country $base_tax_amount = round($_tax->calc_tax( $total_item_price, $base_rate, true )); // Now calc tax for user county (which now excludes tax) $tax_amount = round($_tax->calc_tax( ($total_item_price-$base_tax_amount), $rate, false )); // Finally, update $total_item_price to reflect tax amounts $total_item_price = ($total_item_price - $base_tax_amount + $tax_amount); endif; endif; endif; $total_item_price = $total_item_price / 100; // Back to pounds $tax_amount = ( isset($tax_amount) ? $tax_amount : 0 ) / 100; // Back to pounds self::$cart_contents_tax = self::$cart_contents_tax + $tax_amount; self::$cart_contents_total = self::$cart_contents_total + $total_item_price; self::$cart_contents_total_ex_tax = self::$cart_contents_total_ex_tax + ($_product->get_price_excluding_tax() * $values['quantity']); // Product Discounts if (self::$applied_coupons) foreach (self::$applied_coupons as $code) : $coupon = jigoshop_coupons::get_coupon($code); if ($coupon['type']=='fixed_product' && in_array($item_id, $coupon['products'])) : self::$discount_total = self::$discount_total + ( $coupon['amount'] * $values['quantity'] ); endif; endforeach; endif; endforeach; endif; // Cart Shipping if (self::needs_shipping()) jigoshop_shipping::calculate_shipping(); self::$shipping_total = jigoshop_shipping::$shipping_total; self::$shipping_tax_total = jigoshop_shipping::$shipping_tax; self::$tax_total = self::$cart_contents_tax; // Subtotal self::$subtotal_ex_tax = self::$cart_contents_total_ex_tax; self::$subtotal = self::$cart_contents_total; // Cart Discounts if (self::$applied_coupons) foreach (self::$applied_coupons as $code) : $coupon = jigoshop_coupons::get_coupon($code); if (jigoshop_coupons::is_valid($code)) : if ($coupon['type']=='fixed_cart') : self::$discount_total = self::$discount_total + $coupon['amount']; elseif ($coupon['type']=='percent') : self::$discount_total = self::$discount_total + ( self::$subtotal / 100 ) * $coupon['amount']; endif; endif; endforeach; // Total if (get_option('jigoshop_prices_include_tax')=='yes') : self::$total = self::$subtotal + self::$shipping_tax_total - self::$discount_total + jigoshop_shipping::$shipping_total; else : self::$total = self::$subtotal + self::$tax_total + self::$shipping_tax_total - self::$discount_total + jigoshop_shipping::$shipping_total; endif; if (self::$total < 0) self::$total = 0; }
/** reset all Cart totals */ private static function reset_totals() { self::$total = 0; self::$cart_contents_total = 0; self::$cart_contents_total_ex_tax = 0; self::$cart_contents_weight = 0; self::$cart_contents_count = 0; self::$shipping_tax_total = 0; self::$subtotal = 0; self::$subtotal_ex_tax = 0; self::$discount_total = 0; self::$shipping_total = 0; self::$cart_dl_count = 0; self::$cart_contents_total_ex_dl = 0; /* for table rate shipping */ self::$tax->init_tax(); self::$price_per_tax_class_ex_tax = array(); /* currently used with norway */ jigoshop_shipping::reset_shipping(); }