diff options
author | Jesús <heckyel@hyperbola.info> | 2019-08-18 21:14:58 -0500 |
---|---|---|
committer | Jesús <heckyel@hyperbola.info> | 2019-08-18 21:14:58 -0500 |
commit | 2eed7b082f83630301e51f57ca8394de228a8605 (patch) | |
tree | 1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/admin/controller/extension/openbay | |
download | librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip |
first commit
Diffstat (limited to 'public/admin/controller/extension/openbay')
14 files changed, 9448 insertions, 0 deletions
diff --git a/public/admin/controller/extension/openbay/amazon.php b/public/admin/controller/extension/openbay/amazon.php new file mode 100644 index 0000000..dd3178b --- /dev/null +++ b/public/admin/controller/extension/openbay/amazon.php @@ -0,0 +1,1129 @@ +<?php +class ControllerExtensionOpenbayAmazon extends Controller { + public function install() { + $this->load->model('extension/openbay/amazon'); + $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/amazon_listing'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_listing'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazon_product'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_product'); + + $this->model_extension_openbay_amazon->install(); + } + + public function uninstall() { + $this->load->model('extension/openbay/amazon'); + $this->load->model('setting/setting'); + $this->load->model('setting/extension'); + + $this->model_extension_openbay_amazon->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->model('setting/setting'); + $this->load->model('localisation/order_status'); + $this->load->model('extension/openbay/amazon'); + + $this->load->language('extension/openbay/amazon'); + + $data = $this->language->all(); + + $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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_dashboard'), + ); + + $data['success'] = ''; + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $data['validation'] = $this->openbay->amazon->validate(); + $data['link_settings'] = $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['link_subscription'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true); + $data['link_item_link'] = $this->url->link('extension/openbay/amazon/itemLinks', 'user_token=' . $this->session->data['user_token'], true); + $data['link_stock_updates'] = $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true); + $data['link_saved_listings'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true); + $data['link_bulk_listing'] = $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true); + $data['link_bulk_linking'] = $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=amazon'; + + $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/amazon', $data)); + } + + public function stockUpdates() { + $this->load->language('extension/openbay/amazon_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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true); + + $request_arg = array(); + + if (isset($this->request->get['filter_date_start'])) { + $request_arg['date_start'] = date("Y-m-d", strtotime($this->request->get['filter_date_start'])); + } else { + $request_arg['date_start'] = date("Y-m-d"); + } + + if (isset($this->request->get['filter_date_end'])) { + $request_arg['date_end'] = date("Y-m-d", strtotime($this->request->get['filter_date_end'])); + } else { + $request_arg['date_end'] = date("Y-m-d"); + } + + $data['date_start'] = $request_arg['date_start']; + $data['date_end'] = $request_arg['date_end']; + + $xml = $this->openbay->amazon->getStockUpdatesStatus($request_arg); + $xml_object = simplexml_load_string($xml); + + $data['table_data'] = array(); + + if ($xml_object !== false) { + $table_data = array(); + + foreach($xml_object->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/amazon_stock_updates', $data)); + + } + + public function subscription() { + $this->load->language('extension/openbay/amazon_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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true); + + $response = simplexml_load_string($this->openbay->amazon->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->amazon->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->amazon->getServer() . 'account/changePlan/?token=' . $this->config->get('openbay_amazon_token'); + $data['link_change_seller'] = $this->openbay->amazon->getServer() . 'account/changeSellerId/?token=' . $this->config->get('openbay_amazon_token'); + $data['link_register'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=subscription&utm_campaign=amazon'; + + $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/amazon_subscription', $data)); + } + + public function settings() { + $this->load->language('extension/openbay/amazon_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/amazon'); + + $this->load->model('customer/customer_group'); + + $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups(); + + $settings = $this->model_setting_setting->getSetting('openbay_amazon'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { + if (!isset($this->request->post['openbay_amazon_orders_marketplace_ids'])) { + $this->request->post['openbay_amazon_orders_marketplace_ids'] = array(); + } + + $settings = array_merge($settings, $this->request->post); + $this->model_setting_setting->editSetting('openbay_amazon', $settings); + + $this->config->set('openbay_amazon_token', $this->request->post['openbay_amazon_token']); + $this->config->set('openbay_amazon_encryption_key', $this->request->post['openbay_amazon_encryption_key']); + $this->config->set('openbay_amazon_encryption_iv', $this->request->post['openbay_amazon_encryption_iv']); + + $this->openbay->amazon->setEncryptionKey($this->request->post['openbay_amazon_encryption_key']); + $this->openbay->amazon->setEncryptionIv($this->request->post['openbay_amazon_encryption_iv']); + + if (!empty($this->request->post['openbay_amazon_token']) && !empty($this->request->post['openbay_amazon_encryption_key']) && !empty($this->request->post['openbay_amazon_encryption_iv'])) { + $this->model_extension_openbay_amazon->verifyConfig($settings); + } + + $this->session->data['success'] = $this->language->get('text_settings_updated'); + $this->response->redirect($this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true)); + return; + } + + $data['cancel'] = $this->url->link('extension/openbay/amazon', '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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['marketplace_ids'] = (isset($settings['openbay_amazon_orders_marketplace_ids'])) ? (array)$settings['openbay_amazon_orders_marketplace_ids'] : array(); + $data['default_listing_marketplace_ids'] = (isset($settings['openbay_amazon_default_listing_marketplace_ids'])) ? (array)$settings['openbay_amazon_default_listing_marketplace_ids'] : array(); + + $data['marketplaces'] = array( + array('name' => $this->language->get('text_de'), 'id' => 'A1PA6795UKMFR9', 'code' => 'de'), + array('name' => $this->language->get('text_fr'), 'id' => 'A13V1IB3VIYZZH', 'code' => 'fr'), + array('name' => $this->language->get('text_it'), 'id' => 'APJ6JRA9NG5V4', 'code' => 'it'), + array('name' => $this->language->get('text_es'), 'id' => 'A1RKKUPIHCS9HS', 'code' => 'es'), + array('name' => $this->language->get('text_uk'), 'id' => 'A1F83G8C2ARO7P', 'code' => 'uk'), + ); + + $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_amazon_status'] = isset($settings['openbay_amazon_status']) ? $settings['openbay_amazon_status'] : ''; + $data['openbay_amazon_token'] = isset($settings['openbay_amazon_token']) ? $settings['openbay_amazon_token'] : ''; + $data['openbay_amazon_encryption_key'] = isset($settings['openbay_amazon_encryption_key']) ? $settings['openbay_amazon_encryption_key'] : ''; + $data['openbay_amazon_encryption_iv'] = isset($settings['openbay_amazon_encryption_iv']) ? $settings['openbay_amazon_encryption_iv'] : ''; + $data['openbay_amazon_listing_tax_added'] = isset($settings['openbay_amazon_listing_tax_added']) ? $settings['openbay_amazon_listing_tax_added'] : '0.00'; + $data['openbay_amazon_order_tax'] = isset($settings['openbay_amazon_order_tax']) ? $settings['openbay_amazon_order_tax'] : '00'; + $data['openbay_amazon_default_listing_marketplace'] = isset($settings['openbay_amazon_default_listing_marketplace']) ? $settings['openbay_amazon_default_listing_marketplace'] : ''; + $data['openbay_amazon_listing_default_condition'] = isset($settings['openbay_amazon_listing_default_condition']) ? $settings['openbay_amazon_listing_default_condition'] : ''; + + $data['carriers'] = $this->openbay->amazon->getCarriers(); + $data['openbay_amazon_default_carrier'] = isset($settings['openbay_amazon_default_carrier']) ? $settings['openbay_amazon_default_carrier'] : ''; + + $unshipped_status_id = isset($settings['openbay_amazon_order_status_unshipped']) ? $settings['openbay_amazon_order_status_unshipped'] : ''; + $partially_shipped_status_id = isset($settings['openbay_amazon_order_status_partially_shipped']) ? $settings['openbay_amazon_order_status_partially_shipped'] : ''; + $shipped_status_id = isset($settings['openbay_amazon_order_status_shipped']) ? $settings['openbay_amazon_order_status_shipped'] : ''; + $canceled_status_id = isset($settings['openbay_amazon_order_status_canceled']) ? $settings['openbay_amazon_order_status_canceled'] : ''; + + $amazon_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_amazon_order_customer_group'] = isset($settings['openbay_amazon_order_customer_group']) ? $settings['openbay_amazon_order_customer_group'] : ''; + + $data['amazon_order_statuses'] = $amazon_order_statuses; + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + + $data['subscription_url'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true); + $data['itemLinks_url'] = $this->url->link('extension/openbay/amazon_product/linkItems', 'user_token=' . $this->session->data['user_token'], true); + $data['openbay_amazon_notify_admin'] = isset($settings['openbay_amazon_notify_admin']) ? $settings['openbay_amazon_notify_admin'] : ''; + $data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=amazon'; + + $api_checked = false; + $api_status = false; + $api_auth = false; + + if (!empty($data['openbay_amazon_token']) && !empty($data['openbay_amazon_encryption_key']) && !empty($data['openbay_amazon_encryption_iv'])) { + $response = $this->openbay->amazon->call('ping/info', array('say hello')); + + $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/amazon_settings', $data)); + } + + public function itemLinks() { + $this->load->language('extension/openbay/amazon_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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/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/amazon', '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/amazon_item_links', $data)); + } + + public function savedListings() { + $this->load->language('extension/openbay/amazon_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/amazon', '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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/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/amazon'); + $saved_products = $this->model_extension_openbay_amazon->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['amazon_sku'], + 'var' => $saved_product['var'], + 'edit_link' => $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $saved_product['product_id'] . '&sku=' . $saved_product['var'], true), + ); + } + + $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/amazon_saved_listings', $data)); + } + + protected function validate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/amazon')) { + $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/amazon'); + + $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_amazon->linkProduct($amazon_sku, $product_id, $var); + + $logger = new Log('amazon_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->amazon->updateQuantities($quantity_data); + } else { + $logger->write('No quantity data will be posted . '); + } + } else { + $this->openbay->amazon->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/amazon'); + + $amazon_sku = $this->request->get['amazon_sku']; + + $this->model_extension_openbay_amazon->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/amazon'); + $this->load->model('catalog/product'); + + $json = json_encode($this->model_extension_openbay_amazon->getProductLinks()); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput($json); + } + + public function getUnlinked() { + $this->load->model('extension/openbay/amazon'); + $this->load->model('catalog/product'); + + $json = json_encode($this->model_extension_openbay_amazon->getUnlinkedProducts()); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput($json); + } + + public function doBulkList() { + $this->load->language('amazon/listing'); + + if (empty($this->request->post['products'])) { + $json = array( + 'message' => $this->language->get('error_not_searched'), + ); + } else { + $this->load->model('extension/openbay/amazon_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; + $data['marketplace'] = $this->request->post['marketplace']; + + 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_amazon_listing->doBulkListing($data); + + if ($status) { + $message = $this->language->get('text_products_sent'); + + if ($delete_search_results) { + $this->model_extension_openbay_amazon_listing->deleteSearchResults($this->request->post['marketplace'], $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/amazon_listing'); + $this->load->language('extension/openbay/amazon_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]), + 'marketplace' => $this->request->post['marketplace'], + ); + + $json[$product_id] = array( + 'success' => $this->language->get('text_searching') + ); + } + } + } + + if ($search_data) { + $this->model_extension_openbay_amazon_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/amazon_bulk_listing'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/amazon'); + $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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $ping_info = simplexml_load_string($this->openbay->amazon->call('ping/info')); + + $bulk_listing_status = false; + + if ($ping_info) { + $bulk_listing_status = ((string)$ping_info->BulkListing == 'true') ? true : false; + } + + if (!empty($this->request->get['filter_marketplace'])) { + $filter_marketplace = $this->request->get['filter_marketplace']; + } else { + $filter_marketplace = $this->config->get('openbay_amazon_default_listing_marketplace'); + } + + $data['filter_marketplace'] = $filter_marketplace; + + $data['bulk_listing_status'] = $bulk_listing_status; + + $data['link_overview'] = $this->url->link('extension/openbay/amazon', '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/amazon/doBulkSearch', 'user_token=' . $this->session->data['user_token'], true); + + $data['default_condition'] = $this->config->get('openbay_amazon_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'), + ); + + $data['marketplaces'] = array( + array('name' => $this->language->get('text_de'), 'code' => 'de'), + array('name' => $this->language->get('text_fr'), 'code' => 'fr'), + array('name' => $this->language->get('text_it'), 'code' => 'it'), + array('name' => $this->language->get('text_es'), 'code' => 'es'), + array('name' => $this->language->get('text_uk'), 'code' => 'uk'), + ); + + if (!empty($this->request->get['page'])) { + $page = $this->request->get['page']; + } else { + $page = 1; + } + + $filter = array(); + + $filter['filter_marketplace'] = $filter_marketplace; + $filter['start'] = ($page - 1) * $this->config->get('config_limit_admin'); + $filter['limit'] = $this->config->get('config_limit_admin'); + + $results = $this->model_extension_openbay_amazon->getProductSearch($filter); + $product_total = $this->model_extension_openbay_amazon->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 = $this->model_extension_openbay_amazon->getAsinLink($search_result['asin'], $result['marketplace']); + + $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/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'] . '&page={page}&filter_marketplace=' . $filter_marketplace, 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/amazon_bulk_listing', $data)); + } + + public function bulkLinking() { + $this->load->language('extension/openbay/amazon_bulk_linking'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/amazon'); + + $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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $ping_info = simplexml_load_string($this->openbay->amazon->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; + + if (!isset($this->request->get['marketplace'])) { + $marketplace_code = 'uk'; + } else { + $marketplace_code = $this->request->get['marketplace']; + } + + $total_linked = $this->model_extension_openbay_amazon->getTotalUnlinkedItemsFromReport($marketplace_code); + + 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_amazon'); + $settings['openbay_amazon_processing_listing_reports'] = ''; + + $this->model_setting_setting->editSetting('openbay_amazon', $settings); + + $this->response->redirect($this->url->link('extension/openbay/amazon/bulklinking', 'marketplace=' . $marketplace_code . '&user_token=' . $this->session->data['user_token'], true)); + } else { + $data['cancel_report_link'] = $this->url->link('extension/openbay/amazon/bulklinking', 'cancel_report=1&marketplace=uk&user_token=' . $this->session->data['user_token'], true); + } + + $marketplaces = array( + 'uk' => array( + 'name' => $this->language->get('text_uk'), + 'code' => 'uk', + 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true), + 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true), + ), + 'de' => array( + 'name' => $this->language->get('text_de'), + 'code' => 'de', + 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true), + 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true), + ), + 'fr' => array( + 'name' => $this->language->get('text_fr'), + 'code' => 'fr', + 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true), + 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true), + ), + 'it' => array( + 'name' => $this->language->get('text_it'), + 'code' => 'it', + 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true), + 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true), + ), + 'es' => array( + 'name' => $this->language->get('text_es'), + 'code' => 'es', + 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', true), + 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', 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/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}&marketplace=' . $marketplace_code, 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_amazon->getUnlinkedItemsFromReport($marketplace_code, $linked_item_limit, $linked_item_page); + + $products = array(); + + foreach ($results as $result) { + $products[] = array( + 'asin' => $result['asin'], + 'href_amazon' => $this->model_extension_openbay_amazon->getAsinLink($result['asin'], $marketplace_code), + '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['var'], + '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['marketplaces'] = $marketplaces; + $data['marketplace_code'] = $marketplace_code; + + $data['marketplaces_processing'] = array(); + if (is_array($this->config->get('openbay_amazon_processing_listing_reports'))) { + $data['marketplaces_processing'] = $this->config->get('openbay_amazon_processing_listing_reports'); + } + + $data['cancel'] = $this->url->link('extension/openbay/amazon', '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/amazon_bulk_linking', $data)); + } + + public function loadListingReport() { + $this->load->model('extension/openbay/amazon'); + $this->load->model('setting/setting'); + $this->load->language('extension/openbay/amazon_bulk_linking'); + + $marketplace = $this->request->get['marketplace']; + + $this->model_extension_openbay_amazon->deleteListingReports($marketplace); + + $request_data = array( + 'marketplace' => $marketplace, + 'response_url' => HTTPS_CATALOG . 'index.php?route=extension/openbay/amazon/listingreport', + ); + + $response = $this->openbay->amazon->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_amazon'); + $settings['openbay_amazon_processing_listing_reports'][] = $marketplace; + + $this->model_setting_setting->editSetting('openbay_amazon', $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/amazon'); + + $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_amazon->linkProduct($link['amazon_sku'], $link['product_id'], $link['sku']); + } + + $this->model_extension_openbay_amazon->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->amazon->putStockUpdateBulk($bulk_array); + } +} diff --git a/public/admin/controller/extension/openbay/amazon_listing.php b/public/admin/controller/extension/openbay/amazon_listing.php new file mode 100644 index 0000000..99f7884 --- /dev/null +++ b/public/admin/controller/extension/openbay/amazon_listing.php @@ -0,0 +1,607 @@ +<?php +class ControllerExtensionOpenbayAmazonListing extends Controller { + public function create() { + $this->load->language('extension/openbay/amazon_listing'); + $this->load->model('extension/openbay/amazon_listing'); + $this->load->model('extension/openbay/amazon'); + $this->load->model('catalog/product'); + $this->load->model('localisation/country'); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if ($this->request->post) { + $result = $this->model_extension_openbay_amazon_listing->simpleListing($this->request->post); + + if ($result['status'] === 1) { + $this->session->data['success'] = $this->language->get('text_product_sent'); + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } else { + $this->session->data['error'] = sprintf($this->language->get('text_product_not_sent'), $result['message']); + $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->post['product_id'] . $url, true)); + } + } + + if (isset($this->request->get['product_id'])) { + $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + if (empty($product_info)) { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $listing_status = $this->model_extension_openbay_amazon->getProductStatus($this->request->get['product_id']); + + if ($listing_status === 'processing' || $listing_status === 'ok') { + $this->response->redirect($this->url->link('extension/openbay/amazon_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true)); + } else if ($listing_status === 'error_advanced' || $listing_status === 'saved' || $listing_status === 'error_few') { + $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true)); + } + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['url_search'] = $this->url->link('extension/openbay/amazon_listing/search', 'user_token=' . $this->session->data['user_token'], true); + $data['url_advanced'] = $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true); + + $data['button_search'] = $this->language->get('button_search'); + $data['button_new'] = $this->language->get('button_new'); + $data['button_cancel'] = $this->language->get('button_cancel'); + $data['button_amazon_price'] = $this->language->get('button_amazon_price'); + $data['button_list'] = $this->language->get('button_list'); + $data['heading_title'] = $this->language->get('heading_title'); + $data['text_not_in_catalog'] = $this->language->get('text_not_in_catalog'); + $data['text_no_results'] = $this->language->get('text_no_results'); + $data['button_view_on_amazon'] = $this->language->get('button_view_on_amazon'); + $data['text_list'] = $this->language->get('text_list'); + $data['text_placeholder_search'] = $this->language->get('text_placeholder_search'); + $data['text_placeholder_condition'] = $this->language->get('text_placeholder_condition'); + $data['column_image'] = $this->language->get('column_image'); + $data['column_asin'] = $this->language->get('column_asin'); + $data['column_name'] = $this->language->get('column_name'); + $data['column_price'] = $this->language->get('column_price'); + $data['column_action'] = $this->language->get('column_action'); + $data['entry_sku'] = $this->language->get('entry_sku'); + $data['entry_condition'] = $this->language->get('entry_condition'); + $data['entry_condition_note'] = $this->language->get('entry_condition_note'); + $data['entry_price'] = $this->language->get('entry_price'); + $data['entry_sale_price'] = $this->language->get('entry_sale_price'); + $data['entry_sale_date'] = $this->language->get('entry_sale_date'); + $data['entry_quantity'] = $this->language->get('entry_quantity'); + $data['entry_start_selling'] = $this->language->get('entry_start_selling'); + $data['entry_restock_date'] = $this->language->get('entry_restock_date'); + $data['entry_from'] = $this->language->get('entry_from'); + $data['entry_to'] = $this->language->get('entry_to'); + $data['help_restock_date'] = $this->language->get('help_restock_date'); + $data['help_sku'] = $this->language->get('help_sku'); + $data['help_sale_price'] = $this->language->get('help_sale_price'); + $data['tab_required'] = $this->language->get('tab_required'); + $data['tab_additional'] = $this->language->get('tab_additional'); + $data['error_price'] = $this->language->get('error_price'); + $data['error_sku'] = $this->language->get('error_sku'); + $data['error_stock'] = $this->language->get('error_stock'); + + $data['form_action'] = $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true); + + $data['sku'] = trim($product_info['sku']); + + if ($this->config->get('openbay_amazon_listing_tax_added')) { + $data['price'] = $product_info['price'] * (1 + $this->config->get('openbay_amazon_listing_tax_added') / 100); + } else { + $data['price'] = $product_info['price']; + } + + $data['listing_errors'] = array(); + + if ($listing_status == 'error_quick') { + $data['listing_errors'] = $this->model_extension_openbay_amazon->getProductErrors($product_info['product_id'], 3); + } + + $data['price'] = number_format($data['price'], 2, '.', ''); + $data['quantity'] = $product_info['quantity']; + $data['product_id'] = $product_info['product_id']; + + $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['marketplaces'] = array( + 'uk' => $this->language->get('text_united_kingdom'), + 'de' => $this->language->get('text_germany'), + 'fr' => $this->language->get('text_france'), + 'it' => $this->language->get('text_italy'), + 'es' => $this->language->get('text_spain'), + ); + + $data['default_marketplace'] = $this->config->get('openbay_amazon_default_listing_marketplace'); + $data['default_condition'] = $this->config->get('openbay_amazon_listing_default_condition'); + + $data['user_token'] = $this->session->data['user_token']; + + $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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $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/amazon_listing', $data)); + } + + public function edit() { + $this->load->model('extension/openbay/amazon_listing'); + $this->load->model('extension/openbay/amazon'); + $this->load->language('extension/openbay/amazon_listing'); + + $this->document->setTitle($this->language->get('text_edit_heading')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, 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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true), + 'text' => $this->language->get('text_edit_heading'), + ); + + $status = $this->model_extension_openbay_amazon->getProductStatus($product_id); + + if ($status === false) { + $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + return; + } + + $data['product_links'] = $this->model_extension_openbay_amazon->getProductLinks($product_id); + $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + + if ($status == 'ok' || $status == 'linked') { + $data['url_create_new'] = $this->url->link('extension/openbay/amazon_listing/createNew', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + $data['url_delete_links'] = $this->url->link('extension/openbay/amazon_listing/deleteLinks', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + } + + if ($status == 'saved') { + $data['has_saved_listings'] = true; + } else { + $data['has_saved_listings'] = false; + } + + $data['url_saved_listings'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id, true); + + $data['user_token'] = $this->session->data['user_token']; + + $data['text_edit_heading'] = $this->language->get('text_edit_heading'); + $data['text_product_links'] = $this->language->get('text_product_links'); + $data['text_has_saved_listings'] = $this->language->get('text_has_saved_listings'); + $data['button_create_new_listing'] = $this->language->get('button_create_new_listing'); + $data['button_remove_links'] = $this->language->get('button_remove_links'); + $data['button_cancel'] = $this->language->get('button_cancel'); + $data['button_saved_listings'] = $this->language->get('button_saved_listings'); + $data['column_name'] = $this->language->get('column_name'); + $data['column_model'] = $this->language->get('column_model'); + $data['column_combination'] = $this->language->get('column_combination'); + $data['column_sku'] = $this->language->get('column_sku'); + $data['column_amazon_sku'] = $this->language->get('column_amazon_sku'); + $data['column_sku_variant'] = $this->language->get('column_sku_variant'); + $data['text_no_results'] = $this->language->get('text_no_results'); + + $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/amazon_listing_edit', $data)); + } + + public function createNew() { + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + $this->load->model('extension/openbay/amazon'); + $this->model_extension_openbay_amazon->deleteProduct($product_id); + $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + + public function deleteLinks() { + $this->load->language('extension/openbay/amazon_listing'); + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + $this->load->model('extension/openbay/amazon'); + + $links = $this->model_extension_openbay_amazon->getProductLinks($product_id); + foreach ($links as $link) { + $this->model_extension_openbay_amazon->removeProductLink($link['amazon_sku']); + } + $this->model_extension_openbay_amazon->deleteProduct($product_id); + $this->session->data['success'] = $this->language->get('text_links_removed'); + + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + public function search() { + $this->load->model('extension/openbay/amazon_listing'); + $this->load->language('extension/openbay/amazon_listing'); + + $error = ''; + + if (empty($this->request->post['search_string'])) { + $error = $this->language->get('error_text_missing'); + } + + if (empty($this->request->post['marketplace'])) { + $error = $this->language->get('error_marketplace_missing'); + } + + if ($error) { + $json = array( + 'data' => '', + 'error' => $error, + ); + } else { + $json = array( + 'data' => $this->model_extension_openbay_amazon_listing->search($this->request->post['search_string'], $this->request->post['marketplace']), + 'error' => '', + ); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function bestPrice() { + $this->load->model('extension/openbay/amazon_listing'); + $this->load->language('extension/openbay/amazon_listing'); + + $error = ''; + + if (empty($this->request->post['asin'])) { + $error = $this->language->get('error_missing_asin'); + } + + if (empty($this->request->post['marketplace'])) { + $error = $this->language->get('error_marketplace_missing'); + } + + if (empty($this->request->post['condition'])) { + $error = $this->language->get('error_condition_missing'); + } + + if ($error) { + $json = array( + 'data' => '', + 'error' => $error, + ); + } else { + $best_price = $this->model_extension_openbay_amazon_listing->getBestPrice($this->request->post['asin'], $this->request->post['condition'], $this->request->post['marketplace']); + + if ($best_price) { + $json = array( + 'data' => $best_price, + 'error' => '', + ); + } else { + $json = array( + 'data' => '', + 'error' => $this->language->get('error_amazon_price'), + ); + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getProductByAsin() { + $this->load->model('extension/openbay/amazon_listing'); + + $data = $this->model_extension_openbay_amazon_listing->getProductByAsin($this->request->post['asin'], $this->request->post['market']); + + $json = array( + 'title' => (string)$data['ItemAttributes']['Title'], + 'img' => (!isset($data['ItemAttributes']['SmallImage']['URL']) ? '' : $data['ItemAttributes']['SmallImage']['URL']) + ); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getBrowseNodes() { + $this->load->model('extension/openbay/amazon_listing'); + + $data = array( + 'marketplaceId' => $this->request->post['marketplaceId'], + 'node' => (isset($this->request->post['node']) ? $this->request->post['node'] : ''), + ); + + $response = $this->model_extension_openbay_amazon_listing->getBrowseNodes($data); + + $this->response->setOutput($response); + } +} diff --git a/public/admin/controller/extension/openbay/amazon_product.php b/public/admin/controller/extension/openbay/amazon_product.php new file mode 100644 index 0000000..8c3ba1a --- /dev/null +++ b/public/admin/controller/extension/openbay/amazon_product.php @@ -0,0 +1,585 @@ +<?php +class ControllerExtensionOpenbayAmazonProduct extends Controller { + public function index() { + $this->load->language('catalog/product'); + $this->load->language('extension/openbay/amazon_listing'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/amazon'); + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + + $this->document->addScript('view/javascript/openbay/js/openbay.js'); + $this->document->setTitle($this->language->get('heading_title')); + + $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/amazon', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_amazon'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_title_advanced'), + ); + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + die('No product id'); + } + + if (isset($this->request->get['sku'])) { + $variation = $this->request->get['sku']; + } else { + $variation = ''; + } + $data['variation'] = $variation; + $data['errors'] = array(); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { + $data_array = $this->request->post; + + $this->model_extension_openbay_amazon->saveProduct($product_id, $data_array); + + if ($data_array['upload_after'] === 'true') { + $upload_result = $this->uploadItems(); + if ($upload_result['status'] == 'ok') { + $this->session->data['success'] = $this->language->get('text_uploaded'); + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } else { + $data['errors'][] = Array('message' => $upload_result['error_message']); + } + } else { + $this->session->data['success'] = $this->language->get('text_saved_local'); + $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $saved_listing_data = $this->model_extension_openbay_amazon->getProduct($product_id, $variation); + if (empty($saved_listing_data)) { + $listing_saved = false; + } else { + $listing_saved = true; + } + + $errors = $this->model_extension_openbay_amazon->getProductErrors($product_id); + foreach($errors as $error) { + $error['message'] = 'Error for SKU: "' . $error['sku'] . '" - ' . $this->formatUrlsInText($error['message']); + $data['errors'][] = $error; + } + if (!empty($errors)) { + $data['has_listing_errors'] = true; + } else { + $data['has_listing_errors'] = false; + } + + $product_info = $this->model_catalog_product->getProduct($product_id); + $data['listing_name'] = $product_info['name'] . " : " . $product_info['model']; + $data['listing_sku'] = $product_info['sku']; + $data['listing_url'] = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + + if ($listing_saved) { + $data['edit_product_category'] = $saved_listing_data['category']; + } else { + $data['edit_product_category'] = ''; + } + + $data['amazon_categories'] = array(); + + $amazon_templates = $this->openbay->amazon->getCategoryTemplates(); + + foreach($amazon_templates as $template) { + $template = (array)$template; + $category_data = array( + 'friendly_name' => $template['friendly_name'], + 'name' => $template['name'], + 'template' => $template['xml'] + ); + $data['amazon_categories'][] = $category_data; + } + + if ($listing_saved) { + $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazon_product/parseTemplateAjax&edit_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true)); + } else { + $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazon_product/parseTemplateAjax&product_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true)); + } + + $data['url_remove_errors'] = $this->url->link('extension/openbay/amazon_product/removeErrors', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + $data['cancel_url'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['saved_listings_url'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true); + $data['main_url'] = $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['user_token'] = $this->session->data['user_token']; + $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100); + + if ($this->openbay->addonLoad('openstock')) { + $this->load->model('extension/module/openstock'); + $data['options'] = $this->model_setting_module_openstock->getVariants($product_id); + } else { + $data['options'] = array(); + } + + $data['marketplaces'] = array( + array('name' => $this->language->get('text_germany'), 'id' => 'A1PA6795UKMFR9', 'code' => 'de'), + array('name' => $this->language->get('text_france'), 'id' => 'A13V1IB3VIYZZH', 'code' => 'fr'), + array('name' => $this->language->get('text_italy'), 'id' => 'APJ6JRA9NG5V4', 'code' => 'it'), + array('name' => $this->language->get('text_spain'), 'id' => 'A1RKKUPIHCS9HS', 'code' => 'es'), + array('name' => $this->language->get('text_united_kingdom'), 'id' => 'A1F83G8C2ARO7P', 'code' => 'uk'), + ); + + $marketplace_mapping = array( + 'uk' => 'A1F83G8C2ARO7P', + 'de' => 'A1PA6795UKMFR9', + 'fr' => 'A13V1IB3VIYZZH', + 'it' => 'APJ6JRA9NG5V4', + 'es' => 'A1RKKUPIHCS9HS', + ); + + if ($this->config->get('openbay_amazon_default_listing_marketplace')) { + $data['default_marketplaces'] = array($marketplace_mapping[$this->config->get('openbay_amazon_default_listing_marketplace')]); + } else { + $data['default_marketplaces'] = array(); + } + + $data['saved_marketplaces'] = isset($saved_listing_data['marketplaces']) ? (array)unserialize($saved_listing_data['marketplaces']) : false; + + $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/amazon_listing_advanced', $data)); + } + + public function removeErrors() { + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + $this->load->model('extension/openbay/amazon'); + $this->model_extension_openbay_amazon->removeAdvancedErrors($product_id); + $this->session->data['success'] = 'Errors removed'; + $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + + public function deleteSaved() { + if (!isset($this->request->get['product_id']) || !isset($this->request->get['var'])) { + return; + } + + $this->load->model('extension/openbay/amazon'); + $this->model_extension_openbay_amazon->deleteSaved($this->request->get['product_id'], $this->request->get['var']); + } + + public function uploadSaved() { + ob_start(); + $json = json_encode($this->uploadItems()); + ob_clean(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput($json); + } + + private function uploadItems() { + $this->load->language('extension/openbay/amazon_listing'); + $this->load->model('extension/openbay/amazon'); + $logger = new Log('amazon_product.log'); + + $logger->write('Uploading process started . '); + + $saved_products = $this->model_extension_openbay_amazon->getSavedProductsData(); + + if (empty($saved_products)) { + $logger->write('No saved listings found. Uploading canceled . '); + $result['status'] = 'error'; + $result['error_message'] = 'No saved listings. Nothing to upload. Aborting . '; + return $result; + } + + foreach($saved_products as $saved_product) { + $product_data_decoded = (array)json_decode($saved_product['data']); + + $catalog = defined(HTTPS_CATALOG) ? HTTPS_CATALOG : HTTP_CATALOG; + $response_data = array("response_url" => $catalog . 'index.php?route=extension/openbay/amazon/product'); + $category_data = array('category' => (string)$saved_product['category']); + $fields_data = array('fields' => (array)$product_data_decoded['fields']); + + $mp_array = !empty($saved_product['marketplaces']) ? (array)unserialize($saved_product['marketplaces']) : array(); + $marketplaces_data = array('marketplaces' => $mp_array); + + $product_data = array_merge($category_data, $fields_data, $response_data, $marketplaces_data); + $insertion_response = $this->openbay->amazon->insertProduct($product_data); + + $logger->write("Uploading product with data:" . print_r($product_data, true) . " + Got response:" . print_r($insertion_response, true)); + + if (!isset($insertion_response['status']) || $insertion_response['status'] == 'error') { + $details = isset($insertion_response['info']) ? $insertion_response['info'] : 'Unknown'; + $result['error_message'] = sprintf($this->language->get('error_upload_failed'), $saved_product['product_sku'], $details); + $result['status'] = 'error'; + break; + } + $logger->write('Product upload success'); + $this->model_extension_openbay_amazon->setProductUploaded($saved_product['product_id'], $insertion_response['insertion_id'], $saved_product['var']); + } + + if (!isset($result['status'])) { + $result['status'] = 'ok'; + $logger->write('Uploading process completed successfully . '); + } else { + $logger->write('Uploading process failed with message: ' . $result['error_message']); + } + return $result; + } + + public function parseTemplateAjax() { + $this->load->model('tool/image'); + + $log = new Log('amazon_product.log'); + + $json = array(); + + if (isset($this->request->get['xml'])) { + $request = array('template' => $this->request->get['xml'], 'version' => 2); + $response = $this->openbay->amazon->call("productv2/GetTemplateXml", $request); + if ($response) { + $template = $this->openbay->amazon->parseCategoryTemplate($response); + if ($template) { + $variation = isset($this->request->get['sku']) ? $this->request->get['sku'] : ''; + + if (isset($this->request->get['product_id'])) { + $template['fields'] = $this->fillDefaultValues($this->request->get['product_id'], $template['fields'], $variation); + } elseif (isset($this->request->get['edit_id'])) { + $template['fields'] = $this->fillSavedValues($this->request->get['edit_id'], $template['fields'], $variation); + } + + foreach($template['fields'] as $key => $field) { + if ($field['accepted']['type'] == 'image') { + if (empty($field['value'])) { + $template['fields'][$key]['thumb'] = ''; + } else { + $template['fields'][$key]['thumb'] = $this->model_tool_image->resize(str_replace(HTTPS_CATALOG . 'image/', '', $field['value']), 100, 100); + } + } + } + + $result = array( + "category" => $template['category'], + "fields" => $template['fields'], + "tabs" => $template['tabs'] + ); + } else { + $json_decoded = json_decode($response); + if ($json_decoded) { + $result = $json_decoded; + } else { + $result = array('status' => 'error'); + $log->write("admin/openbay/amazon_product/parseTemplateAjax failed to parse template response: " . $response); + } + } + } else { + $log->write("admin/openbay/amazon_product/parseTemplateAjax failed calling productv2/GetTemplateXml with params: " . print_r($request, true)); + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($result)); + } + + private function fillDefaultValues($product_id, $fields_array, $var = '') { + $this->load->model('catalog/product'); + $this->load->model('setting/setting'); + $this->load->model('extension/openbay/amazon'); + + $openbay_settings = $this->model_setting_setting->getSetting('openbay_amazon'); + + $product_info = $this->model_catalog_product->getProduct($product_id); + $product_info['description'] = trim(utf8_encode(strip_tags(html_entity_decode($product_info['description']), "<br>"))); + $product_info['image'] = HTTPS_CATALOG . 'image/' . $product_info['image']; + + $tax_added = isset($openbay_settings['openbay_amazon_listing_tax_added']) ? $openbay_settings['openbay_amazon_listing_tax_added'] : 0; + $default_condition = isset($openbay_settings['openbay_amazon_listing_default_condition']) ? $openbay_settings['openbay_amazon_listing_default_condition'] : ''; + $product_info['price'] = number_format($product_info['price'] + $tax_added / 100 * $product_info['price'], 2, '.', ''); + + $defaults = array( + 'sku' => $product_info['sku'], + 'title' => $product_info['name'], + 'quantity' => $product_info['quantity'], + 'standardprice' => $product_info['price'], + 'description' => $product_info['description'], + 'mainimage' => $product_info['image'], + 'currency' => $this->config->get('config_currency'), + 'shippingweight' => number_format($product_info['weight'], 2, '.', ''), + 'conditiontype' => $default_condition, + ); + + $this->load->model('localisation/weight_class'); + $weight_class = $this->model_localisation_weight_class->getWeightClass($product_info['weight_class_id']); + if (!empty($weight_class)) { + $defaults['shippingweightunitofmeasure'] = $weight_class['unit']; + } + + $this->load->model('catalog/manufacturer'); + $manufacturer = $this->model_catalog_manufacturer->getManufacturer($product_info['manufacturer_id']); + if (!empty($manufacturer)) { + $defaults['manufacturer'] = $manufacturer['name']; + $defaults['brand'] = $manufacturer['name']; + } + + $product_images = $this->model_catalog_product->getProductImages($product_id); + $image_index = 1; + foreach($product_images as $product_image) { + $defaults['pt' . $image_index] = HTTPS_CATALOG . 'image/' . $product_image['image']; + $image_index ++; + } + + if (!empty($product_info['upc'])) { + $defaults['type'] = 'UPC'; + $defaults['value'] = $product_info['upc']; + } else if (!empty($product_info['ean'])) { + $defaults['type'] = 'EAN'; + $defaults['value'] = $product_info['ean']; + } + + $meta_keywords = explode(',', $product_info['meta_keyword']); + foreach ($meta_keywords as $index => $meta_keyword) { + $defaults['searchterms' . $index] = trim($meta_keyword); + } + + if ($var !== '' && $this->openbay->addonLoad('openstock')) { + $this->load->model('tool/image'); + $this->load->model('extension/module/openstock'); + $option_stocks = $this->model_setting_module_openstock->getVariants($product_id); + + $option = ''; + + foreach ($option_stocks as $option_iterator) { + if ($option_iterator['sku'] === $var) { + $option = $option_iterator; + break; + } + } + + if ($option != '') { + $defaults['sku'] = $option['sku']; + $defaults['quantity'] = $option['stock']; + $defaults['standardprice'] = number_format($option['price'] + $tax_added / 100 * $option['price'], 2, '.', ''); + $defaults['shippingweight'] = number_format($option['weight'], 2, '.', ''); + + if (!empty($option['image'])) { + $defaults['mainimage'] = HTTPS_CATALOG . 'image/' . $option['image']; + } + } + } + + if ($defaults['shippingweight'] <= 0) { + unset($defaults['shippingweight']); + unset($defaults['shippingweightunitofmeasure']); + } + + $filled_array = array(); + + foreach($fields_array as $field) { + + $value_array = array('value' => ''); + + if (isset($defaults[strtolower($field['name'])])) { + $value_array = array('value' => $defaults[strtolower($field['name'])]); + } + + $filled_item = array_merge($field, $value_array); + + $filled_array[] = $filled_item; + } + return $filled_array; + } + + private function fillSavedValues($product_id, $fields_array, $var = '') { + + $this->load->model('extension/openbay/amazon'); + $saved_listing = $this->model_extension_openbay_amazon->getProduct($product_id, $var); + + $decoded_data = (array)json_decode($saved_listing['data']); + $saved_fields = (array)$decoded_data['fields']; + + //Show current quantity instead of last uploaded + $saved_fields['Quantity'] = $this->model_extension_openbay_amazon->getProductQuantity($product_id, $var); + + $filled_array = array(); + + foreach($fields_array as $field) { + $value_array = array('value' => ''); + + if (isset($saved_fields[$field['name']])) { + $value_array = array('value' => $saved_fields[$field['name']]); + } + + $filled_item = array_merge($field, $value_array); + + $filled_array[] = $filled_item; + } + + return $filled_array; + } + + public function resetPending() { + $this->db->query("UPDATE `" . DB_PREFIX . "amazon_product` SET `status` = 'saved' WHERE `status` = 'uploaded'"); + } + + private function validateForm() { + return true; + } + + private function formatUrlsInText($text) { + $regex_url = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; + preg_match_all($regex_url, $text, $matches); + $used_patterns = array(); + foreach($matches[0] as $pattern) { + if (!array_key_exists($pattern, $used_patterns)) { + $used_patterns[$pattern]=true; + $text = str_replace($pattern, "<a target='_blank' href=" . $pattern . ">" . $pattern . "</a>", $text); + } + } + return $text; + } +} 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); + } +} diff --git a/public/admin/controller/extension/openbay/amazonus_listing.php b/public/admin/controller/extension/openbay/amazonus_listing.php new file mode 100644 index 0000000..a5ea2da --- /dev/null +++ b/public/admin/controller/extension/openbay/amazonus_listing.php @@ -0,0 +1,592 @@ +<?php +class ControllerExtensionOpenbayAmazonusListing extends Controller{ + public function create() { + $this->load->language('extension/openbay/amazonus_listing'); + $this->load->model('extension/openbay/amazonus_listing'); + $this->load->model('extension/openbay/amazonus'); + $this->load->model('catalog/product'); + $this->load->model('localisation/country'); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if ($this->request->post) { + $result = $this->model_extension_openbay_amazonus_listing->simpleListing($this->request->post); + + if ($result['status'] === 1) { + $this->session->data['success'] = $this->language->get('text_product_sent'); + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } else { + $this->session->data['error'] = sprintf($this->language->get('text_product_not_sent'), $result['message']); + $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->post['product_id'] . $url, true)); + } + } + + if (isset($this->request->get['product_id'])) { + $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + if (empty($product_info)) { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $listing_status = $this->model_extension_openbay_amazonus->getProductStatus($this->request->get['product_id']); + + if ($listing_status === 'processing' || $listing_status === 'ok') { + $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true)); + } else if ($listing_status === 'error_advanced' || $listing_status === 'saved' || $listing_status === 'error_few') { + $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true)); + } + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['url_search'] = $this->url->link('extension/openbay/amazonus_listing/search', 'user_token=' . $this->session->data['user_token'], true); + $data['url_advanced'] = $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true); + + $data['button_search'] = $this->language->get('button_search'); + $data['button_new'] = $this->language->get('button_new'); + $data['button_cancel'] = $this->language->get('button_cancel'); + $data['button_amazon_price'] = $this->language->get('button_amazon_price'); + $data['button_list'] = $this->language->get('button_list'); + $data['heading_title'] = $this->language->get('heading_title'); + $data['text_not_in_catalog'] = $this->language->get('text_not_in_catalog'); + $data['text_no_results'] = $this->language->get('text_no_results'); + $data['button_view_on_amazon'] = $this->language->get('button_view_on_amazon'); + $data['text_list'] = $this->language->get('text_list'); + $data['text_placeholder_search'] = $this->language->get('text_placeholder_search'); + $data['text_placeholder_condition'] = $this->language->get('text_placeholder_condition'); + $data['column_image'] = $this->language->get('column_image'); + $data['column_asin'] = $this->language->get('column_asin'); + $data['column_name'] = $this->language->get('column_name'); + $data['column_price'] = $this->language->get('column_price'); + $data['column_action'] = $this->language->get('column_action'); + $data['entry_sku'] = $this->language->get('entry_sku'); + $data['entry_condition'] = $this->language->get('entry_condition'); + $data['entry_condition_note'] = $this->language->get('entry_condition_note'); + $data['entry_price'] = $this->language->get('entry_price'); + $data['entry_sale_price'] = $this->language->get('entry_sale_price'); + $data['entry_sale_date'] = $this->language->get('entry_sale_date'); + $data['entry_quantity'] = $this->language->get('entry_quantity'); + $data['entry_start_selling'] = $this->language->get('entry_start_selling'); + $data['entry_restock_date'] = $this->language->get('entry_restock_date'); + $data['entry_from'] = $this->language->get('entry_from'); + $data['entry_to'] = $this->language->get('entry_to'); + $data['help_restock_date'] = $this->language->get('help_restock_date'); + $data['help_sku'] = $this->language->get('help_sku'); + $data['help_sale_price'] = $this->language->get('help_sale_price'); + $data['tab_required'] = $this->language->get('tab_required'); + $data['tab_additional'] = $this->language->get('tab_additional'); + $data['error_price'] = $this->language->get('error_price'); + $data['error_sku'] = $this->language->get('error_sku'); + $data['error_stock'] = $this->language->get('error_stock'); + + $data['form_action'] = $this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'], true); + + $data['sku'] = trim($product_info['sku']); + + if ($this->config->get('openbay_amazonus_listing_tax_added')) { + $data['price'] = $product_info['price'] * (1 + $this->config->get('openbay_amazonus_listing_tax_added') / 100); + } else { + $data['price'] = $product_info['price']; + } + + $data['listing_errors'] = array(); + + if ($listing_status == 'error_quick') { + $data['listing_errors'] = $this->model_extension_openbay_amazonus->getProductErrors($product_info['product_id'], 3); + } + + $data['price'] = number_format($data['price'], 2, '.', ''); + $data['quantity'] = $product_info['quantity']; + $data['product_id'] = $product_info['product_id']; + + $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['default_condition'] = $this->config->get('openbay_amazonus_listing_default_condition'); + + $data['user_token'] = $this->session->data['user_token']; + + $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_listing/create', 'user_token=' . $this->session->data['user_token'] . $url, true), + 'text' => $this->language->get('heading_title'), + ); + + $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_listing', $data)); + } + + public function edit() { + $this->load->model('extension/openbay/amazonus_listing'); + $this->load->model('extension/openbay/amazonus'); + $this->load->language('extension/openbay/amazonus_listing'); + + $this->document->setTitle($this->language->get('text_edit_heading')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, 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_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true), + 'text' => $this->language->get('text_edit_heading'), + ); + + $status = $this->model_extension_openbay_amazonus->getProductStatus($product_id); + + if ($status === false) { + $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + return; + } + + $data['product_links'] = $this->model_extension_openbay_amazonus->getProductLinks($product_id); + $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + if ($status == 'ok' || $status == 'linked') { + $data['url_create_new'] = $this->url->link('extension/openbay/amazonus_listing/createNew', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + $data['url_delete_links'] = $this->url->link('extension/openbay/amazonus_listing/deleteLinks', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + } + + if ($status == 'saved') { + $data['has_saved_listings'] = true; + } else { + $data['has_saved_listings'] = false; + } + + $data['url_saved_listings'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id, true); + + $data['user_token'] = $this->session->data['user_token']; + + $data['text_edit_heading'] = $this->language->get('text_edit_heading'); + $data['text_product_links'] = $this->language->get('text_product_links'); + $data['text_has_saved_listings'] = $this->language->get('text_has_saved_listings'); + $data['button_create_new_listing'] = $this->language->get('button_create_new_listing'); + $data['button_remove_links'] = $this->language->get('button_remove_links'); + $data['button_cancel'] = $this->language->get('button_cancel'); + $data['button_saved_listings'] = $this->language->get('button_saved_listings'); + $data['column_name'] = $this->language->get('column_name'); + $data['column_model'] = $this->language->get('column_model'); + $data['column_combination'] = $this->language->get('column_combination'); + $data['column_sku'] = $this->language->get('column_sku'); + $data['column_amazon_sku'] = $this->language->get('column_amazon_sku'); + $data['column_sku_variant'] = $this->language->get('column_sku_variant'); + + $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_listing_edit', $data)); + } + + public function createNew() { + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + $this->load->model('extension/openbay/amazonus'); + $this->model_extension_openbay_amazonus->deleteProduct($product_id); + $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + + public function deleteLinks() { + $this->load->language('extension/openbay/amazonus_listing'); + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $this->load->model('extension/openbay/amazonus'); + + $links = $this->model_extension_openbay_amazonus->getProductLinks($product_id); + foreach ($links as $link) { + $this->model_extension_openbay_amazonus->removeProductLink($link['amazonus_sku']); + } + + $this->model_extension_openbay_amazonus->deleteProduct($product_id); + $this->session->data['success'] = $this->language->get('text_links_removed'); + + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + public function search() { + $this->load->model('extension/openbay/amazonus_listing'); + $this->load->language('extension/openbay/amazonus_listing'); + + $error = ''; + + if (empty($this->request->post['search_string'])) { + $error = $this->language->get('error_text_missing'); + } + + if ($error) { + $response = array( + 'data' => '', + 'error' => $error, + ); + } else { + $response = array( + 'data' => $this->model_extension_openbay_amazonus_listing->search($this->request->post['search_string']), + 'error' => '', + ); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + public function bestPrice() { + $this->load->model('extension/openbay/amazonus_listing'); + $this->load->language('extension/openbay/amazonus_listing'); + + $error = ''; + + if (empty($this->request->post['asin'])) { + $error = $this->language->get('error_missing_asin'); + } + + if (empty($this->request->post['condition'])) { + $error = $this->language->get('error_condition_missing'); + } + + if ($error) { + $response = array( + 'data' => '', + 'error' => $error, + ); + } else { + $best_price = $this->model_extension_openbay_amazonus_listing->getBestPrice($this->request->post['asin'], $this->request->post['condition']); + + if ($best_price) { + $response = array( + 'data' => $best_price, + 'error' => '', + ); + } else { + $response = array( + 'data' => '', + 'error' => $this->language->get('error_amazonus_price'), + ); + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + public function getProductByAsin() { + $this->load->model('extension/openbay/amazonus_listing'); + + $data = $this->model_extension_openbay_amazonus_listing->getProductByAsin($this->request->post['asin']); + + $response = array( + 'title' => (string)$data['ItemAttributes']['Title'], + 'img' => (!isset($data['ItemAttributes']['SmallImage']['URL']) ? '' : $data['ItemAttributes']['SmallImage']['URL']) + ); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + public function getBrowseNodes() { + $this->load->model('extension/openbay/amazonus_listing'); + + $data = array( + 'node' => (isset($this->request->post['node']) ? $this->request->post['node'] : ''), + ); + + $response = $this->model_extension_openbay_amazonus_listing->getBrowseNodes($data); + + $this->response->setOutput($response); + } +} diff --git a/public/admin/controller/extension/openbay/amazonus_product.php b/public/admin/controller/extension/openbay/amazonus_product.php new file mode 100644 index 0000000..ab4f488 --- /dev/null +++ b/public/admin/controller/extension/openbay/amazonus_product.php @@ -0,0 +1,559 @@ +<?php +class ControllerExtensionOpenbayAmazonusProduct extends Controller{ + public function index() { + $this->load->language('catalog/product'); + $this->load->language('extension/openbay/amazonus_listing'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/amazonus'); + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + + $this->document->addScript('view/javascript/openbay/js/openbay.js'); + $this->document->setTitle($this->language->get('heading_title')); + + $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_listing/create', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_title_advanced'), + ); + + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + die('No product id'); + } + + if (isset($this->request->get['sku'])) { + $variation = $this->request->get['sku']; + } else { + $variation = ''; + } + $data['variation'] = $variation; + $data['errors'] = array(); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { + $data_array = $this->request->post; + + $this->model_extension_openbay_amazonus->saveProduct($product_id, $data_array); + + if ($data_array['upload_after'] === 'true') { + $upload_result = $this->uploadItems(); + if ($upload_result['status'] == 'ok') { + $this->session->data['success'] = $this->language->get('text_uploaded'); + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } else { + $data['errors'][] = Array('message' => $upload_result['error_message']); + } + } else { + $this->session->data['success'] = $this->language->get('text_saved_local'); + $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $saved_listing_data = $this->model_extension_openbay_amazonus->getProduct($product_id, $variation); + if (empty($saved_listing_data)) { + $listing_saved = false; + } else { + $listing_saved = true; + } + + $errors = $this->model_extension_openbay_amazonus->getProductErrors($product_id); + foreach($errors as $error) { + $error['message'] = 'Error for SKU: "' . $error['sku'] . '" - ' . $this->formatUrlsInText($error['message']); + $data['errors'][] = $error; + } + if (!empty($errors)) { + $data['has_listing_errors'] = true; + } else { + $data['has_listing_errors'] = false; + } + + $product_info = $this->model_catalog_product->getProduct($product_id); + $data['listing_name'] = $product_info['name'] . " : " . $product_info['model']; + $data['listing_sku'] = $product_info['sku']; + $data['listing_url'] = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + + if ($listing_saved) { + $data['edit_product_category'] = $saved_listing_data['category']; + } else { + $data['edit_product_category'] = ''; + } + + $data['amazonus_categories'] = array(); + + $amazonus_templates = $this->openbay->amazonus->getCategoryTemplates(); + + foreach($amazonus_templates as $template) { + $template = (array)$template; + $category_data = array( + 'friendly_name' => $template['friendly_name'], + 'name' => $template['name'], + 'template' => $template['xml'] + ); + $data['amazonus_categories'][] = $category_data; + } + + if ($listing_saved) { + $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazonus_product/parseTemplateAjax&edit_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true)); + } else { + $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazonus_product/parseTemplateAjax&product_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true)); + } + + $data['url_remove_errors'] = $this->url->link('extension/openbay/amazonus_product/removeErrors', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true); + $data['cancel_url'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['saved_listings_url'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true); + $data['main_url'] = $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['user_token'] = $this->session->data['user_token']; + $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100); + + if ($this->openbay->addonLoad('openstock')) { + $this->load->model('extension/module/openstock'); + $data['options'] = $this->model_setting_module_openstock->getVariants($product_id); + } else { + $data['options'] = array(); + } + + $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_listing_advanced', $data)); + } + + public function removeErrors() { + $url = ''; + + if (isset($this->request->get['filter_name'])) { + $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_model'])) { + $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_price'])) { + $url .= '&filter_price=' . $this->request->get['filter_price']; + } + + if (isset($this->request->get['filter_price_to'])) { + $url .= '&filter_price_to=' . $this->request->get['filter_price_to']; + } + + if (isset($this->request->get['filter_quantity'])) { + $url .= '&filter_quantity=' . $this->request->get['filter_quantity']; + } + + if (isset($this->request->get['filter_quantity_to'])) { + $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_sku'])) { + $url .= '&filter_sku=' . $this->request->get['filter_sku']; + } + + if (isset($this->request->get['filter_desc'])) { + $url .= '&filter_desc=' . $this->request->get['filter_desc']; + } + + if (isset($this->request->get['filter_category'])) { + $url .= '&filter_category=' . $this->request->get['filter_category']; + } + + if (isset($this->request->get['filter_manufacturer'])) { + $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + if (isset($this->request->get['product_id'])) { + $product_id = $this->request->get['product_id']; + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $this->load->model('extension/openbay/amazonus'); + $this->model_extension_openbay_amazonus->removeAdvancedErrors($product_id); + $this->session->data['success'] = 'Errors removed'; + $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true)); + } + + public function deleteSaved() { + if (!isset($this->request->get['product_id']) || !isset($this->request->get['var'])) { + return; + } + + $this->load->model('extension/openbay/amazonus'); + $this->model_extension_openbay_amazonus->deleteSaved($this->request->get['product_id'], $this->request->get['var']); + } + + public function uploadSaved() { + ob_start(); + $json = json_encode($this->uploadItems()); + ob_clean(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput($json); + } + + private function uploadItems() { + $this->load->language('extension/openbay/amazonus_listing'); + $this->load->model('extension/openbay/amazonus'); + $logger = new Log('amazonus_product.log'); + + $logger->write('Uploading process started . '); + + $saved_products = $this->model_extension_openbay_amazonus->getSavedProductsData(); + + if (empty($saved_products)) { + $logger->write('No saved listings found. Uploading canceled . '); + $result['status'] = 'error'; + $result['error_message'] = 'No saved listings. Nothing to upload. Aborting . '; + return $result; + } + + foreach($saved_products as $saved_product) { + $product_data_decoded = (array)json_decode($saved_product['data']); + + $catalog = defined(HTTPS_CATALOG) ? HTTPS_CATALOG : HTTP_CATALOG; + $response_data = array("response_url" => $catalog . 'index.php?route=extension/openbay/amazonus/product'); + $category_data = array('category' => (string)$saved_product['category']); + $fields_data = array('fields' => (array)$product_data_decoded['fields']); + + $mp_array = array(); //Amazon US does not have marketplace selection + $marketplaces_data = array('marketplaces' => $mp_array); + + $product_data = array_merge($category_data, $fields_data, $response_data, $marketplaces_data); + $insertion_response = $this->openbay->amazonus->insertProduct($product_data); + + $logger->write("Uploading product with data:" . print_r($product_data, true) . " + Got response:" . print_r($insertion_response, true)); + + if (!isset($insertion_response['status']) || $insertion_response['status'] == 'error') { + $details = isset($insertion_response['info']) ? $insertion_response['info'] : 'Unknown'; + $result['error_message'] = sprintf($this->language->get('error_upload_failed'), $saved_product['product_sku'], $details); + $result['status'] = 'error'; + break; + } + $logger->write('Product upload success'); + $this->model_extension_openbay_amazonus->setProductUploaded($saved_product['product_id'], $insertion_response['insertion_id'], $saved_product['var']); + } + + if (!isset($result['status'])) { + $result['status'] = 'ok'; + $logger->write('Uploading process completed successfully . '); + } else { + $logger->write('Uploading process failed with message: ' . $result['error_message']); + } + return $result; + } + + public function parseTemplateAjax() { + $this->load->model('tool/image'); + $log = new Log('amazonus_product.log'); + + $result = array(); + + if (isset($this->request->get['xml'])) { + $request = array('template' => $this->request->get['xml'], 'version' => 2); + $response = $this->openbay->amazonus->call("productv2/GetTemplateXml", $request); + if ($response) { + $template = $this->openbay->amazonus->parseCategoryTemplate($response); + if ($template) { + $variation = isset($this->request->get['sku']) ? $this->request->get['sku'] : ''; + + if (isset($this->request->get['product_id'])) { + $template['fields'] = $this->fillDefaultValues($this->request->get['product_id'], $template['fields'], $variation); + } elseif (isset($this->request->get['edit_id'])) { + $template['fields'] = $this->fillSavedValues($this->request->get['edit_id'], $template['fields'], $variation); + } + + foreach($template['fields'] as $key => $field) { + if ($field['accepted']['type'] == 'image') { + if (empty($field['value'])) { + $template['fields'][$key]['thumb'] = ''; + } else { + $template['fields'][$key]['thumb'] = $this->model_tool_image->resize(str_replace(HTTPS_CATALOG . 'image/', '', $field['value']), 100, 100); + } + } + } + + $result = array( + "category" => $template['category'], + "fields" => $template['fields'], + "tabs" => $template['tabs'] + ); + } else { + $json_decoded = json_decode($response); + if ($json_decoded) { + $result = $json_decoded; + } else { + $result = array('status' => 'error'); + $log->write("admin/openbay/amazon_product/parseTemplateAjax failed to parse template response: " . $response); + } + } + } else { + $log->write("admin/openbay/amazonus_product/parseTemplateAjax failed calling productv2/GetTemplateXml with params: " . print_r($request, true)); + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($result)); + } + + private function fillDefaultValues($product_id, $fields_array, $var = '') { + $this->load->model('catalog/product'); + $this->load->model('setting/setting'); + $this->load->model('extension/openbay/amazonus'); + + $openbay_settings = $this->model_setting_setting->getSetting('openbay_amazonus'); + + $product_info = $this->model_catalog_product->getProduct($product_id); + $product_info['description'] = trim(utf8_encode(strip_tags(html_entity_decode($product_info['description']), "<br>"))); + $product_info['image'] = HTTPS_CATALOG . 'image/' . $product_info['image']; + + $tax_added = isset($openbay_settings['openbay_amazonus_listing_tax_added']) ? $openbay_settings['openbay_amazonus_listing_tax_added'] : 0; + $default_condition = isset($openbay_settings['openbay_amazonus_listing_default_condition']) ? $openbay_settings['openbay_amazonus_listing_default_condition'] : ''; + $product_info['price'] = number_format($product_info['price'] + $tax_added / 100 * $product_info['price'], 2, '.', ''); + + /*Key must be lowecase */ + $defaults = array( + 'sku' => $product_info['sku'], + 'title' => $product_info['name'], + 'quantity' => $product_info['quantity'], + 'standardprice' => $product_info['price'], + 'description' => $product_info['description'], + 'mainimage' => $product_info['image'], + 'currency' => $this->config->get('config_currency'), + 'shippingweight' => number_format($product_info['weight'], 2, '.', ''), + 'conditiontype' => $default_condition, + ); + + $this->load->model('localisation/weight_class'); + $weight_class = $this->model_localisation_weight_class->getWeightClass($product_info['weight_class_id']); + if (!empty($weight_class)) { + $defaults['shippingweightunitofmeasure'] = $weight_class['unit']; + } + + $this->load->model('catalog/manufacturer'); + $manufacturer = $this->model_catalog_manufacturer->getManufacturer($product_info['manufacturer_id']); + if (!empty($manufacturer)) { + $defaults['manufacturer'] = $manufacturer['name']; + $defaults['brand'] = $manufacturer['name']; + } + + $product_images = $this->model_catalog_product->getProductImages($product_id); + $image_index = 1; + foreach($product_images as $product_image) { + $defaults['pt' . $image_index] = HTTPS_CATALOG . 'image/' . $product_image['image']; + $image_index ++; + } + + if (!empty($product_info['upc'])) { + $defaults['type'] = 'UPC'; + $defaults['value'] = $product_info['upc']; + } else if (!empty($product_info['ean'])) { + $defaults['type'] = 'EAN'; + $defaults['value'] = $product_info['ean']; + } + + $meta_keywords = explode(',', $product_info['meta_keyword']); + foreach ($meta_keywords as $index => $meta_keyword) { + $defaults['searchterms' . $index] = trim($meta_keyword); + } + + if ($var !== '' && $this->openbay->addonLoad('openstock')) { + $this->load->model('tool/image'); + $this->load->model('extension/module/openstock'); + $option_stocks = $this->model_setting_module_openstock->getVariants($product_id); + + $option = ''; + foreach ($option_stocks as $option_iterator) { + if ($option_iterator['sku'] === $var) { + $option = $option_iterator; + break; + } + } + + if ($option != null) { + $defaults['sku'] = $option['sku']; + $defaults['quantity'] = $option['stock']; + $defaults['standardprice'] = number_format($option['price'] + $tax_added / 100 * $option['price'], 2, '.', ''); + $defaults['shippingweight'] = number_format($option['weight'], 2, '.', ''); + + if (!empty($option['image'])) { + $defaults['mainimage'] = HTTPS_CATALOG . 'image/' . $option['image']; + } + } + } + + if ($defaults['shippingweight'] <= 0) { + unset($defaults['shippingweight']); + unset($defaults['shippingweightunitofmeasure']); + } + + $filled_array = array(); + + foreach($fields_array as $field) { + + $value_array = array('value' => ''); + + if (isset($defaults[strtolower($field['name'])])) { + $value_array = array('value' => $defaults[strtolower($field['name'])]); + } + + $filled_item = array_merge($field, $value_array); + + $filled_array[] = $filled_item; + } + return $filled_array; + } + + private function fillSavedValues($product_id, $fields_array, $var = '') { + $this->load->model('extension/openbay/amazonus'); + $saved_listing = $this->model_extension_openbay_amazonus->getProduct($product_id, $var); + + $decoded_data = (array)json_decode($saved_listing['data']); + $saved_fields = (array)$decoded_data['fields']; + + $saved_fields['Quantity'] = $this->model_extension_openbay_amazonus->getProductQuantity($product_id, $var); + + $filled_array = array(); + + foreach($fields_array as $field) { + $value_array = array('value' => ''); + + if (isset($saved_fields[$field['name']])) { + $value_array = array('value' => $saved_fields[$field['name']]); + } + + $filled_item = array_merge($field, $value_array); + + $filled_array[] = $filled_item; + } + + return $filled_array; + } + + public function resetPending() { + $this->db->query("UPDATE `" . DB_PREFIX . "amazonus_product` SET `status` = 'saved' WHERE `status` = 'uploaded'"); + } + + private function validateForm() { + return true; + } + + private function formatUrlsInText($text) { + $regex_url = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; + preg_match_all($regex_url, $text, $matches); + $used_patterns = array(); + foreach($matches[0] as $pattern) { + if (!array_key_exists($pattern, $used_patterns)) { + $used_patterns[$pattern]=true; + $text = str_replace($pattern, "<a target='_blank' href=" . $pattern . ">" . $pattern . "</a>", $text); + } + } + return $text; + } +} diff --git a/public/admin/controller/extension/openbay/ebay.php b/public/admin/controller/extension/openbay/ebay.php new file mode 100644 index 0000000..b0687bf --- /dev/null +++ b/public/admin/controller/extension/openbay/ebay.php @@ -0,0 +1,2421 @@ +<?php +class ControllerExtensionOpenbayEbay extends Controller { + public function install() { + $this->load->language('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay'); + $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/ebay_profile'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/ebay_profile'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/ebay_template'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/ebay_template'); + + $this->model_extension_openbay_ebay->install(); + } + + public function uninstall() { + $this->load->model('extension/openbay/ebay'); + $this->load->model('setting/setting'); + $this->load->model('setting/extension'); + + $this->model_extension_openbay_ebay->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/ebay'); + + $data = $this->language->all(); + + $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/ebay', '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->ebay->validate(); + $data['links_settings'] = $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['links_itemlink'] = $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'], true); + $data['links_subscribe'] = $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true); + $data['links_usage'] = $this->url->link('extension/openbay/ebay/viewUsage', 'user_token=' . $this->session->data['user_token'], true); + $data['links_itemimport'] = $this->url->link('extension/openbay/ebay/viewItemImport', 'user_token=' . $this->session->data['user_token'], true); + $data['links_orderimport'] = $this->url->link('extension/openbay/ebay/viewOrderImport', 'user_token=' . $this->session->data['user_token'], true); + $data['links_usage'] = $this->url->link('extension/openbay/ebay/viewUsage', 'user_token=' . $this->session->data['user_token'], true); + $data['links_sync'] = $this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true); + $data['links_linkmaintenance'] = $this->url->link('extension/openbay/ebay/viewItemLinkMaintenance', 'user_token=' . $this->session->data['user_token'], true); + $data['links_summary'] = $this->url->link('extension/openbay/ebay/summary', 'user_token=' . $this->session->data['user_token'], true); + $data['links_profile'] = $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true); + $data['links_template'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/ebay/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=ebay'; + + $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/ebay', $data)); + } + + public function settings() { + $this->load->language('extension/openbay/ebay_settings'); + + $data = $this->language->all(); + + $this->load->model('setting/setting'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('localisation/currency'); + $this->load->model('localisation/order_status'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) { + $this->model_setting_setting->editSetting('ebay', $this->request->post); + $this->session->data['success'] = $this->language->get('text_success'); + $this->response->redirect($this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true)); + } + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['action'] = $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/ebay/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=ebay'; + $data['link_token_renew'] = 'https://account.openbaypro.com/ebay/apiRenew/?utm_source=opencart_install&utm_medium=settings&utm_campaign=ebaytoken'; + $data['link_update'] = 'https://account.openbaypro.com/ebay/apiUpdate/?utm_source=opencart_install&utm_medium=settings&utm_campaign=ebayupdate'; + + if (isset($this->request->post['ebay_def_currency'])) { + $data['ebay_def_currency'] = $this->request->post['ebay_def_currency']; + } else { + $data['ebay_def_currency'] = $this->config->get('ebay_def_currency'); + } + $data['currency_list'] = $this->model_localisation_currency->getCurrencies(); + + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->request->post['ebay_status'])) { + $data['ebay_status'] = $this->request->post['ebay_status']; + } else { + $data['ebay_status'] = $this->config->get('ebay_status'); + } + + if (isset($this->request->post['ebay_token'])) { + $data['ebay_token'] = trim($this->request->post['ebay_token']); + } else { + $data['ebay_token'] = trim($this->config->get('ebay_token')); + } + + if (isset($this->request->post['ebay_secret'])) { + $data['ebay_secret'] = trim($this->request->post['ebay_secret']); + } else { + $data['ebay_secret'] = trim($this->config->get('ebay_secret')); + } + + if (isset($this->request->post['ebay_encryption_key'])) { + $data['ebay_encryption_key'] = trim($this->request->post['ebay_encryption_key']); + } else { + $data['ebay_encryption_key'] = trim($this->config->get('ebay_encryption_key')); + } + + if (isset($this->request->post['ebay_encryption_iv'])) { + $data['ebay_encryption_iv'] = trim($this->request->post['ebay_encryption_iv']); + } else { + $data['ebay_encryption_iv'] = trim($this->config->get('ebay_encryption_iv')); + } + + if (isset($this->request->post['ebay_enditems'])) { + $data['ebay_enditems'] = $this->request->post['ebay_enditems']; + } else { + $data['ebay_enditems'] = $this->config->get('ebay_enditems'); + } + + if (isset($this->request->post['ebay_relistitems'])) { + $data['ebay_relistitems'] = $this->request->post['ebay_relistitems']; + } else { + $data['ebay_relistitems'] = $this->config->get('ebay_relistitems'); + } + + if (isset($this->request->post['ebay_disable_nostock'])) { + $data['ebay_disable_nostock'] = $this->request->post['ebay_disable_nostock']; + } else { + $data['ebay_disable_nostock'] = $this->config->get('ebay_disable_nostock'); + } + if (isset($this->request->post['ebay_logging'])) { + $data['ebay_logging'] = $this->request->post['ebay_logging']; + } else { + $data['ebay_logging'] = $this->config->get('ebay_logging'); + } + + if (isset($this->request->post['ebay_created_hours'])) { + $data['ebay_created_hours'] = $this->request->post['ebay_created_hours']; + } else { + $data['ebay_created_hours'] = $this->config->get('ebay_created_hours'); + } + + if (isset($this->request->post['ebay_time_offset'])) { + $data['ebay_time_offset'] = $this->request->post['ebay_time_offset']; + } else { + $data['ebay_time_offset'] = $this->config->get('ebay_time_offset'); + } + + if (isset($this->request->post['ebay_update_notify'])) { + $data['ebay_update_notify'] = $this->request->post['ebay_update_notify']; + } else { + $data['ebay_update_notify'] = $this->config->get('ebay_update_notify'); + } + + if (isset($this->request->post['ebay_confirm_notify'])) { + $data['ebay_confirm_notify'] = $this->request->post['ebay_confirm_notify']; + } else { + $data['ebay_confirm_notify'] = $this->config->get('ebay_confirm_notify'); + } + + if (isset($this->request->post['ebay_confirmadmin_notify'])) { + $data['ebay_confirmadmin_notify'] = $this->request->post['ebay_confirmadmin_notify']; + } else { + $data['ebay_confirmadmin_notify'] = $this->config->get('ebay_confirmadmin_notify'); + } + + if (isset($this->request->post['ebay_itm_link'])) { + $data['ebay_itm_link'] = $this->request->post['ebay_itm_link']; + } else { + $data['ebay_itm_link'] = $this->config->get('ebay_itm_link'); + } + + if (isset($this->request->post['ebay_stock_allocate'])) { + $data['ebay_stock_allocate'] = $this->request->post['ebay_stock_allocate']; + } else { + $data['ebay_stock_allocate'] = $this->config->get('ebay_stock_allocate'); + } + + if (isset($this->request->post['ebay_create_date'])) { + $data['ebay_create_date'] = $this->request->post['ebay_create_date']; + } else { + $data['ebay_create_date'] = $this->config->get('ebay_create_date'); + } + + $data['durations'] = array( + 'Days_1' => $data['text_listing_1day'], + 'Days_3' => $data['text_listing_3day'], + 'Days_5' => $data['text_listing_5day'], + 'Days_7' => $data['text_listing_7day'], + 'Days_10' => $data['text_listing_10day'], + 'Days_30' => $data['text_listing_30day'], + 'GTC' => $data['text_listing_gtc'] + ); + + if (isset($this->request->post['ebay_duration'])) { + $data['ebay_duration'] = $this->request->post['ebay_duration']; + } else { + $data['ebay_duration'] = $this->config->get('ebay_duration'); + } + + if (isset($this->request->post['ebay_measurement'])) { + $data['ebay_measurement'] = $this->request->post['ebay_measurement']; + } else { + $data['ebay_measurement'] = $this->config->get('ebay_measurement'); + } + + if (isset($this->request->post['ebay_default_addressformat'])) { + $data['ebay_default_addressformat'] = $this->request->post['ebay_default_addressformat']; + } else { + $data['ebay_default_addressformat'] = $this->config->get('ebay_default_addressformat'); + } + + $data['payment_options'] = $this->model_extension_openbay_ebay->getPaymentTypes(); + + if (isset($this->request->post['ebay_payment_types'])) { + $data['ebay_payment_types'] = $this->request->post['ebay_payment_types']; + } else { + $data['ebay_payment_types'] = $this->config->get('ebay_payment_types'); + } + + if (isset($this->request->post['ebay_payment_instruction'])) { + $data['ebay_payment_instruction'] = $this->request->post['ebay_payment_instruction']; + } else { + $data['ebay_payment_instruction'] = $this->config->get('ebay_payment_instruction'); + } + + if (isset($this->request->post['ebay_payment_paypal_address'])) { + $data['ebay_payment_paypal_address'] = $this->request->post['ebay_payment_paypal_address']; + } else { + $data['ebay_payment_paypal_address'] = $this->config->get('ebay_payment_paypal_address'); + } + + if (isset($this->request->post['ebay_payment_immediate'])) { + $data['ebay_payment_immediate'] = $this->request->post['ebay_payment_immediate']; + } else { + $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate'); + } + + if (isset($this->request->post['ebay_tax_listing'])) { + $data['ebay_tax_listing'] = $this->request->post['ebay_tax_listing']; + } else { + $data['ebay_tax_listing'] = $this->config->get('ebay_tax_listing'); + } + + if (isset($this->request->post['ebay_tax'])) { + $data['ebay_tax'] = $this->request->post['ebay_tax']; + } else { + $data['ebay_tax'] = $this->config->get('ebay_tax'); + } + + if (isset($this->request->post['ebay_import_unpaid'])) { + $data['ebay_import_unpaid'] = $this->request->post['ebay_import_unpaid']; + } else { + $data['ebay_import_unpaid'] = $this->config->get('ebay_import_unpaid'); + } + + if (isset($this->request->post['ebay_status_partial_refund_id'])) { + $data['ebay_status_partial_refund_id'] = $this->request->post['ebay_status_partial_refund_id']; + } else { + $data['ebay_status_partial_refund_id'] = $this->config->get('ebay_status_partial_refund_id'); + } + + if (isset($this->request->post['ebay_status_import_id'])) { + $data['ebay_status_import_id'] = $this->request->post['ebay_status_import_id']; + } else { + $data['ebay_status_import_id'] = $this->config->get('ebay_status_import_id'); + } + + if (isset($this->request->post['ebay_status_paid_id'])) { + $data['ebay_status_paid_id'] = $this->request->post['ebay_status_paid_id']; + } else { + $data['ebay_status_paid_id'] = $this->config->get('ebay_status_paid_id'); + } + + if (isset($this->request->post['ebay_status_shipped_id'])) { + $data['ebay_status_shipped_id'] = $this->request->post['ebay_status_shipped_id']; + } else { + $data['ebay_status_shipped_id'] = $this->config->get('ebay_status_shipped_id'); + } + + if (isset($this->request->post['ebay_status_cancelled_id'])) { + $data['ebay_status_cancelled_id'] = $this->request->post['ebay_status_cancelled_id']; + } else { + $data['ebay_status_cancelled_id'] = $this->config->get('ebay_status_cancelled_id'); + } + + if (isset($this->request->post['ebay_status_refunded_id'])) { + $data['ebay_status_refunded_id'] = $this->request->post['ebay_status_refunded_id']; + } else { + $data['ebay_status_refunded_id'] = $this->config->get('ebay_status_refunded_id'); + } + + $data['api_server'] = $this->openbay->ebay->getServer(); + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + $data['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types'); + + $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/ebay_settings', $data)); + } + + public function updateSettings() { + set_time_limit(0); + + $json = $this->openbay->ebay->updateSettings(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function updateCategories() { + set_time_limit(0); + + $json = $this->openbay->ebay->updateCategories(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function updateStore() { + set_time_limit(0); + + $json = $this->openbay->ebay->updateStore(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getCategories() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getCategory($this->request->get['parent']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getSuggestedCategories() { + $this->load->model('extension/openbay/ebay'); + + $this->load->language('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getSuggestedCategories($this->request->get['qry']); + + if (empty($json['data'])) { + $json['msg'] = $this->language->get('error_category_nosuggestions'); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getShippingService() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getShippingService($this->request->get['loc'], $this->request->get['type']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getEbayCategorySpecifics() { + $this->load->model('extension/openbay/ebay'); + $this->load->model('catalog/product'); + $this->load->model('catalog/attribute'); + + $response = $this->model_extension_openbay_ebay->getEbayCategorySpecifics($this->request->get['category_id']); + + $recommendation_data = array(); + + if (isset($response['data']['Recommendations']['NameRecommendation'])) { + if (isset($response['data']['Recommendations']['NameRecommendation']['Name'])) { + $recommendations = array($response['data']['Recommendations']['NameRecommendation']); + } else { + $recommendations = $response['data']['Recommendations']['NameRecommendation']; + } + + foreach ($recommendations as $name_recommendation_key => $name_recommendation) { + $recommendation_data_option = array( + 'name' => $name_recommendation['Name'], + 'validation' => + array( + 'max_values' => $name_recommendation['ValidationRules']['MaxValues'], + 'selection_mode' => $name_recommendation['ValidationRules']['SelectionMode'], + ), + 'unmatched_value' => '', + ); + + if (isset($name_recommendation['ValueRecommendation'])) { + if (!isset($name_recommendation['ValueRecommendation']['Value'])) { + foreach($name_recommendation['ValueRecommendation'] as $value_recommendation_key => $value_recommendation) { + $recommendation_data_option['options'][] = $value_recommendation['Value']; + } + } + } + + $recommendation_data[] = $recommendation_data_option; + } + + if (isset($this->request->get['product_id'])) { + $product_attributes = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']); + + foreach ($product_attributes as $product_attribute) { + $attribute_info = $this->model_catalog_attribute->getAttribute($product_attribute['attribute_id']); + + if ($attribute_info) { + // search the ebay attribute results for a match + foreach($recommendation_data as $name_recommendation_key => $name_recommendation) { + if (strtolower($attribute_info['name']) == strtolower($name_recommendation['name'])) { + $preset_match_found = false; + + if (isset($name_recommendation['options'])) { + foreach($name_recommendation['options'] as $value_recommendation_key => $value_recommendation) { + if (strtolower($value_recommendation) == strtolower($product_attribute['product_attribute_description'][$this->config->get('config_language_id')]['text'])) { + $preset_match_found = $value_recommendation_key; + } + } + } + + if ($preset_match_found === false) { + if ($name_recommendation['validation']['selection_mode'] == 'FreeText') { + $recommendation_data[$name_recommendation_key]['unmatched_value'] = $product_attribute['product_attribute_description'][$this->config->get('config_language_id')]['text']; + } + } else { + $recommendation_data[$name_recommendation_key]['matched_value_key'] = $preset_match_found; + } + } + } + } + } + } + } + + $json = array( + 'data' => $recommendation_data, + 'msg' => $response['msg'], + 'error' => $response['error'], + ); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getCategoryFeatures() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getCategoryFeatures($this->request->get['category']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function searchEbayCatalog() { + $this->load->language('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_product'); + + $response = $this->model_extension_openbay_ebay_product->searchEbayCatalog($this->request->post['search'], $this->request->post['category_id']); + + $json = array('error' => false, 'error_message' => ''); + + if (isset($response['ack'])) { + if ($response['ack'] == 'Success') { + $json['results'] = (int)$response['productSearchResult']['paginationOutput']['totalEntries']; + $json['page'] = (int)$response['productSearchResult']['paginationOutput']['pageNumber']; + $json['page_total'] = (int)$response['productSearchResult']['paginationOutput']['totalPages']; + + if (isset($response['productSearchResult']['products'])) { + $json['products'] = $response['productSearchResult']['products']; + } else { + $json = array('error' => true, 'error_message' => $this->language->get('error_no_products')); + } + } else { + if (isset($response['errorMessage']['error']['message'])) { + $json = array('error' => true, 'error_message' => $response['errorMessage']['error']['message']); + } else { + $json = array('error' => true, 'error_message' => $this->language->get('error_loading_catalog')); + } + } + } else { + $json = array('error' => true, 'error_message' => $this->language->get('error_generic_fail')); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function summary() { + $this->load->language('extension/openbay/ebay_summary'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/summary', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['heading_title'], + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['validation'] = $this->openbay->ebay->validate(); + $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/ebay_summary', $data)); + } + + public function getSellerSummary() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getSellerSummary(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function verifyCredentials() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->verifyCredentials(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function viewItemImport() { + $this->load->language('extension/openbay/ebay_import'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/ebay_product'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/viewItemImport', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['validation'] = $this->openbay->ebay->validate(); + $data['user_token'] = $this->session->data['user_token']; + $data['maintenance'] = $this->config->get('config_maintenance'); + $data['image_import'] = $this->model_extension_openbay_ebay_product->countImportImages(); + $data['ini_setting_post_max_size'] = ini_get('post_max_size'); + $data['ini_setting_memory_limit'] = ini_get('memory_limit'); + $data['image_import_link'] = $this->url->link('extension/openbay/ebay/getImportImages', '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/ebay_item_import', $data)); + } + + public function importItems() { + $data = array( + 'adv' => $this->request->get['advanced'], + 'c' => 1, + 'd' => $this->request->get['desc'], + 'n' => $this->request->get['note'], + 'cat' => $this->request->get['categories'], + ); + + $this->openbay->ebay->callNoResponse('setup/getItemsMain/', $data); + + $json = array('msg' => 'ok'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getImportImages() { + set_time_limit(0); + $this->openbay->ebay->getImages(); + + $json = array('error' => false, 'msg' => 'OK'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function importOrdersManual() { + $this->openbay->ebay->callNoResponse('order/getOrdersManual/'); + + $json = array('msg' => 'ok'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getProductStock() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getProductStock($this->request->get['pid']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function setProductStock() { + $this->load->model('extension/openbay/ebay'); + $this->load->model('catalog/product'); + + $product = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + $json = array(); + + if ($product['subtract'] == 1) { + $this->openbay->ebay->productUpdateListen($this->request->get['product_id']); + + $json['error'] = false; + $json['msg'] = 'ok'; + } else { + $this->load->language('extension/openbay/ebay_links'); + + $json['error'] = true; + $json['msg'] = $this->language->get('error_subtract_setting'); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getPlans() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getPlans(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getMyPlan() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getMyPlan(); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function subscription() { + $this->load->language('extension/openbay/ebay_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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + $data['obp_token'] = $this->config->get('ebay_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/ebay_subscription', $data)); + } + + public function viewUsage() { + $this->load->language('extension/openbay/ebay_usage'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/view_usage', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + $data['obp_token'] = $this->config->get('ebay_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/ebay_usage', $data)); + } + + public function getUsage() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->getUsage(); + $json['html'] = base64_decode($json['html']); + $json['lasterror'] = $this->openbay->ebay->lasterror; + $json['lastmsg'] = $this->openbay->ebay->lastmsg; + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function viewOrderImport() { + $this->load->language('extension/openbay/ebay_orders'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/viewOrderImport', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['validation'] = $this->openbay->ebay->validate(); + $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/ebay_order_import', $data)); + } + + public function syncronise() { + $this->load->language('extension/openbay/ebay_syncronise'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['validation'] = $this->openbay->ebay->validate(); + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->session->data['warning'])) { + $data['error_warning'] = $this->session->data['warning']; + } else { + $data['error_warning'] = ''; + } + + $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/ebay_syncronise', $data)); + } + + public function viewItemLinks() { + $this->load->language('extension/openbay/ebay_links'); + + $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/ebay'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + $data['edit_url'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=', true); + $data['validation'] = $this->openbay->ebay->validate(); + $data['user_token'] = $this->session->data['user_token']; + + $total_linked = $this->model_extension_openbay_ebay->totalLinked(); + + 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 = 100; + } + + $pagination = new Pagination(); + $pagination->total = $total_linked; + $pagination->page = $linked_item_page; + $pagination->limit = 100; + $pagination->text = $this->language->get('text_pagination'); + $pagination->url = $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}', true); + + $data['pagination'] = $pagination->render(); + + $data['linked_items'] = $this->model_extension_openbay_ebay->loadLinked($linked_item_limit, $linked_item_page); + + $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/ebay_item_link', $data)); + } + + public function saveItemLink() { + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->saveItemLink($this->request->get); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function removeItemLink() { + $this->load->language('extension/openbay/ebay'); + + $this->openbay->ebay->removeItemByProductId($this->request->get['product_id']); + + $json = array('error' => false, 'msg' => $this->language->get('item_link_removed')); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function loadUnlinked(){ + set_time_limit(0); + + $this->load->model('extension/openbay/ebay'); + + $filter = array(); + + if (isset($this->request->post['filter_variant']) && !empty($this->request->post['filter_variant'])) { + $filter['variants'] = (int)$this->request->post['filter_variant']; + } + + if (isset($this->request->post['filter_title']) && !empty($this->request->post['filter_title'])) { + $filter['title'] = (string)$this->request->post['filter_title']; + } + + if (isset($this->request->post['filter_qty_min']) && !empty($this->request->post['filter_qty_min'])) { + $filter['qty_min'] = (int)$this->request->post['filter_qty_min']; + } + + if (isset($this->request->post['filter_qty_max']) && !empty($this->request->post['filter_qty_max'])) { + $filter['qty_max'] = (int)$this->request->post['filter_qty_max']; + } + + $data = $this->model_extension_openbay_ebay->loadUnlinked(200, $this->request->get['page'], $filter); + + if (!empty($data)) { + $data['more_pages'] = 1; + + if ($data['next_page'] > $data['max_page']){ + $data['more_pages'] = 0; + } + + $json['data'] = $data; + } else { + $json['data'] = null; + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function loadLinkedStatus(){ + set_time_limit(0); + + $this->load->model('extension/openbay/ebay'); + + $json['data'] = ''; + if (isset($this->request->post['item_id']) && !empty($this->request->post['item_id'])){ + $data = $this->model_extension_openbay_ebay->loadLinkedStatus($this->request->post['item_id']); + + if (!empty($data)) { + $json['data'] = $data; + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + private function validate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/ebay')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + return !$this->error; + } + + private function checkConfig() { + if ($this->config->get('ebay_token') == '' || $this->config->get('ebay_secret') == '') { + return false; + } else { + return true; + } + } + + public function edit() { + if ($this->checkConfig() == true) { + if (!empty($this->request->get['product_id'])) { + $this->load->language('extension/openbay/ebay_edit'); + + $data = $this->language->all(); + + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + $this->load->model('catalog/manufacturer'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_product'); + + $this->document->setTitle($data['heading_title']); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $data['action'] = $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + $data['view_link'] = $this->config->get('ebay_itm_link') . $this->openbay->ebay->getEbayItemId($this->request->get['product_id']); + $data['user_token'] = $this->session->data['user_token']; + $data['product_id'] = $this->request->get['product_id']; + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true), + 'text' => $this->language->get('heading_title'), + ); + + $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/ebay_edit', $data)); + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true)); + } + } + } + + public function editLoad() { + $this->load->model('catalog/product'); + $this->load->model('extension/openbay/ebay_product'); + $this->load->model('tool/image'); + + $item_id = $this->openbay->ebay->getEbayItemId($this->request->get['product_id']); + + if (!empty($item_id)) { + $listings = $this->openbay->ebay->getEbayListing($item_id); + $stock = $this->openbay->ebay->getProductStockLevel($this->request->get['product_id']); + $reserve = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id); + $options = array(); + + $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) { + $this->load->model('extension/module/openstock'); + $data['addon']['openstock'] = true; + $product_info['options'] = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']); + $product_info['option_groups'] = $this->model_extension_openbay_ebay_product->getProductOptions($this->request->get['product_id']); + + $t = array(); + $t_rel = array(); + + foreach($product_info['option_groups'] as $group) { + $t_tmp = array(); + + foreach($group['product_option_value'] as $group_node) { + $t_tmp[$group_node['option_value_id']] = $group_node['name']; + $t_rel[$group_node['product_option_value_id']] = $group['name']; + } + + $t[] = array('name' => $group['name'], 'child' => $t_tmp); + } + + if (!isset($listings['variations']['Variation'][1])) { + $listings['variations']['Variation'] = array($listings['variations']['Variation']); + } + + foreach($product_info['options'] as $option) { + $option['base64'] = base64_encode(serialize($option['option_values'])); + $option_reserve = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id, $option['sku']); + if ($option_reserve == false) { + $option['reserve'] = 0; + } else { + $option['reserve'] = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id, $option['sku']); + } + + $ebay_listing = ''; + + foreach($listings['variations']['Variation'] as $listing) { + + $sku = (isset($listing['SKU']) ? $listing['SKU'] : ''); + + if ($sku != '' && $sku == $option['sku']) { + $listing['StartPrice'] = number_format($listing['StartPrice'], 2, '.', ''); + $listing['Quantity'] = $listing['Quantity'] - $listing['SellingStatus']['QuantitySold']; + + $ebay_listing = $listing; + } + } + + $options[] = array('ebay' => $ebay_listing, 'local' => $option, 'sku' => $option['sku'], 'product_option_variant_id' => $option['product_option_variant_id']); + } + + //unset variants that dont appear on eBay + $options_inactive = array(); + foreach($options as $k => $option) { + if (empty($option['ebay'])) { + $options_inactive[] = $options[$k]; + unset($options[$k]); + } + } + + $variant = array( + 'variant' => 1, + 'data' => array( + 'group_information' => array( + 'option_groups' => base64_encode(serialize($t)), + 'option_group_relationship' => base64_encode(serialize($t_rel)), + ), + 'options' => $options, + 'options_inactive' => $options_inactive + ) + ); + + } else { + $variant = array('variant' => 0, 'data' => ''); + } + + if ($reserve == false) { + $reserve = 0; + } + + $data = array( + 'listing' => $listings, + 'stock' => $stock, + 'reserve' => $reserve, + 'variant' => $variant, + 'product' => $product_info + ); + + if (!empty($listings)) { + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => false, 'data' => $data))); + } else { + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => true))); + } + } else { + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => true))); + } + } + + public function editSave() { + if ($this->checkConfig() == true && $this->request->server['REQUEST_METHOD'] == 'POST') { + + $this->load->model('extension/openbay/ebay'); + + $json = $this->model_extension_openbay_ebay->editSave($this->request->post); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true)); + } + } + + public function create() { + if ($this->checkConfig() == true) { + if (!empty($this->request->get['product_id'])) { + $this->load->language('extension/openbay/ebay_new'); + + $data = $this->language->all(); + + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + $this->load->model('catalog/manufacturer'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + $this->load->model('extension/openbay/ebay_product'); + $this->load->model('extension/openbay/ebay_profile'); + + $this->document->setTitle($data['heading_title']); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $data['action'] = $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true), + 'text' => $this->language->get('heading_title'), + ); + + $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + $setting = array(); + + $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max'); + + if (is_array($setting['dispatch_times'])) { + ksort($setting['dispatch_times']); + } + + $setting['countries'] = $this->openbay->ebay->getSetting('countries'); + + if (is_array($setting['countries'])) { + ksort($setting['countries']); + } + + $setting['returns'] = $this->openbay->ebay->getSetting('returns'); + $setting['package_type'] = $this->openbay->ebay->getSetting('package_type'); + $setting['shipping_types'] = $this->openbay->ebay->getSetting('shipping_types'); + $setting['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types'); + $setting['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types'); + $setting['product_details'] = $this->openbay->ebay->getSetting('product_details'); + $setting['listing_restrictions'] = $this->openbay->ebay->getSetting('listing_restrictions'); + + if (!isset($setting['product_details']['product_identifier_unavailable_text'])) { + $this->session->data['warning'] = $this->language->get('error_missing_settings'); + $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&user_token=' . $this->session->data['user_token'], true)); + } + + if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){ + $this->session->data['warning'] = $this->language->get('error_missing_settings'); + $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true)); + } + + $data['setting'] = $setting; + + if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) { + $this->load->model('extension/module/openstock'); + $data['addon']['openstock'] = true; + $product_info['options'] = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']); + + $product_info['options_array'] = base64_encode(serialize($product_info['options'][0]['option_values'])); + + $product_info['option_groups'] = $this->model_extension_openbay_ebay_product->getProductOptions($this->request->get['product_id']); + + $option_group_array = array(); + $option_group_relation_array = array(); + + foreach($product_info['option_groups'] as $option_group) { + $child_option = array(); + + foreach($option_group['product_option_value'] as $group_node) { + $child_option[$group_node['option_value_id']] = $group_node['name']; + $option_group_relation_array[$group_node['product_option_value_id']] = $option_group['name']; + } + + $option_group_array[] = array('name' => $option_group['name'], 'child' => $child_option); + } + + $product_info['option_group_array'] = base64_encode(serialize($option_group_array)); + $product_info['option_group_relation_array'] = base64_encode(serialize($option_group_relation_array)); + } + + // get the product tax rate from opencart + if (isset($product_info['tax_class_id'])) { + $product_info['defaults']['tax'] = $this->model_extension_openbay_ebay_product->getTaxRate($product_info['tax_class_id']); + } else { + $product_info['defaults']['tax'] = 0.00; + } + + //get the popular categories the user has used + $product_info['popular_cats'] = $this->model_extension_openbay_ebay->getPopularCategories(); + + //get shipping profiles + $product_info['profiles_shipping'] = $this->model_extension_openbay_ebay_profile->getAll(0); + //get default shipping profile + $product_info['profiles_shipping_def'] = $this->model_extension_openbay_ebay_profile->getDefault(0); + + //get returns profiles + $product_info['profiles_returns'] = $this->model_extension_openbay_ebay_profile->getAll(1); + //get default returns profile + $product_info['profiles_returns_def'] = $this->model_extension_openbay_ebay_profile->getDefault(1); + $data['data']['shipping_international_zones'] = $this->model_extension_openbay_ebay->getShippingLocations(); + + //get theme profiles + $product_info['profiles_theme'] = $this->model_extension_openbay_ebay_profile->getAll(2); + //get default returns profile + $product_info['profiles_theme_def'] = $this->model_extension_openbay_ebay_profile->getDefault(2); + + //get generic profiles + $product_info['profiles_generic'] = $this->model_extension_openbay_ebay_profile->getAll(3); + //get default generic profile + $product_info['profiles_generic_def'] = $this->model_extension_openbay_ebay_profile->getDefault(3); + + //product attributes - this is just a direct pass through used with the template tag + $product_info['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($this->request->get['product_id']))); + + //post edit link + $product_info['edit_link'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true); + + //images + $product_images = $this->model_catalog_product->getProductImages($this->request->get['product_id']); + $product_info['product_images'] = array(); + + if (!empty($product_info['image'])) { + $img_info = getimagesize(DIR_IMAGE . $product_info['image']); + + $product_info['product_images'][] = array( + 'image' => $product_info['image'], + 'preview' => $this->model_tool_image->resize($product_info['image'], 100, 100), + 'full' => HTTPS_CATALOG . 'image/' . $product_info['image'], + 'width' => $img_info[0], + 'height' => $img_info[1], + ); + } + + foreach ($product_images as $product_image) { + if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) { + $img_info = getimagesize(DIR_IMAGE . $product_image['image']); + + $product_info['product_images'][] = array( + 'image' => $product_image['image'], + 'preview' => $this->model_tool_image->resize($product_image['image'], 100, 100), + 'full' => HTTPS_CATALOG . 'image/' . $product_image['image'], + 'width' => $img_info[0], + 'height' => $img_info[1], + ); + } + } + + $product_info['manufacturers'] = $this->model_catalog_manufacturer->getManufacturers(); + $product_info['payments'] = $this->model_extension_openbay_ebay->getPaymentTypes(); + $product_info['templates'] = $this->model_extension_openbay_ebay_template->getAll(); + $product_info['store_cats'] = $this->model_extension_openbay_ebay->getSellerStoreCategories(); + + $product_info['defaults']['cod_surcharge'] = 0; + + foreach($product_info['payments'] as $payment) { + if ($payment['ebay_name'] == 'COD') { + $product_info['defaults']['cod_surcharge'] = 1; + } + } + + $product_info['defaults']['ebay_payment_types'] = $this->config->get('ebay_payment_types'); + $product_info['defaults']['paypal_address'] = $this->config->get('ebay_payment_paypal_address'); + $product_info['defaults']['payment_instruction'] = $this->config->get('ebay_payment_instruction'); + $product_info['defaults']['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate'); + + $product_info['defaults']['gallery_height'] = '400'; + $product_info['defaults']['gallery_width'] = '400'; + $product_info['defaults']['thumb_height'] = '100'; + $product_info['defaults']['thumb_width'] = '100'; + + $product_info['defaults']['ebay_measurement'] = $this->config->get('ebay_measurement'); + + $product_info['defaults']['listing_duration'] = $this->config->get('ebay_duration'); + if ($product_info['defaults']['listing_duration'] == '') { + $product_info['defaults']['listing_duration'] = 'Days_30'; + } + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if ($product_info['quantity'] < 1 && (!isset($product_info['has_option']) || $product_info['has_option'] == 0)) { + $data['error_warning'] = $this->language->get('error_no_stock'); + } + + $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100); + + $weight_parts = explode('.', $product_info['weight']); + $product_info['weight_major'] = (int)$weight_parts[0]; + $product_info['weight_minor'] = (int)substr($weight_parts[1], 0, 3); + + $data['product'] = $product_info; + + $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/ebay_new', $data)); + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true)); + } + } + } + + public function createBulk() { + if ($this->checkConfig() == true) { + if (!empty($this->request->post['selected'])) { + $this->load->language('extension/openbay/ebay_newbulk'); + + $data = $this->language->all(); + + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + $this->load->model('catalog/manufacturer'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_profile'); + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay/createBulk', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['error_warning'] = array(); + + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + $data['image_directory'] = DIR_IMAGE; + + $active_list = $this->model_extension_openbay_ebay->getLiveListingArray(); + + $products = array(); + + if ($this->openbay->addonLoad('openstock')) { + $openstock = 1; + } else { + $openstock = 0; + } + + foreach ($this->request->post['selected'] as $product_id) { + if (!array_key_exists($product_id, $active_list)) { + + $prod = $this->model_catalog_product->getProduct($product_id); + + if ($openstock == 1 && isset($prod['has_option']) && $prod['has_option'] == 1) { + $data['error_warning']['os'] = $this->language->get('text_error_variants'); + } else { + if ($prod['quantity'] > 0) { + if ($prod['image'] && file_exists(DIR_IMAGE . $prod['image'])) { + $prod['image'] = $this->model_tool_image->resize($prod['image'], 80, 80); + } else { + $prod['image'] = $this->model_tool_image->resize('no_image.png', 80, 80); + } + + $products[] = $prod; + } else { + $data['error_warning']['stock'] = $this->language->get('text_error_stock'); + } + } + } else { + $data['error_warning']['exists'] = $this->language->get('text_exists'); + } + } + + $data['count'] = count($products); + $data['user_token'] = $this->session->data['user_token']; + $data['listing_link'] = $this->config->get('ebay_itm_link'); + + $plan = $this->model_extension_openbay_ebay->getMyPlan(); + + if ($plan['plan']['listing_bulk'] == 1) { + if ($data['count'] == 0) { + $data['error_fail'][] = $this->language->get('text_error_no_product'); + } else { + if (($plan['plan']['listing_limit'] == 0) || (($plan['usage']['items'] + $data['count']) <= $plan['plan']['listing_limit'])) { + if ($data['count'] > 5) { + $data['error_warning']['count'] = sprintf($this->language->get('text_error_count'), $data['count']); + } + + //load the settings from eBay + $setting = array(); + + $setting['product_details'] = $this->openbay->ebay->getSetting('product_details'); + + if (!isset($setting['product_details']['product_identifier_unavailable_text'])) { + $this->session->data['warning'] = $this->language->get('error_missing_settings'); + $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true)); + } + + $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max'); + if (is_array($setting['dispatch_times'])) { + ksort($setting['dispatch_times']); + } + + $setting['countries'] = $this->openbay->ebay->getSetting('countries'); + if (is_array($setting['countries'])) { + ksort($setting['countries']); + } + + $setting['returns'] = $this->openbay->ebay->getSetting('returns'); + + if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){ + $this->session->data['warning'] = $this->language->get('error_missing_settings'); + $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true)); + } + + $data['setting'] = $setting; + + //get generic profiles + $product_info['profiles_generic'] = $this->model_extension_openbay_ebay_profile->getAll(3); + //get default generic profile + $product_info['profiles_generic_def'] = $this->model_extension_openbay_ebay_profile->getDefault(3); + if ($product_info['profiles_generic_def'] === false) { + $data['error_fail'][] = $this->language->get('text_error_generic_profile'); + } + + //get shipping profiles + $product_info['profiles_shipping'] = $this->model_extension_openbay_ebay_profile->getAll(0); + //get default shipping profile + $product_info['profiles_shipping_def'] = $this->model_extension_openbay_ebay_profile->getDefault(0); + //check it has a default profile + if ($product_info['profiles_shipping_def'] === false) { + $data['error_fail'][] = $this->language->get('text_error_ship_profile'); + } + + //get returns profiles + $product_info['profiles_returns'] = $this->model_extension_openbay_ebay_profile->getAll(1); + //get default returns profile + $product_info['profiles_returns_def'] = $this->model_extension_openbay_ebay_profile->getDefault(1); + //check it has a default profile + if ($product_info['profiles_returns_def'] === false) { + $data['error_fail'][] = $this->language->get('text_error_return_profile'); + } + + //get returns profiles + $product_info['profiles_theme'] = $this->model_extension_openbay_ebay_profile->getAll(2); + //get default returns profile + $product_info['profiles_theme_def'] = $this->model_extension_openbay_ebay_profile->getDefault(2); + //check it has a default profile + if ($product_info['profiles_theme_def'] === false) { + $data['error_fail'][] = $this->language->get('text_error_theme_profile'); + } + + // get the product tax rate + if (isset($product_info['tax_class_id'])) { + $product_info['defaults']['tax'] = $this->model_extension_openbay_ebay_product->getTaxRate($product_info['tax_class_id']); + } else { + $product_info['defaults']['tax'] = 0.00; + } + + $data['products'] = $products; + + $product_info['manufacturers'] = $this->model_catalog_manufacturer->getManufacturers(); + $product_info['payments'] = $this->model_extension_openbay_ebay->getPaymentTypes(); + $product_info['store_cats'] = $this->model_extension_openbay_ebay->getSellerStoreCategories(); + + $product_info['defaults']['ebay_template'] = $this->config->get('ebay_template'); + + $product_info['defaults']['listing_duration'] = $this->config->get('ebay_duration'); + if ($product_info['defaults']['listing_duration'] == '') { + $product_info['defaults']['listing_duration'] = 'Days_30'; + } + + $data['default'] = $product_info; + } else { + $data['error_fail']['plan'] = sprintf($this->language->get('text_item_limit'), $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true)); + } + } + } else { + $data['error_fail']['plan'] = sprintf($this->language->get('text_bulk_plan_error'), $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true)); + } + + $this->document->setTitle($data['heading_title']); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + $this->document->addScript('view/javascript/openbay/js/openbay.js'); + + $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/ebay_new_bulk', $data)); + } else { + $this->load->language('extension/openbay/ebay_newbulk'); + $this->session->data['warning'] = $this->language->get('text_error_no_selection'); + $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token'])); + } + } + } + + public function verify() { + $this->load->model('extension/openbay/openbay'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + $this->load->model('catalog/product'); + $this->load->model('catalog/filter'); + + if ($this->request->server['REQUEST_METHOD'] == 'POST') { + if ($this->checkConfig() == true) { + $this->model_extension_openbay_ebay->logCategoryUsed($this->request->post['finalCat']); + + $item_id = $this->openbay->ebay->getEbayItemId($this->request->post['product_id']); + + if ($item_id == false) { + $data = $this->request->post; + + if ($data['template'] != 'None') { + $template = $this->model_extension_openbay_ebay_template->get($data['template']); + $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : ''); + } else { + $data['template_html'] = ''; + } + + // set shipping data + $data['national'] = $data['data']['national']; + $data['international'] = $data['data']['international']; + unset($data['data']); + + if (!empty($data['img_tpl'])) { + $tmp_gallery_array = array(); + $tmp_thumbnail_array = array(); + $this->load->model('tool/image'); + + foreach ($data['img_tpl'] as $k => $v) { + $tmp_gallery_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['gallery_width'], $data['gallery_height'], 'ebay'); + $tmp_thumbnail_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['thumb_width'], $data['thumb_height'], 'ebay'); + } + + $data['img_tpl'] = $tmp_gallery_array; + $data['img_tpl_thumb'] = $tmp_thumbnail_array; + } + + $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$data['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); + + $data['product_info'] = $query->row; + + $data['product_info']['product_filters'] = array(); + + $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']); + + foreach ($filters as $filter_id) { + $filter_info = $this->model_catalog_filter->getFilter($filter_id); + + if ($filter_info) { + $data['product_info']['product_filters'][] = array( + 'filter_id' => $filter_info['filter_id'], + 'group' => $filter_info['group'], + 'name' => $filter_info['name'] + ); + } + } + + if (!empty($data['product_info']['sku'])){ + $data['sku'] = $data['product_info']['sku']; + } + + $json = $this->model_extension_openbay_ebay->ebayVerifyAddItem($data, $this->request->get['options']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } else { + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => true, 'msg' => 'This item is already listed in your eBay account', 'item' => $item_id))); + } + } + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token'])); + } + } + + public function verifyBulk() { + $this->load->model('extension/openbay/openbay'); + $this->load->model('extension/openbay/ebay_profile'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + $this->load->model('catalog/filter'); + + if ($this->request->server['REQUEST_METHOD'] == 'POST') { + if ($this->checkConfig() == true) { + $post = $this->request->post; + $data = array(); + + //load all of the listing defaults and assign to correct variable names + $profile_shipping = $this->model_extension_openbay_ebay_profile->get($post['shipping_profile']); + $profile_return = $this->model_extension_openbay_ebay_profile->get($post['return_profile']); + $profile_template = $this->model_extension_openbay_ebay_profile->get($post['theme_profile']); + $profile_generic = $this->model_extension_openbay_ebay_profile->get($post['generic_profile']); + + $payments = $this->model_extension_openbay_ebay->getPaymentTypes(); + $payments_accepted = $this->config->get('ebay_payment_types'); + $product_info = $this->model_catalog_product->getProduct($post['product_id']); + + // set shipping data + $data['national'] = $profile_shipping['data']['national']; + $data['international'] = $profile_shipping['data']['international']; + + $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$post['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); + + $data['product_info'] = $query->row; + + $data['product_info']['product_filters'] = array(); + + $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']); + + foreach ($filters as $filter_id) { + $filter_info = $this->model_catalog_filter->getFilter($filter_id); + + if ($filter_info) { + $data['product_info']['product_filters'][] = array( + 'filter_id' => $filter_info['filter_id'], + 'group' => $filter_info['group'], + 'name' => $filter_info['name'] + ); + } + } + + + $data['description'] = $product_info['description']; + $data['name'] = $post['title']; + $data['sub_name'] = ''; + $data['bestoffer'] = 0; + $data['finalCat'] = $post['finalCat']; + $data['price'][0] = $post['price']; + $data['qty'][0] = (int)$post['qty']; + $data['product_id'] = (int)$post['product_id']; + + $data['feat'] = $post['feat']; + $data['featother'] = $post['featother']; + + if (!empty($product_info['sku'])){ + $data['sku'] = $product_info['sku']; + } + + if (isset($post['identifier_ean']) && !empty($post['identifier_ean'])){ + $data['identifier_ean'] = $post['identifier_ean']; + } + + if (isset($post['identifier_isbn']) && !empty($post['identifier_isbn'])){ + $data['identifier_isbn'] = $post['identifier_isbn']; + } + + if (isset($post['identifier_upc']) && !empty($post['identifier_upc'])){ + $data['identifier_upc'] = $post['identifier_upc']; + } + + $data['auction_duration'] = $post['duration']; + $data['condition'] = (isset($post['condition']) && $post['condition'] != 0 ? $post['condition'] : ''); + $data['auction_type'] = 'FixedPriceItem'; + $data['catalog_epid'] = (isset($post['catalog_epid']) && $post['catalog_epid'] != 0 ? $post['catalog_epid'] : ''); + $data['identifier_upc'] = (isset($post['identifier_upc']) && $post['identifier_upc'] != '' ? $post['identifier_upc'] : ''); + $data['identifier_isbn'] = (isset($post['identifier_isbn']) && $post['identifier_isbn'] != '' ? $post['identifier_isbn'] : ''); + $data['identifier_ean'] = (isset($post['identifier_ean']) && $post['identifier_ean'] != '' ? $post['identifier_ean'] : ''); + + $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate'); + $data['paypal_email'] = $this->config->get('ebay_payment_paypal_address'); + $data['payment_instruction'] = $this->config->get('ebay_payment_instruction'); + + if (isset($profile_return['data']['returns_accepted'])) { + $data['returns_accepted'] = $profile_return['data']['returns_accepted']; + } + if (isset($profile_return['data']['returns_policy'])) { + $data['return_policy'] = $profile_return['data']['returns_policy']; + } + if (isset($profile_return['data']['returns_option'])) { + $data['returns_option'] = $profile_return['data']['returns_option']; + } + if (isset($profile_return['data']['returns_within'])) { + $data['returns_within'] = $profile_return['data']['returns_within']; + } + if (isset($profile_return['data']['returns_shipping'])) { + $data['returns_shipping'] = $profile_return['data']['returns_shipping']; + } + if (isset($profile_return['data']['returns_restocking_fee'])) { + $data['returns_restocking_fee'] = $profile_return['data']['returns_restocking_fee']; + } + + $data['location'] = $profile_shipping['data']['location']; + $data['postcode'] = $profile_shipping['data']['postcode']; + $data['dispatch_time'] = $profile_shipping['data']['dispatch_time']; + + if (isset($profile_shipping['data']['country'])) { + $data['country'] = $profile_shipping['data']['country']; + } + + if (isset($profile_shipping['data']['eligible_for_pickup_dropoff'])) { + $data['eligible_for_pickup_dropoff'] = $profile_shipping['data']['eligible_for_pickup_dropoff']; + } + + if (isset($profile_shipping['data']['eligible_for_pickup_instore'])) { + $data['eligible_for_pickup_instore'] = $profile_shipping['data']['eligible_for_pickup_instore']; + } + + if (isset($profile_shipping['data']['global_shipping'])) { + $data['global_shipping'] = $profile_shipping['data']['global_shipping']; + } + + if (isset($profile_shipping['data']['promotional_shipping_discount'])) { + $data['promotional_shipping_discount'] = $profile_shipping['data']['promotional_shipping_discount']; + } + + if (isset($profile_shipping['data']['promotional_shipping_discount_international'])) { + $data['promotional_shipping_discount_international'] = $profile_shipping['data']['promotional_shipping_discount_international']; + } + + $data['get_it_fast'] = (isset($profile_shipping['data']['get_it_fast']) ? $profile_shipping['data']['get_it_fast'] : 0); + + if (isset($profile_template['data']['ebay_template_id'])) { + $template = $this->model_extension_openbay_ebay_template->get($profile_template['data']['ebay_template_id']); + $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : ''); + $data['template'] = $profile_template['data']['ebay_template_id']; + } else { + $data['template_html'] = ''; + $data['template'] = ''; + } + + $data['gallery_plus'] = $profile_template['data']['ebay_gallery_plus']; + $data['gallery_super'] = $profile_template['data']['ebay_supersize']; + + $data['private_listing'] = $profile_generic['data']['private_listing']; + + //product attributes - this is just a direct pass through used with the template tag + $data['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($post['product_id']))); + + $data['payments'] = array(); + foreach($payments as $payment) { + if ($payments_accepted[$payment['ebay_name']] == 1) { + $data['payments'][$payment['ebay_name']] = 1; + } + } + + $data['main_image'] = 0; + $data['img'] = array(); + + $product_images = $this->model_catalog_product->getProductImages($post['product_id']); + + $product_info['product_images'] = array(); + + if (!empty($product_info['image'])) { + $data['img'][] = $product_info['image']; + } + + if (isset($profile_template['data']['ebay_img_ebay']) && $profile_template['data']['ebay_img_ebay'] == 1) { + foreach ($product_images as $product_image) { + if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) { + $data['img'][] = $product_image['image']; + } + } + } + + if (isset($profile_template['data']['ebay_img_template']) && $profile_template['data']['ebay_img_template'] == 1) { + $tmp_gallery_array = array(); + $tmp_thumbnail_array = array(); + + //if the user has not set the exclude default image, add it to the array for theme images. + $key_offset = 0; + if (!isset($profile_template['data']['default_img_exclude']) || $profile_template['data']['default_img_exclude'] != 1) { + $tmp_gallery_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay'); + $tmp_thumbnail_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay'); + $key_offset = 1; + } + + //loop through the product images and add them. + foreach ($product_images as $k => $v) { + $tmp_gallery_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay'); + $tmp_thumbnail_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay'); + } + + $data['img_tpl'] = $tmp_gallery_array; + $data['img_tpl_thumb'] = $tmp_thumbnail_array; + } + + $weight_parts = explode('.', $product_info['weight']); + + // package size and weights + $data['package']['depth'] = $product_info['height']; + $data['package']['irregular'] = 0; + $data['package']['length'] = $product_info['length']; + $data['package']['unit'] = $this->config->get('ebay_measurement'); + $data['package']['weight_major'] = (int)$weight_parts[0]; + $data['package']['weight_minor'] = (int)substr($weight_parts[1], 0, 3); + $data['package']['width'] = $product_info['width']; + + $package_types = $this->openbay->ebay->getSetting('package_type'); + + foreach ($package_types as $package_type) { + if ($package_type['default'] == 1) { + $data['package']['package'] = $package_type['code']; + } + } + + $data = array_merge($data, $profile_shipping['data']); + + $verify_response = $this->model_extension_openbay_ebay->ebayVerifyAddItem($data, 'no'); + + $json = array( + 'errors' => $verify_response['data']['Errors'], + 'fees' => $verify_response['data']['Fees'], + 'itemid' => (string)$verify_response['data']['ItemID'], + 'preview' => (string)$verify_response['data']['link'], + 'i' => $this->request->get['i'], + 'ack' => (string)$verify_response['data']['Ack'], + ); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token'])); + } + } + + public function listItem() { + $this->load->model('extension/openbay/openbay'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + $this->load->model('catalog/product'); + $this->load->model('catalog/filter'); + + if ($this->checkConfig() == true && $this->request->server['REQUEST_METHOD'] == 'POST') { + $data = $this->request->post; + + if ($data['template'] != 'None') { + $template = $this->model_extension_openbay_ebay_template->get($data['template']); + $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : ''); + } else { + $data['template_html'] = ''; + } + + // set shipping data + $data['national'] = $data['data']['national']; + $data['international'] = $data['data']['international']; + unset($data['data']); + + if (!empty($data['img_tpl'])) { + $tmp_gallery_array = array(); + $tmp_thumbnail_array = array(); + $this->load->model('tool/image'); + + foreach ($data['img_tpl'] as $k => $v) { + $tmp_gallery_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['gallery_width'], $data['gallery_height'], 'ebay'); + $tmp_thumbnail_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['thumb_width'], $data['thumb_height'], 'ebay'); + } + + $data['img_tpl'] = $tmp_gallery_array; + $data['img_tpl_thumb'] = $tmp_thumbnail_array; + } + + $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$data['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); + + $data['product_info'] = $query->row; + + $data['product_info']['product_filters'] = array(); + + $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']); + + foreach ($filters as $filter_id) { + $filter_info = $this->model_catalog_filter->getFilter($filter_id); + + if ($filter_info) { + $data['product_info']['product_filters'][] = array( + 'filter_id' => $filter_info['filter_id'], + 'group' => $filter_info['group'], + 'name' => $filter_info['name'] + ); + } + } + + if (!empty($data['product_info']['sku'])){ + $data['sku'] = $data['product_info']['sku']; + } + + $json = $this->model_extension_openbay_ebay->ebayAddItem($data, $this->request->get['options']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token'])); + } + } + + public function listItemBulk() { + $this->load->model('extension/openbay/openbay'); + $this->load->model('extension/openbay/ebay_profile'); + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + $this->load->model('catalog/filter'); + + if ($this->request->server['REQUEST_METHOD'] == 'POST') { + if ($this->checkConfig() == true) { + $post = $this->request->post; + $data = array(); + + //load all of the listing defaults and assign to correct variable names + $profile_shipping = $this->model_extension_openbay_ebay_profile->get($post['shipping_profile']); + $profile_return = $this->model_extension_openbay_ebay_profile->get($post['return_profile']); + $profile_template = $this->model_extension_openbay_ebay_profile->get($post['theme_profile']); + $profile_generic = $this->model_extension_openbay_ebay_profile->get($post['generic_profile']); + $payments = $this->model_extension_openbay_ebay->getPaymentTypes(); + $payments_accepted = $this->config->get('ebay_payment_types'); + $product_info = $this->model_catalog_product->getProduct($post['product_id']); + + // set shipping data + $data['national'] = $profile_shipping['data']['national']; + $data['international'] = $profile_shipping['data']['international']; + + $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$post['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"); + + $data['product_info'] = $query->row; + + $data['product_info']['product_filters'] = array(); + + $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']); + + foreach ($filters as $filter_id) { + $filter_info = $this->model_catalog_filter->getFilter($filter_id); + + if ($filter_info) { + $data['product_info']['product_filters'][] = array( + 'filter_id' => $filter_info['filter_id'], + 'group' => $filter_info['group'], + 'name' => $filter_info['name'] + ); + } + } + + $data['description'] = $product_info['description']; + $data['name'] = $post['title']; + $data['sub_name'] = ''; + $data['bestoffer'] = 0; + $data['finalCat'] = $post['finalCat']; + $data['price'][0] = $post['price']; + $data['qty'][0] = $post['qty']; + $data['product_id'] = $post['product_id']; + + $data['feat'] = $post['feat']; + $data['featother'] = $post['featother']; + + if (!empty($product_info['sku'])){ + $data['sku'] = $product_info['sku']; + } + + if (isset($post['identifier_ean']) && !empty($post['identifier_ean'])){ + $data['identifier_ean'] = $post['identifier_ean']; + } + + if (isset($post['identifier_isbn']) && !empty($post['identifier_isbn'])){ + $data['identifier_isbn'] = $post['identifier_isbn']; + } + + if (isset($post['identifier_upc']) && !empty($post['identifier_upc'])){ + $data['identifier_upc'] = $post['identifier_upc']; + } + + $data['auction_duration'] = $post['duration']; + $data['condition'] = (isset($post['condition']) && $post['condition'] != 0 ? $post['condition'] : ''); + $data['auction_type'] = 'FixedPriceItem'; + $data['catalog_epid'] = (isset($post['catalog_epid']) && $post['catalog_epid'] != 0 ? $post['catalog_epid'] : ''); + $data['identifier_upc'] = (isset($post['identifier_upc']) && $post['identifier_upc'] != '' ? $post['identifier_upc'] : ''); + $data['identifier_isbn'] = (isset($post['identifier_isbn']) && $post['identifier_isbn'] != '' ? $post['identifier_isbn'] : ''); + $data['identifier_ean'] = (isset($post['identifier_ean']) && $post['identifier_ean'] != '' ? $post['identifier_ean'] : ''); + + $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate'); + $data['paypal_email'] = $this->config->get('ebay_payment_paypal_address'); + $data['payment_instruction'] = $this->config->get('ebay_payment_instruction'); + + if (isset($profile_return['data']['returns_accepted'])) { + $data['returns_accepted'] = $profile_return['data']['returns_accepted']; + } + if (isset($profile_return['data']['returns_policy'])) { + $data['return_policy'] = $profile_return['data']['returns_policy']; + } + if (isset($profile_return['data']['returns_option'])) { + $data['returns_option'] = $profile_return['data']['returns_option']; + } + if (isset($profile_return['data']['returns_within'])) { + $data['returns_within'] = $profile_return['data']['returns_within']; + } + if (isset($profile_return['data']['returns_shipping'])) { + $data['returns_shipping'] = $profile_return['data']['returns_shipping']; + } + if (isset($profile_return['data']['returns_restocking_fee'])) { + $data['returns_restocking_fee'] = $profile_return['data']['returns_restocking_fee']; + } + + $data['location'] = $profile_shipping['data']['location']; + $data['postcode'] = $profile_shipping['data']['postcode']; + $data['dispatch_time'] = $profile_shipping['data']['dispatch_time']; + + if (isset($profile_shipping['data']['country'])) { + $data['country'] = $profile_shipping['data']['country']; + } + + if (isset($profile_shipping['data']['eligible_for_pickup_dropoff'])) { + $data['eligible_for_pickup_dropoff'] = $profile_shipping['data']['eligible_for_pickup_dropoff']; + } + + if (isset($profile_shipping['data']['eligible_for_pickup_instore'])) { + $data['eligible_for_pickup_instore'] = $profile_shipping['data']['eligible_for_pickup_instore']; + } + + if (isset($profile_shipping['data']['global_shipping'])) { + $data['global_shipping'] = $profile_shipping['data']['global_shipping']; + } + + if (isset($profile_shipping['data']['promotional_shipping_discount'])) { + $data['promotional_shipping_discount'] = $profile_shipping['data']['promotional_shipping_discount']; + } + + if (isset($profile_shipping['data']['promotional_shipping_discount_international'])) { + $data['promotional_shipping_discount_international'] = $profile_shipping['data']['promotional_shipping_discount_international']; + } + + $data['get_it_fast'] = (isset($profile_shipping['data']['get_it_fast']) ? $profile_shipping['data']['get_it_fast'] : 0); + + if (isset($profile_template['data']['ebay_template_id'])) { + $template = $this->model_extension_openbay_ebay_template->get($profile_template['data']['ebay_template_id']); + $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : ''); + $data['template'] = $profile_template['data']['ebay_template_id']; + } else { + $data['template_html'] = ''; + $data['template'] = ''; + } + + $data['gallery_plus'] = $profile_template['data']['ebay_gallery_plus']; + $data['gallery_super'] = $profile_template['data']['ebay_supersize']; + + $data['private_listing'] = $profile_generic['data']['private_listing']; + + //product attributes - this is just a direct pass through used with the template tag + $data['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($post['product_id']))); + + $data['payments'] = array(); + foreach($payments as $payment) { + if ($payments_accepted[$payment['ebay_name']] == 1) { + $data['payments'][$payment['ebay_name']] = 1; + } + } + + $data['main_image'] = 0; + $data['img'] = array(); + + $product_images = $this->model_catalog_product->getProductImages($post['product_id']); + + $product_info['product_images'] = array(); + + if (!empty($product_info['image'])) { + $data['img'][] = $product_info['image']; + } + + if (isset($profile_template['data']['ebay_img_ebay']) && $profile_template['data']['ebay_img_ebay'] == 1) { + foreach ($product_images as $product_image) { + if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) { + $data['img'][] = $product_image['image']; + } + } + } + + if (isset($profile_template['data']['ebay_img_template']) && $profile_template['data']['ebay_img_template'] == 1) { + $tmp_gallery_array = array(); + $tmp_thumbnail_array = array(); + + //if the user has not set the exclude default image, add it to the array for theme images. + $key_offset = 0; + if (!isset($profile_template['data']['default_img_exclude']) || $profile_template['data']['default_img_exclude'] != 1) { + $tmp_gallery_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay'); + $tmp_thumbnail_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay'); + $key_offset = 1; + } + + //loop through the product images and add them. + foreach ($product_images as $k => $v) { + $tmp_gallery_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay'); + $tmp_thumbnail_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay'); + } + + $data['img_tpl'] = $tmp_gallery_array; + $data['img_tpl_thumb'] = $tmp_thumbnail_array; + } + + $weight_parts = explode('.', $product_info['weight']); + + // package size and weights + $data['package']['depth'] = $product_info['height']; + $data['package']['irregular'] = 0; + $data['package']['length'] = $product_info['length']; + $data['package']['unit'] = $this->config->get('ebay_measurement'); + $data['package']['weight_major'] = (int)$weight_parts[0]; + $data['package']['weight_minor'] = (int)substr($weight_parts[1], 0, 3); + $data['package']['width'] = $product_info['width']; + + $package_types = $this->openbay->ebay->getSetting('package_type'); + + foreach ($package_types as $package_type) { + if ($package_type['default'] == 1) { + $data['package']['package'] = $package_type['code']; + } + } + + $data = array_merge($data, $profile_shipping['data']); + + $verify_response = $this->model_extension_openbay_ebay->ebayAddItem($data, 'no'); + + $json = array( + 'errors' => $verify_response['data']['Errors'], + 'fees' => $verify_response['data']['Fees'], + 'itemid' => (string)$verify_response['data']['ItemID'], + 'preview' => (string)$verify_response['data']['link'], + 'i' => $this->request->get['i'], + 'ack' => (string)$verify_response['data']['Ack'], + ); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + } else { + $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token'])); + } + } + + public function repairLinks() { + $this->load->model('extension/openbay/ebay_product'); + + $this->model_extension_openbay_ebay_product->repairLinks(); + + $json = array('msg' => 'Links repaired'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function deleteAllLocks() { + $this->openbay->ebay->log('deleteAllLocks() - Deleting all locks'); + $this->db->query("DELETE FROM `" . DB_PREFIX . "ebay_order_lock`"); + + $json = array('msg' => 'Locks deleted'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function endItem() { + $json = $this->openbay->ebay->endItem($this->request->get['item_id']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getPartsCompatibilityOptions() { + $this->load->model('extension/openbay/ebay_product'); + + $json = $this->model_extension_openbay_ebay_product->getPartsCompatibilityOptions($this->request->get['category_id']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getPartsCompatibilityValues() { + $this->load->model('extension/openbay/ebay_product'); + + $property_filter = array(); + + if (isset($this->request->post['filters']) && !empty($this->request->post['filters'])) { + $post_filters = $this->request->post['filters']; + + foreach ($post_filters as $filter) { + $property_filter[] = array( + 'property_filter_name' => $filter['property_filter_name'], + 'property_filter_value' => $filter['property_filter_value'], + ); + } + } + + $filters = array( + 'category_id' => $this->request->get['category_id'], + 'property_name' => $this->request->get['option_name'], + 'property_filter' => $property_filter, + ); + + $json = $this->model_extension_openbay_ebay_product->getPartsCompatibilityValues($filters); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function getItemRecommendations() { + $this->load->language('extension/openbay/ebay_edit'); + $this->load->model('extension/openbay/ebay_product'); + + if (!isset($this->request->get['item_id']) || empty($this->request->get['item_id'])) { + $json = array( + 'error' => true, + 'msg' => $this->language->get('error_no_item_id'), + ); + } else { + $filters = array(); + + $filters['item_id'] = $this->request->get['item_id']; + + if (isset($this->request->get['recommendation_type'])) { + $filters['recommendation_type'] = $this->request->get['recommendation_type']; + } + + $json = $this->model_extension_openbay_ebay_product->getItemRecommendations($filters); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } +} diff --git a/public/admin/controller/extension/openbay/ebay_profile.php b/public/admin/controller/extension/openbay/ebay_profile.php new file mode 100644 index 0000000..082ddb2 --- /dev/null +++ b/public/admin/controller/extension/openbay/ebay_profile.php @@ -0,0 +1,364 @@ +<?php +class ControllerExtensionOpenbayEbayProfile extends Controller { + private $error = array(); + + public function index() { + $this->load->language('extension/openbay/ebay_profile'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/ebay_profile'); + + $this->document->setTitle($data['heading_title']); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $data['add'] = $this->url->link('extension/openbay/ebay_profile/add', 'user_token=' . $this->session->data['user_token'], true); + $data['types'] = $this->model_extension_openbay_ebay_profile->getTypes(); + $data['profiles'] = $this->model_extension_openbay_ebay_profile->getAll(); + $data['user_token'] = $this->session->data['user_token']; + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $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/ebay_profile_list', $data)); + + } + + public function add() { + $this->load->language('extension/openbay/ebay_profile'); + + $data = $this->language->all(); + + $this->document->setTitle($data['heading_title']); + + $this->load->model('extension/openbay/ebay_profile'); + + if (!isset($this->request->post['step1'])) { + if ($this->request->post && $this->profileValidate()) { + $this->session->data['success'] = $data['text_added']; + + $this->model_extension_openbay_ebay_profile->add($this->request->post); + + $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true)); + } + } + + $this->form($data); + } + + public function delete() { + $this->load->model('extension/openbay/ebay_profile'); + + if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_profile')) { + $this->error['warning'] = $this->language->get('error_permission'); + } else { + if (isset($this->request->get['ebay_profile_id'])) { + $this->model_extension_openbay_ebay_profile->delete($this->request->get['ebay_profile_id']); + } + } + + $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true)); + } + + public function edit() { + $this->load->language('extension/openbay/ebay_profile'); + + $data = $this->language->all(); + + $this->document->setTitle($data['heading_title']); + + $this->load->model('extension/openbay/ebay_profile'); + + if ($this->request->post && $this->profileValidate()) { + $this->session->data['success'] = $data['text_updated']; + + $this->model_extension_openbay_ebay_profile->edit($this->request->post['ebay_profile_id'], $this->request->post); + + $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true)); + } + + $this->form($data); + } + + public function form($data) { + $this->load->model('extension/openbay/ebay'); + $this->load->model('extension/openbay/ebay_template'); + + $data['user_token'] = $this->session->data['user_token']; + $data['shipping_international_zones'] = $this->model_extension_openbay_ebay->getShippingLocations(); + $data['templates'] = $this->model_extension_openbay_ebay_template->getAll(); + $data['types'] = $this->model_extension_openbay_ebay_profile->getTypes(); + + $setting = array(); + $setting['returns'] = $this->openbay->ebay->getSetting('returns'); + $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max'); + $setting['countries'] = $this->openbay->ebay->getSetting('countries'); + $setting['shipping_types'] = $this->openbay->ebay->getSetting('shipping_types'); + $setting['listing_restrictions'] = $this->openbay->ebay->getSetting('listing_restrictions'); + + if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){ + $this->session->data['warning'] = $this->language->get('error_missing_settings'); + $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true)); + } + + if (is_array($setting['dispatch_times'])) { + ksort($setting['dispatch_times']); + } + if (is_array($setting['countries'])) { + ksort($setting['countries']); + } + + $data['setting'] = $setting; + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + $profile_info = array(); + if (isset($this->request->get['ebay_profile_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { + $profile_info = $this->model_extension_openbay_ebay_profile->get($this->request->get['ebay_profile_id']); + $data['text_manage'] = $this->language->get('text_edit'); + $data['action'] = $this->url->link('extension/openbay/ebay_profile/edit', 'user_token=' . $this->session->data['user_token'], true); + } else { + $data['action'] = $this->url->link('extension/openbay/ebay_profile/add', 'user_token=' . $this->session->data['user_token'], true); + $data['text_manage'] = $this->language->get('text_add'); + } + + $data['cancel'] = $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true); + + if (isset($this->request->post['type'])) { + $type = $this->request->post['type']; + } else { + $type = $profile_info['type']; + } + + if (!array_key_exists($type, $data['types'])) { + $this->session->data['error'] = $data['error_no_template']; + + $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true)); + } + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title') + ); + + if (isset($this->request->post['default'])) { + $data['default'] = $this->request->post['default']; + } elseif (!empty($profile_info)) { + $data['default'] = $profile_info['default']; + } else { + $data['default'] = 0; + } + + if (isset($this->request->post['name'])) { + $data['name'] = $this->request->post['name']; + } elseif (!empty($profile_info)) { + $data['name'] = $profile_info['name']; + } else { + $data['name'] = ''; + } + + if (isset($this->request->post['description'])) { + $data['description'] = $this->request->post['description']; + } elseif (!empty($profile_info)) { + $data['description'] = $profile_info['description']; + } else { + $data['description'] = ''; + } + + if (isset($this->request->post['type'])) { + $data['type'] = $this->request->post['type']; + } else { + $data['type'] = $profile_info['type']; + } + + if (isset($this->request->get['ebay_profile_id'])) { + $data['ebay_profile_id'] = $this->request->get['ebay_profile_id']; + } else { + $data['ebay_profile_id'] = ''; + } + + if (isset($this->request->post['data'])) { + $data['data'] = $this->request->post['data']; + } elseif (!empty($profile_info)) { + $data['data'] = $profile_info['data']; + } else { + $data['data'] = array(); + } + + if ($type == 0) { + $data['zones'] = $this->model_extension_openbay_ebay->getShippingLocations(); + + $data['data']['national']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'calculated'); + $data['data']['national']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'flat'); + $data['data']['international']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'calculated'); + $data['data']['international']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'flat'); + + $data['data']['national']['calculated']['count'] = isset($data['data']['national']['calculated']['service_id']) ? max(array_keys($data['data']['national']['calculated']['service_id']))+1 : 0; + $data['data']['national']['flat']['count'] = isset($data['data']['national']['flat']['service_id']) ? max(array_keys($data['data']['national']['flat']['service_id']))+1 : 0; + $data['data']['international']['calculated']['count'] = isset($data['data']['international']['calculated']['service_id']) ? max(array_keys($data['data']['international']['calculated']['service_id']))+1 : 0; + $data['data']['international']['flat']['count'] = isset($data['data']['international']['flat']['service_id']) ? max(array_keys($data['data']['international']['flat']['service_id']))+1 : 0; + + $payment_types = $this->model_extension_openbay_ebay->getPaymentTypes(); + $data['cod_surcharge'] = 0; + + foreach($payment_types as $payment) { + if ($payment['ebay_name'] == 'COD') { + $data['cod_surcharge'] = 1; + } + } + + if (!isset($data['data']['national']['shipping_type'])) { + $data['data']['national']['shipping_type'] = 'flat'; + } + + if (!isset($data['data']['international']['shipping_type'])) { + $data['data']['international']['shipping_type'] = 'flat'; + } + + $data['html_national_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_flat', $data); + $data['html_international_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_flat', $data); + $data['html_national_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_calculated', $data); + $data['html_international_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_calculated', $data); + } + + $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($data['types'][$type]['template'], $data)); + } + + public function get() { + $this->load->model('extension/openbay/ebay_profile'); + $this->load->model('extension/openbay/ebay'); + $this->load->language('extension/openbay/ebay_profile'); + + $profile_info = $this->model_extension_openbay_ebay_profile->get($this->request->get['ebay_profile_id']); + $data = array(); + + if ($profile_info['type'] == 0) { + $data['data'] = $profile_info['data']; + $data['data']['national']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'calculated'); + $data['data']['international']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'calculated'); + $data['data']['national']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'flat'); + $data['data']['international']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'flat'); + + $data['data']['national']['calculated']['count'] = isset($data['data']['national']['calculated']['service_id']) ? max(array_keys($data['data']['national']['calculated']['service_id']))+1 : 0; + $data['data']['national']['flat']['count'] = isset($data['data']['national']['flat']['service_id']) ? max(array_keys($data['data']['national']['flat']['service_id']))+1 : 0; + $data['data']['international']['calculated']['count'] = isset($data['data']['international']['calculated']['service_id']) ? max(array_keys($data['data']['international']['calculated']['service_id']))+1 : 0; + $data['data']['international']['flat']['count'] = isset($data['data']['international']['flat']['service_id']) ? max(array_keys($data['data']['international']['flat']['service_id']))+1 : 0; + + $data['zones'] = $this->model_extension_openbay_ebay->getShippingLocations(); + + $data['text_shipping_service'] = $this->language->get('text_shipping_service'); + $data['text_shipping_first'] = $this->language->get('text_shipping_first'); + $data['button_delete'] = $this->language->get('button_delete'); + $data['text_shipping_zones'] = $this->language->get('text_shipping_zones'); + $data['text_shipping_worldwide'] = $this->language->get('text_shipping_worldwide'); + $data['text_shipping_add'] = $this->language->get('text_shipping_add'); + $data['text_cod_surcharge'] = $this->language->get('text_cod_surcharge'); + + $payment_types = $this->model_extension_openbay_ebay->getPaymentTypes(); + $data['cod_surcharge'] = 0; + + if (!empty($payment_types)) { + foreach($payment_types as $payment) { + if ($payment['ebay_name'] == 'COD') { + $data['cod_surcharge'] = 1; + } + } + } + $return['national']['type'] = $data['data']['national']['shipping_type']; + $return['international']['type'] = $data['data']['international']['shipping_type']; + + $return['national_flat_count'] = (int)$data['data']['national']['flat']['count']; + $return['national_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_flat', $data); + + $return['international_flat_count'] = (int)$data['data']['international']['flat']['count']; + $return['international_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_flat', $data); + + $return['national_calculated_count'] = (int)$data['data']['national']['calculated']['count']; + $return['national_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_calculated', $data); + + $return['international_calculated_count'] = (int)$data['data']['international']['flat']['count']; + $return['international_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_calculated', $data); + + $profile_info['html'] = $return; + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($profile_info)); + } + + private function profileValidate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_profile')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if ($this->request->post['name'] == '') { + $this->error['name'] = $this->language->get('error_name'); + } + + return !$this->error; + } +} diff --git a/public/admin/controller/extension/openbay/ebay_template.php b/public/admin/controller/extension/openbay/ebay_template.php new file mode 100644 index 0000000..131ac14 --- /dev/null +++ b/public/admin/controller/extension/openbay/ebay_template.php @@ -0,0 +1,216 @@ +<?php +class ControllerExtensionOpenbayEbayTemplate extends Controller { + private $error = array(); + + public function listAll() { + $this->load->language('extension/openbay/ebay_template'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/ebay_template'); + + $this->document->setTitle($data['heading_title']); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $data['add'] = $this->url->link('extension/openbay/ebay_template/add', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true); + + $data['templates'] = $this->model_extension_openbay_ebay_template->getAll(); + $data['user_token'] = $this->session->data['user_token']; + + $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/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_ebay'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $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/ebay_template_list', $data)); + } + + public function add() { + $this->load->language('extension/openbay/ebay_template'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/ebay_template'); + + $data['page_title'] = $data['heading_title']; + $data['btn_save'] = $this->url->link('extension/openbay/ebay_template/add', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true); + + if ($this->request->post && $this->templateValidate()) { + $this->session->data['success'] = $data['text_added']; + + $this->model_extension_openbay_ebay_template->add($this->request->post); + + $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true)); + } + + $this->templateForm($data); + } + + public function delete() { + $this->load->language('extension/openbay/ebay_template'); + $this->load->model('extension/openbay/ebay_template'); + + if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_template')) { + $this->error['warning'] = $this->language->get('error_permission'); + } else { + if (isset($this->request->get['template_id'])) { + $this->model_extension_openbay_ebay_template->delete($this->request->get['template_id']); + + $this->session->data['success'] = $this->language->get('text_deleted'); + } + } + $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true)); + } + + public function edit() { + $this->load->language('extension/openbay/ebay_template'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/ebay_template'); + + $this->document->setTitle($data['heading_title']); + + $data['btn_save'] = $this->url->link('extension/openbay/ebay_template/edit', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true); + + if ($this->request->post && $this->templateValidate()) { + + $this->session->data['success'] = $data['text_updated']; + + $this->model_extension_openbay_ebay_template->edit($this->request->post['template_id'], $this->request->post); + + $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true)); + } + + $this->templateForm($data); + } + + public function templateForm($data) { + $this->load->model('extension/openbay/ebay'); + + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->request->get['template_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { + $template_info = $this->model_extension_openbay_ebay_template->get($this->request->get['template_id']); + $data['text_manage'] = $this->language->get('text_edit'); + } else { + $data['text_manage'] = $this->language->get('text_add'); + } + + $this->document->setTitle($data['heading_title']); + + $this->document->addStyle('view/javascript/codemirror/lib/codemirror.css'); + $this->document->addStyle('view/javascript/codemirror/theme/monokai.css'); + $this->document->addScript('view/javascript/codemirror/lib/codemirror.js'); + $this->document->addScript('view/javascript/codemirror/lib/formatting.js'); + $this->document->addScript('view/javascript/codemirror/lib/xml.js'); + + $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' => 'OpenBay Pro', + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true), + 'text' => 'eBay', + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true), + 'text' => 'Profiles', + ); + + if (isset($this->request->post['name'])) { + $data['name'] = $this->request->post['name']; + } elseif (!empty($template_info)) { + $data['name'] = $template_info['name']; + } else { + $data['name'] = ''; + } + + if (isset($this->request->post['html'])) { + $data['html'] = $this->request->post['html']; + } elseif (!empty($template_info)) { + $data['html'] = $template_info['html']; + } else { + $data['html'] = ''; + } + + if (isset($this->request->get['template_id'])) { + $data['template_id'] = $this->request->get['template_id']; + } else { + $data['template_id'] = ''; + } + + $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/ebay_template_form', $data)); + } + + private function templateValidate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_template')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if ($this->request->post['name'] == '') { + $this->error['warning'] = $this->language->get('error_name'); + } + + return !$this->error; + } +} diff --git a/public/admin/controller/extension/openbay/etsy.php b/public/admin/controller/extension/openbay/etsy.php new file mode 100644 index 0000000..125dae6 --- /dev/null +++ b/public/admin/controller/extension/openbay/etsy.php @@ -0,0 +1,233 @@ +<?php +class ControllerExtensionOpenbayEtsy extends Controller { + public function install() { + $this->load->language('extension/openbay/etsy'); + $this->load->model('extension/openbay/etsy'); + $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/etsy_product'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_product'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/etsy_shipping'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_shipping'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/etsy_shop'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_shop'); + + $this->model_extension_openbay_etsy->install(); + } + + public function uninstall() { + $this->load->model('extension/openbay/etsy'); + $this->load->model('setting/setting'); + $this->load->model('setting/extension'); + + $this->model_extension_openbay_etsy->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/etsy'); + + $data = $this->language->all(); + + $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/etsy', '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'] = ''; + } + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + $data['validation'] = $this->openbay->etsy->validate(); + $data['links_settings'] = $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['links_products'] = $this->url->link('extension/openbay/etsy_product/links', 'user_token=' . $this->session->data['user_token'], true); + $data['links_listings'] = $this->url->link('extension/openbay/etsy_product/listings', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/etsy/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=etsy'; + + $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/etsy', $data)); + } + + public function settings() { + $this->load->model('setting/setting'); + $this->load->model('extension/openbay/etsy'); + $this->load->model('localisation/order_status'); + + $this->load->language('extension/openbay/etsy_settings'); + + $data = $this->language->all(); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) { + $this->model_setting_setting->editSetting('etsy', $this->request->post); + + $this->openbay->etsy->resetConfig($this->request->post['etsy_token'], $this->request->post['etsy_encryption_key']); + + $account_info = $this->model_extension_openbay_etsy->verifyAccount(); + + if (isset($account_info['header_code']) && $account_info['header_code'] == 200) { + $this->openbay->etsy->settingsUpdate(); + + $this->session->data['success'] = $this->language->get('text_success'); + } else { + $this->session->data['error'] = $this->language->get('error_account_info'); + } + + $this->response->redirect($this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true)); + } + + $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/etsy', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_etsy'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['action'] = $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true); + + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->request->post['etsy_status'])) { + $data['etsy_status'] = $this->request->post['etsy_status']; + } else { + $data['etsy_status'] = $this->config->get('etsy_status'); + } + + if (isset($this->request->post['etsy_token'])) { + $data['etsy_token'] = $this->request->post['etsy_token']; + } else { + $data['etsy_token'] = $this->config->get('etsy_token'); + } + + if (isset($this->request->post['etsy_encryption_key'])) { + $data['etsy_encryption_key'] = $this->request->post['etsy_encryption_key']; + } else { + $data['etsy_encryption_key'] = $this->config->get('etsy_encryption_key'); + } + + if (isset($this->request->post['etsy_encryption_iv'])) { + $data['etsy_encryption_iv'] = $this->request->post['etsy_encryption_iv']; + } else { + $data['etsy_encryption_iv'] = $this->config->get('etsy_encryption_iv'); + } + + if (isset($this->request->post['etsy_address_format'])) { + $data['etsy_address_format'] = $this->request->post['etsy_address_format']; + } else { + $data['etsy_address_format'] = $this->config->get('etsy_address_format'); + } + + if (isset($this->request->post['etsy_order_status_new'])) { + $data['etsy_order_status_new'] = $this->request->post['etsy_order_status_new']; + } else { + $data['etsy_order_status_new'] = $this->config->get('etsy_order_status_new'); + } + + if (isset($this->request->post['etsy_order_status_paid'])) { + $data['etsy_order_status_paid'] = $this->request->post['etsy_order_status_paid']; + } else { + $data['etsy_order_status_paid'] = $this->config->get('etsy_order_status_paid'); + } + + if (isset($this->request->post['etsy_order_status_shipped'])) { + $data['etsy_order_status_shipped'] = $this->request->post['etsy_order_status_shipped']; + } else { + $data['etsy_order_status_shipped'] = $this->config->get('etsy_order_status_shipped'); + } + + if (isset($this->request->post['etsy_logging'])) { + $data['etsy_logging'] = $this->request->post['etsy_logging']; + } else { + $data['etsy_logging'] = $this->config->get('etsy_logging'); + } + + $data['api_server'] = $this->openbay->etsy->getServer(); + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + $data['account_info'] = $this->model_extension_openbay_etsy->verifyAccount(); + $data['link_signup'] = 'https://account.openbaypro.com/etsy/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=etsy'; + + $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/etsy_settings', $data)); + } + + public function settingsUpdate() { + $this->openbay->etsy->settingsUpdate(); + + $response = array('header_code' => 200); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + public function getOrders() { + $response = $this->openbay->etsy->call('v1/etsy/order/get/all/', 'GET'); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + protected function validate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/etsy')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + return !$this->error; + } +} diff --git a/public/admin/controller/extension/openbay/etsy_product.php b/public/admin/controller/extension/openbay/etsy_product.php new file mode 100644 index 0000000..c1076da --- /dev/null +++ b/public/admin/controller/extension/openbay/etsy_product.php @@ -0,0 +1,761 @@ +<?php +class ControllerExtensionOpenbayEtsyProduct extends Controller { + private $error; + + public function create() { + $this->load->language('extension/openbay/etsy_create'); + + $data = $this->language->all(); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $this->load->model('catalog/product'); + $this->load->model('tool/image'); + + $data['action'] = $this->url->link('extension/openbay/etsy_product/create', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + + $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/etsy', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_etsy'), + ); + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/etsy_product/create', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); + + $this->load->model('tool/image'); + + if (!empty($product_info) && is_file(DIR_IMAGE . $product_info['image'])) { + $product_info['image_url'] = $this->model_tool_image->resize($product_info['image'], 800, 800); + $product_info['thumb'] = $this->model_tool_image->resize($product_info['image'], 100, 100); + } else { + $product_info['image_url'] = ''; + $product_info['thumb'] = $this->model_tool_image->resize('no_image.png', 100, 100); + } + + // Images + if (isset($this->request->get['product_id'])) { + $product_images = $this->model_catalog_product->getProductImages($this->request->get['product_id']); + } else { + $product_images = array(); + } + + $data['product_images'] = array(); + + foreach ($product_images as $product_image) { + if (is_file(DIR_IMAGE . $product_image['image'])) { + $image = $product_image['image']; + } else { + $image = ''; + } + + $product_info['product_images'][] = array( + 'image_url' => $this->model_tool_image->resize($image, 800, 800), + 'thumb' => $this->model_tool_image->resize($image, 100, 100), + 'sort_order' => $product_image['sort_order'] + ); + } + + $data['product'] = $product_info; + $data['product']['description_raw'] = trim(strip_tags(html_entity_decode($data['product']['description'], ENT_QUOTES, 'UTF-8'))); + + $setting = array(); + + $setting['who_made'] = $this->openbay->etsy->getSetting('who_made'); + if (is_array($setting['who_made'])) { + ksort($setting['who_made']); + } + + $setting['when_made'] = $this->openbay->etsy->getSetting('when_made'); + if (is_array($setting['when_made'])) { + ksort($setting['when_made']); + } + + $setting['recipient'] = $this->openbay->etsy->getSetting('recipient'); + if (is_array($setting['recipient'])) { + ksort($setting['recipient']); + } + + $setting['occasion'] = $this->openbay->etsy->getSetting('occasion'); + if (is_array($setting['occasion'])) { + ksort($setting['occasion']); + } + + $setting['state'] = array('active', 'draft'); + + $data['setting'] = $setting; + + if ($product_info['quantity'] > 999) { + $this->error['warning'] = sprintf($this->language->get('error_stock_max'), $product_info['quantity']); + } + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) { + $data['error_variant'] = $this->language->get('error_variant'); + } else { + $data['error_variant'] = ''; + } + + $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/etsy_create', $data)); + } + + public function createSubmit() { + $this->load->language('extension/openbay/etsy_create'); + $this->load->model('extension/openbay/etsy_product'); + + $data = $this->request->post; + + // validation + if (!isset($data['title']) || empty($data['title']) || strlen($data['title']) > 255) { + if (strlen($data['title']) > 255) { + $this->error['title'] = $this->language->get('error_title_length'); + } else { + $this->error['title'] = $this->language->get('error_title_missing'); + } + } + + if (!isset($data['description']) || empty($data['description'])) { + $this->error['title'] = $this->language->get('error_desc_missing'); + } + + if (!isset($data['price']) || empty($data['price'])) { + $this->error['price'] = $this->language->get('error_price_missing'); + } + + if (!isset($data['taxonomy_id']) || empty($data['taxonomy_id']) || $data['taxonomy_id'] == 0) { + $this->error['taxonomy_id'] = $this->language->get('error_category'); + } + + if (isset($data['tags']) && count($data['tags']) > 13) { + $this->error['tags'] = $this->language->get('error_tags'); + } + + if (isset($data['materials']) && count($data['materials']) > 13) { + $this->error['materials'] = $this->language->get('error_materials'); + } + + if (isset($data['style_1']) && !empty($data['style_1'])) { + if (preg_match('/[^\p{L}\p{Nd}\p{Zs}]/u', $data['style_1']) == 1) { + $this->error['style_1'] = $this->language->get('error_style_1_tag'); + } + } + + if (isset($data['style_2']) && !empty($data['style_2'])) { + if (preg_match('/[^\p{L}\p{Nd}\p{Zs}]/u', $data['style_2']) == 1) { + $this->error['style_2'] = $this->language->get('error_style_2_tag'); + } + } + + if ($data['quantity'] > 999) { + $this->error['quantity'] = sprintf($this->language->get('error_stock_max'), $data['quantity']); + } + + if (isset($data['product_image']) && count($data['product_image']) > 4) { + $this->error['images'] = sprintf($this->language->get('error_image_max'), count($data['product_image'])+1); + } + + if (!$this->error) { + // process the request + $response = $this->openbay->etsy->call('v1/etsy/product/listing/create/', 'POST', $data); + + $this->response->addHeader('Content-Type: application/json'); + + if (isset($response['data']['results'][0]['listing_id'])) { + $this->model_extension_openbay_etsy_product->addLink($data['product_id'], $response['data']['results'][0]['listing_id'], 1); + } + + if (isset($response['data']['error'])) { + $this->response->setOutput(json_encode($response['data'])); + } else { + $this->response->setOutput(json_encode($response['data']['results'][0])); + } + } else { + $this->response->setOutput(json_encode(array('error' => $this->error))); + } + } + + public function edit() { + $this->load->language('extension/openbay/etsy_edit'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/etsy_product'); + $this->load->model('tool/image'); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $data['action'] = $this->url->link('extension/openbay/etsy_product/editSubmit', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + + $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/etsy', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_etsy'), + ); + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/etsy_product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true), + 'text' => $this->language->get('heading_title'), + ); + + $links = $this->openbay->etsy->getLinks($this->request->get['product_id'], 1, 1); + + $data['listing'] = $this->openbay->etsy->getEtsyItem($links[0]['etsy_item_id']); + + $data['etsy_item_id'] = $links[0]['etsy_item_id']; + $data['product_id'] = $this->request->get['product_id']; + + $setting['state'] = array('active', 'inactive', 'draft'); + + $data['setting'] = $setting; + + if ($data['listing']['state'] == 'edit') { + $data['listing']['state'] = 'inactive'; + } + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + $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/etsy_edit', $data)); + } + + public function editSubmit() { + $this->load->language('extension/openbay/etsy_edit'); + $this->load->model('extension/openbay/etsy_product'); + + $data = $this->request->post; + + // validation + if (!isset($data['title']) || empty($data['title']) || strlen($data['title']) > 255) { + if (strlen($data['title']) > 255) { + $this->error['title'] = $this->language->get('error_title_length'); + } else { + $this->error['title'] = $this->language->get('error_title_missing'); + } + } + + if (!isset($data['description']) || empty($data['description'])) { + $this->error['title'] = $this->language->get('error_desc_missing'); + } + + if (!isset($data['price']) || empty($data['price'])) { + $this->error['price'] = $this->language->get('error_price_missing'); + } + + if (!isset($data['state']) || empty($data['state'])) { + $this->error['state'] = $this->language->get('error_state_missing'); + } + + if (!$this->error) { + // process the request + $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . $data['etsy_item_id'] . '/update/', 'POST', $data); + + $this->response->addHeader('Content-Type: application/json'); + + if (isset($response['data']['error'])) { + $this->response->setOutput(json_encode($response['data'])); + } else { + $this->response->setOutput(json_encode($response['data']['results'][0])); + } + } else { + $this->response->setOutput(json_encode(array('error' => $this->error))); + } + } + + public function addImage() { + $this->load->language('extension/openbay/etsy_create'); + + $data = $this->request->post; + + if (!isset($data['image']) || empty($data['image'])) { + $this->error['image'] = $this->language->get('error_no_img_url'); + } + + if (!isset($data['listing_id']) || empty($data['listing_id'])) { + $this->error['listing_id'] = $this->language->get('error_no_listing_id'); + } + + if (!$this->error) { + $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['listing_id'] . '/image/', 'POST', $data); + + $this->response->addHeader('Content-Type: application/json'); + + if (isset($response['data']['error'])) { + $this->response->setOutput(json_encode($response['data'])); + } else { + $this->response->setOutput(json_encode($response['data']['results'][0])); + } + } + } + + public function getCategories() { + $categories = $this->cache->get('etsy_categories'); + + if (!$categories) { + $response = $this->openbay->etsy->call('v1/etsy/product/taxonomy/', 'GET'); + + if (isset($response['header_code']) && $response['header_code'] == 200) { + $categories = $this->formatCategories($response['data']['data']['results']); + + /** + * Need to create cache instance here due to bug where all caches expire after 3600 seconds. + **/ + $etsy_cache = new Cache('file', 3000000); + + $etsy_cache->set('etsy_categories', $categories); + } + } + + $response = array(); + $parent_categories = array(); + $last_id = 0; + + if (isset($this->request->get['id_path']) && $this->request->get['id_path'] != '' && $this->request->get['id_path'] != 0) { + $id_path_parts = explode(',', $this->request->get['id_path']); + + + foreach ($id_path_parts as $id_path) { + $parent_categories[] = $categories[$id_path]['name']; + + $categories = $categories[$id_path]['children']; + + $last_id = $id_path; + } + } + + if (empty($categories)) { + $final_category = true; + } else { + foreach ($categories as $id => $category) { + $response[$id] = array( + 'name' => $category['name'], + 'id_path' => $category['id_path'], + 'children_count' => (is_array($category['children']) ? count($category['children']) : 0), + ); + } + + $final_category = false; + } + + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('data' => $response, 'parent_text' => implode(' > ', $parent_categories), 'final_category' => $final_category, 'last_id' => $last_id))); + } + + private function formatCategories($category_data) { + $response = array(); + + foreach ($category_data as $category) { + $response[$category['id']] = array( + 'name' => $category['name'], + 'id_path' => implode(',', $category['full_path_taxonomy_ids']), + 'children' => (isset($category['children']) && !empty($category['children']) ? $this->formatCategories($category['children']) : ''), + ); + } + + return $response; + } + + public function addLink() { + $this->load->language('extension/openbay/etsy_links'); + $this->load->model('extension/openbay/etsy_product'); + $this->load->model('catalog/product'); + + $data = $this->request->post; + + if (!isset($data['product_id'])) { + echo json_encode(array('error' => $this->language->get('error_product_id'))); + die(); + } + + if (!isset($data['etsy_id'])) { + echo json_encode(array('error' => $this->language->get('error_etsy_id'))); + die(); + } + + $links = $this->openbay->etsy->getLinks($data['product_id'], 1); + + if ($links != false) { + echo json_encode(array('error' => $this->language->get('error_link_exists'))); + die(); + } + + $product = $this->model_catalog_product->getProduct($data['product_id']); + + if (!$product) { + echo json_encode(array('error' => $this->language->get('error_product'))); + die(); + } + + if ($product['quantity'] <= 0) { + echo json_encode(array('error' => $this->language->get('error_stock'))); + die(); + } + + // check the etsy item exists + $get_response = $this->openbay->etsy->getEtsyItem($data['etsy_id']); + + if (isset($get_response['data']['error'])) { + echo json_encode(array('error' => $this->language->get('error_etsy') . $get_response['data']['error'])); + die(); + } else { + if ((int)$get_response['quantity'] != (int)$product['quantity']) { + // if the stock is different than the item being linked update the etsy stock level + $update_response = $this->openbay->etsy->updateListingStock($data['etsy_id'], $product['quantity'], $get_response['state']); + + if (isset($update_response['data']['error'])) { + echo json_encode(array('error' => $this->language->get('error_etsy') . $update_response['data']['error'])); + die(); + } + } + } + + $this->model_extension_openbay_etsy_product->addLink($data['product_id'], $data['etsy_id'], 1); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => false))); + } + + public function deleteLink() { + $this->load->language('extension/openbay/etsy_links'); + + $data = $this->request->post; + + if (!isset($data['etsy_link_id'])) { + echo json_encode(array('error' => $this->language->get('error_link_id'))); + die(); + } + + $this->openbay->etsy->deleteLink($data['etsy_link_id']); + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => false))); + } + + public function links() { + $this->load->language('extension/openbay/etsy_links'); + + $data = $this->language->all(); + + $this->load->model('extension/openbay/etsy_product'); + + $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true); + + $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/etsy', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_etsy'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/etsy_product/itemLinks', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['return'] = $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true); + //$data['edit_url'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=', true); + //$data['validation'] = $this->openbay->ebay->validate(); + $data['user_token'] = $this->session->data['user_token']; + + $total_linked = $this->model_extension_openbay_etsy_product->totalLinked(); + + if (isset($this->request->get['page'])){ + $page = (int)$this->request->get['page']; + } else { + $page = 1; + } + + $limit = $this->config->get('config_limit_admin'); + + $pagination = new Pagination(); + $pagination->total = $total_linked; + $pagination->page = $page; + $pagination->limit = $limit; + $pagination->text = $this->language->get('text_pagination'); + $pagination->url = $this->url->link('extension/openbay/etsy/itemLinks', 'user_token=' . $this->session->data['user_token'] . '&page={page}', true); + + $data['pagination'] = $pagination->render(); + $data['results'] = sprintf($this->language->get('text_pagination'), ($total_linked) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($total_linked - $limit)) ? $total_linked : ((($page - 1) * $limit) + $limit), $total_linked, ceil($total_linked / $limit)); + + $data['items'] = $this->model_extension_openbay_etsy_product->loadLinked($limit, $page); + + $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/etsy_links', $data)); + } + + public function listings() { + $this->load->language('extension/openbay/etsy_listings'); + + $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/etsy_product'); + + $data['user_token'] = $this->session->data['user_token']; + + $data['breadcrumbs'] = array(); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) + ); + + $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/etsy', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_etsy'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/etsy_product/itemLinks', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $filter = array(); + + if (!isset($this->request->get['status'])) { + $filter['status'] = 'active'; + } else { + $filter['status'] = $this->request->get['status']; + } + + if (!isset($this->request->get['page'])) { + $filter['page'] = 1; + } else { + $filter['page'] = $this->request->get['page']; + } + + if (isset($this->request->get['keywords'])) { + $filter['keywords'] = $this->request->get['keywords']; + } + + $filter['limit'] = (int)$this->config->get('config_limit_admin'); + + $data['filter'] = $filter; + + $response = $this->openbay->etsy->call('v1/etsy/product/listing/all/?' . http_build_query($filter), 'GET'); + + unset($filter['page']); + + if (isset($response['data']['error'])) { + $data['listings'] = array(); + $data['pagination'] = ''; + $data['results'] = ''; + $this->error['warning'] = $this->language->get('error_etsy') . $response['data']['error']; + } else { + $listings = array(); + + foreach($response['data']['results'] as $listing) { + $product_link = $this->openbay->etsy->getLinkedProduct($listing['listing_id']); + + $actions = array(); + + if ($filter['status'] == 'inactive') { + $actions[] = 'activate_item'; + } + + if ($filter['status'] == 'active') { + $actions[] = 'end_item'; + $actions[] = 'deactivate_item'; + } + + if ($filter['status'] == 'active' && empty($product_link)) { + $actions[] = 'add_link'; + } + + if (!empty($product_link)) { + $actions[] = 'delete_link'; + } + + if ($product_link != false) { + $listings[] = array('link' => $product_link, 'listing' => $listing, 'actions' => $actions); + } else { + $listings[] = array('link' => '', 'listing' => $listing, 'actions' => $actions); + } + } + + $data['listings'] = $listings; + + $pagination = new Pagination(); + $pagination->total = $response['data']['count']; + $pagination->page = $response['data']['pagination']['effective_page']; + $pagination->limit = $response['data']['pagination']['effective_limit']; + $pagination->url = $this->url->link('extension/openbay/etsy_product/listings', 'user_token=' . $this->session->data['user_token'] . '&page={page}&' . http_build_query($filter), true); + + $data['pagination'] = $pagination->render(); + $data['results'] = sprintf($this->language->get('text_pagination'), ($response['data']['count']) ? (($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) + 1 : 0, ((($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) > ($response['data']['count'] - $response['data']['pagination']['effective_limit'])) ? $response['data']['count'] : ((($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) + $response['data']['pagination']['effective_limit']), $response['data']['count'], ceil($response['data']['count'] / $response['data']['pagination']['effective_limit'])); + } + + $data['success'] = ''; + + if (isset($this->request->get['item_ended'])) { + $data['success'] = $this->language->get('text_item_ended'); + } + + if (isset($this->request->get['item_activated'])) { + $data['success'] = $this->language->get('text_item_activated'); + } + + if (isset($this->request->get['item_deactivated'])) { + $data['success'] = $this->language->get('text_item_deactivated'); + } + + if (isset($this->request->get['link_added'])) { + $data['success'] = $this->language->get('text_link_added'); + } + + if (isset($this->request->get['link_deleted'])) { + $data['success'] = $this->language->get('text_link_deleted'); + } + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + $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/etsy_listings', $data)); + } + + public function endListing() { + $this->load->language('extension/openbay/etsy_links'); + + $data = $this->request->post; + + if (!isset($data['etsy_item_id'])) { + echo json_encode(array('error' => $this->language->get('error_etsy_id'))); + die(); + } + + $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/delete/', 'POST', array()); + + if (isset($response['data']['error'])) { + echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error'])); + die(); + } else { + $linked_item = $this->openbay->etsy->getLinkedProduct($data['etsy_item_id']); + + if ($linked_item != false) { + $this->openbay->etsy->deleteLink($linked_item['etsy_listing_id']); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => false))); + } + } + + public function deactivateListing() { + $this->load->language('extension/openbay/etsy_links'); + + $data = $this->request->post; + + if (!isset($data['etsy_item_id'])) { + echo json_encode(array('error' => $this->language->get('error_etsy_id'))); + die(); + } + + $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/inactive/', 'POST', array()); + + if (isset($response['data']['error'])) { + echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error'])); + die(); + } else { + $linked_item = $this->openbay->etsy->getLinkedProduct($data['etsy_item_id']); + + if ($linked_item != false) { + $this->openbay->etsy->deleteLink($linked_item['etsy_listing_id']); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode(array('error' => false))); + } + } + + public function activateListing() { + $this->load->language('extension/openbay/etsy_links'); + + $data = $this->request->post; + + $this->response->addHeader('Content-Type: application/json'); + + if (!isset($data['etsy_item_id'])) { + echo json_encode(array('error' => $this->language->get('error_etsy_id'))); + die(); + } + + $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/active/', 'POST', array()); + + if (isset($response['data']['error'])) { + echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error'])); + die(); + } else { + $this->response->setOutput(json_encode(array('error' => false))); + } + } +} diff --git a/public/admin/controller/extension/openbay/etsy_shipping.php b/public/admin/controller/extension/openbay/etsy_shipping.php new file mode 100644 index 0000000..ecf0fe9 --- /dev/null +++ b/public/admin/controller/extension/openbay/etsy_shipping.php @@ -0,0 +1,9 @@ +<?php +class ControllerExtensionOpenbayEtsyShipping extends Controller { + public function getAll() { + $response = $this->openbay->etsy->call('v1/etsy/product/shipping/getAllTemplates/', 'GET'); + + $this->response->addHeader('Content-Type: application/json'); + return $this->response->setOutput(json_encode($response)); + } +}
\ No newline at end of file diff --git a/public/admin/controller/extension/openbay/etsy_shop.php b/public/admin/controller/extension/openbay/etsy_shop.php new file mode 100644 index 0000000..598edd9 --- /dev/null +++ b/public/admin/controller/extension/openbay/etsy_shop.php @@ -0,0 +1,9 @@ +<?php +class ControllerExtensionOpenbayEtsyShop extends Controller { + public function getSections() { + $response = $this->openbay->etsy->call('v1/etsy/shop/getSections/', 'GET'); + + $this->response->addHeader('Content-Type: application/json'); + return $this->response->setOutput(json_encode($response)); + } +}
\ No newline at end of file diff --git a/public/admin/controller/extension/openbay/fba.php b/public/admin/controller/extension/openbay/fba.php new file mode 100644 index 0000000..660e49b --- /dev/null +++ b/public/admin/controller/extension/openbay/fba.php @@ -0,0 +1,923 @@ +<?php +class ControllerExtensionOpenbayFba extends Controller { + public function install() { + $this->load->model('extension/openbay/fba'); + $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/fba'); + $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/fba'); + + $this->model_extension_openbay_fba->install(); + } + + public function uninstall() { + $this->load->model('extension/openbay/fba'); + $this->load->model('setting/setting'); + $this->load->model('setting/extension'); + + $this->model_extension_openbay_fba->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/fba'); + + $data = $this->language->all(); + + $this->load->model('setting/setting'); + $this->load->model('localisation/order_status'); + $this->load->model('extension/openbay/fba'); + + $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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_dashboard'), + ); + + $data['success'] = ''; + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $data['validation'] = $this->openbay->fba->validate(); + $data['link_settings'] = $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['link_account'] = 'https://account.openbaypro.com/fba/index/'; + $data['link_fulfillments'] = $this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'], true); + $data['link_orders'] = $this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/fba/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=fba'; + + $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/fba', $data)); + } + + public function settings() { + $this->load->language('extension/openbay/fba_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('extension/openbay/fba'); + $this->load->model('localisation/order_status'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) { + $this->model_setting_setting->editSetting('openbay_fba', $this->request->post); + $this->session->data['success'] = $this->language->get('text_success'); + $this->response->redirect($this->url->link('extension/openbay/fba', '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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('text_fba'), + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $this->language->get('heading_title'), + ); + + $data['action'] = $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true); + $data['link_signup'] = 'https://account.openbaypro.com/fba/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=fba'; + + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->request->post['openbay_fba_status'])) { + $data['openbay_fba_status'] = $this->request->post['openbay_fba_status']; + } else { + $data['openbay_fba_status'] = $this->config->get('openbay_fba_status'); + } + + if (isset($this->request->post['openbay_fba_api_key'])) { + $data['openbay_fba_api_key'] = trim($this->request->post['openbay_fba_api_key']); + } else { + $data['openbay_fba_api_key'] = trim($this->config->get('openbay_fba_api_key')); + } + + if (isset($this->request->post['openbay_fba_encryption_key'])) { + $data['openbay_fba_encryption_key'] = trim($this->request->post['openbay_fba_encryption_key']); + } else { + $data['openbay_fba_encryption_key'] = trim($this->config->get('openbay_fba_encryption_key')); + } + + if (isset($this->request->post['openbay_fba_encryption_iv'])) { + $data['openbay_fba_encryption_iv'] = trim($this->request->post['openbay_fba_encryption_iv']); + } else { + $data['openbay_fba_encryption_iv'] = trim($this->config->get('openbay_fba_encryption_iv')); + } + + if (isset($this->request->post['openbay_fba_api_account_id'])) { + $data['openbay_fba_api_account_id'] = trim($this->request->post['openbay_fba_api_account_id']); + } else { + $data['openbay_fba_api_account_id'] = trim($this->config->get('openbay_fba_api_account_id')); + } + + if (isset($this->request->post['openbay_fba_send_orders'])) { + $data['openbay_fba_send_orders'] = $this->request->post['openbay_fba_send_orders']; + } else { + $data['openbay_fba_send_orders'] = $this->config->get('openbay_fba_send_orders'); + } + + if (isset($this->request->post['openbay_fba_debug_log'])) { + $data['openbay_fba_debug_log'] = $this->request->post['openbay_fba_debug_log']; + } else { + $data['openbay_fba_debug_log'] = $this->config->get('openbay_fba_debug_log'); + } + + $order_total = $this->model_extension_openbay_fba->countFbaOrders(); + + if ($order_total > 0) { + $data['prefix_can_edit'] = false; + } else { + $data['prefix_can_edit'] = true; + } + + if (isset($this->request->post['openbay_fba_order_prefix'])) { + $data['openbay_fba_order_prefix'] = $this->request->post['openbay_fba_order_prefix']; + } else { + $data['openbay_fba_order_prefix'] = $this->config->get('openbay_fba_order_prefix'); + } + + if (isset($this->request->post['openbay_fba_order_trigger_status'])) { + $data['openbay_fba_order_trigger_status'] = $this->request->post['openbay_fba_order_trigger_status']; + } else { + $data['openbay_fba_order_trigger_status'] = $this->config->get('openbay_fba_order_trigger_status'); + } + + if (isset($this->request->post['openbay_fba_only_fill_complete'])) { + $data['openbay_fba_only_fill_complete'] = $this->request->post['openbay_fba_only_fill_complete']; + } else { + $data['openbay_fba_only_fill_complete'] = $this->config->get('openbay_fba_only_fill_complete'); + } + + $data['fulfillment_policy'] = array( + 'FillOrKill' => $this->language->get('text_fillorkill'), + 'FillAll' => $this->language->get('text_fillall'), + 'FillAllAvailable' => $this->language->get('text_fillallavailable'), + ); + + if (isset($this->request->post['openbay_fba_fulfill_policy'])) { + $data['openbay_fba_fulfill_policy'] = $this->request->post['openbay_fba_fulfill_policy']; + } else { + $data['openbay_fba_fulfill_policy'] = $this->config->get('openbay_fba_fulfill_policy'); + } + + $data['shipping_speed'] = array( + 'Standard' => $this->language->get('text_standard'), + 'Expedited' => $this->language->get('text_expedited'), + 'Priority' => $this->language->get('text_priority'), + ); + + if (isset($this->request->post['openbay_fba_shipping_speed'])) { + $data['openbay_fba_shipping_speed'] = $this->request->post['openbay_fba_shipping_speed']; + } else { + $data['openbay_fba_shipping_speed'] = $this->config->get('openbay_fba_shipping_speed'); + } + + $data['api_server'] = $this->openbay->fba->getServerUrl(); + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + + $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/fba_settings', $data)); + } + + public function verifyCredentials() { + $this->load->language('extension/openbay/fba_settings'); + + $errors = array(); + + if (!isset($this->request->post['openbay_fba_api_key']) || empty($this->request->post['openbay_fba_api_key'])) { + $errors[] = array('message' => $this->language->get('error_api_key')); + } + + if (!isset($this->request->post['openbay_fba_api_account_id']) || empty($this->request->post['openbay_fba_api_account_id'])) { + $errors[] = array('message' => $this->language->get('error_api_account_id')); + } + + if (!isset($this->request->post['openbay_fba_encryption_key']) || empty($this->request->post['openbay_fba_encryption_key'])) { + $errors[] = array('message' => $this->language->get('error_encryption_key')); + } + + if (!isset($this->request->post['openbay_fba_encryption_iv']) || empty($this->request->post['openbay_fba_encryption_iv'])) { + $errors[] = array('message' => $this->language->get('error_encryption_iv')); + } + + if (!$errors) { + $this->openbay->fba->setApiKey($this->request->post['openbay_fba_api_key']); + $this->openbay->fba->setAccountId($this->request->post['openbay_fba_api_account_id']); + $this->openbay->fba->setEncryptionKey($this->request->post['openbay_fba_encryption_key']); + $this->openbay->fba->setEncryptionIv($this->request->post['openbay_fba_encryption_iv']); + + $response = $this->openbay->fba->call("v1/fba/status/", array(), 'GET'); + } else { + $response = array( + "result" => null, + "error" => true, + "error_messages" => $errors, + ); + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($response)); + } + + protected function validate() { + if (!$this->user->hasPermission('modify', 'extension/openbay/fba')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if (!$this->request->post['openbay_fba_api_key']) { + $this->error['api_key'] = $this->language->get('error_api_key'); + } + + if (!$this->request->post['openbay_fba_api_account_id']) { + $this->error['api_account_id'] = $this->language->get('error_api_account_id'); + } + + return !$this->error; + } + + public function fulfillment() { + $this->load->language('extension/openbay/fba_fulfillment'); + + $data = $this->language->all(); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + if (!isset($this->request->get['fulfillment_id'])) { + $this->response->redirect($this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'] . (!empty($this->request->get['filter_date']) ? '&filter_date=' . $this->request->get['filter_date'] : ''), 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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['text_fba'], + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'] . (!empty($this->request->get['filter_date']) ? '&filter_date=' . $this->request->get['filter_date'] : ''), true), + 'text' => $data['heading_title'], + ); + + $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->request->get['fulfillment_id'] . "/", array()); + $data['response'] = $response['body']; + + if ($response['error'] == true || $response['response_http'] != 200) { + $this->session->data['error'] = $this->language->get('error_loading_fulfillment'); + + $this->response->redirect($this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'], true)); + } + + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $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/fba_fulfillment_form', $data)); + } + + public function fulfillmentList() { + $this->load->language('extension/openbay/fba_fulfillment_list'); + + $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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['text_fba'], + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['heading_title'], + ); + + if (isset($this->request->get['filter_date'])) { + $data['filter_date'] = $this->request->get['filter_date']; + $request_url = "?query_start_date_time=".urlencode($this->request->get['filter_date'] . "T00:00:00Z"); + } else { + $data['filter_date'] = ''; + $request_url = ""; + } + + $data['fulfillments'] = array(); + + $response = $this->openbay->fba->call("v1/fba/fulfillments/".$request_url, array(), 'GET'); + + if (isset($response['body']) && is_array($response['body'])) { + foreach ($response['body'] as $fulfillment_order) { + $data['fulfillments'][] = array( + 'seller_fulfillment_order_id' => $fulfillment_order['seller_fulfillment_order_id'], + 'displayable_order_id' => $fulfillment_order['displayable_order_id'], + 'displayable_order_date_time' => $fulfillment_order['displayable_order_date_time'], + 'shipping_speed_category' => $fulfillment_order['shipping_speed_category'], + 'fulfillment_order_status' => $fulfillment_order['fulfillment_order_status'], + 'edit' => $this->url->link('extension/openbay/fba/fulfillment', 'user_token=' . $this->session->data['user_token'] . '&fulfillment_id=' . $fulfillment_order['seller_fulfillment_order_id'] . (!empty($data['filter_date']) ? '&filter_date=' . $data['filter_date'] : ''), true), + ); + } + } + + $data['cancel'] = $this->url->link('extension/openbay/fba/index', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $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/fba_fulfillment_list', $data)); + } + + public function shipFulfillment() { + $this->load->language('extension/openbay/fba_fulfillment'); + + $errors = array(); + + if (empty($this->request->get['order_id']) || empty($this->request->get['fba_order_fulfillment_id'])) { + $this->session->data['error'] = $this->language->get('error_missing_id'); + + $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true)); + } else { + $order_id = (int)$this->request->get['order_id']; + $fba_order_fulfillment_id = (int)$this->request->get['fba_order_fulfillment_id']; + + $this->openbay->fba->log('shipFulfillment request for order ID: ' . $order_id . ', Fulfillment ID: ' . $fba_order_fulfillment_id); + + $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 1); + + $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_order_fulfillment_id . "/ship/", array(), 'GET'); + + + + if (!isset($response['response_http']) || $response['response_http'] != 200) { + /** + * @todo notify the admin about any errors + */ + $errors[] = $this->language->get('error_amazon_request'); + + //$this->openbay->fba->updateFBAOrderStatus($order_id, 1); + } else { + $this->openbay->fba->populateFBAFulfillment(json_encode(array()), json_encode($response), $response['response_http'], $fba_fulfillment_id); + + $this->openbay->fba->updateFBAOrderStatus($order_id, 3); + + $this->session->data['success'] = $this->language->get('text_fulfillment_shipped'); + } + } + + if ($errors) { + $this->session->data['error'] = $errors; + } + + $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true)); + } + + public function cancelFulfillment() { + $this->load->language('extension/openbay/fba_fulfillment'); + + $errors = array(); + + if (empty($this->request->get['order_id']) || empty($this->request->get['fba_order_fulfillment_id'])) { + $this->session->data['error'] = $this->language->get('error_missing_id'); + + $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true)); + } else { + $order_id = (int)$this->request->get['order_id']; + $fba_order_fulfillment_id = (int)$this->request->get['fba_order_fulfillment_id']; + + $this->openbay->fba->log('cancelFulfillment request for order ID: ' . $order_id . ', Fulfillment ID: ' . $fba_order_fulfillment_id); + + $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 2); + + $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_order_fulfillment_id . "/cancel/", array(), 'POST'); + + if (!isset($response['response_http']) || $response['response_http'] != 200) { + /** + * @todo notify the admin about any errors + */ + $errors[] = $this->language->get('error_amazon_request'); + } else { + $this->openbay->fba->populateFBAFulfillment(json_encode(array()), json_encode($response), $response['response_http'], $fba_fulfillment_id); + + $this->openbay->fba->updateFBAOrderStatus($order_id, 4); + + $this->session->data['success'] = $this->language->get('text_fulfillment_cancelled'); + } + } + + if ($errors) { + $this->session->data['error'] = $errors; + } + + $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true)); + } + + public function resendFulfillment() { + $this->load->language('extension/openbay/fba_fulfillment'); + + $errors = array(); + + if (empty($this->request->get['order_id'])) { + $this->session->data['error'] = $this->language->get('error_missing_id'); + + $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true)); + } else { + $order_id = (int)$this->request->get['order_id']; + + $this->openbay->fba->log('resendFulfillment request for order ID: ' . $order_id); + + $this->load->model('sale/order'); + $this->load->model('catalog/product'); + + $order = $this->model_sale_order->getOrder($order_id); + + if ($order['shipping_method']) { + if ($this->config->get('openbay_fba_order_trigger_status') == $order['order_status_id']) { + $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 1); + + $order_products = $this->model_sale_order->getOrderProducts($order_id); + + $fulfillment_items = array(); + + foreach ($order_products as $order_product) { + $product = $this->model_catalog_product->getProduct($order_product['product_id']); + + if ($product['location'] == 'FBA') { + $fulfillment_items[] = array( + 'seller_sku' => $product['sku'], + 'quantity' => $order_product['quantity'], + 'seller_fulfillment_order_item_id' => $this->config->get('openbay_fba_order_prefix') . $fba_fulfillment_id . '-' . $order_product['order_product_id'], + 'per_unit_declared_value' => array( + 'currency_code' => $order['currency_code'], + 'value' => number_format($order_product['price'], 2) + ), + ); + } + } + + $total_fulfillment_items = count($fulfillment_items); + + if (!empty($fulfillment_items)) { + $request = array(); + + $datetime = new DateTime($order['date_added']); + $request['displayable_order_datetime'] = $datetime->format(DateTime::ISO8601); + + $request['seller_fulfillment_order_id'] = $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_fulfillment_id; + $request['displayable_order_id'] = $order_id; + $request['displayable_order_comment'] = 'none'; + $request['shipping_speed_category'] = $this->config->get('openbay_fba_shipping_speed'); + $request['fulfillment_action'] = ($this->config->get('openbay_fba_send_orders') == 1 ? 'Ship' : 'Hold'); + $request['fulfillment_policy'] = $this->config->get('openbay_fba_fulfill_policy'); + + $request['destination_address'] = array( + 'name' => $order['shipping_firstname'] . ' ' . $order['shipping_lastname'], + 'line_1' => (!empty($order['shipping_company']) ? $order['shipping_company'] : $order['shipping_address_1']), + 'line_2' => (!empty($order['shipping_company']) ? $order['shipping_address_1'] : $order['shipping_address_2']), + 'line_3' => (!empty($order['shipping_company']) ? $order['shipping_address_2'] : ''), + 'state_or_province_code' => $order['shipping_zone'], + 'city' => $order['shipping_city'], + 'country_code' => $order['shipping_iso_code_2'], + 'postal_code' => $order['shipping_postcode'], + ); + + $request['items'] = $fulfillment_items; + + $response = $this->openbay->fba->call("v1/fba/fulfillments/", $request, 'POST'); + + if ($response['response_http'] != 201) { + /** + * @todo notify the admin about any errors + */ + $errors[] = $this->language->get('error_amazon_request'); + + $this->openbay->fba->updateFBAOrderStatus($order_id, 1); + } else { + if ($this->config->get('openbay_fba_send_orders') == 1) { + $this->openbay->fba->updateFBAOrderStatus($order_id, 3); + } else { + $this->openbay->fba->updateFBAOrderStatus($order_id, 2); + } + + $this->openbay->fba->updateFBAOrderRef($order_id, $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_fulfillment_id); + + $this->session->data['success'] = $this->language->get('text_fulfillment_sent'); + } + + $this->openbay->fba->populateFBAFulfillment(json_encode($request), json_encode($response), $response['response_http'], $fba_fulfillment_id); + $this->openbay->fba->updateFBAOrderFulfillmentID($order_id, $fba_fulfillment_id); + } else { + $errors[] = $this->language->get('error_no_items'); + } + } + } else { + $errors[] = $this->language->get('error_no_shipping'); + } + } + + if ($errors) { + $this->session->data['error'] = $errors; + } + + $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true)); + } + + public function orderList() { + $this->load->language('extension/openbay/fba_order'); + + $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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['text_fba'], + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['heading_title'], + ); + + $filters = array(); + + $url = ''; + + if (isset($this->request->get['filter_start'])) { + $filters['filter_start'] = $this->request->get['filter_start']; + $data['filter_start'] = $this->request->get['filter_start']; + $url .= "&filter_start=".urlencode($this->request->get['filter_start']); + } else { + $filters['filter_start'] = null; + $data['filter_start'] = null; + } + + if (isset($this->request->get['filter_end'])) { + $filters['filter_end'] = $this->request->get['filter_end']; + $data['filter_end'] = $this->request->get['filter_end']; + $url .= "&filter_end=".urlencode($this->request->get['filter_end']); + } else { + $filters['filter_end'] = null; + $data['filter_end'] = null; + } + + if (isset($this->request->get['filter_status'])) { + $filters['filter_status'] = $this->request->get['filter_status']; + $data['filter_status'] = $this->request->get['filter_status']; + $url .= "&filter_status=".urlencode($this->request->get['filter_status']); + } else { + $filters['filter_status'] = null; + $data['filter_status'] = null; + } + + $data['orders'] = array(); + + $orders = $this->openbay->fba->getFBAOrders($filters); + + if (!empty($orders)) { + foreach ($orders as $order) { + $data['orders'][] = array( + 'order_id' => $order['order_id'], + 'order_link' => $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order['order_id'] . $url, true), + 'status' => $order['status'], + 'created' => $order['created'], + 'fba_item_count' => $this->openbay->fba->hasOrderFBAItems($order['order_id']), + 'view' => $this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order['order_id'] . $url, true) + ); + } + } + + $data['cancel'] = $this->url->link('extension/openbay/fba/index', 'user_token=' . $this->session->data['user_token'], true); + $data['user_token'] = $this->session->data['user_token']; + + $data['status_options'] = array( + 0 => $this->language->get('text_option_new'), + 1 => $this->language->get('text_option_error'), + 2 => $this->language->get('text_option_held'), + 3 => $this->language->get('text_option_shipped'), + ); + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + $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/fba_order_list', $data)); + } + + public function order() { + $this->load->language('extension/openbay/fba_order'); + + $data = $this->language->all(); + + $this->document->setTitle($this->language->get('heading_title')); + $this->document->addScript('view/javascript/openbay/js/faq.js'); + + $this->load->model('sale/order'); + $this->load->model('catalog/product'); + + if (!isset($this->request->get['order_id'])) { + $this->response->redirect($this->url->link('extension/openbay/fba/orderList', 'user_token=' . $this->session->data['user_token'], true)); + } + + $order_id = (int)$this->request->get['order_id']; + $order_fba = $this->openbay->fba->getFBAOrder($order_id); + $order_info = $this->model_sale_order->getOrder($order_id); + + if ($order_fba['status'] == 2 || $order_fba['status'] == 3 || $order_fba['status'] == 4) { + $data['fulfillment_id'] = $order_fba['fba_order_fulfillment_ref']; + $data['fulfillment_link'] = $this->url->link('extension/openbay/fba/fulfillment', 'user_token=' . $this->session->data['user_token'] . '&fulfillment_id=' . $data['fulfillment_id'], true); + } else { + $data['fulfillment_id'] = ''; + $data['fulfillment_link'] = ''; + } + + $data['fba_order_status'] = $order_fba['status']; + $data['order_id'] = $order_id; + $data['order_link'] = $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true); + $data['resend_link'] = $this->url->link('extension/openbay/fba/resendfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true); + $data['ship_link'] = $this->url->link('extension/openbay/fba/shipfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id . '&fba_order_fulfillment_id=' . $order_fba['fba_order_fulfillment_id'], true); + $data['cancel_link'] = $this->url->link('extension/openbay/fba/cancelfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id . '&fba_order_fulfillment_id=' . $order_fba['fba_order_fulfillment_id'], true); + + $data['cancel'] = $this->url->link('extension/openbay/fba/orderlist', '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/fba', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['text_fba'], + ); + + $data['breadcrumbs'][] = array( + 'href' => $this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true), + 'text' => $data['heading_title'], + ); + + $data['fulfillments'] = array(); + + if (is_array($order_fba['fulfillments'])) { + foreach ($order_fba['fulfillments'] as $fulfillment) { + $response_body = json_decode($fulfillment['response_body'], true); + + $fulfillment_errors = array(); + + if (isset($response_body['error']) && $response_body['error'] == true) { + if (is_array($response_body['error_messages']) && !empty($response_body['error_messages'])) { + $fulfillment_errors = $response_body['error_messages']; + } + } + + $data['fulfillments'][] = array( + 'fba_order_fulfillment_id' => $fulfillment['fba_order_fulfillment_id'], + 'created' => $fulfillment['created'], + 'request_body' => json_decode($fulfillment['request_body']), + 'request_body_output' => print_r(json_decode($fulfillment['request_body']), true), + 'response_body' => json_decode($fulfillment['response_body']), + 'response_body_output' => print_r(json_decode($fulfillment['response_body']), true), + 'response_header_code' => $fulfillment['response_header_code'], + 'errors' => $fulfillment_errors, + 'type' => $fulfillment['type'], + ); + } + } + + // Shipping Address + if ($order_info['shipping_address_format']) { + $format = $order_info['shipping_address_format']; + } else { + $format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}'; + } + + $find = array( + '{firstname}', + '{lastname}', + '{company}', + '{address_1}', + '{address_2}', + '{city}', + '{postcode}', + '{zone}', + '{zone_code}', + '{country}' + ); + + $replace = array( + 'firstname' => $order_info['shipping_firstname'], + 'lastname' => $order_info['shipping_lastname'], + 'company' => $order_info['shipping_company'], + 'address_1' => $order_info['shipping_address_1'], + 'address_2' => $order_info['shipping_address_2'], + 'city' => $order_info['shipping_city'], + 'postcode' => $order_info['shipping_postcode'], + 'zone' => $order_info['shipping_zone'], + 'zone_code' => $order_info['shipping_zone_code'], + 'country' => $order_info['shipping_country'] + ); + + $data['shipping_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format)))); + + $data['status_options'] = array( + 0 => $this->language->get('text_option_new'), + 1 => $this->language->get('text_option_error'), + 2 => $this->language->get('text_option_held'), + 3 => $this->language->get('text_option_shipped'), + 4 => $this->language->get('text_option_cancelled'), + ); + + $data['type_options'] = array( + 0 => $this->language->get('text_type_new'), + 1 => $this->language->get('text_type_ship'), + 2 => $this->language->get('text_type_cancel'), + ); + + $data['products'] = array(); + + $products = $this->model_sale_order->getOrderProducts($this->request->get['order_id']); + + foreach ($products as $product) { + $option_data = array(); + + $product_info = $this->model_catalog_product->getProduct($product['product_id']); + + $options = $this->model_sale_order->getOrderOptions($this->request->get['order_id'], $product['order_product_id']); + + foreach ($options as $option) { + if ($option['type'] != 'file') { + $option_data[] = array( + 'name' => $option['name'], + 'value' => $option['value'], + 'type' => $option['type'] + ); + } + } + + $data['products'][] = array( + 'order_product_id' => $product['order_product_id'], + 'product_id' => $product['product_id'], + 'name' => $product['name'], + 'sku' => $product_info['sku'], + 'option' => $option_data, + 'quantity' => $product['quantity'], + 'fba' => ($product_info['location'] == 'FBA' ? 1 : 0), + 'href' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true), + ); + } + + if (isset($this->session->data['error'])) { + $data['error_warning'] = $this->session->data['error']; + unset($this->session->data['error']); + } else { + $data['error_warning'] = ''; + } + + if (isset($this->session->data['success'])) { + $data['success'] = $this->session->data['success']; + unset($this->session->data['success']); + } else { + $data['success'] = ''; + } + + + $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/fba_order_info', $data)); + } +} |