$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');
}
}