diff options
Diffstat (limited to 'public/admin/controller/extension/payment/laybuy.php')
-rw-r--r-- | public/admin/controller/extension/payment/laybuy.php | 1121 |
1 files changed, 1121 insertions, 0 deletions
diff --git a/public/admin/controller/extension/payment/laybuy.php b/public/admin/controller/extension/payment/laybuy.php new file mode 100644 index 0000000..5c9cd86 --- /dev/null +++ b/public/admin/controller/extension/payment/laybuy.php @@ -0,0 +1,1121 @@ +<?php +class ControllerExtensionPaymentLaybuy extends Controller { + private $error = array(); + + public function index() { + $this->load->model('setting/setting'); + + $this->load->model('extension/payment/laybuy'); + + $this->load->language('extension/payment/laybuy'); + + $this->document->setTitle($this->language->get('heading_title')); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { + unset($this->request->post['laybuy_cron_url'], $this->request->post['laybuy_cron_time']); + + $this->model_setting_setting->editSetting('payment_laybuy', $this->request->post); + + $this->session->data['success'] = $this->language->get('text_success'); + + $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)); + } + + $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( + 'text' => $this->language->get('text_extension'), + 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true) + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'], true) + ); + + $data['action'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'], true); + + $data['fetch'] = $this->url->link('extension/payment/laybuy/fetch', 'user_token=' . $this->session->data['user_token'] . '#reportstab', true); + + $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); + + if (isset($this->request->post['payment_laybuys_membership_id'])) { + $data['payment_laybuys_membership_id'] = $this->request->post['payment_laybuys_membership_id']; + } else { + $data['payment_laybuys_membership_id'] = $this->config->get('payment_laybuys_membership_id'); + } + + if (isset($this->request->post['payment_laybuy_token'])) { + $data['payment_laybuy_token'] = $this->request->post['payment_laybuy_token']; + } elseif ($this->config->has('payment_laybuy_token')) { + $data['payment_laybuy_token'] = $this->config->get('payment_laybuy_token'); + } else { + $data['payment_laybuy_token'] = md5(time()); + } + + if (isset($this->request->post['payment_laybuy_min_deposit'])) { + $data['payment_laybuy_min_deposit'] = $this->request->post['payment_laybuy_min_deposit']; + } elseif ($this->config->get('payment_laybuy_min_deposit')) { + $data['payment_laybuy_min_deposit'] = $this->config->get('payment_laybuy_min_deposit'); + } else { + $data['payment_laybuy_min_deposit'] = '20'; + } + + if (isset($this->request->post['payment_laybuy_max_deposit'])) { + $data['payment_laybuy_max_deposit'] = $this->request->post['payment_laybuy_max_deposit']; + } elseif ($this->config->get('payment_laybuy_max_deposit')) { + $data['payment_laybuy_max_deposit'] = $this->config->get('payment_laybuy_max_deposit'); + } else { + $data['payment_laybuy_max_deposit'] = '50'; + } + + if (isset($this->request->post['payment_laybuy_max_months'])) { + $data['payment_laybuy_max_months'] = $this->request->post['payment_laybuy_max_months']; + } elseif ($this->config->get('payment_laybuy_max_months')) { + $data['payment_laybuy_max_months'] = $this->config->get('payment_laybuy_max_months'); + } else { + $data['payment_laybuy_max_months'] = '3'; + } + + if (isset($this->request->post['payment_laybuy_category'])) { + $data['payment_laybuy_category'] = $this->request->post['payment_laybuy_category']; + } elseif ($this->config->get('payment_laybuy_category')) { + $data['payment_laybuy_category'] = $this->config->get('payment_laybuy_category'); + } else { + $data['payment_laybuy_category'] = array(); + } + + $data['categories'] = array(); + + $this->load->model('catalog/category'); + + foreach ($data['payment_laybuy_category'] as $category_id) { + $category_info = $this->model_catalog_category->getCategory($category_id); + + if ($category_info) { + $data['categories'][] = array( + 'category_id' => $category_info['category_id'], + 'name' => ($category_info['path']) ? $category_info['path'] . ' > ' . $category_info['name'] : $category_info['name'] + ); + } + } + + if (isset($this->request->post['payment_laybuy_xproducts'])) { + $data['payment_laybuy_xproducts'] = $this->request->post['payment_laybuy_xproducts']; + } else { + $data['payment_laybuy_xproducts'] = $this->config->get('payment_laybuy_xproducts'); + } + + if (isset($this->request->post['payment_laybuy_customer_group'])) { + $data['payment_laybuy_customer_group'] = $this->request->post['payment_laybuy_customer_group']; + } elseif ($this->config->get('payment_laybuy_customer_group')) { + $data['payment_laybuy_customer_group'] = $this->config->get('payment_laybuy_customer_group'); + } else { + $data['payment_laybuy_customer_group'] = array(); + } + + $data['customer_groups'] = array(); + + $this->load->model('customer/customer_group'); + + foreach ($data['payment_laybuy_customer_group'] as $customer_group_id) { + $customer_group_info = $this->model_customer_customer_group->getCustomerGroup($customer_group_id); + + if ($customer_group_info) { + $data['customer_groups'][] = array( + 'customer_group_id' => $customer_group_info['customer_group_id'], + 'name' => $customer_group_info['name'] + ); + } + } + + if (isset($this->request->post['payment_laybuy_logging'])) { + $data['payment_laybuy_logging'] = $this->request->post['payment_laybuy_logging']; + } else { + $data['payment_laybuy_logging'] = $this->config->get('payment_laybuy_logging'); + } + + if (isset($this->request->post['payment_laybuy_total'])) { + $data['payment_laybuy_total'] = $this->request->post['payment_laybuy_total']; + } else { + $data['payment_laybuy_total'] = $this->config->get('payment_laybuy_total'); + } + + if (isset($this->request->post['payment_laybuy_order_status_id_pending'])) { + $data['payment_laybuy_order_status_id_pending'] = $this->request->post['payment_laybuy_order_status_id_pending']; + } elseif ($this->config->get('payment_laybuy_order_status_id_pending')) { + $data['payment_laybuy_order_status_id_pending'] = $this->config->get('payment_laybuy_order_status_id_pending'); + } else { + $data['payment_laybuy_order_status_id_pending'] = '1'; + } + + if (isset($this->request->post['payment_laybuy_order_status_id_canceled'])) { + $data['payment_laybuy_order_status_id_canceled'] = $this->request->post['payment_laybuy_order_status_id_canceled']; + } elseif ($this->config->get('payment_laybuy_order_status_id_canceled')) { + $data['payment_laybuy_order_status_id_canceled'] = $this->config->get('payment_laybuy_order_status_id_canceled'); + } else { + $data['payment_laybuy_order_status_id_canceled'] = '7'; + } + + if (isset($this->request->post['payment_laybuy_order_status_id_processing'])) { + $data['payment_laybuy_order_status_id_processing'] = $this->request->post['payment_laybuy_order_status_id_processing']; + } elseif ($this->config->get('payment_laybuy_order_status_id_processing')) { + $data['payment_laybuy_order_status_id_processing'] = $this->config->get('payment_laybuy_order_status_id_processing'); + } else { + $data['payment_laybuy_order_status_id_processing'] = '2'; + } + + if (isset($this->request->post['payment_laybuy_gateway_url'])) { + $data['payment_laybuy_gateway_url'] = $this->request->post['payment_laybuy_gateway_url']; + } elseif ($this->config->get('payment_laybuy_gateway_url')) { + $data['payment_laybuy_gateway_url'] = $this->config->get('payment_laybuy_gateway_url'); + } else { + $data['payment_laybuy_gateway_url'] = 'http://lay-buys.com/gateway/'; + } + + if (isset($this->request->post['payment_laybuy_api_url'])) { + $data['payment_laybuy_api_url'] = $this->request->post['payment_laybuy_api_url']; + } elseif ($this->config->get('payment_laybuy_api_url')) { + $data['payment_laybuy_api_url'] = $this->config->get('payment_laybuy_api_url'); + } else { + $data['payment_laybuy_api_url'] = 'https://lay-buys.com/report/'; + } + + if (isset($this->request->post['payment_laybuy_geo_zone_id'])) { + $data['payment_laybuy_geo_zone_id'] = $this->request->post['payment_laybuy_geo_zone_id']; + } else { + $data['payment_laybuy_geo_zone_id'] = $this->config->get('payment_laybuy_geo_zone_id'); + } + + if (isset($this->request->post['payment_laybuy_status'])) { + $data['payment_laybuy_status'] = $this->request->post['payment_laybuy_status']; + } else { + $data['payment_laybuy_status'] = $this->config->get('payment_laybuy_status'); + } + + if (isset($this->request->post['payment_laybuy_sort_order'])) { + $data['payment_laybuy_sort_order'] = $this->request->post['payment_laybuy_sort_order']; + } else { + $data['payment_laybuy_sort_order'] = $this->config->get('payment_laybuy_sort_order'); + } + + $data['laybuy_cron_url'] = HTTPS_CATALOG . 'index.php?route=extension/payment/laybuy/cron&token=' . $data['payment_laybuy_token']; + + if ($this->config->get('laybuy_cron_time')) { + $data['laybuy_cron_time'] = date($this->language->get('datetime_format'), strtotime($this->config->get('laybuy_cron_time'))); + } else { + $data['laybuy_cron_time'] = $this->language->get('text_no_cron_time'); + } + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->error['laybuys_membership_id'])) { + $data['error_laybuys_membership_id'] = $this->error['laybuys_membership_id']; + } else { + $data['error_laybuys_membership_id'] = ''; + } + + if (isset($this->error['laybuy_token'])) { + $data['error_laybuy_token'] = $this->error['laybuy_token']; + } else { + $data['error_laybuy_token'] = ''; + } + + if (isset($this->error['laybuy_min_deposit'])) { + $data['error_laybuy_min_deposit'] = $this->error['laybuy_min_deposit']; + } else { + $data['error_laybuy_min_deposit'] = ''; + } + + $this->load->model('localisation/order_status'); + + $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); + + $this->load->model('localisation/geo_zone'); + + $data['geo_zones'] = $this->model_localisation_geo_zone->getGeoZones(); + + /* Reports tab */ + if (isset($this->request->get['filter_order_id'])) { + $filter_order_id = $this->request->get['filter_order_id']; + } else { + $filter_order_id = ''; + } + + if (isset($this->request->get['filter_customer'])) { + $filter_customer = $this->request->get['filter_customer']; + } else { + $filter_customer = ''; + } + + if (isset($this->request->get['filter_dp_percent'])) { + $filter_dp_percent = $this->request->get['filter_dp_percent']; + } else { + $filter_dp_percent = ''; + } + + if (isset($this->request->get['filter_months'])) { + $filter_months = $this->request->get['filter_months']; + } else { + $filter_months = ''; + } + + if (isset($this->request->get['filter_status'])) { + $filter_status = $this->request->get['filter_status']; + } else { + $filter_status = ''; + } + + if (isset($this->request->get['filter_date_added'])) { + $filter_date_added = $this->request->get['filter_date_added']; + } else { + $filter_date_added = ''; + } + + if (isset($this->request->get['sort'])) { + $sort = $this->request->get['sort']; + } else { + $sort = 'lt.order_id'; + } + + if (isset($this->request->get['order'])) { + $order = $this->request->get['order']; + } else { + $order = 'DESC'; + } + + if (isset($this->request->get['page'])) { + $page = $this->request->get['page']; + } else { + $page = 1; + } + + $data['reports'] = array(); + + $filter_data = array( + 'filter_order_id' => $filter_order_id, + 'filter_customer' => $filter_customer, + 'filter_dp_percent' => $filter_dp_percent, + 'filter_months' => $filter_months, + 'filter_status' => $filter_status, + 'filter_date_added' => $filter_date_added, + 'sort' => $sort, + 'order' => $order, + 'start' => ($page - 1) * $this->config->get('config_limit_admin'), + 'limit' => $this->config->get('config_limit_admin') + ); + + $report_total = $this->model_extension_payment_laybuy->getTotalTransactions($filter_data); + + $results = $this->model_extension_payment_laybuy->getTransactions($filter_data); + + foreach ($results as $result) { + $customer_url = false; + + $customer_id = $this->model_extension_payment_laybuy->getCustomerIdByOrderId($result['order_id']); + + if ($customer_id) { + $customer_url = $this->url->link('customer/customer/edit', 'user_token=' . $this->session->data['user_token'] . '&customer_id=' . (int)$customer_id, true); + } + + $data['reports'][] = array( + 'id' => $result['laybuy_transaction_id'], + 'order_id' => $result['order_id'], + 'order_url' => $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . (int)$result['order_id'], true), + 'customer_name' => $result['firstname'] . ' ' . $result['lastname'], + 'customer_url' => $customer_url, + 'amount' => $this->currency->format($result['amount'], $result['currency']), + 'dp_percent' => $result['downpayment'], + 'months' => $result['months'], + 'dp_amount' => $this->currency->format($result['downpayment_amount'], $result['currency']), + 'first_payment' => date($this->language->get('date_format_short'), strtotime($result['first_payment_due'])), + 'last_payment' => date($this->language->get('date_format_short'), strtotime($result['last_payment_due'])), + 'status' => $this->model_extension_payment_laybuy->getStatusLabel($result['status']), + 'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])), + 'view' => $this->url->link('extension/payment/laybuy/transaction', 'user_token=' . $this->session->data['user_token'] . '&id=' . (int)$result['laybuy_transaction_id'], true) + ); + } + + if (isset($this->request->post['selected'])) { + $data['selected'] = (array)$this->request->post['selected']; + } else { + $data['selected'] = array(); + } + + $url = ''; + + if (isset($this->request->get['filter_order_id'])) { + $url .= '&filter_order_id=' . urlencode(html_entity_decode($this->request->get['filter_order_id'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_customer'])) { + $url .= '&filter_customer=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_dp_percent'])) { + $url .= '&filter_dp_percent=' . urlencode(html_entity_decode($this->request->get['filter_dp_percent'], ENT_QUOTES, 'UTF-8')); + } + + if (isset($this->request->get['filter_months'])) { + $url .= '&filter_months=' . $this->request->get['filter_months']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_date_added'])) { + $url .= '&filter_date_added=' . $this->request->get['filter_date_added']; + } + + if ($order == 'ASC') { + $url .= '&order=DESC'; + } else { + $url .= '&order=ASC'; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + $data['sort_order_id'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.order_id' . $url . '#reportstab', true); + $data['sort_customer'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=customer' . $url . '#reportstab', true); + $data['sort_amount'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.amount' . $url . '#reportstab', true); + $data['sort_dp_percent'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.downpayment' . $url . '#reportstab', true); + $data['sort_months'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.months' . $url . '#reportstab', true); + $data['sort_dp_amount'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.downpayment_amount' . $url . '#reportstab', true); + $data['sort_first_payment'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.first_payment_due' . $url . '#reportstab', true); + $data['sort_last_payment'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.last_payment_due' . $url . '#reportstab', true); + $data['sort_status'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.status' . $url . '#reportstab', true); + $data['sort_date_added'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '&sort=lt.date_added' . $url . '#reportstab', true); + + $url = ''; + + if (isset($this->request->get['filter_order_id'])) { + $url .= '&filter_order_id=' . $this->request->get['filter_order_id']; + } + + if (isset($this->request->get['filter_customer'])) { + $url .= '&filter_customer=' . $this->request->get['filter_customer']; + } + + if (isset($this->request->get['filter_dp_percent'])) { + $url .= '&filter_dp_percent=' . $this->request->get['filter_dp_percent']; + } + + if (isset($this->request->get['filter_months'])) { + $url .= '&filter_months=' . $this->request->get['filter_months']; + } + + if (isset($this->request->get['filter_status'])) { + $url .= '&filter_status=' . $this->request->get['filter_status']; + } + + if (isset($this->request->get['filter_date_added'])) { + $url .= '&filter_date_added=' . $this->request->get['filter_date_added']; + } + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + $pagination = new Pagination(); + $pagination->total = $report_total; + $pagination->page = $page; + $pagination->limit = $this->config->get('config_limit_admin'); + $pagination->url = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}#reportstab', true); + + $data['pagination'] = $pagination->render(); + + $data['results'] = sprintf($this->language->get('text_pagination'), ($report_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($report_total - $this->config->get('config_limit_admin'))) ? $report_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $report_total, ceil($report_total / $this->config->get('config_limit_admin'))); + + $data['filter_order_id'] = $filter_order_id; + $data['filter_customer'] = $filter_customer; + $data['filter_dp_percent'] = $filter_dp_percent; + $data['filter_months'] = $filter_months; + $data['filter_status'] = $filter_status; + $data['filter_date_added'] = $filter_date_added; + + $data['sort'] = $sort; + $data['order'] = $order; + + $data['transaction_statuses'] = $this->model_extension_payment_laybuy->getTransactionStatuses(); + /* End of Reports Tab */ + + $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->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/payment/laybuy', $data)); + } + + public function fetch() { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->log('Fetching transactions'); + + if ($this->user->hasPermission('modify', 'extension/payment/laybuy')) { + $this->load->language('extension/payment/laybuy'); + + $json = array(); + + $fetched = 0; + + $paypal_profile_id_array = $this->model_extension_payment_laybuy->getPayPalProfileIds(); + + if ($paypal_profile_id_array) { + $paypal_profile_ids = ''; + + foreach ($paypal_profile_id_array as $profile_id) { + $paypal_profile_ids .= $profile_id['paypal_profile_id'] . ','; + } + + $paypal_profile_ids = rtrim($paypal_profile_ids, ','); + + $data_string = 'mid=' . $this->config->get('payment_laybuys_membership_id') . '&' . 'profileIds=' . $paypal_profile_ids; + + $this->model_extension_payment_laybuy->log('Data String: ' . $data_string); + + $this->model_extension_payment_laybuy->log('API URL: ' . $this->config->get('payment_laybuy_api_url')); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $this->config->get('payment_laybuy_api_url')); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + $result = curl_exec($ch); + if (curl_errno($ch)) { + $this->model_extension_payment_laybuy->log('cURL error: ' . curl_errno($ch)); + } + curl_close($ch); + + $results = json_decode($result, true); + + $this->model_extension_payment_laybuy->log('Response: ' . print_r($results, true)); + + if ($results) { + foreach ($results as $laybuy_ref_id => $reports) { + $status = $reports['status']; + + $report = $reports['report']; + + $transaction = array(); + + $transaction = $this->model_extension_payment_laybuy->getTransactionByLayBuyRefId($laybuy_ref_id); + + $order_id = $transaction['order_id']; + + $paypal_profile_id = $transaction['paypal_profile_id']; + + $months = $transaction['months']; + + $report_content = array(); + + $pending_flag = false; + + $next_payment_status = $this->language->get('text_status_1'); + + foreach ($report as $month => $payment) { + $payment['paymentDate'] = date('Y-m-d h:i:s', strtotime(str_replace('/', '-', $payment['paymentDate']))); + $date = date($this->language->get('date_format_short'), strtotime($payment['paymentDate'])); + $next_payment_date = $payment['paymentDate']; + + if ($payment['type'] == 'd') { + $report_content[] = array( + 'instalment' => 0, + 'amount' => $this->currency->format($payment['amount'], $transaction['currency']), + 'date' => $date, + 'pp_trans_id' => $payment['txnID'], + 'status' => $payment['paymentStatus'] + ); + } elseif ($payment['type'] == 'p') { + $pending_flag = true; + + $report_content[] = array( + 'instalment' => $month, + 'amount' => $this->currency->format($payment['amount'], $transaction['currency']), + 'date' => $date, + 'pp_trans_id' => $payment['txnID'], + 'status' => $payment['paymentStatus'] + ); + + $next_payment_status = $payment['paymentStatus']; + } + } + + if ($pending_flag) { + $start_index = $month + 1; + } else { + $start_index = $month + 2; + } + + if ($month < $months) { + for ($month = 1; $month <= $months; $month++) { + $next_payment_date = date("Y-m-d h:i:s", strtotime($next_payment_date . " +1 month")); + $date = date($this->language->get('date_format_short'), strtotime($next_payment_date)); + + $report_content[] = array( + 'instalment' => $month, + 'amount' => $this->currency->format($transaction['payment_amounts'], $transaction['currency']), + 'date' => $date, + 'pp_trans_id' => '', + 'status' => $next_payment_status + ); + } + } + + $report_content = json_encode($report_content); + + switch ($status) { + case -1: // Cancel + $this->model_extension_payment_laybuy->log('Transaction #' . $transaction['laybuy_transaction_id'] . ' canceled'); + $this->model_extension_payment_laybuy->updateOrderStatus($order_id, $this->config->get('payment_laybuy_order_status_id_canceled'), $this->language->get('text_comment')); + $this->model_extension_payment_laybuy->updateTransaction($transaction['laybuy_transaction_id'], '7', $report_content, $start_index); + $fetched++; + break; + case 0: // Pending + $this->model_extension_payment_laybuy->log('Transaction #' . $transaction['laybuy_transaction_id'] . ' still pending'); + $this->model_extension_payment_laybuy->updateTransaction($transaction['laybuy_transaction_id'], $transaction['status'], $report_content, $start_index); + $fetched++; + break; + case 1: // Paid + $this->model_extension_payment_laybuy->log('Transaction #' . $transaction['laybuy_transaction_id'] . ' paid'); + $this->model_extension_payment_laybuy->updateOrderStatus($order_id, $this->config->get('payment_laybuy_order_status_id_processing'), $this->language->get('text_comment')); + $this->model_extension_payment_laybuy->updateTransaction($transaction['laybuy_transaction_id'], '5', $report_content, $start_index); + $fetched++; + break; + } + } + } + + if ($fetched) { + $this->session->data['success'] = sprintf($this->language->get('text_fetched_some'), $fetched); + } else { + $this->session->data['success'] = $this->language->get('text_fetched_none'); + } + + $this->response->redirect($this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'], true)); + } else { + $this->model_extension_payment_laybuy->log('No PayPal Profile IDs to update'); + + $this->session->data['success'] = $this->language->get('text_fetched_none'); + + $this->response->redirect($this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'], true)); + } + } else { + $this->model_extension_payment_laybuy->log('User does not have permission'); + } + } + + public function install() { + if ($this->user->hasPermission('modify', 'marketplace/extension')) { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->install(); + } + } + + public function uninstall() { + if ($this->user->hasPermission('modify', 'marketplace/extension')) { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->uninstall(); + } + } + + public function transaction($order_page = false) { + $this->load->model('extension/payment/laybuy'); + + $this->load->language('extension/payment/laybuy'); + + if (isset($this->request->get['id'])) { + $id = (int)$this->request->get['id']; + } else { + $id = 0; + } + + $data['id'] = $id; + + if (!$order_page) { + $this->document->setTitle($this->language->get('heading_transaction_title')); + } + + $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( + 'text' => $this->language->get('text_extension'), + 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'], true) + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '#reportstab', true) + ); + + $data['breadcrumbs'][] = array( + 'text' => $this->language->get('heading_transaction_title'), + 'href' => $this->url->link('extension/payment/laybuy/transaction', 'user_token=' . $this->session->data['user_token'] . '&id=' . $id, true) + ); + + $data['heading_title'] = $this->language->get('heading_transaction_title'); + + $data['button_cancel'] = $this->language->get('button_cancel'); + + $data['cancel'] = $this->url->link('extension/payment/laybuy', 'user_token=' . $this->session->data['user_token'] . '#reportstab', true); + + $transaction_info = $this->model_extension_payment_laybuy->getTransaction($id); + + if ($transaction_info) { + $data['initial_payments'] = $this->model_extension_payment_laybuy->getInitialPayments(); + + $data['months'] = $this->model_extension_payment_laybuy->getMonths(); + + $data['currency_symbol_left'] = $this->currency->getSymbolLeft($transaction_info['currency']); + + $data['currency_symbol_right'] = $this->currency->getSymbolRight($transaction_info['currency']); + + $data['store_url'] = HTTPS_CATALOG; + + $data['api_key'] = $this->getApiKey(); + + $this->load->model('sale/order'); + + $order = $this->model_sale_order->getOrder($transaction_info['order_id']); + + $data['order_info'] = array( + 'currency_value' => $order['currency_value'] + ); + + $data['total'] = $this->model_extension_payment_laybuy->getRemainingAmount($transaction_info['amount'], $transaction_info['downpayment_amount'], $transaction_info['payment_amounts'], $transaction_info['transaction']); + + $data['transaction'] = array( + 'paypal_profile_id' => $transaction_info['paypal_profile_id'], + 'laybuy_ref_no' => $transaction_info['laybuy_ref_no'], + 'order_id' => $transaction_info['order_id'], + 'firstname' => $transaction_info['firstname'], + 'lastname' => $transaction_info['lastname'], + 'email' => $transaction_info['email'], + 'address' => $transaction_info['address'], + 'suburb' => $transaction_info['suburb'], + 'state' => $transaction_info['state'], + 'country' => $transaction_info['country'], + 'postcode' => $transaction_info['postcode'], + 'status_id' => $transaction_info['status'], + 'status' => $this->model_extension_payment_laybuy->getStatusLabel($transaction_info['status']), + 'amount' => $this->currency->format($transaction_info['amount'], $transaction_info['currency']), + 'remaining' => $this->currency->format($this->model_extension_payment_laybuy->getRemainingAmount($transaction_info['amount'], $transaction_info['downpayment_amount'], $transaction_info['payment_amounts'], $transaction_info['transaction']), $transaction_info['currency']), + 'downpayment' => $transaction_info['downpayment'], + 'months' => $transaction_info['months'], + 'downpayment_amount' => $this->currency->format($transaction_info['downpayment_amount'], $transaction_info['currency']), + 'payment_amounts' => $this->currency->format($transaction_info['payment_amounts'], $transaction_info['currency']), + 'first_payment_due' => date($this->language->get('date_format_short'), strtotime($transaction_info['first_payment_due'])), + 'last_payment_due' => date($this->language->get('date_format_short'), strtotime($transaction_info['last_payment_due'])), + 'report' => json_decode($transaction_info['report'], true) + ); + } else { + $data['transaction'] = array(); + + $data['text_not_found'] = $this->language->get('text_not_found'); + } + + $data['user_token'] = $this->session->data['user_token']; + + 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_warning'])) { + $data['error_warning'] = $this->session->data['error_warning']; + + unset($this->session->data['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'); + + if ($order_page) { + return $data; + } + + $this->response->setOutput($this->load->view('extension/payment/laybuy_transaction', $data)); + } + + public function cancel() { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->log('Canceling transaction'); + + if ($this->request->get['source'] == 'order') { + $this->model_extension_payment_laybuy->log('Called from order page'); + } else { + $this->model_extension_payment_laybuy->log('Called from extension page'); + } + + if ($this->user->hasPermission('modify', 'extension/payment/laybuy')) { + $this->load->language('extension/payment/laybuy'); + + $json = array(); + + $id = (int)$this->request->get['id']; + + $transaction_info = $this->model_extension_payment_laybuy->getTransaction($id); + + $cancel = false; + + if (!$transaction_info['paypal_profile_id']) { + $this->model_extension_payment_laybuy->log('Transaction has no paypal_profile_id'); + + $cancel = true; + } + + if (!$cancel) { + $data_string = 'mid=' . $this->config->get('payment_laybuys_membership_id') . '&' . 'paypal_profile_id=' . $transaction_info['paypal_profile_id']; + + $this->model_extension_payment_laybuy->log('Data String: ' . $data_string); + + $ch = curl_init(); + $url = 'https://lay-buys.com/vtmob/deal5cancel.php'; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + $result = curl_exec($ch); + if (curl_errno($ch)) { + $this->model_extension_payment_laybuy->log('cURL error: ' . curl_errno($ch)); + } + curl_close($ch); + + $this->model_extension_payment_laybuy->log('Response: ' . $result); + + if ($result == 'success') { + $this->model_extension_payment_laybuy->log('Success'); + + $cancel = true; + } else { + $this->model_extension_payment_laybuy->log('Failure'); + } + } + + if ($cancel) { + $this->model_extension_payment_laybuy->log('Transaction canceled'); + + $report_content = json_decode($transaction_info['report'], true); + + foreach ($report_content as &$array) { + $array['status'] = str_replace('Pending', 'Canceled', $array['status']); + } + + $report_content = json_encode($report_content); + + $this->model_extension_payment_laybuy->updateTransaction($transaction_info['laybuy_transaction_id'], '7', $report_content, $transaction_info['transaction']); + + $json['success'] = $this->language->get('text_cancel_success'); + + $json['order_id'] = $transaction_info['order_id']; + + $json['order_status_id'] = $this->config->get('payment_laybuy_order_status_id_canceled'); + + $json['comment'] = sprintf($this->language->get('text_comment_canceled'), $transaction_info['paypal_profile_id']); + } else { + $json['error'] = $this->language->get('text_cancel_failure'); + } + + if ($this->request->get['source'] == 'order') { + $json['reload'] = $this->url->link('sale/order/info', 'order_id=' . (int)$transaction_info['order_id'] . '&user_token=' . $this->session->data['user_token'], true); + } else { + $json['reload'] = $this->url->link('extension/payment/laybuy/transaction', 'user_token=' . $this->session->data['user_token'] . '&id=' . $id, true); + } + + $this->response->setOutput(json_encode($json)); + } else { + $this->model_extension_payment_laybuy->log('User does not have permission'); + } + } + + public function revise() { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->log('Revising transaction'); + + if ($this->request->get['source'] == 'order') { + $this->model_extension_payment_laybuy->log('Called from order page'); + } else { + $this->model_extension_payment_laybuy->log('Called from extension page'); + } + + if ($this->user->hasPermission('modify', 'extension/payment/laybuy')) { + if ($this->request->server['REQUEST_METHOD'] == 'POST') { + $this->load->language('extension/payment/laybuy'); + + $json = array(); + + $payment_type = $this->request->post['payment_type']; + + $amount = $this->request->post['amount']; + + $initial = $this->request->post['INIT']; + + $months = $this->request->post['MONTHS']; + + $id = $this->request->get['id']; + + $transaction_info = $this->model_extension_payment_laybuy->getTransaction($id); + + $original = $new = $transaction_info; + + $original['transaction_id'] = $new['transaction_id'] = $transaction_info['laybuy_transaction_id']; + + $original['payment_type'] = $new['payment_type'] = $payment_type; + + $original['type'] = 'Original'; + + $new['type'] = 'New'; + $new['status'] = '50'; + $new['amount'] = $amount; + $new['downpayment'] = $initial; + $new['months'] = $months; + + $collection = $this->model_extension_payment_laybuy->getRevisedTransactions($id); + + $this->model_extension_payment_laybuy->log('Collection: ' . print_r($collection, true)); + + if (count($collection) == 2) { + $this->model_extension_payment_laybuy->log('Collection == 2'); + + foreach ($collection as $request) { + $this->model_extension_payment_laybuy->log('request: ' . print_r($request, true)); + + if ($request['type'] == 'Original') { + $this->model_extension_payment_laybuy->log('Original: ' . print_r($original, true)); + + $this->model_extension_payment_laybuy->updateRevisedTransaction($id, $original); + } elseif ($request['type'] == 'New') { + $this->model_extension_payment_laybuy->log('New: ' . print_r($new, true)); + + $this->model_extension_payment_laybuy->updateRevisedTransaction($id, $new); + + $revised_transaction = $this->model_extension_payment_laybuy->getRevisedTransaction($id); + } + } + } else { + $this->model_extension_payment_laybuy->log('Collection != 2'); + + $this->model_extension_payment_laybuy->addRevisedTransaction($original); + + $laybuy_revise_request_id = $this->model_extension_payment_laybuy->addRevisedTransaction($new); + + $this->model_extension_payment_laybuy->log('$laybuy_revise_request_id: ' . $laybuy_revise_request_id); + + $revised_transaction = $this->model_extension_payment_laybuy->getRevisedTransaction($laybuy_revise_request_id); + } + + $this->model_extension_payment_laybuy->log('Revised transaction: ' . print_r($revised_transaction, true)); + + if ($revised_transaction['payment_type'] == '1') { + $pp = '1'; + $pplan = '1'; + } else { + $pp = '0'; + $pplan = '0'; + } + + $data = array(); + + $data['mid'] = $this->config->get('payment_laybuys_membership_id'); + $data['eml'] = $revised_transaction['email']; + $data['prc'] = $revised_transaction['amount']; + $data['curr'] = $revised_transaction['currency']; + $data['pp'] = $pp; + $data['pplan'] = $pplan; + $data['init'] = $initial; + $data['mnth'] = $months; + $data['convrate'] = '1'; + $data['id'] = $revised_transaction['laybuy_revise_request_id'] . '-' . $revised_transaction['order_id'] . ':' . md5($this->config->get('payment_laybuy_token')); + $data['RETURNURL'] = HTTPS_CATALOG . 'index.php?route=extension/payment/laybuy/reviseCallback'; + $data['CANCELURL'] = HTTPS_CATALOG . 'index.php?route=extension/payment/laybuy/reviseCancel'; + + $data_string = ''; + + foreach ($data as $param => $value) { + $data_string .= $param . '=' . $value . '&'; + } + + $data_string = rtrim($data_string, '&'); + + $this->model_extension_payment_laybuy->log('Data String: ' . $data_string); + + $ch = curl_init(); + $url = 'https://lay-buys.com/vtmob/deal5.php'; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_TIMEOUT, 30); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + $result = curl_exec($ch); + if (curl_errno($ch)) { + $this->model_extension_payment_laybuy->log('cURL error: ' . curl_errno($ch)); + } + curl_close($ch); + + if ($result == 'success') { + $this->model_extension_payment_laybuy->log('Success'); + + $this->model_extension_payment_laybuy->updateTransactionStatus($id, '50'); + + $json['success'] = $this->language->get('text_revise_success'); + } else { + $this->model_extension_payment_laybuy->log('Failure'); + + $this->model_extension_payment_laybuy->log('Response: ' . print_r($result, true)); + + $json['error'] = $this->language->get('text_revise_failure'); + } + + if ($this->request->get['source'] == 'order') { + $json['reload'] = $this->url->link('sale/order/info', 'order_id=' . (int)$transaction_info['order_id'] . '&user_token=' . $this->session->data['user_token'], true); + } else { + $json['reload'] = $this->url->link('extension/payment/laybuy/transaction', 'user_token=' . $this->session->data['user_token'] . '&id=' . $id, true); + } + + $this->response->setOutput(json_encode($json)); + } else { + $this->model_extension_payment_laybuy->log('No $_POST data'); + } + } else { + $this->model_extension_payment_laybuy->log('User does not have permission'); + } + } + + public function autocomplete() { + $json = array(); + + if (isset($this->request->get['filter_customer_group'])) { + $this->load->model('customer/customer_group'); + + $results = $this->model_customer_customer_group->getCustomerGroups(); + + foreach ($results as $result) { + $json[] = array( + 'customer_group_id' => $result['customer_group_id'], + 'name' => strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')) + ); + } + } + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + public function order() { + if ($this->config->get('payment_laybuy_status')) { + $this->load->model('extension/payment/laybuy'); + + $this->load->language('extension/payment/laybuy'); + + $order_id = $this->request->get['order_id']; + + $transaction_info = $this->model_extension_payment_laybuy->getTransactionByOrderId($order_id); + + $laybuy_transaction_id = $transaction_info['laybuy_transaction_id']; + + $this->request->get['id'] = $laybuy_transaction_id; + + $data = $this->transaction(true); + + $data['store_url'] = HTTPS_CATALOG; + + $data['api_key'] = $this->getApiKey(); + + return $this->load->view('extension/payment/laybuy_order', $data); + } + } + + private function getApiKey() { + $this->load->model('extension/payment/laybuy'); + + $this->model_extension_payment_laybuy->log('Getting API key'); + + $this->load->model('user/api'); + + $api_info = $this->model_user_api->getApi($this->config->get('config_api_id')); + + if ($api_info) { + $this->model_extension_payment_laybuy->log('API key: ' . $api_info['key']); + + return $api_info['key']; + } else { + $this->model_extension_payment_laybuy->log('No API info'); + + return; + } + } + + protected function validate() { + if (!$this->user->hasPermission('modify', 'extension/payment/laybuy')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if (!$this->request->post['payment_laybuys_membership_id']) { + $this->error['laybuys_membership_id'] = $this->language->get('error_membership_id'); + } + + if (!$this->request->post['payment_laybuy_token']) { + $this->error['laybuy_token'] = $this->language->get('error_token'); + } + + if ($this->request->post['payment_laybuy_min_deposit'] > $this->request->post['payment_laybuy_max_deposit']) { + $this->error['laybuy_min_deposit'] = $this->language->get('error_min_deposit'); + } + + return !$this->error; + } +} |