OpenCart 🇺🇦

Метод Ebay::productUpdateListen(...)

Схема

public mixed productUpdateListen ( $product_id, $data )

Аргументы

Аргумент Возможный тип Описание
$product_id
$data

Описание

Метод пока еще не документирован.

Исходный код

$this->log('productUpdateListen()');
//check if there is an active item link
$item_id = $this->getEbayItemId($product_id);
if($item_id != false) {
	//if so update stock or end item (based on qty)
	if ($this->openbay->addonLoad('openstock') && (isset($data['has_option']) && $data['has_option'] == 1)) {
		$varData = array();
		$this->load->model('tool/image');
		$this->load->model('catalog/product');
		$this->load->model('openstock/openstock');

		$variants           = $this->model_openstock_openstock->getProductOptionStocks($product_id);
		$groups             = $this->openbay->getProductOptions($product_id);
		$varData['groups']  = array();
		$varData['related'] = array();

		foreach($groups as $grp) {
			$t_tmp = array();
			foreach($grp['product_option_value'] as $grp_node) {
				$t_tmp[$grp_node['option_value_id']] = $grp_node['name'];

				$varData['related'][$grp_node['product_option_value_id']] = $grp['name'];
			}
			$varData['groups'][] = array('name' => $grp['name'], 'child' => $t_tmp);
		}

		$v = 0;
		$stock = false;

		foreach($variants as $option) {
			if($option['stock'] > 0 || $stock == true) {
				$stock = true;
			}

			if($v == 0) {
				//create a php version of the option element array to use on server side
				$varData['option_list'] = base64_encode(serialize($option['opts']));
			}

			// PRODUCT RESERVE LEVELS FOR VARIANT ITEMS (DOES NOT PASS THROUGH NORMAL SYSTEM)
			$reserve = $this->getReserve($product_id, $item_id, $option['var']);
			if($reserve != false) {
				$this->log('productUpdateListen() / Variant ('.$option['var'].') - Reserve stock: '.$reserve);

				if($option['stock'] > $reserve) {
					$this->log('putStockUpdate() - Stock ('.$option['stock'].') is larger than reserve ('.$reserve.'), setting level to reserve');
					$option['stock'] = $reserve;
				}
			}

			$varData['opt'][$v]['sku']     = $option['var'];
			$varData['opt'][$v]['qty']     = $option['stock'];
			$varData['opt'][$v]['active']  = 0;
			if($option['active'] == 1) {  $varData['opt'][$v]['active'] = 1; }
			$v++;
		}

		$varData['groups'] = base64_encode(serialize($varData['groups']));
		$varData['related'] = base64_encode(serialize($varData['related']));
		$varData['id'] = $item_id;

		//send to the api to process
		if($stock == true) {
			$this->log('productUpdateListen() - Sending to API');
			$response = $this->call('item/reviseStockVariants', $varData);
			return $response;
		} else {
			$this->log('productUpdateListen() - Ending item');

			$this->endItem($item_id);
		}
	}else{
		$this->decideEbayStockAction($product_id, $data['quantity'], $data['subtract']);
		return array('msg' => 'ok', 'error' => false);
	}
}else{
	//if not, is there an old link?
	$old_item_id = $this->getEndedEbayItemId($product_id);
	$this->log('productUpdateListen() - Got item: '.$old_item_id);
	if($old_item_id != false) {
		//yes, check if its a multi variant listing
		if ($this->openbay->addonLoad('openstock') && (isset($data['has_option']) && $data['has_option'] == 1)) {
			//yes, mutli variant listing
			$this->log('productUpdateListen() - multi variant items relist not supported');
		}else{
			$this->log('productUpdateListen() - Normal item, checking stock('.$data['quantity'].') > 0');
			//no, its a normal item, is there now stock?
			if($data['quantity'] > 0) {
				//yes, is relist setting yes?
				if($this->config->get('openbaypro_relistitems') == 1) {
					//relist item with new stock
					$this->relistItem($old_item_id, $product_id, $data['quantity']);
				}
			}
		}
	}else{
		//no - list has never existed
		$this->log('productUpdateListen() - no active or previous item ids');
	}
}