function insertOrUpdate($data, $Detail) { global $wpdb; // try to get existing order by order id $order = $this->getOrderByOrderID($data['order_id']); if ($order) { // update existing order WPLE()->logger->info('update order #' . $data['order_id'] . ' - LastTimeModified: ' . $data['LastTimeModified']); $result = $wpdb->update($this->tablename, $data, array('order_id' => $data['order_id'])); if ($result === false) { WPLE()->logger->error('failed to update order - MySQL said: ' . $wpdb->last_error); wple_show_message('Failed to update order #' . $data['order_id'] . ' - MySQL said: ' . $wpdb->last_error, 'error'); } $insert_id = $order['id']; $this->addToReport('updated', $data); } else { // create new order WPLE()->logger->info('insert order #' . $data['order_id'] . ' - LastTimeModified: ' . $data['LastTimeModified']); $result = $wpdb->insert($this->tablename, $data); if ($result === false) { WPLE()->logger->error('insert order failed - MySQL said: ' . $wpdb->last_error); $this->addToReport('error', $data, false, $wpdb->last_error); wple_show_message('Failed to insert order #' . $data['order_id'] . ' - MySQL said: ' . $wpdb->last_error, 'error'); return false; } $Details = maybe_unserialize($data['details']); $order_post_id = false; $insert_id = $wpdb->insert_id; // WPLE()->logger->info( 'insert_id: '.$insert_id ); // process order line items $tm = new TransactionsModel(); foreach ($Details->TransactionArray as $Transaction) { // avoid empty transaction id (auctions) $transaction_id = $Transaction->TransactionID; if (intval($transaction_id) == 0) { // use negative OrderLineItemID to separate from real TransactionIDs $transaction_id = 0 - str_replace('-', '', $Transaction->OrderLineItemID); } // check if we already processed this TransactionID if ($existing_transaction = $tm->getTransactionByTransactionID($transaction_id)) { // add history record $history_message = "Skipped already processed transaction {$transaction_id}"; $history_details = array('ebay_id' => $ebay_id); $this->addHistory($data['order_id'], 'skipped_transaction', $history_message, $history_details); // TODO: optionally update transaction to reflect correct CompleteStatus etc. - like so: // $tm->updateTransactionFromEbayOrder( $data, $Transaction ); // skip processing listing items continue; } // check if item has variation $hasVariations = false; $VariationSpecifics = array(); if (is_object(@$Transaction->Variation)) { foreach ($Transaction->Variation->VariationSpecifics as $spec) { $VariationSpecifics[$spec->Name] = $spec->Value[0]; } $hasVariations = true; } // update listing sold quantity and status $this->processListingItem($data['order_id'], $Transaction->Item->ItemID, $Transaction->QuantityPurchased, $data, $VariationSpecifics, $Transaction); // create transaction record for future reference $tm->createTransactionFromEbayOrder($data, $Transaction); } $this->addToReport('inserted', $data, $order_post_id); } }
public function checkTransactions($show_message = false) { $om = new EbayOrdersModel(); $tm = new TransactionsModel(); $orders = $om->getAll(); // echo "<pre>";print_r($orders);echo"</pre>";#die(); $created_transactions = 0; $pending_orders = 0; // loop orders foreach ($orders as $order) { $order_details = $om->decodeObject($order['details'], false, true); // echo "<pre>";print_r($order_details);echo"</pre>";#die(); // skip if this order has been processed already if ($tm->getTransactionByEbayOrderID($order['order_id'])) { continue; } // limit processing to 500 orders at a time if ($created_transactions >= 500) { $pending_orders++; continue; } // loop transactions $transactions = $order_details->TransactionArray; foreach ($transactions as $Transaction) { // echo "<pre>";print_r($Transaction->TransactionID);echo"</pre>";#die(); // $transaction_id = $Transaction->TransactionID; // create transaction $txn_id = $tm->createTransactionFromEbayOrder($order, $Transaction); // echo "<pre>created transaction ";print_r($Transaction->TransactionID);echo"</pre>";#die(); $created_transactions++; } } $msg = $created_transactions . ' transactions were created.<br><br>'; if ($pending_orders) { $msg .= 'There are ' . $pending_orders . ' more orders to process. Please run this check again until all orders have been processed.'; } else { $msg .= 'Please visit the <a href="admin.php?page=wplister-transactions">Transactions</a> page to check for duplicates.'; } if ($show_message) { $this->showMessage($msg); } // return number of orders which still need to be processed return $pending_orders; }