public function update_pricing_info_for_asins($listing_ASINs, $account_id)
 {
     $listingsModel = new WPLA_ListingsModel();
     // fetch Buy Box pricing info and process result
     $api = new WPLA_AmazonAPI($account_id);
     $result = $api->getCompetitivePricingForId($listing_ASINs);
     $listingsModel->processBuyBoxPricingResult($result);
     // return if lowest offers are disabled
     // if ( ! get_option('wpla_repricing_use_lowest_offer') ) return;
     // fetch Lowest Offer info and process result
     $api = new WPLA_AmazonAPI($account_id);
     $result = $api->getLowestOfferListingsForASIN($listing_ASINs);
     $listingsModel->processLowestOfferPricingResult($result);
 }
 public function populateMatchesWithLowestPrices($products, $account)
 {
     // build array of ASINs
     $listing_ASINs = array();
     foreach ($products as $product) {
         if (sizeof($listing_ASINs) == 20) {
             continue;
         }
         $listing_ASINs[] = $product->ASIN;
     }
     if (!empty($listing_ASINs)) {
         $api = new WPLA_AmazonAPI($account->id);
         $result = $api->getCompetitivePricingForId($listing_ASINs);
         $ASIN_to_lowest_price = array();
         foreach ($result->products as $asin => $product) {
             $lowest_price = PHP_INT_MAX;
             foreach ($product->prices as $price) {
                 // $lowest_price = $price->LandedPrice;
                 // $condition    = $price->condition;
                 // $subcondition = $price->subcondition;
                 // $shipping_fee = $price->Shipping;
                 if ($price->LandedPrice < $lowest_price) {
                     if ($price->condition == 'New') {
                         $lowest_price = $price->LandedPrice;
                     }
                 }
             }
             // each pricing node
             if ($lowest_price != PHP_INT_MAX) {
                 $ASIN_to_lowest_price[$product->ASIN] = $lowest_price;
             }
         }
         // each product
     }
     foreach ($products as &$product) {
         if (isset($ASIN_to_lowest_price[$product->ASIN])) {
             $product->lowest_price = $ASIN_to_lowest_price[$product->ASIN];
         } else {
             $product->lowest_price = false;
         }
     }
     // echo "<pre>FINAL: ";print_r($products);echo"</pre>";#die();
     return $products;
 }
 public function updateListingWithLowestPrice($listing, $account)
 {
     // get listing object
     $lm = new WPLA_ListingsModel();
     $listing = $lm->getItem($listing['id'], OBJECT);
     // fetch pricing info
     $api = new WPLA_AmazonAPI($account->id);
     $result = $api->getCompetitivePricingForId(array($listing->asin));
     if (empty($result) || empty($result->products) || !is_array($result->products)) {
         return;
     }
     // find lowest New price
     $product = reset($result->products);
     // get first product
     $lowest_price = PHP_INT_MAX;
     foreach ($product->prices as $price) {
         if ($price->LandedPrice < $lowest_price) {
             if ($price->condition == 'New') {
                 $lowest_price = $price->LandedPrice;
             }
         }
     }
     // each pricing node
     if ($lowest_price == PHP_INT_MAX) {
         return;
     }
     // update listing
     $lm->updateListing($listing->id, array('price' => $lowest_price));
 }
 public function get_compet_price()
 {
     if (!isset($_REQUEST['listing'])) {
         return;
     }
     // get items
     $listing_ids = is_array($_REQUEST['listing']) ? $_REQUEST['listing'] : array($_REQUEST['listing']);
     if (!empty($listing_ids)) {
         $listingsModel = new WPLA_ListingsModel();
         $listings = WPLA_ListingsModel::getItems($listing_ids, OBJECT);
         $account_id = $listings[0]->account_id;
         // echo "<pre>";print_r($listings);echo"</pre>";die();
         // build array of ASINs
         $listing_ASINs = array();
         foreach ($listings as $listing) {
             // prevent invalid marketplace errors
             if ($account_id != $listing->account_id) {
                 $this->showMessage('You can only fetch pricing information from one account at a time. Item ' . $listing->asin . ' was skipped.', 1, 1);
                 continue;
             }
             $listing_ASINs[] = $listing->asin;
         }
         // limit to 20 ASINs at a time - for now
         if (sizeof($listing_ASINs) > 20) {
             $listing_ASINs = array_splice($listing_ASINs, 0, 20);
             $this->showMessage('You can only fetch pricing information for up to 20 ASINs at a time.', 2, 1);
         }
         if (!empty($listing_ASINs)) {
             $api = new WPLA_AmazonAPI($account_id);
             $result = $api->getCompetitivePricingForId($listing_ASINs);
             // echo "<pre>";print_r($result);echo"</pre>";
             if ($result->success) {
                 $message = '';
                 foreach ($result->products as $asin => $product) {
                     foreach ($product->prices as $price) {
                         $lowest_price = $price->LandedPrice;
                         $condition = $price->condition;
                         $subcondition = $price->subcondition;
                         $shipping_fee = $price->Shipping;
                         $shipping_msg = $shipping_fee ? "incl. {$shipping_fee} shipping" : 'free shipping';
                         $lowest_price = number_format_i18n(floatval($lowest_price), 2);
                         $message .= sprintf('BuyBox price for %s: %s ( %s / %s / %s )<br>', $asin, $lowest_price, $condition, $subcondition, $shipping_msg);
                     }
                     if (empty($product->prices)) {
                         $message .= sprintf('No Buy Box price found for %s<br>', $asin);
                     }
                 }
                 wpla_show_message($message);
             }
             // process result
             $listingsModel->processBuyBoxPricingResult($result);
         }
     }
 }