/** * Добавление трекинг номера к заказу * * @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; }
/** * 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'); }
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; }
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; }
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); } }
/** * 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; }