Example #1
0
 /**
  * This method creates the datas to make a read only cart, for the pages like
  * the payment mode chooser.
  * @return str The php array
  */
 protected function cart_getReadonlyCommand()
 {
     if (!is_array($_SESSION[__CLASS__]['cart']) || count($_SESSION[__CLASS__]['cart']) == 0) {
         $_SESSION[__CLASS__]['cart'] = array();
         $normalProducts = false;
     } else {
         $normalProducts = true;
     }
     if (!is_array($_SESSION[__CLASS__]['cart_external']) || count($_SESSION[__CLASS__]['cart_external']) == 0) {
         $_SESSION[__CLASS__]['cart_external'] = array();
         $externalProducts = false;
     } else {
         $externalProducts = true;
     }
     if ($normalProducts || $externalProducts) {
         $taxeIncluded = $this->taxes == self::TAXES_INCLUDED;
         $totalPrice = new sh_price($taxeIncluded, $this->taxRate / 100, 0);
         $total = 0;
         $taxes = 0;
         foreach ($_SESSION[__CLASS__]['cart_external'] as $id => $product) {
             $className = $product['class'];
             $class = $this->linker->{$className};
             $shortId = $product['id'];
             $price = $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_PRICE);
             $values['contents'][] = array('image' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_IMAGE), 'name' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_NAME), 'reference' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_REFERENCE), 'shortDescription' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_SHORTDESCRIPTION), 'stock' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_STOCK), 'quantity' => $product['qty'], 'id' => $id, 'price' => $this->monney_format($price, true, false), 'totalPrice' => $this->monney_format($price * $product['qty'], true, false), 'link' => $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_LINK));
             $tax = $class->cart_getProductData($shortId, self::EXTERNAL_PRODUCT_TAXRATE);
             $totalPrice->add(new sh_price($taxeIncluded, $tax / 100, $price * $product['qty']));
             $taxes += $price * $product['qty'] * $tax / 100;
             $total += $price * $product['qty'];
         }
         foreach ($_SESSION[__CLASS__]['cart'] as $askedId => $quantity) {
             list($id, $variant) = explode('|', $askedId);
             // We verify if we the product [still] exists
             if ($this->productExists($id)) {
                 $addToDescription = '';
                 list($product) = $this->db_execute('product_get', array('id' => $id));
                 // We update the product datas with the variant's if needed
                 if ($product['hasVariants']) {
                     list($variant) = $this->db_execute('product_get_variant', array('product_id' => $id, 'variant_id' => $variant));
                     if ($product['variants_change_stock']) {
                         // We don't use the global stock, but the variant's one
                         $product['stock'] = $variant['stock'];
                     }
                     if ($product['variants_change_price']) {
                         // We don't use the global price, but the variant's one
                         $product['price'] = $variant['price'];
                     }
                     if ($product['variants_change_ref']) {
                         // We don't use the global ref, but the variant's one
                         $product['reference'] = $variant['ref'];
                     }
                     $cps = $this->variantCP_explode($variant['customProperties']);
                     foreach ($cps as $cp) {
                         $addToDescription .= '<br />' . $cp['name'] . ' : ' . $cp['value'];
                     }
                 }
                 if ($quantity > 0 && $product['stock'] > 0) {
                     // We verify if we can sell the quantity asked
                     if ($quantity > $product['stock']) {
                         // The user asks for more than what we have in stock, so we
                         // can only sell all the stock
                         $quantity = $product['stock'];
                         $_SESSION[__CLASS__]['cart'][$askedId] = $quantity;
                         $_SESSION[__CLASS__]['stocknotsufficient'][] = $product['name'];
                     }
                     $values['contents'][] = array('id' => $askedId, 'name' => $this->getI18n($product['name']), 'reference' => $product['reference'] . $addToDescription, 'shortDescription' => $this->getI18n($product['shortDescription']) . $addToDescription, 'quantity' => $quantity, 'priceOnly' => $product['price'], 'price' => $this->monney_format($product['price'], true, false), 'totalPrice' => $this->monney_format($product['price'] * $quantity, true, false));
                 } elseif ($product['stock'] == 0) {
                     // There is no stock anymore
                     $_SESSION[__CLASS__]['noMoreStock'][] = $product['name'];
                 } else {
                     // We wanted a quantity of 0, so we delete it
                     unset($_SESSION[__CLASS__]['cart'][$id]);
                 }
                 $taxRate = $product['taxRate'];
                 if (!is_numeric($taxRate)) {
                     $taxRate = $this->taxRate;
                 }
                 $totalPrice->add(new sh_price($taxeIncluded, $taxRate / 100, $product['price'] * $quantity));
                 $total += $product['price'] * $quantity;
                 $taxes += $product['price'] * $quantity * $taxRate / 100;
             }
         }
         if ($this->getParam('shipping>activated', true)) {
             $price = $_SESSION[__CLASS__]['shipping']['price'];
             $this->ship_getPrice($total, $price, $explanation, $taxRate);
             if ($_SESSION[__CLASS__]['shipping']['type'] == 'comeTakeIt') {
                 $values['contents'][] = array('id' => 0, 'name' => $this->getI18n('command_comeTakeItTitle'), 'reference' => $_SESSION[__CLASS__]['shipping']['address'] . $explanation, 'quantity' => 1, 'price' => $this->monney_format($price, true, false), 'totalPrice' => $this->monney_format($price, true, false));
                 $values['shipping']['comeTakeIt'] = true;
             } else {
                 $values['contents'][] = array('id' => 0, 'name' => $this->getI18n('command_shippingTitle'), 'reference' => $_SESSION[__CLASS__]['shipping']['shipper'] . $explanation, 'quantity' => 1, 'price' => $this->monney_format($price, true, false), 'totalPrice' => $this->monney_format($price, true, false));
                 $values['shipping']['shipper'] = $_SESSION[__CLASS__]['shipping']['shipper'];
                 $values['shipping']['toCustomer'] = true;
             }
             $totalPrice->add(new sh_price($taxeIncluded, $taxRate / 100, $price));
             $total += $price;
             $taxes += $price * $taxRate / 100;
         }
         if (is_array($_SESSION[__CLASS__]['noMoreStock'])) {
             foreach ($_SESSION[__CLASS__]['noMoreStock'] as $noMore) {
                 $values['noMoreStock'][]['name'] = $this->getI18n($noMore);
             }
         }
         unset($_SESSION[__CLASS__]['noMoreStock']);
         if (is_array($_SESSION[__CLASS__]['stocknotsufficient'])) {
             foreach ($_SESSION[__CLASS__]['stocknotsufficient'] as $stocknotsufficient) {
                 $values['stocknotsufficient'][]['name'] = $this->getI18n($stocknotsufficient);
             }
         }
         unset($_SESSION[__CLASS__]['stocknotsufficient']);
         $values['message']['content'] = $_SESSION[__CLASS__]['cart_message'];
         $values['general']['action'] = $this->linker->path->getLink('shop/cart_doAction/');
         $ht = $totalPrice->get(sh_price::PRICE_UNTAXED);
         $ttc = $totalPrice->get(sh_price::PRICE_TAXED);
         $_SESSION[__CLASS__]['cart_total'] = $values['total']['ttc'];
         if ($totalPrice->get(sh_price::TAX_TYPE) == sh_price::TAX_MODE_EXCLUDE) {
             $values['total']['ht'] = $this->monney_format($ht, true, false);
             $values['total']['ttc'] = $this->monney_format($ttc, true, false);
             $values['total']['paid'] = $ttc;
             // TTC with no format
         } else {
             $values['total']['ht'] = $this->monney_format($ht, true, false, self::ROUND_TO_UPPER);
             $values['total']['ttc'] = $this->monney_format($ttc, true, false);
             $values['total']['paid'] = $ttc;
             // TTC with no format
         }
     }
     $_SESSION[__CLASS__]['command']['elements'] = $values['contents'];
     $_SESSION[__CLASS__]['command']['total'] = $values['total'];
     $this->linker->html->addSpecialContents('shop_cart_content', $this->get_cart_plugin());
     $values['billing']['name'] = $this->linker->user->get('lastName') . ' ' . $this->linker->user->get('name');
     return $values;
 }
 public function add(sh_price $price)
 {
     $newUntaxedPrice = $this->untaxedPrice + $price->get(self::PRICE_UNTAXED);
     $newTaxedPrice = $this->taxedPrice + $price->get(self::PRICE_TAXED);
     $this->setAmounts($newUntaxedPrice, $newTaxedPrice);
     if (!isset($this->taxDetails[$price->get(self::TAX_RATE)])) {
         $this->taxDetails[$price->get(self::TAX_RATE)] = 0;
     }
     $this->taxDetails[$price->get(self::TAX_RATE)] += $price->get(self::PRICE_TAXED) - $price->get(self::PRICE_UNTAXED);
     return $this;
 }