/** * add to basket * * @param int basket_id * @param int product_variety_id * @param int quantity * @param array other_data * @return bool * @access public */ function addToBasket($basket_id, $product_variety_id, $quantity = 1, $other_data = array(), $price_id = false) { // get product info require_once 'models/ecommerce/ecommerce_product.php'; $Product = new ecommerce_product(); $product_data = $Product->getProductDetailByVarietyId($product_variety_id); if (!is_numeric($price_id)) { $price_id = $product_data['variety']['price']['id']; } $product_type_id = $product_data['variety']['product_type_id']; // limit to delivery zone (if delivery address is set already) if (!empty($product_data['variety']['limit_to_delivery_zones']) && is_numeric($_SESSION['client']['customer']['delivery_address_id'])) { $zones = explode(",", $product_data['variety']['limit_to_delivery_zones']); if (is_array($zones)) { require_once 'models/ecommerce/ecommerce_delivery_carrier_zone.php'; $DeliveryZone = new ecommerce_delivery_carrier_zone(); $delivery_zone_id = $DeliveryZone->getZoneIdByAddress($_SESSION['client']['customer']['delivery_address_id']); if (!in_array($delivery_zone_id, $zones)) { msg("Sorry, we cannot deliver {$product_data['name']} to your country. Please see the product page for delivery options and/or change your delivery address in order to proceed.", 'error'); return false; } } } // get detail for current basket $basket = $this->getFullDetail($basket_id); foreach ($basket['items'] as $item) { //if the same variety_id, price_id and other_data, than do an update instead if ($item['product_variety_id'] == $product_variety_id && $item['price_id'] == $price_id && $item['other_data'] == $other_data) { if ($this->updateBasketContent($basket_id, $item['id'], $item['quantity'] + $quantity)) { msg("ecommerce_basket.addToBasket: Item in basket has been updated", 'ok', 2); return true; } else { msg("Current item {$item['id']} was found in basket {$basket_id}, but cannot update.", 'error', 1); return false; } } } /** * or insert as a new item */ $basket_content_data = array('basket_id' => $basket_id, 'product_variety_id' => $product_variety_id, 'quantity' => $quantity, 'price_id' => $price_id, 'other_data' => $other_data, 'product_type_id' => $product_type_id); if ($this->insertItemIntoBasketContent($basket_content_data)) { return true; } else { return false; } }
/** * isAvailableItem */ public function isAvailableItem($data) { //get product detail require_once 'models/ecommerce/ecommerce_product.php'; $EcommerceProduct = new ecommerce_product(); $product_detail = $EcommerceProduct->getProductDetailByVarietyId($data['product_variety_id'], $data['price_id']); if (!$this->conf['allow_out_of_stock_item']) { //check stock is available if ($product_detail['variety']['stock'] < $data['quantity']) { msg("{$product_detail['variety']['sku']} is out of stock.", 'error'); return false; } } if (!$this->conf['allow_unpublished_product_variety_item']) { //check product variety is published if ($product_detail['variety']['publish'] == 0) { msg("{$product_detail['variety']['sku']} is not available.", 'error'); return false; } } if (!$this->conf['allow_unpublished_product_item']) { //check product is published if ($product_detail['publish'] == 0) { msg("Product ID {$product_detail['id']} is not available.", 'error'); return false; } } return true; }