Ejemplo n.º 1
0
 function getCart()
 {
     Tienda::load('TiendaHelperCarts', 'helpers.carts');
     JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tienda/tables');
     JModel::addIncludePath(JPATH_SITE . '/components/com_tienda/models');
     // determine whether we're working with a session or db cart
     $suffix = TiendaHelperCarts::getSuffix();
     $model = JModel::getInstance('Carts', 'TiendaModel');
     $session = JFactory::getSession();
     $user = JFactory::getUser();
     $model->setState('filter_user', $user->id);
     if (empty($user->id)) {
         $model->setState('filter_session', $session->getId());
     }
     $list = $model->getList(false, false);
     Tienda::load('Tienda', 'defines');
     $config = Tienda::getInstance();
     $show_tax = $config->get('display_prices_with_tax');
     $this->using_default_geozone = false;
     if ($show_tax) {
         Tienda::load('TiendaHelperUser', 'helpers.user');
         $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
         if (empty($geozones)) {
             // use the default
             $this->using_default_geozone = true;
             $table = JTable::getInstance('Geozones', 'TiendaTable');
             $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
             $geozones = array($table);
         }
         Tienda::load("TiendaHelperProduct", 'helpers.product');
         foreach ($list as &$item) {
             $taxtotal = TiendaHelperProduct::getTaxTotal($item->product_id, $geozones);
             $item->product_price = $item->product_price + $taxtotal->tax_total;
             $item->taxtotal = $taxtotal;
         }
     }
     return $list;
 }
Ejemplo n.º 2
0
 /**
  * Gets a product's add to cart section
  * formatted for display
  *
  * @param int $address_id
  * @return string html
  */
 function getAddToCart($product_id, $values = array())
 {
     $html = '';
     $view = $this->getView('products', 'html');
     //$model  = $this->getModel( $this->get('suffix') );
     $model = JModel::getInstance('Products', 'TiendaModel');
     $model->setId($product_id);
     Tienda::load('TiendaHelperUser', 'helpers.user');
     $user_id = JFactory::getUser()->id;
     $filter_group = TiendaHelperUser::getUserGroup($user_id);
     $model->setState('filter_group', $filter_group);
     //$model->_item = '';
     $row = $model->getItem(false);
     if ($row->product_notforsale || Tienda::getInstance()->get('shop_enabled') == '0') {
         return $html;
     }
     $view->set('_controller', 'products');
     $view->set('_view', 'products');
     $view->set('_doTask', true);
     $view->set('hidemenu', true);
     $view->setModel($model, true);
     $view->setLayout('product_buy');
     $view->assign('item', $row);
     $view->assign('product_id', $product_id);
     $view->assign('values', $values);
     $filter_category = $model->getState('filter_category', JRequest::getInt('filter_category', (int) @$values['filter_category']));
     $view->assign('filter_category', $filter_category);
     $view->assign('validation', "index.php?option=com_tienda&view=products&task=validate&format=raw");
     $config = Tienda::getInstance();
     $show_tax = $config->get('display_prices_with_tax');
     $view->assign('show_tax', $show_tax);
     $view->assign('tax', 0);
     $view->assign('taxtotal', '');
     $view->assign('shipping_cost_link', '');
     $row->tax = '0';
     if ($show_tax) {
         // finish TiendaHelperUser::getGeoZone -- that's why this isn't working
         Tienda::load('TiendaHelperUser', 'helpers.user');
         $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
         if (empty($geozones)) {
             // use the default
             $table = JTable::getInstance('Geozones', 'TiendaTable');
             $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
             $geozones = array($table);
         }
         $taxtotal = TiendaHelperProduct::getTaxTotal($product_id, $geozones);
         $tax = $taxtotal->tax_total;
         $row->taxtotal = $taxtotal;
         $row->tax = $tax;
         $view->assign('taxtotal', $taxtotal);
         $view->assign('tax', $tax);
     }
     // TODO What about this??
     $show_shipping = $config->get('display_prices_with_shipping');
     if ($show_shipping) {
         $article_link = $config->get('article_shipping', '');
         $shipping_cost_link = JRoute::_('index.php?option=com_content&view=article&id=' . $article_link);
         $view->assign('shipping_cost_link', $shipping_cost_link);
     }
     $invalidQuantity = '0';
     if (empty($values)) {
         $product_qty = '1';
         // get the default set of attribute_csv
         $default_attributes = TiendaHelperProduct::getDefaultAttributes($product_id);
         sort($default_attributes);
         $attributes_csv = implode(',', $default_attributes);
         $availableQuantity = Tienda::getClass('TiendaHelperProduct', 'helpers.product')->getAvailableQuantity($product_id, $attributes_csv);
         if ($availableQuantity->product_check_inventory && $product_qty > $availableQuantity->quantity) {
             $invalidQuantity = '1';
         }
     }
     if (!empty($values)) {
         $product_id = !empty($values['product_id']) ? (int) $values['product_id'] : JRequest::getInt('product_id');
         $product_qty = !empty($values['product_qty']) ? (int) $values['product_qty'] : '1';
         // TODO only display attributes available based on the first selected attribute?
         $attributes = array();
         foreach ($values as $key => $value) {
             if (substr($key, 0, 10) == 'attribute_') {
                 $attributes[] = $value;
             }
         }
         sort($attributes);
         $attributes_csv = implode(',', $attributes);
         // Integrity checks on quantity being added
         if ($product_qty < 0) {
             $product_qty = '1';
         }
         // using a helper file to determine the product's information related to inventory
         $availableQuantity = Tienda::getClass('TiendaHelperProduct', 'helpers.product')->getAvailableQuantity($product_id, $attributes_csv);
         if ($availableQuantity->product_check_inventory && $product_qty > $availableQuantity->quantity) {
             $invalidQuantity = '1';
         }
         // adjust the displayed price based on the selected attributes
         $table = JTable::getInstance('ProductAttributeOptions', 'TiendaTable');
         $attrs = array();
         foreach ($attributes as $attrib_id) {
             // load the attrib's object
             $table->load($attrib_id);
             // update the price
             //$row->price = $row->price + floatval( "$table->productattributeoption_prefix"."$table->productattributeoption_price");
             // is not + or -
             if ($table->productattributeoption_prefix == '=') {
                 $row->price = floatval($table->productattributeoption_price);
             } else {
                 $row->price = $row->price + floatval("{$table->productattributeoption_prefix}" . "{$table->productattributeoption_price}");
             }
             $attrs[] = $table->productattributeoption_id;
         }
         $row->sku = TiendaHelperProduct::getProductSKU($row, $attrs);
         $view->assign('item', $row);
     }
     $view->assign('availableQuantity', $availableQuantity);
     $view->assign('invalidQuantity', $invalidQuantity);
     $dispatcher = JDispatcher::getInstance();
     ob_start();
     $dispatcher->trigger('onDisplayProductAttributeOptions', array($row->product_id));
     $view->assign('onDisplayProductAttributeOptions', ob_get_contents());
     ob_end_clean();
     ob_start();
     $view->display();
     $html = ob_get_contents();
     ob_end_clean();
     return $html;
 }
Ejemplo n.º 3
0
 /**
  * Generates a selectlist for the specified Product Attribute 
  *
  * @param unknown_type $productattribute_id 
  * @param unknown_type $selected
  * @param unknown_type $name
  * @param unknown_type $attribs
  * @param unknown_type $idtag
  * @return unknown_type
  */
 public static function productattributeoptions($productattribute_id, $selected, $name = 'filter_pao', $attribs = array('class' => 'inputbox'), $idtag = null, $opt_selected = array(), $user_id = 0)
 {
     $uid = $user_id == 0 ? JFactory::getUser()->id : $user_id;
     $list = array();
     $pid = !empty($attribs['pid']) ? $attribs['pid'] : null;
     $changed_attr = !empty($attribs['changed_attr']) ? $attribs['changed_attr'] : -1;
     $changed_pao = !empty($attribs['changed_pao']) ? $attribs['changed_pao'] : -1;
     if (empty($pid)) {
         $items = array();
     } else {
         $items = TiendaHelperProduct::getAvailableAttributeOptions($pid, $productattribute_id, $changed_attr, $changed_pao, $opt_selected);
     }
     $geozones = array();
     $shipping = false;
     if (count($items)) {
         $shipping = $items[0]->product_ships;
         if ($shipping) {
             Tienda::load('TiendaHelperProduct', 'helpers.product');
             Tienda::load('TiendaHelperUser', 'helpers.user');
             $geozones = TiendaHelperUser::getGeoZones($uid);
             if (empty($geozones)) {
                 // use the default
                 $table = JTable::getInstance('Geozones', 'TiendaTable');
                 $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
                 $geozones = array($table);
             }
         }
     }
     foreach (@$items as $item) {
         if ($shipping) {
             $tax = TiendaHelperProduct::getTaxTotal($item->product_id, $geozones, $item->productattributeoption_price);
             $item->productattributeoption_price += $tax->tax_total;
         }
         // Do not display the prefix if it is "=" (it's not good to see =�13, better �13)
         if ($item->productattributeoption_prefix != '=') {
             $display_suffix = $item->productattributeoption_price > '0' ? ": " . $item->productattributeoption_prefix . TiendaHelperBase::currency($item->productattributeoption_price) : '';
         } else {
             $display_suffix = $item->productattributeoption_price > '0' ? ": " . TiendaHelperBase::currency($item->productattributeoption_price) : '';
         }
         $display_name = JText::_($item->productattributeoption_name) . $display_suffix;
         if ($item->is_blank) {
             $list[] = self::option(0, $display_name);
         } else {
             $list[] = self::option($item->productattributeoption_id, $display_name);
         }
     }
     return self::genericlist($list, $name, $attribs, 'value', 'text', $selected, $idtag);
 }
Ejemplo n.º 4
0
 /**
  * Sample use of the products model for getting products with certain properties
  * See admin/models/products.php for all the filters currently built into the model
  *
  * @param $parameters
  * @return unknown_type
  */
 function getProducts()
 {
     // Check the registry to see if our Tienda class has been overridden
     if (!class_exists('Tienda')) {
         JLoader::register("Tienda", JPATH_ADMINISTRATOR . "/components/com_tienda/defines.php");
     }
     // load the config class
     Tienda::load('Tienda', 'defines');
     Tienda::load('TiendaHelperProduct', 'helpers.product');
     JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tienda/tables');
     JModel::addIncludePath(JPATH_SITE . '/components/com_tienda/models');
     // get the model
     $model = JModel::getInstance('Products', 'TiendaModel');
     // setting the model's state tells it what items to return
     $model->setState('filter_published', '1');
     $date = JFactory::getDate();
     $model->setState('filter_published_date', $date->toMysql());
     $model->setState('filter_enabled', '1');
     // Set category state
     if ($this->params->get('category', '1') != '1') {
         $model->setState('filter_category', $this->params->get('category', '1'));
     }
     // Set manufacturer state
     if ($this->params->get('manufacturer', '') != '') {
         $model->setState('filter_manufacturer', $this->params->get('manufacturer', ''));
     }
     // Set id set state
     if ($this->params->get('id_set', '') != '') {
         $params_id_set = $this->params->get('id_set');
         $id_array = explode(',', $params_id_set);
         $id_set = "'" . implode("', '", $id_array) . "'";
         $model->setState('filter_id_set', $id_set);
     }
     // set the states based on the parameters
     $model->setState('limit', $this->params->get('max_number', '10'));
     if ($this->params->get('price_from', '-1') != '-1') {
         $model->setState('filter_price_from', $this->params->get('price_from', '-1'));
     }
     if ($this->params->get('price_to', '-1') != '-1') {
         $model->setState('filter_price_to', $this->params->get('price_to', '-1'));
     }
     $order = $this->params->get('order');
     $direction = $this->params->get('direction', 'ASC');
     switch ($order) {
         case "2":
         case "name":
             $model->setState('order', 'tbl.product_name');
             break;
         case "1":
         case "created":
             $model->setState('order', 'tbl.created_date');
             break;
         case "0":
         case "ordering":
         default:
             $model->setState('order', 'tbl.ordering');
             break;
     }
     if ($this->params->get('random', '0') == '1') {
         $model->setState('order', 'RAND()');
     }
     $model->setState('direction', $direction);
     $config = Tienda::getInstance();
     $show_tax = $config->get('display_prices_with_tax');
     $default_user_group = Tienda::getInstance()->get('default_user_group');
     $user_groups_array = $this->getUserGroups();
     $overide_price = false;
     if (count($user_groups_array) > 1 && $user_groups_array[0] != $default_user_group) {
         $overide_price = true;
     }
     // using the set filters, get a list of products
     if ($products = $model->getList(true, false)) {
         if ($show_tax) {
             Tienda::load('TiendaHelperUser', 'helpers.user');
             $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
             if (empty($geozones)) {
                 // use the default
                 $table = JTable::getInstance('Geozones', 'TiendaTable');
                 $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
                 $geozones = array($table);
             }
         }
         foreach ($products as $product) {
             if ($overide_price) {
                 $filter_group = TiendaHelperUser::getUserGroup(JFactory::getUser()->id, $product->product_id);
                 $price = TiendaHelperProduct::getPrice($product->product_id, '1', $filter_group);
                 $product->price = $price->product_price;
             }
             $product->taxtotal = 0;
             $product->tax = 0;
             if ($show_tax) {
                 $taxtotal = TiendaHelperProduct::getTaxTotal($product->product_id, $geozones);
                 $product->taxtotal = $taxtotal;
                 $product->tax = $taxtotal->tax_total;
             }
             $product->filter_category = '';
             $categories = TiendaHelperProduct::getCategories($product->product_id);
             if (!empty($categories)) {
                 $product->link .= "&filter_category=" . $categories[0];
                 $product->filter_category = $categories[0];
             }
             $itemid = Tienda::getClass("TiendaHelperRoute", 'helpers.route')->category($product->filter_category, true);
             if (empty($itemid)) {
                 $product->itemid = $this->params->get('itemid');
             } else {
                 $product->itemid = $itemid;
             }
         }
     }
     return $products;
 }
Ejemplo n.º 5
0
 /**
  * Gets a product's add to cart section
  * formatted for display
  *
  * @param int $address_id
  * @return string html
  */
 private function getAddToCart($product_id, $values = array(), $params = array())
 {
     $html = '';
     Tienda::load('TiendaModelProducts', 'models.products');
     $model = JModel::getInstance('Products', 'TiendaModel');
     $user = JFactory::getUser();
     Tienda::load('TiendaHelperUser', 'helpers.user');
     $filter_group = TiendaHelperUser::getUserGroup($user->id, $product_id);
     $model->setState('filter_group', $filter_group);
     $model->setId($product_id);
     $row = $model->getItem(false);
     $vars = new JObject();
     if (@$row->product_notforsale || Tienda::getInstance()->get('shop_enabled') == '0') {
         return $html;
     }
     $vars->item = $row;
     $vars->product_id = $product_id;
     $vars->values = $values;
     $vars->validation = "index.php?option=com_tienda&view=products&task=validate&format=raw";
     $vars->params = $params;
     $config = Tienda::getInstance();
     $show_tax = $config->get('display_prices_with_tax');
     $vars->show_tax = $show_tax;
     $vars->tax = 0;
     $vars->taxtotal = '';
     $vars->shipping_cost_link = '';
     if ($show_tax) {
         // finish TiendaHelperUser::getGeoZone -- that's why this isn't working
         Tienda::load('TiendaHelperUser', 'helpers.user');
         $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
         if (empty($geozones)) {
             // use the default
             $table = JTable::getInstance('Geozones', 'TiendaTable');
             $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
             $geozones = array($table);
         }
         $taxtotal = TiendaHelperProduct::getTaxTotal($product_id, $geozones);
         $tax = $taxtotal->tax_total;
         $vars->taxtotal = $taxtotal;
         $vars->tax = $tax;
     }
     // TODO What about this??
     $show_shipping = $config->get('display_prices_with_shipping');
     if ($show_shipping) {
         $article_link = $config->get('article_shipping', '');
         $shipping_cost_link = JRoute::_('index.php?option=com_content&view=article&id=' . $article_link);
         $vars->shipping_cost_link = $shipping_cost_link;
     }
     $invalidQuantity = '0';
     if (empty($values)) {
         $product_qty = '1';
         // get the default set of attribute_csv
         $default_attributes = TiendaHelperProduct::getDefaultAttributes($product_id);
         sort($default_attributes);
         $attributes_csv = implode(',', $default_attributes);
         $availableQuantity = Tienda::getClass('TiendaHelperProduct', 'helpers.product')->getAvailableQuantity($product_id, $attributes_csv);
         if ($availableQuantity->product_check_inventory && $product_qty > $availableQuantity->quantity) {
             $invalidQuantity = '1';
         }
     }
     if (!empty($values)) {
         $product_id = !empty($values['product_id']) ? (int) $values['product_id'] : JRequest::getInt('product_id');
         $product_qty = !empty($values['product_qty']) ? (int) $values['product_qty'] : '1';
         // TODO only display attributes available based on the first selected attribute?
         $attributes = array();
         foreach ($values as $key => $value) {
             if (substr($key, 0, 10) == 'attribute_') {
                 $attributes[] = $value;
             }
         }
         sort($attributes);
         $attributes_csv = implode(',', $attributes);
         // Integrity checks on quantity being added
         if ($product_qty < 0) {
             $product_qty = '1';
         }
         // using a helper file to determine the product's information related to inventory
         $availableQuantity = Tienda::getClass('TiendaHelperProduct', 'helpers.product')->getAvailableQuantity($product_id, $attributes_csv);
         if ($availableQuantity->product_check_inventory && $product_qty > $availableQuantity->quantity) {
             $invalidQuantity = '1';
         }
     }
     $vars->availableQuantity = $availableQuantity;
     $vars->invalidQuantity = $invalidQuantity;
     $dispatcher = JDispatcher::getInstance();
     JPluginHelper::importPlugin('tienda');
     ob_start();
     $dispatcher->trigger('onDisplayProductAttributeOptions', array($product_id));
     $vars->onDisplayProductAttributeOptions = ob_get_contents();
     ob_end_clean();
     ob_start();
     echo $this->_getLayout('product_buy', $vars);
     $html = ob_get_contents();
     ob_end_clean();
     return $html;
 }
Ejemplo n.º 6
0
 /**
  * Sample use of the products model for getting products with certain properties
  * See admin/models/products.php for all the filters currently built into the model
  *
  * @param $parameters
  * @return unknown_type
  */
 function getProducts()
 {
     // Check the registry to see if our Tienda class has been overridden
     if (!class_exists('Tienda')) {
         JLoader::register("Tienda", JPATH_ADMINISTRATOR . "/components/com_tienda/defines.php");
     }
     // load the config class
     Tienda::load('Tienda', 'defines');
     Tienda::load('TiendaHelperProduct', 'helpers.product');
     Tienda::load('TiendaHelperUser', 'helpers.user');
     $helper = new TiendaHelperProduct();
     JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_tienda/tables');
     JModel::addIncludePath(JPATH_SITE . '/components/com_tienda/models');
     // get the model
     $model = JModel::getInstance('OrderItems', 'TiendaModel');
     $model->setState('limit', $this->params->get('max_number', '5'));
     $query = $model->getQuery();
     // group results by product ID
     $query->group('tbl.product_id');
     // select the total number of sales for each product
     $field = array();
     $field[] = " SUM(tbl.orderitem_quantity) AS total_sales ";
     $field[] = " p.product_description_short AS product_description_short ";
     $query->select($field);
     // order results by the total sales
     $query->order('total_sales DESC');
     $model->setQuery($query);
     $show_tax = Tienda::getInstance()->get('display_prices_with_tax');
     // using the set filters, get a list of products
     if ($products = $model->getList(false, false)) {
         if ($show_tax) {
             $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
             if (empty($geozones)) {
                 // use the default
                 $table = JTable::getInstance('Geozones', 'TiendaTable');
                 $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
                 $geozones = array($table);
             }
         }
         foreach ($products as $product) {
             $product->link = 'index.php?option=com_tienda&view=products&task=view&id=' . $product->product_id;
             $filter_group = TiendaHelperUser::getUserGroup(JFactory::getUser()->id, $product->product_id);
             $price = $helper->getPrice($product->product_id, '1', $filter_group);
             $product->price = $price->product_price;
             //product total
             $product->taxtotal = 0;
             $product->tax = 0;
             if ($show_tax) {
                 $taxtotal = TiendaHelperProduct::getTaxTotal($product->product_id, $geozones);
                 $product->taxtotal = $taxtotal;
                 $product->tax = $taxtotal->tax_total;
             }
             $product->filter_category = '';
             $categories = Tienda::getClass('TiendaHelperProduct', 'helpers.product')->getCategories($product->product_id);
             if (!empty($categories)) {
                 $product->link .= "&filter_category=" . $categories[0];
                 $product->filter_category = $categories[0];
             }
             $itemid = Tienda::getClass("TiendaHelperRoute", 'helpers.route')->category($product->filter_category, true);
             if (empty($itemid)) {
                 $itemid = Tienda::getClass("TiendaHelperRoute", 'helpers.route')->findItemid(array('view' => 'products'));
             }
             $product->itemid = $itemid;
         }
     }
     return $products;
 }
Ejemplo n.º 7
0
                 <?php 
 // For UE States, we should let the admin choose to show (+19% vat) and (link to the shipping rates)
 $config = Tienda::getInstance();
 $show_tax = $config->get('display_prices_with_tax');
 $article_link = $config->get('article_shipping', '');
 $shipping_cost_link = JRoute::_('index.php?option=com_content&view=article&id=' . $article_link);
 if (!empty($show_tax)) {
     Tienda::load('TiendaHelperUser', 'helpers.user');
     $geozones = TiendaHelperUser::getGeoZones(JFactory::getUser()->id);
     if (empty($geozones)) {
         // use the default
         $table = JTable::getInstance('Geozones', 'TiendaTable');
         $table->load(array('geozone_id' => Tienda::getInstance()->get('default_tax_geozone')));
         $geozones = array($table);
     }
     $taxtotal = TiendaHelperProduct::getTaxTotal($item->product_id, $geozones);
     $tax = $taxtotal->tax_total;
     if (!empty($tax)) {
         if ($show_tax == '2') {
             // sum
             echo TiendaHelperBase::currency($item->price + $tax);
         } else {
             echo TiendaHelperBase::currency($item->price);
             echo sprintf(JText::_('COM_TIENDA_INCLUDE_TAX'), TiendaHelperBase::currency($tax));
         }
     } else {
         echo TiendaHelperBase::currency($item->price);
     }
 } else {
     echo TiendaHelperBase::currency($item->price);
 }