aboutsummaryrefslogtreecommitdiffstats
path: root/public/admin/controller/extension/openbay/amazonus.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/admin/controller/extension/openbay/amazonus.php')
-rw-r--r--public/admin/controller/extension/openbay/amazonus.php1040
1 files changed, 1040 insertions, 0 deletions
diff --git a/public/admin/controller/extension/openbay/amazonus.php b/public/admin/controller/extension/openbay/amazonus.php
new file mode 100644
index 0000000..a6d79b3
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazonus.php
@@ -0,0 +1,1040 @@
+<?php
+class ControllerExtensionOpenbayAmazonus extends Controller {
+ public function install() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazonus_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazonus_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazonus_product');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazonus_product');
+
+ $this->model_extension_openbay_amazonus->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_amazonus->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->language('extension/openbay/amazonus');
+
+ $data = $this->language->all();
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazonus');
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['validation'] = $this->openbay->amazonus->validate();
+ $data['link_settings'] = $this->url->link('extension/openbay/amazonus/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_subscription'] = $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_item_link'] = $this->url->link('extension/openbay/amazonus/itemLinks', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_stock_updates'] = $this->url->link('extension/openbay/amazonus/stockUpdates', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_saved_listings'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_listing'] = $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_linking'] = $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=amazonus';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus', $data));
+ }
+
+ public function stockUpdates() {
+ $this->load->language('extension/openbay/amazonus_stockupdates');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/stockUpdates', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $request_args = array();
+
+ if (isset($this->request->get['filter_date_start'])) {
+ $request_args['date_start'] = date("Y-m-d", strtotime($this->request->get['filter_date_start']));
+ } else {
+ $request_args['date_start'] = date("Y-m-d");
+ }
+
+ if (isset($this->request->get['filter_date_end'])) {
+ $request_args['date_end'] = date("Y-m-d", strtotime($this->request->get['filter_date_end']));
+ } else {
+ $request_args['date_end'] = date("Y-m-d");
+ }
+
+ $data['date_start'] = $request_args['date_start'];
+ $data['date_end'] = $request_args['date_end'];
+
+ $xml = $this->openbay->amazonus->getStockUpdatesStatus($request_args);
+ $simple_xml_obj = simplexml_load_string($xml);
+ $data['table_data'] = array();
+
+ if ($simple_xml_obj !== false) {
+ $table_data = array();
+
+ foreach($simple_xml_obj->update as $update_node) {
+ $row = array(
+ 'date_requested' => (string)$update_node->date_requested,
+ 'date_updated' => (string)$update_node->date_updated,
+ 'status' => (string)$update_node->status,
+ );
+
+ $data_items = array();
+
+ foreach($update_node->data->product as $product_node) {
+ $data_items[] = array(
+ 'sku' => (string)$product_node->sku,
+ 'stock' => (int)$product_node->stock
+ );
+ }
+
+ $row['data'] = $data_items;
+ $table_data[(int)$update_node->ref] = $row;
+ }
+
+ $data['table_data'] = $table_data;
+ } else {
+ $data['error'] = $data['error_api_connection'];
+ }
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_stock_updates', $data));
+ }
+
+ public function subscription() {
+ $this->load->language('extension/openbay/amazonus_subscription');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $response = simplexml_load_string($this->openbay->amazonus->call('plans/getPlans'));
+
+ $data['plans'] = array();
+
+ if ($response) {
+ foreach ($response->Plan as $plan) {
+ $data['plans'][] = array(
+ 'title' => (string)$plan->Title,
+ 'description' => (string)$plan->Description,
+ 'order_frequency' => (string)$plan->OrderFrequency,
+ 'product_listings' => (string)$plan->ProductListings,
+ 'bulk_listing' => (string)$plan->BulkListing,
+ 'price' => (string)$plan->Price,
+ );
+ }
+ }
+
+ $response = simplexml_load_string($this->openbay->amazonus->call('plans/getUsersPlans'));
+
+ $plan = false;
+
+ if ($response) {
+ $plan = array(
+ 'merchant_id' => (string)$response->MerchantId,
+ 'user_status' => (string)$response->UserStatus,
+ 'title' => (string)$response->Title,
+ 'description' => (string)$response->Description,
+ 'price' => (string)$response->Price,
+ 'order_frequency' => (string)$response->OrderFrequency,
+ 'product_listings' => (string)$response->ProductListings,
+ 'listings_remain' => (string)$response->ListingsRemain,
+ 'listings_reserved' => (string)$response->ListingsReserved,
+ 'bulk_listing' => (string)$response->BulkListing,
+ );
+ }
+
+ $data['user_plan'] = $plan;
+ $data['link_change_plan'] = $this->openbay->amazonus->getServer() . 'account/changePlan/?token=' . $this->config->get('openbay_amazonus_token');
+ $data['link_change_seller'] = $this->openbay->amazonus->getServer() . 'account/changeSellerId/?token=' . $this->config->get('openbay_amazonus_token');
+ $data['link_register'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=subscription&utm_campaign=amazonus';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_subscription', $data));
+ }
+
+ public function settings() {
+ $this->load->language('extension/openbay/amazonus_settings');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazonus');
+
+ $this->load->model('customer/customer_group');
+
+ $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups();
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
+ $settings = array_merge($settings, $this->request->post);
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+
+ $this->config->set('openbay_amazonus_token', $this->request->post['openbay_amazonus_token']);
+ $this->config->set('openbay_amazonus_encryption_key', $this->request->post['openbay_amazonus_encryption_key']);
+ $this->config->set('openbay_amazonus_encryption_iv', $this->request->post['openbay_amazonus_encryption_iv']);
+
+ $this->openbay->amazonus->setEncryptionKey($this->request->post['openbay_amazonus_encryption_key']);
+ $this->openbay->amazonus->setEncryptionIv($this->request->post['openbay_amazonus_encryption_iv']);
+
+ if (!empty($this->request->post['openbay_amazonus_token']) && !empty($this->request->post['openbay_amazonus_encryption_key']) && !empty($this->request->post['openbay_amazonus_encryption_iv'])) {
+ $this->model_extension_openbay_amazonus->verifyConfig($settings);
+ }
+
+ $this->session->data['success'] = $this->language->get('text_settings_updated');
+ $this->response->redirect($this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true));
+ return;
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['openbay_amazonus_status'] = isset($settings['openbay_amazonus_status']) ? $settings['openbay_amazonus_status'] : '';
+ $data['openbay_amazonus_token'] = isset($settings['openbay_amazonus_token']) ? $settings['openbay_amazonus_token'] : '';
+ $data['openbay_amazonus_encryption_key'] = isset($settings['openbay_amazonus_encryption_key']) ? $settings['openbay_amazonus_encryption_key'] : '';
+ $data['openbay_amazonus_encryption_iv'] = isset($settings['openbay_amazonus_encryption_iv']) ? $settings['openbay_amazonus_encryption_iv'] : '';
+ $data['openbay_amazonus_listing_tax_added'] = isset($settings['openbay_amazonus_listing_tax_added']) ? $settings['openbay_amazonus_listing_tax_added'] : '0.00';
+ $data['openbay_amazonus_order_tax'] = isset($settings['openbay_amazonus_order_tax']) ? $settings['openbay_amazonus_order_tax'] : '00';
+ $data['openbay_amazonus_default_listing_marketplace'] = isset($settings['openbay_amazonus_default_listing_marketplace']) ? $settings['openbay_amazonus_default_listing_marketplace'] : '';
+ $data['openbay_amazonus_listing_default_condition'] = isset($settings['openbay_amazonus_listing_default_condition']) ? $settings['openbay_amazonus_listing_default_condition'] : '';
+
+ $data['carriers'] = $this->openbay->amazonus->getCarriers();
+ $data['openbay_amazonus_default_carrier'] = isset($settings['openbay_amazonus_default_carrier']) ? $settings['openbay_amazonus_default_carrier'] : '';
+
+ $unshipped_status_id = isset($settings['openbay_amazonus_order_status_unshipped']) ? $settings['openbay_amazonus_order_status_unshipped'] : '';
+ $partially_shipped_status_id = isset($settings['openbay_amazonus_order_status_partially_shipped']) ? $settings['openbay_amazonus_order_status_partially_shipped'] : '';
+ $shipped_status_id = isset($settings['openbay_amazonus_order_status_shipped']) ? $settings['openbay_amazonus_order_status_shipped'] : '';
+ $canceled_status_id = isset($settings['openbay_amazonus_order_status_canceled']) ? $settings['openbay_amazonus_order_status_canceled'] : '';
+
+ $amazonus_order_statuses = array(
+ 'unshipped' => array('name' => $this->language->get('text_unshipped'), 'order_status_id' => $unshipped_status_id),
+ 'partially_shipped' => array('name' => $this->language->get('text_partially_shipped'), 'order_status_id' => $partially_shipped_status_id),
+ 'shipped' => array('name' => $this->language->get('text_shipped'), 'order_status_id' => $shipped_status_id),
+ 'canceled' => array('name' => $this->language->get('text_canceled'), 'order_status_id' => $canceled_status_id),
+ );
+
+ $data['openbay_amazonus_order_customer_group'] = isset($settings['openbay_amazonus_order_customer_group']) ? $settings['openbay_amazonus_order_customer_group'] : '';
+
+ $data['amazonus_order_statuses'] = $amazonus_order_statuses;
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+
+ $data['subscription_url'] = $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['itemLinks_url'] = $this->url->link('extension/openbay/amazonus_product/linkItems', 'user_token=' . $this->session->data['user_token'], true);
+ $data['openbay_amazonus_notify_admin'] = isset($settings['openbay_amazonus_notify_admin']) ? $settings['openbay_amazonus_notify_admin'] : '';
+ $data['link_signup'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=amazonus';
+
+ $api_checked = false;
+ $api_status = false;
+ $api_auth = false;
+
+ if (!empty($data['openbay_amazonus_token']) && !empty($data['openbay_amazonus_encryption_key']) && !empty($data['openbay_amazonus_encryption_iv'])) {
+ $response = $this->openbay->amazonus->call('ping/info');
+
+ $api_checked = true;
+
+ if (!empty($response)) {
+ $ping_info = simplexml_load_string($response);
+
+ if ($ping_info === false) {
+ /**
+ * The data from the API could not be extracted from the XML
+ */
+ } else {
+ $api_status = ((string)$ping_info->Api_status == 'ok') ? true : false;
+ $api_auth = ((string)$ping_info->Auth == 'true') ? true : false;
+ }
+ }
+ }
+
+ $data['api_status'] = $api_status;
+ $data['api_auth'] = $api_auth;
+ $data['api_checked'] = $api_checked;
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_settings', $data));
+ }
+
+ public function itemLinks() {
+ $this->load->language('extension/openbay/amazonus_links');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_item_links', $data));
+ }
+
+ public function savedListings() {
+ $this->load->language('extension/openbay/amazonus_listingsaved');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+ $this->load->model('extension/openbay/amazonus');
+ $saved_products = $this->model_extension_openbay_amazonus->getSavedProducts();
+
+ $data['saved_products'] = array();
+
+ foreach($saved_products as $saved_product) {
+ $data['saved_products'][] = array(
+ 'product_id' => $saved_product['product_id'],
+ 'product_name' => $saved_product['product_name'],
+ 'product_model' => $saved_product['product_model'],
+ 'product_sku' => $saved_product['product_sku'],
+ 'amazon_sku' => $saved_product['amazonus_sku'],
+ 'var' => $saved_product['var'],
+ '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),
+ );
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_saved_listings', $data));
+ }
+
+ protected function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/amazonus')) {
+ $this->error = $this->language->get('error_permission');
+ }
+
+ if (empty($this->error)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function getVariants() {
+ $variants = array();
+
+ if ($this->openbay->addonLoad('openstock') && isset($this->request->get['product_id'])) {
+ $this->load->model('extension/module/openstock');
+ $this->load->model('tool/image');
+ $variants = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
+ }
+
+ if (empty($variants)) {
+ $variants = false;
+ } else {
+ foreach ($variants as $key => $variant) {
+ if ($variant['sku'] == '') {
+ unset($variants[$key]);
+ }
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($variants));
+ }
+
+ public function addLink() {
+ if (isset($this->request->get['product_id']) && isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazonus');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+ $product_id = $this->request->get['product_id'];
+ $var = isset($this->request->get['var']) ? $this->request->get['var'] : '';
+
+ $this->model_extension_openbay_amazonus->linkProduct($amazon_sku, $product_id, $var);
+
+ $logger = new Log('amazonus_stocks.log');
+ $logger->write('addItemLink() called for product id: ' . $product_id . ', amazon sku: ' . $amazon_sku . ', var: ' . $var);
+
+ if ($var != '' && $this->openbay->addonLoad('openstock')) {
+ $logger->write('Using openStock');
+ $this->load->model('tool/image');
+ $this->load->model('extension/module/openstock');
+ $option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
+
+ $quantity_data = array();
+
+ foreach($option_stocks as $option_stock) {
+ if (isset($option_stock['sku']) && $option_stock['sku'] == $var) {
+ $quantity_data[$amazon_sku] = $option_stock['stock'];
+ break;
+ }
+ }
+
+ if (!empty($quantity_data)) {
+ $logger->write('Updating quantities with data: ' . print_r($quantity_data, true));
+ $this->openbay->amazonus->updateQuantities($quantity_data);
+ } else {
+ $logger->write('No quantity data will be posted . ');
+ }
+ } else {
+ $this->openbay->amazonus->putStockUpdateBulk(array($product_id));
+ }
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function deleteLink() {
+ if (isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazonus');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+
+ $this->model_extension_openbay_amazonus->removeProductLink($amazon_sku);
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function getLinks() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+
+ $itemLinks = $this->model_extension_openbay_amazonus->getProductLinks();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($itemLinks));
+ }
+
+ public function getUnlinked() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+
+ $unlinkedProducts = $this->model_extension_openbay_amazonus->getUnlinkedProducts();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($unlinkedProducts));
+ }
+
+ public function doBulkList() {
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ if (empty($this->request->post['products'])) {
+ $json = array(
+ 'message' => $this->language->get('error_not_searched'),
+ );
+ } else {
+ $this->load->model('extension/openbay/amazonus_listing');
+
+ $delete_search_results = array();
+
+ $bulk_list_products = array();
+
+ foreach ($this->request->post['products'] as $product_id => $asin) {
+ $delete_search_results[] = $product_id;
+
+ if (!empty($asin) && in_array($product_id, $this->request->post['product_ids'])) {
+ $bulk_list_products[$product_id] = $asin;
+ }
+ }
+
+ $status = false;
+
+ if ($bulk_list_products) {
+ $data = array();
+
+ $data['products'] = $bulk_list_products;
+
+ if (!empty($this->request->post['start_selling'])) {
+ $data['start_selling'] = $this->request->post['start_selling'];
+ }
+
+ if (!empty($this->request->post['condition']) && !empty($this->request->post['condition_note'])) {
+ $data['condition'] = $this->request->post['condition'];
+ $data['condition_note'] = $this->request->post['condition_note'];
+ }
+
+ $status = $this->model_extension_openbay_amazonus_listing->doBulkListing($data);
+
+ if ($status) {
+ $message = $this->language->get('text_products_sent');
+
+ if ($delete_search_results) {
+ $this->model_extension_openbay_amazonus_listing->deleteSearchResults($delete_search_results);
+ }
+ } else {
+ $message = $this->language->get('error_sending_products');
+ }
+ } else {
+ $message = $this->language->get('error_no_products_selected');
+ }
+
+ $json = array(
+ 'status' => $status,
+ 'message' => $message,
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkSearch() {
+ $this->load->model('catalog/product');
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->language('extension/openbay/amazonus_bulk_listing');
+
+ $json = array();
+ $search_data = array();
+
+ if (!empty($this->request->post['product_ids'])) {
+ foreach ($this->request->post['product_ids'] as $product_id) {
+ $product = $this->model_catalog_product->getProduct($product_id);
+
+ if (empty($product['sku'])) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_product_sku')
+ );
+ }
+
+ $key = '';
+
+ $id_types = array('isbn', 'upc', 'ean', 'jan', 'sku');
+
+ foreach ($id_types as $id_type) {
+ if (!empty($product[$id_type])) {
+ $key = $id_type;
+ break;
+ }
+ }
+
+ if (!$key) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_searchable_fields')
+ );
+ }
+
+ if (!isset($json[$product_id])) {
+ $search_data[$key][] = array(
+ 'product_id' => $product['product_id'],
+ 'value' => trim($product[$id_type]),
+ );
+
+ $json[$product_id] = array(
+ 'success' => $this->language->get('text_searching')
+ );
+ }
+ }
+ }
+
+ if ($search_data) {
+ $this->model_extension_openbay_amazonus_listing->doBulkSearch($search_data);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function bulkListProducts() {
+ $this->load->language('extension/openbay/amazonus_bulk_listing');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazonus->call('ping/info'));
+
+ $bulk_listing_status = false;
+
+ if ($ping_info) {
+ $bulk_listing_status = ((string)$ping_info->BulkListing == 'true') ? true : false;
+ }
+
+ $data['bulk_listing_status'] = $bulk_listing_status;
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if ($bulk_listing_status) {
+ $data['link_search'] = $this->url->link('extension/openbay/amazonus/doBulkSearch', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['default_condition'] = $this->config->get('openbay_amazonus_listing_default_condition');
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ if (!empty($this->request->get['page'])) {
+ $page = $this->request->get['page'];
+ } else {
+ $page = 1;
+ }
+
+ $filter = array();
+
+ $filter['start'] = ($page - 1) * $this->config->get('config_limit_admin');
+ $filter['limit'] = $this->config->get('config_limit_admin');
+
+ $results = $this->model_extension_openbay_amazonus->getProductSearch($filter);
+ $product_total = $this->model_extension_openbay_amazonus->getProductSearchTotal($filter);
+
+ $data['products'] = array();
+
+ foreach ($results as $result) {
+ $product = $this->model_catalog_product->getProduct($result['product_id']);
+
+ if ($product['image'] && file_exists(DIR_IMAGE . $product['image'])) {
+ $image = $this->model_tool_image->resize($product['image'], 40, 40);
+ } else {
+ $image = $this->model_tool_image->resize('no_image.png', 40, 40);
+ }
+
+ if ($result['status'] == 'searching') {
+ $search_status = $this->language->get('text_searching');
+ } else if ($result['status'] == 'finished') {
+ $search_status = $this->language->get('text_finished');
+ } else {
+ $search_status = '-';
+ }
+
+ $href = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true);
+
+ $search_results = array();
+
+ if ($result['data']) {
+ foreach ($result['data'] as $search_result) {
+
+ $link = 'https://www.amazon.com/dp/' . $search_result['asin'] . '/';
+
+ $search_results[] = array(
+ 'title' => $search_result['title'],
+ 'asin' => $search_result['asin'],
+ 'href' => $link,
+ );
+ }
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $product['product_id'],
+ 'href' => $href,
+ 'name' => $product['name'],
+ 'model' => $product['model'],
+ 'image' => $image,
+ 'matches' => $result['matches'],
+ 'search_status' => $search_status,
+ 'search_results' => $search_results,
+ );
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $product_total;
+ $pagination->page = $page;
+ $pagination->limit = $this->config->get('config_limit_admin');
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'] . '&page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+ $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')));
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_bulk_listing', $data));
+ }
+
+ public function bulkLinking() {
+ $this->load->language('extension/openbay/amazonus_bulk_linking');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('extension/openbay/amazonus');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazonus->call('ping/info'));
+
+ $bulk_linking_status = false;
+ if ($ping_info) {
+ $bulk_linking_status = ((string)$ping_info->BulkLinking == 'true') ? true : false;
+ }
+
+ $data['bulk_linking_status'] = $bulk_linking_status;
+
+ $total_linked = $this->model_extension_openbay_amazonus->getTotalUnlinkedItemsFromReport();
+
+ if (isset($this->request->get['linked_item_page'])){
+ $linked_item_page = (int)$this->request->get['linked_item_page'];
+ } else {
+ $linked_item_page = 1;
+ }
+
+ if (isset($this->request->get['linked_item_limit'])){
+ $linked_item_limit = (int)$this->request->get['linked_item_limit'];
+ } else {
+ $linked_item_limit = 25;
+ }
+
+ $data['cancel_report_link'] = '';
+
+ if (isset($this->request->get['cancel_report']) && $this->request->get['cancel_report'] == 1) {
+ $this->load->model('setting/setting');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+ $settings['openbay_amazonus_processing_listing_reports'] = '';
+
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+
+ $this->response->redirect($this->url->link('extension/openbay/amazonus/bulklinking', 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $data['cancel_report_link'] = $this->url->link('extension/openbay/amazonus/bulklinking', 'cancel_report=1&user_token=' . $this->session->data['user_token'], true);
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $total_linked;
+ $pagination->page = $linked_item_page;
+ $pagination->limit = $linked_item_limit;
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+ $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')));
+
+ $results = $this->model_extension_openbay_amazonus->getUnlinkedItemsFromReport($linked_item_limit, $linked_item_page);
+
+ $products = array();
+
+ foreach ($results as $result) {
+ $products[] = array(
+ 'asin' => $result['asin'],
+ 'href_amazon' => 'https://www.amazon.com/dp/' . $result['asin'] . '/',
+ 'amazon_sku' => $result['amazon_sku'],
+ 'amazon_quantity' => $result['amazon_quantity'],
+ 'amazon_price' => $result['amazon_price'],
+ 'name' => $result['name'],
+ 'sku' => $result['sku'],
+ 'quantity' => $result['quantity'],
+ 'combination' => $result['combination'],
+ 'product_id' => $result['product_id'],
+ 'var' => $result['sku'],
+ 'href_product' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $result['product_id'], true),
+ );
+ }
+
+ $data['unlinked_products'] = $products;
+
+ $data['marketplace_processing'] = $this->config->get('openbay_amazonus_processing_listing_reports');
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_load_listings'] = $this->url->link('extension/openbay/amazonus/loadListingReport', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_bulk_linking', $data));
+ }
+
+ public function loadListingReport() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->language('extension/openbay/amazonus_bulk_linking');
+
+ $this->model_extension_openbay_amazonus->deleteListingReports();
+
+ $request_data = array('response_url' => HTTPS_CATALOG . 'index.php?route=extension/openbay/amazonus/listingreport');
+
+ $response = $this->openbay->amazonus->call('report/listing', $request_data);
+
+ $response = json_decode($response, 1);
+
+ $json = array();
+ $json['status'] = $response['status'];
+
+ if ($json['status']) {
+ $json['message'] = $this->language->get('text_report_requested');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+ $settings['openbay_amazonus_processing_listing_reports'] = true;
+
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+ } else {
+ $json['message'] = $this->language->get('text_report_request_failed');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkLinking() {
+ $this->load->model('extension/openbay/amazonus');
+
+ $links = array();
+ $skus = array();
+
+ if (!empty($this->request->post['link'])) {
+ foreach ($this->request->post['link'] as $link) {
+ if (!empty($link['product_id'])) {
+ $links[] = $link;
+ $skus[] = $link['amazon_sku'];
+ }
+ }
+ }
+
+ if (!empty($links)) {
+ foreach ($links as $link) {
+ $this->model_extension_openbay_amazonus->linkProduct($link['amazon_sku'], $link['product_id'], $link['sku']);
+ }
+
+ $this->model_extension_openbay_amazonus->updateAmazonSkusQuantities($skus);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('ok')));
+ }
+
+ public function doFullStockSync() {
+ /**
+ * This is used if you ever need to force a complete update of your stock levels to Amazon.
+ * It will get ALL products in your store then lookup any linked ones before sending to the API.
+ *
+ * This call can put serious load on your server if you have a lot of products.
+ * It will make a lot of database queries so ensure your php memory limit is set high enough.
+ */
+ set_time_limit(0);
+
+ $product_array = $this->db->query("SELECT `product_id` FROM `" . DB_PREFIX . "product`")->rows;
+
+ $bulk_array = array();
+
+ foreach ($product_array as $product) {
+ $bulk_array[] = $product['product_id'];
+ }
+
+ $this->openbay->amazonus->putStockUpdateBulk($bulk_array);
+ }
+}