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 }