shop.balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

amazon.php (49824B)


      1 <?php
      2 class ControllerExtensionOpenbayAmazon extends Controller {
      3 	public function install() {
      4 		$this->load->model('extension/openbay/amazon');
      5 		$this->load->model('setting/setting');
      6 		$this->load->model('setting/extension');
      7 		$this->load->model('user/user_group');
      8 
      9 		$this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazon_listing');
     10 		$this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_listing');
     11 		$this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazon_product');
     12 		$this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_product');
     13 
     14 		$this->model_extension_openbay_amazon->install();
     15 	}
     16 
     17 	public function uninstall() {
     18 		$this->load->model('extension/openbay/amazon');
     19 		$this->load->model('setting/setting');
     20 		$this->load->model('setting/extension');
     21 
     22 		$this->model_extension_openbay_amazon->uninstall();
     23 		$this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
     24 		$this->model_setting_setting->deleteSetting($this->request->get['extension']);
     25 	}
     26 
     27 	public function index() {
     28 		$this->load->model('setting/setting');
     29 		$this->load->model('localisation/order_status');
     30 		$this->load->model('extension/openbay/amazon');
     31 
     32 		$data = $this->load->language('extension/openbay/amazon');
     33 
     34 		$this->document->setTitle($this->language->get('text_dashboard'));
     35 		$this->document->addScript('view/javascript/openbay/js/faq.js');
     36 
     37 		$data['breadcrumbs'] = array();
     38 		$data['breadcrumbs'][] = array(
     39 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
     40 			'text'      => $this->language->get('text_home'),
     41 		);
     42 		$data['breadcrumbs'][] = array(
     43 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
     44 			'text'      => $this->language->get('text_openbay'),
     45 		);
     46 		$data['breadcrumbs'][] = array(
     47 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
     48 			'text'      => $this->language->get('text_dashboard'),
     49 		);
     50 
     51 		$data['success'] = '';
     52 		if (isset($this->session->data['success'])) {
     53 			$data['success'] = $this->session->data['success'];
     54 			unset($this->session->data['success']);
     55 		} else {
     56 			$data['success'] = '';
     57 		}
     58 
     59 		$data['validation'] = $this->openbay->amazon->validate();
     60 		$data['link_settings'] = $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true);
     61 		$data['link_subscription'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true);
     62 		$data['link_item_link'] = $this->url->link('extension/openbay/amazon/itemLinks', 'user_token=' . $this->session->data['user_token'], true);
     63 		$data['link_stock_updates'] = $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true);
     64 		$data['link_saved_listings'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true);
     65 		$data['link_bulk_listing'] = $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true);
     66 		$data['link_bulk_linking'] = $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true);
     67 		$data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=amazon';
     68 
     69 		$data['header'] = $this->load->controller('common/header');
     70 		$data['column_left'] = $this->load->controller('common/column_left');
     71 		$data['footer'] = $this->load->controller('common/footer');
     72 
     73 		$this->response->setOutput($this->load->view('extension/openbay/amazon', $data));
     74 	}
     75 
     76 	public function stockUpdates() {
     77 		$data = $this->load->language('extension/openbay/amazon_stockupdates');
     78 
     79 		$this->document->setTitle($this->language->get('heading_title'));
     80 		$this->document->addScript('view/javascript/openbay/js/faq.js');
     81 
     82 		$data['breadcrumbs'] = array();
     83 		
     84 		$data['breadcrumbs'][] = array(
     85 			'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
     86 			'text' => $this->language->get('text_home'),
     87 		);
     88 		
     89 		$data['breadcrumbs'][] = array(
     90 			'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
     91 			'text' => $this->language->get('text_openbay'),
     92 		);
     93 		
     94 		$data['breadcrumbs'][] = array(
     95 			'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
     96 			'text' => $this->language->get('text_amazon'),
     97 		);
     98 		
     99 		$data['breadcrumbs'][] = array(
    100 			'href' => $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true),
    101 			'text' => $this->language->get('heading_title'),
    102 		);
    103 
    104 		$data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    105 
    106 		$request_arg = array();
    107 
    108 		if (isset($this->request->get['filter_date_start'])) {
    109 			$request_arg['date_start'] = date("Y-m-d", strtotime($this->request->get['filter_date_start']));
    110 		} else {
    111 			$request_arg['date_start'] = date("Y-m-d");
    112 		}
    113 
    114 		if (isset($this->request->get['filter_date_end'])) {
    115 			$request_arg['date_end'] = date("Y-m-d", strtotime($this->request->get['filter_date_end']));
    116 		} else {
    117 			$request_arg['date_end'] = date("Y-m-d");
    118 		}
    119 
    120 		$data['date_start'] = $request_arg['date_start'];
    121 		$data['date_end'] = $request_arg['date_end'];
    122 
    123 		$xml = $this->openbay->amazon->getStockUpdatesStatus($request_arg);
    124 		$xml_object = simplexml_load_string($xml);
    125 
    126 		$data['table_data'] = array();
    127 
    128 		if ($xml_object !== false) {
    129 			$table_data = array();
    130 
    131 			foreach($xml_object->update as $update_node) {
    132 				$row = array(
    133 					'date_requested' => (string)$update_node->date_requested,
    134 					'date_updated' 	 => (string)$update_node->date_updated,
    135 					'status' 		 => (string)$update_node->status,
    136 				);
    137 
    138 				$data_items = array();
    139 
    140 				foreach($update_node->data->product as $product_node) {
    141 					$data_items[] = array(
    142 						'sku' 	=> (string)$product_node->sku,
    143 						'stock' => (int)$product_node->stock
    144 					);
    145 				}
    146 
    147 				$row['data'] = $data_items;
    148 				$table_data[(int)$update_node->ref] = $row;
    149 			}
    150 
    151 			$data['table_data'] = $table_data;
    152 		} else {
    153 			$data['error'] = $data['error_api_connection'];
    154 		}
    155 
    156 		$data['user_token'] = $this->session->data['user_token'];
    157 
    158 		$data['header'] = $this->load->controller('common/header');
    159 		$data['column_left'] = $this->load->controller('common/column_left');
    160 		$data['footer'] = $this->load->controller('common/footer');
    161 
    162 		$this->response->setOutput($this->load->view('extension/openbay/amazon_stock_updates', $data));
    163 
    164 	}
    165 
    166 	public function subscription() {
    167 		$data = $this->load->language('extension/openbay/amazon_subscription');
    168 
    169 		$this->document->setTitle($this->language->get('heading_title'));
    170 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    171 
    172 		$data['breadcrumbs'] = array();
    173 		$data['breadcrumbs'][] = array(
    174 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    175 			'text'      => $this->language->get('text_home'),
    176 		);
    177 		$data['breadcrumbs'][] = array(
    178 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    179 			'text'      => $this->language->get('text_openbay'),
    180 		);
    181 		$data['breadcrumbs'][] = array(
    182 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    183 			'text'      => $this->language->get('text_amazon'),
    184 		);
    185 		$data['breadcrumbs'][] = array(
    186 			'href'      => $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true),
    187 			'text'      => $this->language->get('heading_title'),
    188 		);
    189 
    190 		$data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    191 
    192 		$response = simplexml_load_string($this->openbay->amazon->call('plans/getPlans'));
    193 
    194 		$data['plans'] = array();
    195 
    196 		if ($response) {
    197 			foreach ($response->Plan as $plan) {
    198 				$data['plans'][] = array(
    199 					'title' => (string)$plan->Title,
    200 					'description' => (string)$plan->Description,
    201 					'order_frequency' => (string)$plan->OrderFrequency,
    202 					'product_listings' => (string)$plan->ProductListings,
    203 					'bulk_listing' => (string)$plan->BulkListing,
    204 					'price' => (string)$plan->Price,
    205 				);
    206 			}
    207 		}
    208 
    209 		$response = simplexml_load_string($this->openbay->amazon->call('plans/getUsersPlans'));
    210 
    211 		$plan = false;
    212 
    213 		if ($response) {
    214 			$plan = array(
    215 				'merchant_id' => (string)$response->MerchantId,
    216 				'user_status' => (string)$response->UserStatus,
    217 				'title' => (string)$response->Title,
    218 				'description' => (string)$response->Description,
    219 				'price' => (string)$response->Price,
    220 				'order_frequency' => (string)$response->OrderFrequency,
    221 				'product_listings' => (string)$response->ProductListings,
    222 				'listings_remain' => (string)$response->ListingsRemain,
    223 				'listings_reserved' => (string)$response->ListingsReserved,
    224 				'bulk_listing' => (string)$response->BulkListing,
    225 			);
    226 		}
    227 
    228 		$data['user_plan'] = $plan;
    229 		$data['link_change_plan'] = $this->openbay->amazon->getServer() . 'account/changePlan/?token=' . $this->config->get('openbay_amazon_token');
    230 		$data['link_change_seller'] = $this->openbay->amazon->getServer() . 'account/changeSellerId/?token=' . $this->config->get('openbay_amazon_token');
    231 		$data['link_register'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=subscription&utm_campaign=amazon';
    232 
    233 		$data['header'] = $this->load->controller('common/header');
    234 		$data['column_left'] = $this->load->controller('common/column_left');
    235 		$data['footer'] = $this->load->controller('common/footer');
    236 
    237 		$this->response->setOutput($this->load->view('extension/openbay/amazon_subscription', $data));
    238 	}
    239 
    240 	public function settings() {
    241 		$data = $this->load->language('extension/openbay/amazon_settings');
    242 
    243 		$this->document->setTitle($this->language->get('heading_title'));
    244 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    245 
    246 		$this->load->model('setting/setting');
    247 		$this->load->model('localisation/order_status');
    248 		$this->load->model('extension/openbay/amazon');
    249 
    250 		$this->load->model('customer/customer_group');
    251 
    252 		$data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups();
    253 
    254 		$settings = $this->model_setting_setting->getSetting('openbay_amazon');
    255 
    256 		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
    257 			if (!isset($this->request->post['openbay_amazon_orders_marketplace_ids'])) {
    258 				$this->request->post['openbay_amazon_orders_marketplace_ids'] = array();
    259 			}
    260 
    261 			$settings = array_merge($settings, $this->request->post);
    262 			$this->model_setting_setting->editSetting('openbay_amazon', $settings);
    263 
    264 			$this->config->set('openbay_amazon_token', $this->request->post['openbay_amazon_token']);
    265 			$this->config->set('openbay_amazon_encryption_key', $this->request->post['openbay_amazon_encryption_key']);
    266 			$this->config->set('openbay_amazon_encryption_iv', $this->request->post['openbay_amazon_encryption_iv']);
    267 
    268 			$this->openbay->amazon->setEncryptionKey($this->request->post['openbay_amazon_encryption_key']);
    269 			$this->openbay->amazon->setEncryptionIv($this->request->post['openbay_amazon_encryption_iv']);
    270 
    271 			if (!empty($this->request->post['openbay_amazon_token']) && !empty($this->request->post['openbay_amazon_encryption_key']) && !empty($this->request->post['openbay_amazon_encryption_iv'])) {
    272                 $this->model_extension_openbay_amazon->verifyConfig($settings);
    273             }
    274 
    275 			$this->session->data['success'] = $this->language->get('text_settings_updated');
    276 			$this->response->redirect($this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true));
    277 			return;
    278 		}
    279 
    280 		$data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    281 
    282 		$data['breadcrumbs'] = array();
    283 		$data['breadcrumbs'][] = array(
    284 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    285 			'text'      => $this->language->get('text_home'),
    286 		);
    287 		$data['breadcrumbs'][] = array(
    288 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    289 			'text'      => $this->language->get('text_openbay'),
    290 		);
    291 		$data['breadcrumbs'][] = array(
    292 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    293 			'text'      => $this->language->get('text_amazon'),
    294 		);
    295 
    296 		$data['breadcrumbs'][] = array(
    297 			'href'      => $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true),
    298 			'text'      => $this->language->get('heading_title'),
    299 		);
    300 
    301 		$data['marketplace_ids']                  = (isset($settings['openbay_amazon_orders_marketplace_ids'])) ? (array)$settings['openbay_amazon_orders_marketplace_ids'] : array();
    302 		$data['default_listing_marketplace_ids']  = (isset($settings['openbay_amazon_default_listing_marketplace_ids'])) ? (array)$settings['openbay_amazon_default_listing_marketplace_ids'] : array();
    303 
    304 		$data['marketplaces'] = array(
    305 			array('name' => $this->language->get('text_de'), 'id' => 'A1PA6795UKMFR9', 'code' => 'de'),
    306 			array('name' => $this->language->get('text_fr'), 'id' => 'A13V1IB3VIYZZH', 'code' => 'fr'),
    307 			array('name' => $this->language->get('text_it'), 'id' => 'APJ6JRA9NG5V4', 'code' => 'it'),
    308 			array('name' => $this->language->get('text_es'), 'id' => 'A1RKKUPIHCS9HS', 'code' => 'es'),
    309 			array('name' => $this->language->get('text_uk'), 'id' => 'A1F83G8C2ARO7P', 'code' => 'uk'),
    310 		);
    311 
    312 		$data['conditions'] = array(
    313 			'New' => $this->language->get('text_new'),
    314 			'UsedLikeNew' => $this->language->get('text_used_like_new'),
    315 			'UsedVeryGood' => $this->language->get('text_used_very_good'),
    316 			'UsedGood' => $this->language->get('text_used_good'),
    317 			'UsedAcceptable' => $this->language->get('text_used_acceptable'),
    318 			'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
    319 			'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
    320 			'CollectibleGood' => $this->language->get('text_collectible_good'),
    321 			'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
    322 			'Refurbished' => $this->language->get('text_refurbished'),
    323 		);
    324 
    325 		$data['openbay_amazon_status'] = isset($settings['openbay_amazon_status']) ? $settings['openbay_amazon_status'] : '';
    326 		$data['openbay_amazon_token'] = isset($settings['openbay_amazon_token']) ? $settings['openbay_amazon_token'] : '';
    327 		$data['openbay_amazon_encryption_key'] = isset($settings['openbay_amazon_encryption_key']) ? $settings['openbay_amazon_encryption_key'] : '';
    328 		$data['openbay_amazon_encryption_iv'] = isset($settings['openbay_amazon_encryption_iv']) ? $settings['openbay_amazon_encryption_iv'] : '';
    329 		$data['openbay_amazon_listing_tax_added'] = isset($settings['openbay_amazon_listing_tax_added']) ? $settings['openbay_amazon_listing_tax_added'] : '0.00';
    330 		$data['openbay_amazon_order_tax'] = isset($settings['openbay_amazon_order_tax']) ? $settings['openbay_amazon_order_tax'] : '00';
    331 		$data['openbay_amazon_default_listing_marketplace'] = isset($settings['openbay_amazon_default_listing_marketplace']) ? $settings['openbay_amazon_default_listing_marketplace'] : '';
    332 		$data['openbay_amazon_listing_default_condition'] = isset($settings['openbay_amazon_listing_default_condition']) ? $settings['openbay_amazon_listing_default_condition'] : '';
    333 
    334 		$data['carriers'] = $this->openbay->amazon->getCarriers();
    335 		$data['openbay_amazon_default_carrier'] = isset($settings['openbay_amazon_default_carrier']) ? $settings['openbay_amazon_default_carrier'] : '';
    336 
    337 		$unshipped_status_id = isset($settings['openbay_amazon_order_status_unshipped']) ? $settings['openbay_amazon_order_status_unshipped'] : '';
    338 		$partially_shipped_status_id = isset($settings['openbay_amazon_order_status_partially_shipped']) ? $settings['openbay_amazon_order_status_partially_shipped'] : '';
    339 		$shipped_status_id = isset($settings['openbay_amazon_order_status_shipped']) ? $settings['openbay_amazon_order_status_shipped'] : '';
    340 		$canceled_status_id = isset($settings['openbay_amazon_order_status_canceled']) ? $settings['openbay_amazon_order_status_canceled'] : '';
    341 
    342 		$amazon_order_statuses = array(
    343 			'unshipped' => array('name' => $this->language->get('text_unshipped'), 'order_status_id' => $unshipped_status_id),
    344 			'partially_shipped' => array('name' => $this->language->get('text_partially_shipped'), 'order_status_id' => $partially_shipped_status_id),
    345 			'shipped' => array('name' => $this->language->get('text_shipped'), 'order_status_id' => $shipped_status_id),
    346 			'canceled' => array('name' => $this->language->get('text_canceled'), 'order_status_id' => $canceled_status_id),
    347 		);
    348 
    349 		$data['openbay_amazon_order_customer_group'] = isset($settings['openbay_amazon_order_customer_group']) ? $settings['openbay_amazon_order_customer_group'] : '';
    350 
    351 		$data['amazon_order_statuses'] = $amazon_order_statuses;
    352 		$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
    353 
    354 		$data['subscription_url'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true);
    355 		$data['itemLinks_url'] = $this->url->link('extension/openbay/amazon_product/linkItems', 'user_token=' . $this->session->data['user_token'], true);
    356 		$data['openbay_amazon_notify_admin'] = isset($settings['openbay_amazon_notify_admin']) ? $settings['openbay_amazon_notify_admin'] : '';
    357 		$data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=amazon';
    358 
    359         $api_checked = false;
    360         $api_status = false;
    361         $api_auth = false;
    362 
    363 		if (!empty($data['openbay_amazon_token']) && !empty($data['openbay_amazon_encryption_key']) && !empty($data['openbay_amazon_encryption_iv'])) {
    364 		    $response = $this->openbay->amazon->call('ping/info', array('say hello'));
    365 
    366 		    if (!empty($response)) {
    367                 $ping_info = simplexml_load_string($response);
    368             }
    369 
    370             $api_checked = true;
    371 
    372             if ($ping_info) {
    373                 $api_status = ((string)$ping_info->Api_status == 'ok') ? true : false;
    374                 $api_auth = ((string)$ping_info->Auth == 'true') ? true : false;
    375             }
    376         }
    377 
    378 		$data['api_status'] = $api_status;
    379 		$data['api_auth'] = $api_auth;
    380 		$data['api_checked'] = $api_checked;
    381 
    382 		$data['header'] = $this->load->controller('common/header');
    383 		$data['column_left'] = $this->load->controller('common/column_left');
    384 		$data['footer'] = $this->load->controller('common/footer');
    385 
    386 		$this->response->setOutput($this->load->view('extension/openbay/amazon_settings', $data));
    387 	}
    388 
    389 	public function itemLinks() {
    390 		$data = $this->load->language('extension/openbay/amazon_links');
    391 
    392 		$this->document->setTitle($this->language->get('heading_title'));
    393 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    394 
    395 		$data['breadcrumbs'] = array();
    396 
    397 		$data['breadcrumbs'][] = array(
    398 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    399 			'text'      => $this->language->get('text_home'),
    400 		);
    401 		$data['breadcrumbs'][] = array(
    402 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    403 			'text'      => $this->language->get('text_openbay'),
    404 		);
    405 		$data['breadcrumbs'][] = array(
    406 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    407 			'text'      => $this->language->get('text_amazon'),
    408 		);
    409 
    410 		$data['breadcrumbs'][] = array(
    411 			'href'      => $this->url->link('extension/openbay/amazon/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
    412 			'text'      => $this->language->get('heading_title'),
    413 		);
    414 
    415 		$data['user_token'] = $this->session->data['user_token'];
    416 
    417 		$data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    418 
    419 		$data['link_add_item'] = $this->url->link('extension/openbay/amazon/addLink', 'user_token=' . $this->session->data['user_token'], true);
    420 		$data['link_remove_item'] = $this->url->link('extension/openbay/amazon/deleteLink', 'user_token=' . $this->session->data['user_token'], true);
    421 		$data['link_get_items'] = $this->url->link('extension/openbay/amazon/getLinks', 'user_token=' . $this->session->data['user_token'], true);
    422 		$data['link_get_unlinked_items'] = $this->url->link('extension/openbay/amazon/getUnlinked', 'user_token=' . $this->session->data['user_token'], true);
    423 		$data['link_get_variants'] = $this->url->link('extension/openbay/amazon/getVariants', 'user_token=' . $this->session->data['user_token'], true);
    424 
    425 		$data['header'] = $this->load->controller('common/header');
    426 		$data['column_left'] = $this->load->controller('common/column_left');
    427 		$data['footer'] = $this->load->controller('common/footer');
    428 
    429 		$this->response->setOutput($this->load->view('extension/openbay/amazon_item_links', $data));
    430 	}
    431 
    432 	public function savedListings() {
    433 		$data = $this->load->language('extension/openbay/amazon_listingsaved');
    434 
    435 		$this->document->setTitle($this->language->get('heading_title'));
    436 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    437 
    438 		$data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    439 
    440 		$data['breadcrumbs'] = array();
    441 		$data['breadcrumbs'][] = array(
    442 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    443 			'text'      => $this->language->get('text_home'),
    444 		);
    445 		$data['breadcrumbs'][] = array(
    446 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    447 			'text'      => $this->language->get('text_openbay'),
    448 		);
    449 		$data['breadcrumbs'][] = array(
    450 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    451 			'text'      => $this->language->get('text_amazon'),
    452 		);
    453 
    454 		$data['breadcrumbs'][] = array(
    455 			'href'      => $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true),
    456 			'text'      => $this->language->get('heading_title'),
    457 		);
    458 
    459 		$data['user_token'] = $this->session->data['user_token'];
    460 		$this->load->model('extension/openbay/amazon');
    461 		$saved_products = $this->model_extension_openbay_amazon->getSavedProducts();
    462 
    463 		$data['saved_products'] = array();
    464 
    465 		foreach($saved_products as $saved_product) {
    466 			$data['saved_products'][] = array(
    467 				'product_id' => $saved_product['product_id'],
    468 				'product_name' => $saved_product['product_name'],
    469 				'product_model' => $saved_product['product_model'],
    470 				'product_sku' => $saved_product['product_sku'],
    471 				'amazon_sku' => $saved_product['amazon_sku'],
    472 				'var' => $saved_product['var'],
    473 				'edit_link' => $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $saved_product['product_id'] . '&sku=' . $saved_product['var'], true),
    474 			);
    475 		}
    476 
    477 		$data['delete_saved'] = $this->url->link('extension/openbay/amazon_product/deleteSaved', 'user_token=' . $this->session->data['user_token'], true);
    478 		$data['upload_saved'] = $this->url->link('extension/openbay/amazon_product/uploadSaved', 'user_token=' . $this->session->data['user_token'], true);
    479 
    480 		$data['header'] = $this->load->controller('common/header');
    481 		$data['column_left'] = $this->load->controller('common/column_left');
    482 		$data['footer'] = $this->load->controller('common/footer');
    483 
    484 		$this->response->setOutput($this->load->view('extension/openbay/amazon_saved_listings', $data));
    485 	}
    486 
    487 	protected function validate() {
    488 		if (!$this->user->hasPermission('modify', 'extension/openbay/amazon')) {
    489 			$this->error = $this->language->get('error_permission');
    490 		}
    491 
    492 		if (empty($this->error)) {
    493 			return true;
    494 		}
    495 
    496 		return false;
    497 	}
    498 
    499 	public function getVariants() {
    500 		$variants = array();
    501 
    502 		if ($this->openbay->addonLoad('openstock') && isset($this->request->get['product_id'])) {
    503 			$this->load->model('extension/module/openstock');
    504 			$this->load->model('tool/image');
    505 			$variants = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
    506 		}
    507 
    508 		if (empty($variants)) {
    509 			$variants = false;
    510 		} else {
    511 			foreach ($variants as $key => $variant) {
    512 				if ($variant['sku'] == '') {
    513 					unset($variants[$key]);
    514 				}
    515 			}
    516 		}
    517 
    518 		$this->response->addHeader('Content-Type: application/json');
    519 		$this->response->setOutput(json_encode($variants));
    520 	}
    521 
    522 	public function addLink() {
    523 		if (isset($this->request->get['product_id']) && isset($this->request->get['amazon_sku'])) {
    524 			$this->load->model('extension/openbay/amazon');
    525 
    526 			$amazon_sku = $this->request->get['amazon_sku'];
    527 			$product_id = $this->request->get['product_id'];
    528 			$var = isset($this->request->get['var']) ? $this->request->get['var'] : '';
    529 
    530 			$this->model_extension_openbay_amazon->linkProduct($amazon_sku, $product_id, $var);
    531 
    532 			$logger = new Log('amazon_stocks.log');
    533 			$logger->write('addItemLink() called for product id: ' . $product_id . ', amazon sku: ' . $amazon_sku . ', var: ' . $var);
    534 
    535 			if ($var != '' && $this->openbay->addonLoad('openstock')) {
    536 				$logger->write('Using openStock');
    537 				$this->load->model('tool/image');
    538 				$this->load->model('extension/module/openstock');
    539 				$option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
    540 
    541 				$quantity_data = array();
    542 
    543 				foreach($option_stocks as $option_stock) {
    544 					if (isset($option_stock['sku']) && $option_stock['sku'] == $var) {
    545 						$quantity_data[$amazon_sku] = $option_stock['stock'];
    546 						break;
    547 					}
    548 				}
    549 
    550 				if (!empty($quantity_data)) {
    551 					$logger->write('Updating quantities with data: ' . print_r($quantity_data, true));
    552 					$this->openbay->amazon->updateQuantities($quantity_data);
    553 				} else {
    554 					$logger->write('No quantity data will be posted . ');
    555 				}
    556 			} else {
    557 				$this->openbay->amazon->putStockUpdateBulk(array($product_id));
    558 			}
    559 
    560 			$json = json_encode('ok');
    561 		} else {
    562 			$json = json_encode('error');
    563 		}
    564 
    565 		$this->response->addHeader('Content-Type: application/json');
    566 		$this->response->setOutput($json);
    567 	}
    568 
    569 	public function deleteLink() {
    570 		if (isset($this->request->get['amazon_sku'])) {
    571 			$this->load->model('extension/openbay/amazon');
    572 
    573 			$amazon_sku = $this->request->get['amazon_sku'];
    574 
    575 			$this->model_extension_openbay_amazon->removeProductLink($amazon_sku);
    576 
    577 			$json = json_encode('ok');
    578 		} else {
    579 			$json = json_encode('error');
    580 		}
    581 
    582 		$this->response->addHeader('Content-Type: application/json');
    583 		$this->response->setOutput($json);
    584 	}
    585 
    586 	public function getLinks() {
    587 		$this->load->model('extension/openbay/amazon');
    588 		$this->load->model('catalog/product');
    589 
    590 		$json = json_encode($this->model_extension_openbay_amazon->getProductLinks());
    591 
    592 		$this->response->addHeader('Content-Type: application/json');
    593 		$this->response->setOutput($json);
    594 	}
    595 
    596 	public function getUnlinked() {
    597 		$this->load->model('extension/openbay/amazon');
    598 		$this->load->model('catalog/product');
    599 
    600 		$json = json_encode($this->model_extension_openbay_amazon->getUnlinkedProducts());
    601 
    602 		$this->response->addHeader('Content-Type: application/json');
    603 		$this->response->setOutput($json);
    604 	}
    605 
    606 	public function doBulkList() {
    607 		$this->load->language('amazon/listing');
    608 
    609 		if (empty($this->request->post['products'])) {
    610 			$json = array(
    611 				'message' => $this->language->get('error_not_searched'),
    612 			);
    613 		} else {
    614 			$this->load->model('extension/openbay/amazon_listing');
    615 
    616 			$delete_search_results = array();
    617 
    618 			$bulk_list_products = array();
    619 
    620 			foreach ($this->request->post['products'] as $product_id => $asin) {
    621 				$delete_search_results[] = $product_id;
    622 
    623 				if (!empty($asin) && in_array($product_id, $this->request->post['product_ids'])) {
    624 					$bulk_list_products[$product_id] = $asin;
    625 				}
    626 			}
    627 
    628 			$status = false;
    629 
    630 			if ($bulk_list_products) {
    631 				$data = array();
    632 
    633 				$data['products'] = $bulk_list_products;
    634 				$data['marketplace'] = $this->request->post['marketplace'];
    635 
    636 				if (!empty($this->request->post['start_selling'])) {
    637 					$data['start_selling'] = $this->request->post['start_selling'];
    638 				}
    639 
    640 				if (!empty($this->request->post['condition']) && !empty($this->request->post['condition_note'])) {
    641 					$data['condition'] = $this->request->post['condition'];
    642 					$data['condition_note'] = $this->request->post['condition_note'];
    643 				}
    644 
    645 				$status = $this->model_extension_openbay_amazon_listing->doBulkListing($data);
    646 
    647 				if ($status) {
    648 					$message = $this->language->get('text_products_sent');
    649 
    650 					if ($delete_search_results) {
    651 						$this->model_extension_openbay_amazon_listing->deleteSearchResults($this->request->post['marketplace'], $delete_search_results);
    652 					}
    653 				} else {
    654 					$message = $this->language->get('error_sending_products');
    655 				}
    656 			} else {
    657 				$message = $this->language->get('error_no_products_selected');
    658 			}
    659 
    660 			$json = array(
    661 				'status' => $status,
    662 				'message' => $message,
    663 			);
    664 		}
    665 
    666 		$this->response->addHeader('Content-Type: application/json');
    667 		$this->response->setOutput(json_encode($json));
    668 	}
    669 
    670 	public function doBulkSearch() {
    671 		$this->load->model('catalog/product');
    672 		$this->load->model('extension/openbay/amazon_listing');
    673 		$this->load->language('extension/openbay/amazon_bulk_listing');
    674 
    675 		$json = array();
    676 		$search_data = array();
    677 
    678 		if (!empty($this->request->post['product_ids'])) {
    679 			foreach ($this->request->post['product_ids'] as $product_id) {
    680 				$product = $this->model_catalog_product->getProduct($product_id);
    681 
    682 				if (empty($product['sku'])) {
    683 					$json[$product_id] = array(
    684 						'error' => $this->language->get('error_product_sku')
    685 					);
    686 				}
    687 
    688 				$key = '';
    689 
    690 				$id_types = array('isbn', 'upc', 'ean', 'jan', 'sku');
    691 
    692 				foreach ($id_types as $id_type) {
    693 					if (!empty($product[$id_type])) {
    694 						$key = $id_type;
    695 						break;
    696 					}
    697 				}
    698 
    699 				if (!$key) {
    700 					$json[$product_id] = array(
    701 						'error' => $this->language->get('error_searchable_fields')
    702 					);
    703 				}
    704 
    705 				if (!isset($json[$product_id])) {
    706 					$search_data[$key][] = array(
    707 						'product_id' => $product['product_id'],
    708 						'value' => trim($product[$id_type]),
    709 						'marketplace' => $this->request->post['marketplace'],
    710 					);
    711 
    712 					$json[$product_id] = array(
    713 						'success' => $this->language->get('text_searching')
    714 					);
    715 				}
    716 			}
    717 		}
    718 
    719 		if ($search_data) {
    720 			$this->model_extension_openbay_amazon_listing->doBulkSearch($search_data);
    721 		}
    722 
    723 		$this->response->addHeader('Content-Type: application/json');
    724 		$this->response->setOutput(json_encode($json));
    725 	}
    726 
    727 	public function bulkListProducts() {
    728 		$this->load->model('extension/openbay/amazon');
    729 		$this->load->model('catalog/product');
    730 		$this->load->model('tool/image');
    731 
    732 		$data = $this->load->language('extension/openbay/amazon_bulk_listing');
    733 
    734 		$this->document->setTitle($this->language->get('heading_title'));
    735 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    736 
    737 		$data['breadcrumbs'] = array();
    738 		$data['breadcrumbs'][] = array(
    739 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    740 			'text'      => $this->language->get('text_home'),
    741 		);
    742 		$data['breadcrumbs'][] = array(
    743 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    744 			'text'      => $this->language->get('text_openbay'),
    745 		);
    746 		$data['breadcrumbs'][] = array(
    747 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    748 			'text'      => $this->language->get('text_amazon'),
    749 		);
    750 
    751 		$data['breadcrumbs'][] = array(
    752 			'href'      => $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true),
    753 			'text'      => $this->language->get('heading_title'),
    754 		);
    755 
    756 		$ping_info = simplexml_load_string($this->openbay->amazon->call('ping/info'));
    757 
    758 		$bulk_listing_status = false;
    759 		if ($ping_info) {
    760 			$bulk_listing_status = ((string)$ping_info->BulkListing == 'true') ? true : false;
    761 		}
    762 
    763 		if (!empty($this->request->get['filter_marketplace'])) {
    764 			$filter_marketplace = $this->request->get['filter_marketplace'];
    765 		} else {
    766 			$filter_marketplace = $this->config->get('openbay_amazon_default_listing_marketplace');
    767 		}
    768 
    769 		$data['filter_marketplace'] = $filter_marketplace;
    770 
    771 		$data['bulk_listing_status'] = $bulk_listing_status;
    772 
    773 		$data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
    774 		$data['user_token'] = $this->session->data['user_token'];
    775 
    776 		if ($bulk_listing_status) {
    777 			$data['link_search'] = $this->url->link('extension/openbay/amazon/doBulkSearch', 'user_token=' . $this->session->data['user_token'], true);
    778 
    779 			$data['default_condition'] = $this->config->get('openbay_amazon_listing_default_condition');
    780 			$data['conditions'] = array(
    781 				'New' => $this->language->get('text_new'),
    782 				'UsedLikeNew' => $this->language->get('text_used_like_new'),
    783 				'UsedVeryGood' => $this->language->get('text_used_very_good'),
    784 				'UsedGood' => $this->language->get('text_used_good'),
    785 				'UsedAcceptable' => $this->language->get('text_used_acceptable'),
    786 				'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
    787 				'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
    788 				'CollectibleGood' => $this->language->get('text_collectible_good'),
    789 				'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
    790 				'Refurbished' => $this->language->get('text_refurbished'),
    791 			);
    792 
    793 			$data['marketplaces'] = array(
    794 				array('name' => $this->language->get('text_de'), 'code' => 'de'),
    795 				array('name' => $this->language->get('text_fr'), 'code' => 'fr'),
    796 				array('name' => $this->language->get('text_it'), 'code' => 'it'),
    797 				array('name' => $this->language->get('text_es'), 'code' => 'es'),
    798 				array('name' => $this->language->get('text_uk'), 'code' => 'uk'),
    799 			);
    800 
    801 			if (!empty($this->request->get['page'])) {
    802 				$page = $this->request->get['page'];
    803 			} else {
    804 				$page = 1;
    805 			}
    806 
    807 			$filter = array();
    808 
    809 			$filter['filter_marketplace'] = $filter_marketplace;
    810 			$filter['start'] = ($page - 1) * $this->config->get('config_limit_admin');
    811 			$filter['limit'] = $this->config->get('config_limit_admin');
    812 
    813 			$results = $this->model_extension_openbay_amazon->getProductSearch($filter);
    814 			$product_total = $this->model_extension_openbay_amazon->getProductSearchTotal($filter);
    815 
    816 			$data['products'] = array();
    817 
    818 			foreach ($results as $result) {
    819 				$product = $this->model_catalog_product->getProduct($result['product_id']);
    820 
    821 				if ($product['image'] && file_exists(DIR_IMAGE . $product['image'])) {
    822 					$image = $this->model_tool_image->resize($product['image'], 40, 40);
    823 				} else {
    824 					$image = $this->model_tool_image->resize('no_image.png', 40, 40);
    825 				}
    826 
    827 				if ($result['status'] == 'searching') {
    828 					$search_status = $this->language->get('text_searching');
    829 				} else if ($result['status'] == 'finished') {
    830 					$search_status = $this->language->get('text_finished');
    831 				} else {
    832 					$search_status = '-';
    833 				}
    834 
    835 				$href = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true);
    836 
    837 				$search_results = array();
    838 
    839 				if ($result['data']) {
    840 					foreach ($result['data'] as $search_result) {
    841 						$link = $this->model_extension_openbay_amazon->getAsinLink($search_result['asin'], $result['marketplace']);
    842 
    843 						$search_results[] = array(
    844 							'title' => $search_result['title'],
    845 							'asin' => $search_result['asin'],
    846 							'href' => $link,
    847 						);
    848 					}
    849 				}
    850 
    851 				$data['products'][] = array(
    852 					'product_id' => $product['product_id'],
    853 					'href' => $href,
    854 					'name' => $product['name'],
    855 					'model' => $product['model'],
    856 					'image' => $image,
    857 					'matches' => $result['matches'],
    858 					'search_status' => $search_status,
    859 					'search_results' => $search_results,
    860 				);
    861 			}
    862 
    863 			$pagination = new Pagination();
    864 			$pagination->total = $product_total;
    865 			$pagination->page = $page;
    866 			$pagination->limit = $this->config->get('config_limit_admin');
    867 			$pagination->text = $this->language->get('text_pagination');
    868 			$pagination->url = $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'] . '&page={page}&filter_marketplace=' . $filter_marketplace, true);
    869 
    870 			$data['pagination'] = $pagination->render();
    871 			$data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($product_total - $this->config->get('config_limit_admin'))) ? $product_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $product_total, ceil($product_total / $this->config->get('config_limit_admin')));
    872 		}
    873 
    874 		$data['header'] = $this->load->controller('common/header');
    875 		$data['column_left'] = $this->load->controller('common/column_left');
    876 		$data['footer'] = $this->load->controller('common/footer');
    877 
    878 		$this->response->setOutput($this->load->view('extension/openbay/amazon_bulk_listing', $data));
    879 	}
    880 
    881 	public function bulkLinking() {
    882 		$this->load->model('extension/openbay/amazon');
    883 
    884 		$data = $this->load->language('extension/openbay/amazon_bulk_linking');
    885 
    886 		$this->document->setTitle($this->language->get('heading_title'));
    887 		$this->document->addScript('view/javascript/openbay/js/faq.js');
    888 
    889 		$data['breadcrumbs'] = array();
    890 		$data['breadcrumbs'][] = array(
    891 			'href'      => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
    892 			'text'      => $this->language->get('text_home'),
    893 		);
    894 		$data['breadcrumbs'][] = array(
    895 			'href'      => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
    896 			'text'      => $this->language->get('text_openbay'),
    897 		);
    898 		$data['breadcrumbs'][] = array(
    899 			'href'      => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
    900 			'text'      => $this->language->get('text_amazon'),
    901 		);
    902 
    903 		$data['breadcrumbs'][] = array(
    904 			'href'      => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true),
    905 			'text'      => $this->language->get('heading_title'),
    906 		);
    907 
    908 		$ping_info = simplexml_load_string($this->openbay->amazon->call('ping/info'));
    909 
    910 		$bulk_linking_status = false;
    911 		if ($ping_info) {
    912 			$bulk_linking_status = ((string)$ping_info->BulkLinking == 'true') ? true : false;
    913 		}
    914 
    915 		$data['bulk_linking_status'] = $bulk_linking_status;
    916 
    917 		if (!isset($this->request->get['marketplace'])) {
    918 			$marketplace_code = 'uk';
    919 		} else {
    920 			$marketplace_code = $this->request->get['marketplace'];
    921 		}
    922 
    923 		$total_linked = $this->model_extension_openbay_amazon->getTotalUnlinkedItemsFromReport($marketplace_code);
    924 
    925 		if (isset($this->request->get['linked_item_page'])) {
    926 			$linked_item_page = (int)$this->request->get['linked_item_page'];
    927 		} else {
    928 			$linked_item_page = 1;
    929 		}
    930 
    931 		if (isset($this->request->get['linked_item_limit'])){
    932 			$linked_item_limit = (int)$this->request->get['linked_item_limit'];
    933 		} else {
    934 			$linked_item_limit = 25;
    935 		}
    936 
    937 		$data['cancel_report_link'] = '';
    938 
    939         if (isset($this->request->get['cancel_report']) && $this->request->get['cancel_report'] == 1) {
    940             $this->load->model('setting/setting');
    941 
    942             $settings = $this->model_setting_setting->getSetting('openbay_amazon');
    943             $settings['openbay_amazon_processing_listing_reports'] = '';
    944 
    945             $this->model_setting_setting->editSetting('openbay_amazon', $settings);
    946 
    947             $this->response->redirect($this->url->link('extension/openbay/amazon/bulklinking', 'marketplace=' . $marketplace_code . '&token=' . $this->session->data['token'], true));
    948         } else {
    949             $data['cancel_report_link'] = $this->url->link('extension/openbay/amazon/bulklinking', 'cancel_report=1&marketplace=uk&token=' . $this->session->data['token'], true);
    950         }
    951 
    952 		$marketplaces = array(
    953 			'uk' => array(
    954 				'name' => $this->language->get('text_uk'),
    955 				'code' => 'uk',
    956 				'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true),
    957 				'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true),
    958 			),
    959 			'de' => array(
    960 				'name' => $this->language->get('text_de'),
    961 				'code' => 'de',
    962 				'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true),
    963 				'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true),
    964 			),
    965 			'fr' => array(
    966 				'name' => $this->language->get('text_fr'),
    967 				'code' => 'fr',
    968 				'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true),
    969 				'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true),
    970 			),
    971 			'it' => array(
    972 				'name' => $this->language->get('text_it'),
    973 				'code' => 'it',
    974 				'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true),
    975 				'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true),
    976 			),
    977 			'es' => array(
    978 				'name' => $this->language->get('text_es'),
    979 				'code' => 'es',
    980 				'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', true),
    981 				'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', true),
    982 			),
    983 		);
    984 
    985 		$pagination = new Pagination();
    986 		$pagination->total = $total_linked;
    987 		$pagination->page = $linked_item_page;
    988 		$pagination->limit = $linked_item_limit;
    989 		$pagination->text = $this->language->get('text_pagination');
    990 		$pagination->url = $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}&marketplace=' . $marketplace_code, true);
    991 
    992 		$data['pagination'] = $pagination->render();
    993 		$data['results'] = sprintf($this->language->get('text_pagination'), ($total_linked) ? (($linked_item_page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) > ($total_linked - $this->config->get('config_limit_admin'))) ? $total_linked : ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $total_linked, ceil($total_linked / $this->config->get('config_limit_admin')));
    994 
    995 		$results = $this->model_extension_openbay_amazon->getUnlinkedItemsFromReport($marketplace_code, $linked_item_limit, $linked_item_page);
    996 
    997 		$products = array();
    998 
    999 		foreach ($results as $result) {
   1000 			$products[] = array(
   1001 				'asin' => $result['asin'],
   1002 				'href_amazon' => $this->model_extension_openbay_amazon->getAsinLink($result['asin'], $marketplace_code),
   1003 				'amazon_sku' => $result['amazon_sku'],
   1004 				'amazon_quantity' => $result['amazon_quantity'],
   1005 				'amazon_price' => $result['amazon_price'],
   1006 				'name' => $result['name'],
   1007 				'sku' => $result['sku'],
   1008 				'quantity' => $result['quantity'],
   1009 				'combination' => $result['combination'],
   1010 				'product_id' => $result['product_id'],
   1011 				'var' => $result['var'],
   1012 				'href_product' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $result['product_id'], true),
   1013 			);
   1014 		}
   1015 
   1016 		$data['unlinked_products'] = $products;
   1017 		$data['marketplaces'] = $marketplaces;
   1018 		$data['marketplace_code'] = $marketplace_code;
   1019 
   1020 		$data['marketplaces_processing'] = array();
   1021 		if (is_array($this->config->get('openbay_amazon_processing_listing_reports'))) {
   1022 			$data['marketplaces_processing'] = $this->config->get('openbay_amazon_processing_listing_reports');
   1023 		}
   1024 
   1025 		$data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
   1026 		$data['link_do_listings'] = $this->url->link('extension/openbay/amazon/doBulkLinking', 'user_token=' . $this->session->data['user_token'], true);
   1027 		$data['user_token'] = $this->session->data['user_token'];
   1028 
   1029 		$data['header'] = $this->load->controller('common/header');
   1030 		$data['column_left'] = $this->load->controller('common/column_left');
   1031 		$data['footer'] = $this->load->controller('common/footer');
   1032 
   1033 		$this->response->setOutput($this->load->view('extension/openbay/amazon_bulk_linking', $data));
   1034 	}
   1035 
   1036 	public function loadListingReport() {
   1037 		$this->load->model('extension/openbay/amazon');
   1038 		$this->load->model('setting/setting');
   1039 		$this->load->language('extension/openbay/amazon_bulk_linking');
   1040 
   1041 		$marketplace = $this->request->get['marketplace'];
   1042 
   1043 		$this->model_extension_openbay_amazon->deleteListingReports($marketplace);
   1044 
   1045 		$request_data = array(
   1046 			'marketplace' => $marketplace,
   1047 			'response_url' => HTTPS_CATALOG . 'index.php?route=extension/openbay/amazon/listingreport',
   1048 		);
   1049 
   1050 		$response = $this->openbay->amazon->call('report/listing', $request_data);
   1051 		$response = json_decode($response, 1);
   1052 
   1053 		$json = array();
   1054 		$json['status'] = $response['status'];
   1055 
   1056 		if ($json['status']) {
   1057 			$json['message'] = $this->language->get('text_report_requested');
   1058 
   1059 			$settings = $this->model_setting_setting->getSetting('openbay_amazon');
   1060 			$settings['openbay_amazon_processing_listing_reports'][] = $marketplace;
   1061 
   1062 			$this->model_setting_setting->editSetting('openbay_amazon', $settings);
   1063 		} else {
   1064 			$json['message'] = $this->language->get('text_report_request_failed');
   1065 		}
   1066 
   1067 		$this->response->addHeader('Content-Type: application/json');
   1068 		$this->response->setOutput(json_encode($json));
   1069 	}
   1070 
   1071 	public function doBulkLinking() {
   1072 		$this->load->model('extension/openbay/amazon');
   1073 
   1074 		$links = array();
   1075 		$skus = array();
   1076 
   1077 		if (!empty($this->request->post['link'])) {
   1078 			foreach ($this->request->post['link'] as $link) {
   1079 				if (!empty($link['product_id'])) {
   1080 					$links[] = $link;
   1081 					$skus[] = $link['amazon_sku'];
   1082 				}
   1083 			}
   1084 		}
   1085 
   1086 		if (!empty($links)) {
   1087 			foreach ($links as $link) {
   1088 				$this->model_extension_openbay_amazon->linkProduct($link['amazon_sku'], $link['product_id'], $link['sku']);
   1089 			}
   1090 
   1091 			$this->model_extension_openbay_amazon->updateAmazonSkusQuantities($skus);
   1092 		}
   1093 
   1094 		$this->response->addHeader('Content-Type: application/json');
   1095 		$this->response->setOutput(json_encode(array('ok')));
   1096 	}
   1097 
   1098 	public function doFullStockSync() {
   1099 		/**
   1100 		 * This is used if you ever need to force a complete update of your stock levels to Amazon.
   1101 		 * It will get ALL products in your store then lookup any linked ones before sending to the API.
   1102 		 *
   1103 		 * This call can put serious load on your server if you have a lot of products.
   1104 		 * It will make a lot of database queries so ensure your php memory limit is set high enough.
   1105 		 */
   1106 		set_time_limit(0);
   1107 
   1108 		$product_array = $this->db->query("SELECT `product_id` FROM `" . DB_PREFIX . "product`")->rows;
   1109 
   1110 		$bulk_array = array();
   1111 
   1112 		foreach ($product_array as $product) {
   1113 			$bulk_array[] = $product['product_id'];
   1114 		}
   1115 
   1116 		$this->openbay->amazon->putStockUpdateBulk($bulk_array);
   1117 	}
   1118 }