コード例 #1
0
 /**
  * Добавление трекинг номера к заказу
  *
  * @param type $order_id
  * @param type $privider
  * @return type
  */
 function add($order_id, $provider, $tracknumber, $date = '', $city = '', $name = '')
 {
     require_once CLASSPATH . 'ps_orderlog.php';
     $orderlog = new ps_orderlog();
     $tracking = $this->getTracking($order_id);
     $dblog = new ps_DB();
     $query = "SELECT provider FROM " . $this->_table;
     $query .= ' WHERE order_id = ' . $order_id;
     $dblog->query($query);
     $prev_provider = $dblog->loadResult($query);
     if (!$tracking) {
         $query = "INSERT INTO " . $this->_table;
         $WHERE = '';
     } else {
         $query = "UPDATE " . $this->_table;
         $WHERE = ' WHERE order_id = ' . $order_id;
     }
     $query .= " SET order_id='" . $order_id . "', provider='" . $provider . "', tracknumber='" . $tracknumber . "', date='" . $date . "', city='" . $city . "', name='" . $name . "'";
     $query .= $WHERE;
     $ret = $this->db->setQuery($query);
     $ret = $this->db->Query($query);
     if ($this->db->getErrorNum()) {
         echo $this->db->stderr();
         return false;
     }
     if ($provider != $prev_provider) {
         $orderlog->saveLog($order_id, 'Изменение трекинга', '', $prev_provider, $provider);
     }
     return $ret;
 }
コード例 #2
0
ファイル: ps_checkout.php プロジェクト: noikiy/owaspbwa
 /**
  * Lists Shipping Methods of all published Shipping Modules
  *
  * @param string $ship_to_info_id
  * @param string $shipping_method_id
  */
 function list_shipping_methods($ship_to_info_id = null, $shipping_method_id = null)
 {
     global $PSHOP_SHIPPING_MODULES, $vmLogger, $auth, $weight_total;
     if (empty($ship_to_info_id)) {
         // Get the Bill to user_info_id
         $database = new ps_DB();
         $database->setQuery("SELECT user_info_id FROM #__{vm}_user_info WHERE user_id=" . $auth['user_id'] . " AND address_type='BT'");
         $vars["ship_to_info_id"] = $_REQUEST['ship_to_info_id'] = $database->loadResult();
     } else {
         $vars['ship_to_info_id'] = $ship_to_info_id;
     }
     $vars['shipping_rate_id'] = $shipping_method_id;
     $vars["weight"] = $weight_total;
     $vars['zone_qty'] = vmRequest::getInt('zone_qty', 0);
     $i = 0;
     $theme = new $GLOBALS['VM_THEMECLASS']();
     $theme->set_vars(array('vars' => $vars, 'PSHOP_SHIPPING_MODULES' => $PSHOP_SHIPPING_MODULES));
     echo $theme->fetch('checkout/list_shipping_methods.tpl.php');
 }
コード例 #3
0
 function update_date_delivery()
 {
     // Обновляем дату доставки
     $order_id = intval($_REQUEST['order_id']);
     if (!$order_id) {
         return array('mess' => 'не указан номер заказа', 'result' => false);
     }
     $date_full = $date = isset($_REQUEST['date_delivery_full']) ? $_REQUEST['date_delivery_full'] : false;
     $date_full = "Доставка: " . $date_full . "\r\n";
     if ($date) {
         $date = explode(" ", $date);
         list($d, $m, $y) = explode(".", $date[0]);
         if (!$d || !$m || !$y) {
             return array('mess' => 'неверная дата', 'result' => false);
         }
         $datedelivery = $y . '-' . $m . '-' . $d;
     } else {
         $datedelivery = '';
     }
     $db = new ps_DB();
     $sql = 'SELECT date_delivery FROM jos_vm_orders WHERE order_id = "' . $order_id . '"';
     $db->query($sql);
     $prev_datedelivery = $db->loadResult();
     $sql = 'UPDATE jos_vm_orders SET date_delivery = "' . $datedelivery . '", customer_note = CONCAT("' . mysql_escape_string($date_full) . '", customer_note) WHERE order_id = "' . $order_id . '"';
     $db->query($sql);
     $result = array();
     $result['mess'] = 'OK';
     $result['result'] = true;
     $this->orderlog->saveLog($order_id, 'Изменение даты доставки', '', $prev_datedelivery, $datedelivery);
     return $result;
 }
コード例 #4
0
ファイル: ps_userfield.php プロジェクト: albertobraschi/Hab
 function saveField(&$d)
 {
     global $my, $mosConfig_live_site, $VM_LANG;
     $db = new ps_DB();
     if ($d['type'] == 'webaddress') {
         $d['rows'] = $d['webaddresstypes'];
         if (!($d['rows'] == 0 || $d['rows'] == 2)) {
             $d['rows'] = 0;
         }
     }
     $d['name'] = str_replace(" ", "", strtolower($d['name']));
     if (!$this->validateOnSave($d)) {
         return false;
     }
     // Prevent unpublishing and renaming of IMPORTANT Fields like "email", "username", "password",...
     $fieldObj = $this->get($d['fieldid']);
     if ($fieldObj !== false) {
         if (in_array($fieldObj->f('name'), $this->getSkipFields())) {
             $d['name'] = $fieldObj->f('name');
             $d['required'] = $fieldObj->f('required');
             $d['published'] = $fieldObj->f('published');
         }
     }
     $fields = array('name' => vmGet($d, 'name'), 'title' => vmGet($d, 'title'), 'description' => vmGet($d, 'description'), 'type' => vmGet($d, 'type'), 'maxlength' => vmGet($d, 'maxlength'), 'size' => vmGet($d, 'size'), 'required' => vmGet($d, 'required'), 'ordering' => vmGet($d, 'ordering'), 'cols' => vmGet($d, 'cols'), 'rows' => vmGet($d, 'rows'), 'value' => vmGet($d, 'value'), 'default' => vmGet($d, 'default'), 'published' => vmGet($d, 'published'), 'registration' => vmGet($d, 'registration'), 'shipping' => vmGet($d, 'shipping'), 'account' => vmGet($d, 'account'), 'readonly' => vmGet($d, 'readonly'), 'calculated' => vmGet($d, 'calculated'), 'params' => vmGet($d, 'params'), 'vendor_id' => vmGet($_SESSION, 'ps_vendor_id', 1));
     if (!empty($d['fieldid'])) {
         // existing record
         $db->buildQuery('UPDATE', '#__{vm}_userfield', $fields, 'WHERE `fieldid` =' . intval($d['fieldid']));
         $db->query();
         if ($d['type'] != 'delimiter') {
             $this->changeColumn($d['name'], $d['cType'], 'update');
         }
     } else {
         // add a new record
         $sql = "SELECT MAX(ordering) as max FROM #__{vm}_userfield";
         $db->query($sql);
         $db->next_record();
         $d['ordering'] = $db->f('max') + 1;
         $db->buildQuery('INSERT', '#__{vm}_userfield', $fields);
         $db->query();
         $_REQUEST['fieldid'] = $db->last_insert_id();
         if ($d['type'] != 'delimiter') {
             $this->changeColumn($d['name'], $d['cType'], 'add');
         }
     }
     $fieldNames = vmGet($d, 'vNames', array());
     $fieldValues = vmGet($d, 'vValues', array());
     $j = 1;
     if (!empty($d['fieldid'])) {
         $db->query("DELETE FROM #__{vm}_userfield_values" . " WHERE fieldid=" . (int) $d['fieldid'] . ' LIMIT 1');
     } else {
         $db->query("SELECT MAX(fieldid) as max FROM `#__{vm}_userfield`");
         $maxID = $db->loadResult();
         $d['fieldid'] = $maxID;
     }
     $n = count($fieldNames);
     for ($i = 0; $i < $n; $i++) {
         if (trim($fieldNames[$i]) != null || trim($fieldNames[$i]) != '') {
             $fields = array('fieldid' => (int) $d['fieldid'], 'fieldtitle' => htmlspecialchars($fieldNames[$i]), 'fieldvalue' => htmlspecialchars($fieldValues[$i]), 'ordering' => $j);
             $db->buildQuery('INSERT', '#__{vm}_userfield_values', $fields);
             $db->query();
             $j++;
         }
     }
     $GLOBALS['vmLogger']->info($VM_LANG->_('VM_USERFIELD_SAVED'));
     return true;
 }
コード例 #5
0
 function changeShipping($order_id, $r)
 {
     global $VM_LANG, $vmLogger;
     require_once CLASSPATH . 'ps_orderlog.php';
     $orderlog = new ps_orderlog();
     $d = array();
     $ship_method_id = $r['shipping_rate_id'];
     $ship_method_id = @urldecode($ship_method_id);
     $d["ship_method_id"] = $ship_method_id;
     $shipping_rate_id_ar = explode('|', $ship_method_id);
     //Inf Получение названия ТК
     $transportnaya_company = htmlspecialchars($r['transportnaya_company'], ENT_QUOTES);
     if (!empty($transportnaya_company)) {
         if ($shipping_rate_id_ar[1] == 'Доставка транспортной компанией') {
             $shipping_rate_id_ar[2] .= $transportnaya_company;
         }
         $d["ship_method_id"] = implode('|', $shipping_rate_id_ar);
     }
     $d['order_shipping'] = $shipping_rate_id_ar[3];
     $db = new ps_DB();
     $q = "SELECT ship_method_id FROM #__{vm}_orders WHERE order_id = '" . $order_id . "'";
     $db->query($q);
     $prev_ship_method_id = $db->loadResult();
     $db->buildQuery('UPDATE', '#__{vm}_orders', $d, ' WHERE order_id=' . $order_id);
     $result = $db->query();
     $ps_order_change = new ps_order_change($order_id);
     $ps_order_change->recalc_order($order_id);
     if ($prev_ship_method_id != $ship_method_id) {
         $orderlog->saveLog($order_id, 'Изменение варианта доставки', '', $prev_ship_method_id, $ship_method_id);
     }
 }
コード例 #6
0
ファイル: ps_order.php プロジェクト: kosmosby/medicine-prof
	/**
     * Changes the status of an order
     * @author pablo
     * @author soeren
     * @author Uli
     *
     *
     * @param array $d
     * @return boolean
    */
	function order_status_update(&$d) {
		global $mosConfig_offset;
			global  $sess, $VM_LANG, $vmLogger;

		$db = new ps_DB;
		//$timestamp = time() + ($mosConfig_offset*60*60);  //Original
		$timestamp = time();  //Custom
		//$mysqlDatetime = date("Y-m-d G:i:s",$timestamp);  //Original
		$mysqlDatetime = date("Y-m-d G:i:s", $timestamp + ($mosConfig_offset*60*60));  //Custom

		if( empty($_REQUEST['include_comment'])) {
			$include_comment="N";
		}

		// get the current order status
		$curr_order_status = @$d["current_order_status"];
		$notify_customer = empty($d['notify_customer']) ? "N" : $d['notify_customer'];
		if( $notify_customer=="Y" ) {
			$notify_customer=1;
		}
		else {
			$notify_customer=0;
		}

		$d['order_comment'] = empty($d['order_comment']) ? "" : $d['order_comment'];
		if( empty($d['order_item_id']) ) {
			// When the order is set to "confirmed", we can capture
			// the Payment with authorize.net
			if( $curr_order_status=="P" && $d["order_status"]=="C") {
				$q = "SELECT order_number,payment_class,order_payment_trans_id FROM #__{vm}_payment_method,#__{vm}_order_payment,#__{vm}_orders WHERE ";
				$q .= "#__{vm}_order_payment.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_orders.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_order_payment.payment_method_id=#__{vm}_payment_method.payment_method_id";
				$db->query( $q );
				$db->next_record();
				$payment_class = $db->f("payment_class");
				$d["order_number"] = $db->f("order_number");

				switch( $payment_class ) {
					case "ps_authorize":

						require_once( CLASSPATH."payment/ps_authorize.cfg.php");
						if( AN_TYPE == 'AUTH_ONLY' ) {
							require_once( CLASSPATH."payment/ps_authorize.php");
							$authorize = new ps_authorize();
							if( !$authorize->capture_payment( $d )) {
								return false;
							}
						}
						break;
					default:
							// default case for payment methods that allow to "capture" the payment
							if( is_file( CLASSPATH.'payment/'.basename($payment_class).'.php' ) ) {
								require_once( CLASSPATH.'payment/'.basename($payment_class).'.php' );
								if( !class_exists($payment_class)) break;
								$paymentObj = new $payment_class();

								if( !method_exists($paymentObj,'capture_payment')) break;

								if( !$paymentObj->capture_payment( $d )) {
									return false;
								}
							}
							break;
				}
			}
			/*
			 * This is like the test above for delayed capture only
			 * we (well, I - durian) don't think the credit card
			 * should be captured until the item(s) are shipped.
			 * In fact, VeriSign says not to capture the cards until
			 * the item ships.  Maybe this behavior should be a
			 * configurable item?
			 *
			 * When the order changes from Confirmed or Pending to
			 * Shipped, perform the delayed capture.
			 *
			 * Restricted to PayFlow Pro for now.
			 */
			if( ($curr_order_status=="P" || $curr_order_status=="C") && $d["order_status"]=="S") {
				$q = "SELECT order_number,payment_class,order_payment_trans_id FROM #__{vm}_payment_method,#__{vm}_order_payment,#__{vm}_orders WHERE ";
				$q .= "#__{vm}_order_payment.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_orders.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_order_payment.payment_method_id=#__{vm}_payment_method.payment_method_id";
				$db->query( $q );
				$db->next_record();
				$payment_class = $db->f("payment_class");
				if( $payment_class=="payflow_pro" ) {
					require_once( CLASSPATH."payment/payflow_pro.cfg.php");
					if( PFP_TYPE == 'A' ) {
						require_once( CLASSPATH."payment/payflow_pro.php");
						$pfp = new ps_pfp();
						$d["order_number"] = $db->f("order_number");
						if( !$pfp->capture_payment( $d )) {
							return false;
						}
					}
				}
			}

			/**
			 * Do capture when product is shipped
			 */
			 /*
			 if(($curr_order_status == "P" || $curr_order_status == "C") && $d["order_status"]=="S")
			 {
				$q = "SELECT order_number,payment_class,order_payment_trans_id FROM #__{vm}_payment_method,#__{vm}_order_payment,#__{vm}_orders WHERE ";
				$q .= "#__{vm}_orders.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_orders.order_id=#__{vm}_order_payment.order_id ";
				$q .= "AND #__{vm}_order_payment.payment_method_id=#__{vm}_payment_method.payment_method_id";
				$db->query( $q );
				$db->next_record();
				$payment_class = strtolower(basename($db->f("payment_class")));
				if( file_exists( CLASSPATH.'payment/'.$payment_class.'.php' )) {
					require_once( CLASSPATH."payment/$payment_class.php");
					$payment = new $payment_class();
					$d["order_number"] = $db->f("order_number");
					if( is_callable( array( $payment, 'capture_payment' ))) {
						if( !$payment->capture_payment( $d )) {
							return false;
						}
					}
				}
			 }*/

			/*
			 * If a pending order gets cancelled, void the authorization.
			 *
			 * It might work on captured cards too, if we want to
			 * void shipped orders.
			 *
			 */
			if( $curr_order_status=="P" && $d["order_status"]=="X") {
				$q = "SELECT order_number,payment_class,order_payment_trans_id FROM #__{vm}_payment_method,#__{vm}_order_payment,#__{vm}_orders WHERE ";
				$q .= "#__{vm}_order_payment.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_orders.order_id='".$db->getEscaped($d['order_id'])."' ";
				$q .= "AND #__{vm}_order_payment.payment_method_id=#__{vm}_payment_method.payment_method_id";
				$db->query( $q );
				$db->next_record();
				$payment_class = strtolower(basename($db->f("payment_class")));
				if( file_exists( CLASSPATH.'payment/'.$payment_class.'.php' )) {
					require_once( CLASSPATH."payment/$payment_class.php");
					$payment = new $payment_class();
					$d["order_number"] = $db->f("order_number");
					if( is_callable( array( $payment, 'void_authorization' ))) {
						if( !$payment->void_authorization( $d )) {
							return false;
						}
					}
				}
			}

			// Do a Refund
			if( $d['order_status']=='R' && $curr_order_status != 'R') {
				$vmLogger->debug("Initiating Refund");
				$q = 'SELECT order_number,payment_class,order_payment_trans_id FROM #__{vm}_payment_method,#__{vm}_order_payment,#__{vm}_orders WHERE ';
				$q .= '#__{vm}_orders.order_id=\''.$db->getEscaped($d['order_id']).'\' ';
				$q .= 'AND #__{vm}_orders.order_id=#__{vm}_order_payment.order_id ';
				$q .= 'AND #__{vm}_order_payment.payment_method_id=#__{vm}_payment_method.payment_method_id';
				$db->query( $q );
				$db->next_record();
				$payment_class = strtolower(basename($db->f("payment_class")));
				$vmLogger->debug('Payment Class: '.$payment_class);
				if( file_exists( CLASSPATH.'payment/'.$payment_class.'.php' )) {
					$vmLogger->debug('Found Payment Module');
					require_once( CLASSPATH."payment/$payment_class.php");
					$payment = new $payment_class();
					$d["order_number"] = $db->f("order_number");
					if( is_callable( array( $payment, 'do_refund' )))
					{
						$vmLogger->debug('Can call do_refund');
						if( !$payment->do_refund( $d )) {
							$vmLogger->debug('failed to do refund');
							return false;
						}
					}
				}
			}

			$fields =array( 'order_status'=> $d["order_status"],
										'mdate'=> $timestamp );
			$db->buildQuery('UPDATE', '#__{vm}_orders', $fields, "WHERE order_id='" . $db->getEscaped($d["order_id"]) . "'");
			$db->query();

			// Update the Order History.
			$fields = array( 'order_id' => $d["order_id"],
										'order_status_code' => $d["order_status"],
										'date_added' => $mysqlDatetime,
										'customer_notified' => $notify_customer,
										'comments' => $d['order_comment']
							);
			$db->buildQuery('INSERT', '#__{vm}_order_history', $fields );
			$db->query();

			// Do we need to re-update the Stock Level?
			if( (strtoupper($d["order_status"]) == "X" || strtoupper($d["order_status"])=="R")
				// && CHECK_STOCK == '1'
				&& $curr_order_status != $d["order_status"]
				) {
				// Get the order items and update the stock level
				// to the number before the order was placed
				$q = "SELECT product_id, product_quantity FROM #__{vm}_order_item WHERE order_id='".$db->getEscaped($d["order_id"])."'";
				$db->query( $q );
				$dbu = new ps_DB;
				require_once( CLASSPATH.'ps_product.php');
				// Now update each ordered product
				while( $db->next_record() ) {
					if( ENABLE_DOWNLOADS == '1' && ps_product::is_downloadable($db->f("product_id")) && VM_DOWNLOADABLE_PRODUCTS_KEEP_STOCKLEVEL == '1') {
						$q = "UPDATE #__{vm}_product
								SET product_sales=product_sales-".$db->f("product_quantity")."
							WHERE product_id=".$db->f("product_id");
						$dbu->query( $q );
					}
					else {
						$q = "UPDATE #__{vm}_product
							SET product_in_stock=product_in_stock+".$db->f("product_quantity").",
								product_sales=product_sales-".$db->f("product_quantity")."
							WHERE product_id=".$db->f("product_id");
						$dbu->query( $q );
					}
				}
			}
			// Update the Order Items' status
			$q = "SELECT order_item_id FROM #__{vm}_order_item WHERE order_id=".$db->getEscaped($d['order_id']);
			$db->query($q);
			$dbu = new ps_DB;
			while ($db->next_record()) {
				$item_id = $db->f("order_item_id");
				$fields =array( 'order_status'=> $d["order_status"],
											'mdate'=> $timestamp );
				$dbu->buildQuery('UPDATE', '#__{vm}_order_item', $fields, "WHERE order_item_id='" .(int)$item_id . "'");
				$dbu->query();
			}
		    if ($d["order_status"] == "C" || $d["order_status"] == "P")
            {
                //////////////////////////////////////////////////////////////////////////
                // OSE  added
                //////////////////////////////////////////////////////////////////////////
                //////////////Joomla Database Class//////////////
               require_once(JPATH_SITE.DS.'components'.DS.'com_osemsc'.DS.'init.php');
               require_once(JPATH_SITE.DS.'components'.DS.'com_osemsc'.DS.'helpers'.DS.'oseMscPublic.php');
                $jdb = &JFactory::getDBO();
                $jquery = "SELECT user_id FROM `#__vm_orders` WHERE `order_id` = '" . $db->getEscaped($d['order_id']) . "'";
                $jdb->setQuery($jquery);
                $user_id = $jdb->loadResult();
                $jquery = "SELECT a.product_id, b.category_id FROM `#__vm_order_item` as a, `#__vm_product_category_xref` as b WHERE a.`order_id` = '" . $db->getEscaped($d['order_id']) . "' AND a.`product_id` = b.`product_id`";
                $jdb->setQuery($jquery);
                $results = $jdb->loadObjectList();
				$cart = oseMscPublic::getCart();
                if (empty($results))
                {
                    $jquery = "SELECT a.product_id, b.category_id, c.product_parent_id FROM `#__vm_order_item` as a, `#__vm_product_category_xref` as b, `#__vm_product` as c WHERE a.`order_id` = '" . $db->getEscaped($d['order_id']) . "' AND a.`product_id` = c.`product_id` AND b.`product_id` = c.`product_parent_id`";
                    $jdb->setQuery($jquery);
                    $results = $jdb->loadObjectList();
                }

                foreach ($results as $result)
                {
                    //////////////////////////////////////////////////
                    $product_id = $result->product_id;
                    $jquery = "SELECT * FROM `#__osemsc_ext` WHERE `type` = 'vm'";
                    $jdb->setQuery($jquery);
                    $jdb->query();
                    $rows = $jdb->loadObjectList();
                    foreach ($rows as $row)
                    {
                        $msc_data = oseJson::decode($row->params);
                        $left_var = "";
                        $right_var = "";
                        if ($msc_data->category_id > 0)
                        {
                            $left_var = $result->category_id;
                            $right_var = $msc_data->category_id;
                        }
                        else
                        {
                            $left_var = $result->product_id;
                            $right_var = $msc_data->product_id;
                        }
                        if ($left_var == $right_var)
                        {
                        	$msc_id = $row->id;
                            $query = "SELECT order_currency FROM `#__vm_orders` WHERE `order_id` = ".(int)$d["order_id"];
                            $db->setQuery($query);
                            $currency = $db->loadResult();

                            if ($d["order_status"] == "C")
                            {
					            $member= oseRegistry :: call('member');
            				    $member->instance($user_id, 'member_id');

            					
            					// get current item
			            		$cart->updateParams('payment_mode','m');
				            	$paymentInfo = oseRegistry::call('msc')->getPaymentMscInfo($msc_id,$currency,0);
								$nItem = array('entry_id'=>$msc_id,'entry_type'=>'msc','msc_option'=>oseObject::getValue($paymentInfo,'msc_option'));
								$cart->addItem($nItem['entry_id'],$nItem['entry_type'],$nItem);

								$cart->update();

								// join msc
				            	oseRegistry::call('msc')->runAddonAction('register.payment.save',array('member_id'=>$user_id,'payment_method'=>'none'), true, false);
								$order_id = JRequest::getInt('order_id',0);

								oseRegistry::call('payment')->getInstance('Order')->confirmOrder($order_id, array());
                            }
                            else
                            {
                            	$msc_id= $row->id;
								$member= oseRegistry :: call('member');
            				    $member->instance($user_id, 'member_id');
								$params = $member->getAddonParams($msc_id,$user_id,0,$params = array());
								$updated= $msc->runAddonAction('member.msc.cancelMsc', $params);
                            }
                        }
                    }
                }
                //////////////////////////////////////////////////////////////////////////
            }
			if (ENABLE_DOWNLOADS == '1') {
				##################
				## DOWNLOAD MOD
				$this->mail_download_id( $d );
			}

			if( !empty($notify_customer) ) {
				$this->notify_customer( $d );
			}
		} elseif( !empty($d['order_item_id'])) {
				// Update the Order Items' status
				$q = "SELECT order_item_id, product_id, product_quantity FROM #__{vm}_order_item
							WHERE order_id=".$db->getEscaped($d['order_id'])
						. ' AND order_item_id='.intval( $d['order_item_id'] );
				$db->query($q);
				$item_product_id = $db->f('product_id');
				$item_product_quantity = $db->f('product_quantity');
				require_once( CLASSPATH. 'ps_product.php' );
				if( ENABLE_DOWNLOADS == '1' && ps_product::is_downloadable($item_product_id) && VM_DOWNLOADABLE_PRODUCTS_KEEP_STOCKLEVEL == '1') {
						$q = "UPDATE #__{vm}_product
								SET product_sales=product_sales-".$item_product_quantity."
							WHERE product_id=".$item_product_id;
						$db->query( $q );
					}
					else {
						$q = "UPDATE #__{vm}_product
							SET product_in_stock=product_in_stock+".$item_product_quantity.",
								product_sales=product_sales-".$item_product_quantity."
							WHERE product_id=".$item_product_id;
						$db->query( $q );
				}

				$fields =array( 'order_status'=> $d["order_status"],
											'mdate'=> $timestamp );
				$db->buildQuery('UPDATE', '#__{vm}_order_item', $fields, 'WHERE order_item_id='.intval( $d['order_item_id'] ));
				return $db->query() !== false;
		}
		return true;
	}