Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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;
 }