Ejemplo n.º 1
0
    function updateStatusForOneOrder($virtuemart_order_id, $inputOrder, $useTriggers = true)
    {
        // 		vmdebug('updateStatusForOneOrder', $inputOrder);
        /* Update the order */
        $data = $this->getTable('orders');
        $data->load($virtuemart_order_id);
        $old_order_status = $data->order_status;
        $data->bind($inputOrder);
        //First we must call the payment, the payment manipulates the result of the order_status
        if ($useTriggers) {
            if (!class_exists('vmPSPlugin')) {
                require JPATH_VM_PLUGINS . DS . 'vmpsplugin.php';
            }
            // Payment decides what to do when order status is updated
            JPluginHelper::importPlugin('vmpayment');
            $_dispatcher = JDispatcher::getInstance();
            //Should we add this? $inputOrder
            $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderPayment', array(&$data, $old_order_status));
            foreach ($_returnValues as $_returnValue) {
                if ($_returnValue === true) {
                    break;
                    // Plugin was successfull
                } elseif ($_returnValue === false) {
                    return false;
                    // Plugin failed
                }
                // Ignore null status and look for the next returnValue
            }
            JPluginHelper::importPlugin('vmshipment');
            $_dispatcher = JDispatcher::getInstance();
            //Should we add this? $inputOrder
            $_returnValues = $_dispatcher->trigger('plgVmOnUpdateOrderShipment', array(&$data, $old_order_status));
            /**
             * If an order gets cancelled, fire a plugin event, perhaps
             * some authorization needs to be voided
             */
            if ($data->order_status == "X") {
                JPluginHelper::importPlugin('vmpayment');
                //Should we add this? $inputOrder
                $_dispatcher = JDispatcher::getInstance();
                $_dispatcher->trigger('plgVmOnCancelPayment', array(&$data, $old_order_status));
            }
        }
        if ($data->store()) {
            $task = JRequest::getCmd('task', 0);
            $view = JRequest::getWord('view', 0);
            /*if($task=='edit'){
            			$update_lines = JRequest::getInt('update_lines');
            		} else /*/
            if ($task == 'updatestatus' and $view == 'orders') {
                $update_lines = JRequest::getVar('orders[' . $virtuemart_order_id . '][update_lines]');
            } else {
                $update_lines = 1;
            }
            if ($update_lines !== 0) {
                vmdebug('$update_lines ' . $update_lines);
                $q = 'SELECT virtuemart_order_item_id
												FROM #__virtuemart_order_items
												WHERE virtuemart_order_id="' . $virtuemart_order_id . '"';
                $db = JFactory::getDBO();
                $db->setQuery($q);
                $order_items = $db->loadObjectList();
                if ($order_items) {
                    // 				vmdebug('updateStatusForOneOrder',$data);
                    foreach ($order_items as $order_item) {
                        //$this->updateSingleItem($order_item->virtuemart_order_item_id, $data->order_status, $order['comments'] , $virtuemart_order_id, $data->order_pass);
                        $this->updateSingleItem($order_item->virtuemart_order_item_id, $data);
                    }
                }
            }
            /* Update the order history */
            $this->_updateOrderHist($virtuemart_order_id, $data->order_status, $inputOrder['customer_notified'], $inputOrder['comments']);
            // When the plugins did not already notified the user, do it here (the normal way)
            //Attention the ! prevents at the moment that an email is sent. But it should used that way.
            // 			if (!$inputOrder['customer_notified']) {
            $this->notifyCustomer($data->virtuemart_order_id, $inputOrder);
            // 			}
            //mod fazan 23/10/2012 per glimlag coupon
            if ($data->order_status == 'C') {
                require_once JPATH_ADMINISTRATOR . '/components/com_vmcoupons/classes/RSCoupons.class.php';
                RSCoupons::OnBuyProductCouponGenarate($data->virtuemart_order_id, $data->virtuemart_user_id);
                RSCoupons::OnExceedsThresholds($data->order_total, $data->virtuemart_user_id);
                RSCoupons::OnPaymentMethodCouponGenarate($data->virtuemart_paymentmethod_id, $data->virtuemart_user_id);
                RSCoupons::OnBuyProductOnCategoryCouponGenarate($data->virtuemart_order_id, $data->virtuemart_user_id);
                RSCoupons::OnShopperGroupCouponGenarate($data->virtuemart_user_id);
                RSCoupons::OnShopperNameCouponGenarate($data->virtuemart_user_id);
                RSCoupons::UpdateGenaratedCoupons($data->coupon_code, $data->virtuemart_order_id, $data->virtuemart_user_id);
            }
            //end mod fazan 23/10/2012 per glimlag coupon
            JPluginHelper::importPlugin('vmcoupon');
            $dispatcher = JDispatcher::getInstance();
            $returnValues = $dispatcher->trigger('plgVmCouponUpdateOrderStatus', array($data, $old_order_status));
            if (!empty($returnValues)) {
                foreach ($returnValues as $returnValue) {
                    if ($returnValue !== null) {
                        return $returnValue;
                    }
                }
            }
            return true;
        } else {
            return false;
        }
    }