shop.balmet.com

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

amazonus.php (46652B)


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