Your IP : 216.73.216.231


Current Path : /home/digilove/public_html/components/com_marketplace/models/
Upload File :
Current File : /home/digilove/public_html/components/com_marketplace/models/orderhistory.php

<?php
/**
 * Marketplace - Component Marketplace 
 * ******************************************************************
 *
 * PHP version 7.0
 *
 * @category   Component
 * @package    Joomla
 * @author     WebKul software private limited <support@webkul.com>
 * @copyright  2010 WebKul software private limited
 * @license    http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 * @version    GIT:5.2
 * @filesource http://store.webkul.com
 * @link       Technical Support:  webkul.uvdesk.com
 * ******************************************************************
 */
// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.modellist');
if (!class_exists('MarketplaceModelOrderhistory')) {
    /**
     * Marketplace Model Orderhistory class
     * 
     * @category Component
     * @package  Joomla
     * @author   WebKul software private limited <support@webkul.com>
     * @license  http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
     * @link     Technical Support:  webkul.uvdesk.com
     */
    class MarketplaceModelOrderhistory extends JModelList
    {
        var $_data = null;
        var $_pagination = null;
        protected $_total = null;
        /**
         * __construct function
         *
         * @param array $config var
         */
        public function __construct($config = array())
        {
            if (empty($config['filter_fields'])) {
                $config['filter_fields'] = array(
                'order_number', 'o.order_number',
                'first_name', 'uin.first_name',
                'created_on','a.created_on',
                'modified_on','a.modified_on'
                );
            }
            parent::__construct($config);
        }
        /**
         * Check Order And ItemId function
         *
         * @param integer $itemId            var
         * @param integer $virtuemartOrderId var
         * 
         * @return void
         */
        public function checkOrderAndItemId($itemId=0,$virtuemartOrderId=0)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select($db->quoteName('virtuemart_order_id'));
            $query->from($db->quoteName('#__virtuemart_order_items'));
            $query->where(
                $db->quoteName('virtuemart_order_id').
                "=".$db->quote($db->escape($virtuemartOrderId))
            );
            $query->where(
                $db->quoteName('virtuemart_order_item_id').
                "=".$db->quote($db->escape($itemId))
            );
            $db->setQuery($query);
            try {
                return $db->loadResult();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Get Shipping Detail function
         *
         * @param integer $virtuemart_order_id var
         * 
         * @return void
         */
        function getShippingDetail($virtuemart_order_id)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select($db->quoteName('address_type'))
                ->from($db->quoteName('#__virtuemart_order_userinfos'))
                ->where(
                    $db->quoteName('virtuemart_order_id').
                    "=".$db->quote($virtuemart_order_id)
                );
            $db->setQuery($query);
            try{
                return $db->loadAssocList();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Get Country Name function
         *
         * @param string $id var
         * 
         * @return void
         */
        public function getCountryName($id)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select($db->quoteName('country_name'))
                ->from($db->quoteName('#__virtuemart_countries'))
                ->where($db->quoteName('virtuemart_country_id')."=".$db->quote($id));
            $db->setQuery($query);
            try{
                return $db->loadResult();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Get Payment Detail function
         *
         * @param integer $id var
         * 
         * @return void
         */
        public function getPaymentDetail($id)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select($db->quoteName('payment_name'))
                ->select($db->quoteName('payment_desc'))
                ->from(
                    $db->quoteName('#__virtuemart_paymentmethods_'.VmConfig::$vmlang)
                )
                ->where(
                    $db->quoteName('virtuemart_paymentmethod_id').
                    "=".$db->quote($id)
                );
            $db->setQuery($query);
            try{
                return $db->loadAssoc();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Get Shipment Name function
         *
         * @param integer $id var
         * 
         * @return void
         */
        public function getShipmentName($id)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select($db->quoteName('shipment_name'))
                ->from(
                    $db->quoteName(
                        '#__virtuemart_shipmentmethods_'.VmConfig::$vmlang
                    )
                )
                ->where(
                    $db->quoteName('virtuemart_shipmentmethod_id').
                    "=".$db->quote($id)
                );
            $db->setQuery($query);
            try{
                return $db->loadResult();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Get Number Order Item function
         *
         * @param integer $id Order Id
         * 
         * @return void
         */
        public function getNumberOrderItem($id)
        {
            $db=$this->_db;
            $query=$db->getQuery(true);
            $query->select(count($db->quoteName('virtuemart_order_item_id')))
                ->from($db->quoteName('#__virtuemart_order_items'))
                ->where($db->quoteName('virtuemart_order_id')."=".$db->quote($id));
            $db->setQuery($query);
            try{
                return $db->loadResult();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Load a single order, Attention, this function is not protected!
         * Do the right manangement before, to be certain
         * we suggest to use getMyOrderDetails
         * 
         * @param integer $virtuemart_order_id var
         * @param boolean $userlang            var
         * 
         * @return void
         */
        public function getVmOrder($virtuemart_order_id, $userlang=false)
        {
            $virtuemart_order_id = (int)$virtuemart_order_id;
            $db = JFactory::getDBO();
            $order = array();

            // Get the order details
            // Create a new query object.
            $query = $db->getQuery(true);
            $query
                ->select(array('o.*', 'u.*', 's.order_status_name'))
                ->from($db->quoteName('#__virtuemart_orders', 'o'))
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_orderstates', 's') .
                    ' ON (' . $db->quoteName('s.order_status_code') .
                    ' = ' . $db->quoteName('o.order_status') . ')'
                )
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_order_userinfos', 'u') .
                    ' ON (' . $db->quoteName('u.virtuemart_order_id') .
                    ' = ' . $db->quoteName('o.virtuemart_order_id') . ')'
                )
                ->where(
                    $db->quoteName('o.virtuemart_order_id') . '='.
                    $virtuemart_order_id
                );
            $db->setQuery($query);
            try{
                $order['details'] = $db->loadObjectList('address_type');
            }
            catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
            if ($order['details'] and isset($order['details']['BT'])) {
                $concat = array();
                if (!empty($order['details']['BT']->company)) {
                    $concat[]= $order['details']['BT']->company;
                }
                if (!empty($order['details']['BT']->first_name)) {
                    $concat[]= $order['details']['BT']->first_name;
                }
                if (!empty($order['details']['BT']->middle_name)) {
                    $concat[]= $order['details']['BT']->middle_name;
                }
                if (!empty($order['details']['BT']->last_name)) {
                    $concat[]= $order['details']['BT']->last_name;
                }
                $order['details']['BT']->order_name = '';
                foreach ($concat as $c) {
                    $order['details']['BT']->order_name .= trim($c).' ';
                }
                $order['details']['BT']->order_name = trim(
                    htmlspecialchars(
                        strip_tags(
                            htmlspecialchars_decode(
                                $order['details']['BT']->order_name
                            )
                        )
                    )
                );
            }
            if ($userlang) {
                if (!empty($order['details']['BT']->order_language)) {
                    $olang = $order['details']['BT']->order_language;
                    VmConfig::loadJLang('com_virtuemart', true, $olang);
                    VmConfig::loadJLang('com_virtuemart_shoppers', true, $olang);
                    VmConfig::loadJLang('com_virtuemart_orders', true, $olang);
                }
            }

            // Get the order history
            $query = $db->getQuery(true);
            $query
                ->select('*')
                ->from($db->quoteName('#__virtuemart_order_histories'))
                ->where(
                    $db->quoteName('virtuemart_order_id') . '='.
                    $virtuemart_order_id
                )
                ->order($db->quoteName('virtuemart_order_history_id') . ' ASC');
            $db->setQuery($query);
            try{
                $order['history'] = $db->loadObjectList();
            }
            catch(Exception $e){
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }

            // Get the order items
            $query = $db->getQuery(true);
            $query
                ->select(
                    array(
                        'virtuemart_order_item_id',
                        'product_quantity',
                        'order_item_name',
                        'order_item_sku',
                        'i.virtuemart_product_id',
                        'product_item_price',
                        'product_final_price',
                        'product_basePriceWithTax',
                        'product_discountedPriceWithoutTax',
                        'product_priceWithoutTax',
                        'product_subtotal_with_tax',
                        'product_subtotal_discount',
                        'product_tax',
                        'product_attribute',
                        'order_status',
                        'p.product_available_date',
                        'p.product_availability',
                        'intnotes',
                        'virtuemart_category_id',
                        'p.product_mpn'
                    )
                )
                ->from($db->quoteName('#__virtuemart_order_items', 'i'))
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_products', 'p') .
                    ' ON (' . $db->quoteName('p.virtuemart_product_id') .
                    ' = ' . $db->quoteName('i.virtuemart_product_id') . ')'
                )
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_product_categories', 'c') .
                    ' ON (' . $db->quoteName('p.virtuemart_product_id') .
                    ' = ' . $db->quoteName('c.virtuemart_product_id') . ')'
                )
                ->where(
                    $db->quoteName('virtuemart_order_id') . '='.
                    $virtuemart_order_id
                )
                ->group($db->quoteName('virtuemart_order_item_id'));
            $db->setQuery($query);
            try{
                $order['items'] = $db->loadObjectList();
            }
            catch(Exception $e){
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
            $customfieldModel = VmModel::getModel('customfields');
            $pModel = VmModel::getModel('product');
            foreach ($order['items'] as &$item) {
                $ids = array();
                $product = $pModel->getProduct($item->virtuemart_product_id);
                if (is_object($product)) {
                    $pvar = get_object_vars($product);
                    foreach ( $pvar as $k => $v) {
                        if (!isset($item->$k)
                            and isset($product->$k)
                            and '_' != substr($k, 0, 1)
                        ) {
                            $item->$k = $v;
                        }
                    }
                }
                if (!empty($item->product_attribute)) {
                    $myCustoms = @json_decode($item->product_attribute, true);
                    $myCustoms = (array) $myCustoms;
                    $item->customfields = array();
                    foreach ($myCustoms as $custom) {
                        if (!is_array($custom)) {
                            $custom = array( $custom =>false);
                        }
                        foreach ($custom as $id=>$field) {
                            $item->customfields[] = $customfieldModel
                                ->getCustomEmbeddedProductCustomField($id);
                            $ids[] = $id;
                        }
                    }
                }
                if (!empty($product->customfields)) {
                    if (!isset($item->customfields)) {
                        $item->customfields = array();
                    }
                    foreach ($product->customfields as $customfield) {
                        if (!in_array($customfield->virtuemart_customfield_id, $ids)
                            and $customfield->field_type=='E'
                            and ($customfield->is_input
                            or $customfield->is_cart_attribute)
                        ) {
                            $item->customfields[] = $customfield;
                        }
                    }
                }
            }
            // Get the order items
            $query = $db->getQuery(true);
            $query
                ->select('*')
                ->from($db->quoteName('#__virtuemart_order_calc_rules', 'z'))
                ->where(
                    $db->quoteName('virtuemart_order_id') . '='.
                    $virtuemart_order_id
                );
            $db->setQuery($query);

            try{
                $order['calc_rules'] = $db->loadObjectList();
            }
            catch(Exception $e){
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
            return $order;
        }
        /**
         * Get List Query function
         *
         * @return void
         */
        protected function getListQuery()
        {
            $userdetails = JFactory::getUser();
            $db = $this->getDbo();
            $query = $db->getQuery(true);
            $app=JFactory::getApplication();
            $params = JComponentHelper::getParams('com_marketplace');
            $lazy_limit=trim($params->get('wk_lazy_load_limit'));
            $query->select(
                $this->getState(
                    'list.select', 'a.*', 'b.created_by'
                )
            )
                ->from($db->quoteName('#__virtuemart_order_items')." AS a")
                ->join(
                    'INNER',
                    $db->quoteName('#__virtuemart_products').
                    " AS b ON(".$db->quoteName("a.virtuemart_product_id").
                    "=".$db->quoteName("b.virtuemart_product_id").')'
                )
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_orders').
                    " AS o ON(".$db->quoteName("a.virtuemart_order_id").
                    "=".$db->quoteName("o.virtuemart_order_id").')'
                )
                ->join(
                    'LEFT',
                    $db->quoteName('#__virtuemart_order_userinfos').
                    " AS uin ON(".$db->quoteName("uin.virtuemart_user_id").
                    "=".$db->quoteName("o.virtuemart_user_id").')'
                );
            if ($this->getState('filter.search')!== ''
                && $this->getState('filter.search') !== null
            ) {
                $search = $db->quote(
                    '%' . str_replace(
                        ' ',
                        '%',
                        $db->escape(trim($this->getState('filter.search')), true)
                        . '%'
                    )
                );
                $searches   = array();
                $searches[] = 'o.order_number LIKE ' . $search;
                $searches[] = 'uin.first_name LIKE ' . $search;
                $searches[] = 'uin.last_name LIKE ' . $search;
                $query->where('(' . implode(' OR ', $searches) . ')');
                    
            }
            $order_sttaus = $this->getState('list.order_status');
        
            if (strlen($order_sttaus)) {
        
                    $query->where('o.order_status = "'.$order_sttaus.'"');
            }
            $query->where('b.created_by='.$userdetails->id);
            $query->group($db->quoteName('o.virtuemart_order_id'));
            $query->order(
                $db->quoteName(
                    $db->escape($this->getState('list.ordering', 'a.created_on'))
                )
                . ' ' . $db->escape($this->getState('list.direction', 'DESC'))
            );
            return $query;
        }
        /**
         * Populate State function
         *
         * @param [type] $ordering  var
         * @param [type] $direction var
         * 
         * @return void
         */
        protected function populateState($ordering = null, $direction = null)
        {
            $app = JFactory::getApplication();
            if ($layout = $app->input->get('layout')) {
                $this->context .= '.' . $layout;
            }
            $search = $this->getUserStateFromRequest(
                $this->context . '.filter.search', 'filter_search'
            );
            $this->setState('filter.search', $search);
            $status = $this->getUserStateFromRequest(
                $this->context . '.list.order_status', 'filter_order_status'
            );
            $this->setState('list.order_status', $status);
            parent::populateState('o.created_on', 'desc');
        }
        /**
         * Delete Item function
         *
         * @param [type] $id var
         * 
         * @return void
         */
        function deleteItem($id)
        {
            return $this->productsTable->delete($id);
        }
        /**
         * Get Total Cost function
         *
         * @param [type] $warehouseuser var
         * @param [type] $vm_or_id      var
         * 
         * @return void
         */
        function gettotalcost($warehouseuser,$vm_or_id)
        {
            $db=JFactory::getDBO();
            $query=$db->getQuery(true);
            $query->select('a.*,b.created_by')
                ->from('#__virtuemart_order_items as a')
                ->join(
                    'INNER',
                    '#__virtuemart_products as b ON'
                    .' a.virtuemart_product_id=b.virtuemart_product_id'
                )
                ->where(
                    "b.created_by=".$warehouseuser." AND a.virtuemart_order_id=".
                    $vm_or_id." ORDER BY a.created_on DESC"
                );
            $db->setQuery($query);
            try {
                return $db->loadObjectList();
            } catch(Exception $e) {
                JFactory::getApplication()->enqueueMessage(
                    $e->getMessage(),
                    'error'
                );
                return false;
            }
        }
        /**
         * Set order status of seller
         *
         * @param [int]  $seller_id Seller Id
         * @param [int]  $order_id  Order Id
         * @param [char] $status    var
         * 
         * @return bool
         */
        public function setOrderStatus($seller_id, $order_id, $status)
        {
            $curr_stat = $this->getOrderStatus($seller_id, $order_id);
            if ($curr_stat == null || $curr_stat == false) {
                $profile = new stdClass();
                $profile->virtuemart_order_id = $order_id;
                $profile->seller_id = $seller_id;
                $profile->order_status = $status;
                // Insert the object into the Marketplace Order Status table.
                try {
                    $result = $this->_db->insertObject(
                        '#__marketplace_orderstatus',
                        $profile
                    );
                    return $result;
                } catch (Exception $e) {
                    return false;
                }
            } else {
                $db = $this->_db;
                $query = $db->getQuery(true);
                $fields = array(
                    $db->quoteName('order_status') . ' = ' .$db->quote($status)
                );
                $conditions = array(
                    $db->quoteName('seller_id') . ' = '. $seller_id,
                    $db->quoteName('virtuemart_order_id') . ' = ' . $order_id
                );
                $query->update(
                    $db->quoteName('#__marketplace_orderstatus')
                )->set($fields)->where($conditions);
                $db->setQuery($query);
                try {
                    $result = $db->execute();
                    return $result;
                } catch (Exception $e) {
                    return false;
                }
            }
        }
        /**
         * Get order status of seller
         *
         * @param integer $seller_id var
         * @param integer $order_id  var
         * 
         * @return char
         */
        public function getOrderStatus($seller_id, $order_id)
        {
            $query = $this->_db->getQuery(true);
            $query
                ->select($this->_db->quoteName('order_status'))
                ->from($this->_db->quoteName('#__marketplace_orderstatus'))
                ->where(
                    $this->_db->quoteName('seller_id')."=".
                    $this->_db->quote($seller_id)
                )
                ->where(
                    $this->_db->quoteName('virtuemart_order_id').
                    "=".$this->_db->quote($order_id)
                );
            $this->_db->setQuery($query);
            try {
                $result = $this->_db->loadObject();
                return $result;
            } catch (Exception $e) {
                return false;
            }
        }
    }
}
?>