/** * Sync all inventory from Square (expensive) * @todo if searching for square id fails, check for SKU */ public function sync_all_inventory() { // refresh cache first to get the latest inventory $this->connect->refresh_inventory_cache(); $square_inventory = $this->connect->get_square_inventory(); // hopefully there has been a manual sync prior so that square item id // has already been saved in the product/variation metas to prevent // unnecessary round trip requests to Square to find the SKU foreach ($square_inventory as $variation_id => $stock) { $wc_product = WC_Square_Utils::get_wc_product_for_square_item_variation_id($variation_id); if (is_object($wc_product)) { $wc_product->set_stock((int) $stock); } } return true; }
/** * Sync a WC Product's inventory to Square * * @param WC_Product $wc_product */ public function sync_inventory(WC_Product $wc_product) { $wc_variation_ids = WC_Square_Utils::get_stock_managed_wc_variation_ids($wc_product); $square_inventory = $this->connect->get_square_inventory(); foreach ($wc_variation_ids as $wc_variation_id) { $square_variation_id = WC_Square_Utils::get_wc_variation_square_id($wc_variation_id); if ($square_variation_id && isset($square_inventory[$square_variation_id])) { $wc_stock = (int) get_post_meta($wc_variation_id, '_stock', true); $square_stock = (int) $square_inventory[$square_variation_id]; $delta = $wc_stock - $square_stock; $result = $this->connect->update_square_inventory($square_variation_id, $delta); if (!$result) { WC_Square_Sync_Logger::log(sprintf('[WC -> Square] Error syncing inventory for WC Product %d.', $wc_product->id)); } } } }