981 lines
32 KiB
PHP
981 lines
32 KiB
PHP
<?php
|
|
namespace Opencart\Admin\Controller\Sale;
|
|
/**
|
|
* Class Subscription
|
|
*
|
|
* @package Opencart\Admin\Controller\Sale
|
|
*/
|
|
class Subscription extends \Opencart\System\Engine\Controller {
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function index(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$this->document->setTitle($this->language->get('heading_title'));
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$filter_subscription_id = (int)$this->request->get['filter_subscription_id'];
|
|
} else {
|
|
$filter_subscription_id = '';
|
|
}
|
|
|
|
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_subscription_status_id'])) {
|
|
$filter_subscription_status_id = (int)$this->request->get['filter_subscription_status_id'];
|
|
} else {
|
|
$filter_subscription_status_id = '';
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$filter_date_from = $this->request->get['filter_date_from'];
|
|
} else {
|
|
$filter_date_from = '';
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$filter_date_to = $this->request->get['filter_date_to'];
|
|
} else {
|
|
$filter_date_to = '';
|
|
}
|
|
|
|
$url = '';
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$url .= '&filter_subscription_id=' . $this->request->get['filter_subscription_id'];
|
|
}
|
|
|
|
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=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
|
}
|
|
|
|
if (isset($this->request->get['filter_subscription_status_id'])) {
|
|
$url .= '&filter_subscription_status_id=' . $this->request->get['filter_subscription_status_id'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
|
}
|
|
|
|
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'];
|
|
}
|
|
|
|
$data['breadcrumbs'] = [];
|
|
|
|
$data['breadcrumbs'][] = [
|
|
'text' => $this->language->get('text_home'),
|
|
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'])
|
|
];
|
|
|
|
$data['breadcrumbs'][] = [
|
|
'text' => $this->language->get('heading_title'),
|
|
'href' => $this->url->link('sale/subscription', 'user_token=' . $this->session->data['user_token'] . $url)
|
|
];
|
|
|
|
$data['add'] = $this->url->link('sale/subscription.form', 'user_token=' . $this->session->data['user_token'] . $url);
|
|
$data['delete'] = $this->url->link('sale/subscription.delete', 'user_token=' . $this->session->data['user_token']);
|
|
|
|
$data['list'] = $this->getList();
|
|
|
|
$this->load->model('localisation/subscription_status');
|
|
|
|
$data['subscription_statuses'] = $this->model_localisation_subscription_status->getSubscriptionStatuses();
|
|
|
|
$data['filter_subscription_id'] = $filter_subscription_id;
|
|
$data['filter_order_id'] = $filter_order_id;
|
|
$data['filter_customer'] = $filter_customer;
|
|
$data['filter_subscription_status_id'] = $filter_subscription_status_id;
|
|
$data['filter_date_from'] = $filter_date_from;
|
|
$data['filter_date_to'] = $filter_date_to;
|
|
|
|
$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('sale/subscription', $data));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function list(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$this->response->setOutput($this->getList());
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
protected function getList(): string {
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$filter_subscription_id = (int)$this->request->get['filter_subscription_id'];
|
|
} else {
|
|
$filter_subscription_id = '';
|
|
}
|
|
|
|
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_subscription_status_id'])) {
|
|
$filter_subscription_status_id = (int)$this->request->get['filter_subscription_status_id'];
|
|
} else {
|
|
$filter_subscription_status_id = '';
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$filter_date_from = $this->request->get['filter_date_from'];
|
|
} else {
|
|
$filter_date_from = '';
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$filter_date_to = $this->request->get['filter_date_to'];
|
|
} else {
|
|
$filter_date_to = '';
|
|
}
|
|
|
|
if (isset($this->request->get['sort'])) {
|
|
$sort = (string)$this->request->get['sort'];
|
|
} else {
|
|
$sort = 's.subscription_id';
|
|
}
|
|
|
|
if (isset($this->request->get['order'])) {
|
|
$order = (string)$this->request->get['order'];
|
|
} else {
|
|
$order = 'DESC';
|
|
}
|
|
|
|
if (isset($this->request->get['page'])) {
|
|
$page = (int)$this->request->get['page'];
|
|
} else {
|
|
$page = 1;
|
|
}
|
|
|
|
$url = '';
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$url .= '&filter_subscription_id=' . $this->request->get['filter_subscription_id'];
|
|
}
|
|
|
|
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=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
|
}
|
|
|
|
if (isset($this->request->get['filter_subscription_status_id'])) {
|
|
$url .= '&filter_subscription_status_id=' . $this->request->get['filter_subscription_status_id'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
|
}
|
|
|
|
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'];
|
|
}
|
|
|
|
$data['subscriptions'] = [];
|
|
|
|
$filter_data = [
|
|
'filter_subscription_id' => $filter_subscription_id,
|
|
'filter_order_id' => $filter_order_id,
|
|
'filter_customer' => $filter_customer,
|
|
'filter_subscription_status_id' => $filter_subscription_status_id,
|
|
'filter_date_from' => $filter_date_from,
|
|
'filter_date_to' => $filter_date_to,
|
|
'order' => $order,
|
|
'sort' => $sort,
|
|
'start' => ($page - 1) * $this->config->get('config_pagination_admin'),
|
|
'limit' => $this->config->get('config_pagination_admin')
|
|
];
|
|
|
|
$this->load->model('sale/subscription');
|
|
|
|
$subscription_total = $this->model_sale_subscription->getTotalSubscriptions($filter_data);
|
|
|
|
$results = $this->model_sale_subscription->getSubscriptions($filter_data);
|
|
|
|
foreach ($results as $result) {
|
|
$data['subscriptions'][] = [
|
|
'subscription_id' => $result['subscription_id'],
|
|
'order_id' => $result['order_id'],
|
|
'customer' => $result['customer'],
|
|
'status' => $result['subscription_status'],
|
|
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
|
|
'view' => $this->url->link('sale/subscription.info', 'user_token=' . $this->session->data['user_token'] . '&subscription_id=' . $result['subscription_id'] . $url),
|
|
'order' => $this->url->link('sale/order.info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $result['order_id'])
|
|
];
|
|
}
|
|
|
|
$url = '';
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$url .= '&filter_subscription_id=' . $this->request->get['filter_subscription_id'];
|
|
}
|
|
|
|
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=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
|
}
|
|
|
|
if (isset($this->request->get['filter_subscription_status_id'])) {
|
|
$url .= '&filter_subscription_status_id=' . $this->request->get['filter_subscription_status_id'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
|
}
|
|
|
|
if ($order == 'ASC') {
|
|
$url .= '&order=DESC';
|
|
} else {
|
|
$url .= '&order=ASC';
|
|
}
|
|
|
|
$data['sort_subscription'] = $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . '&sort=s.subscription_id' . $url);
|
|
$data['sort_order'] = $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . '&sort=s.order_id' . $url);
|
|
$data['sort_customer'] = $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . '&sort=customer' . $url);
|
|
$data['sort_status'] = $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . '&sort=subscription_status' . $url);
|
|
$data['sort_date_added'] = $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . '&sort=s.date_added' . $url);
|
|
|
|
$url = '';
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$url .= '&filter_subscription_id=' . $this->request->get['filter_subscription_id'];
|
|
}
|
|
|
|
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=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
|
}
|
|
|
|
if (isset($this->request->get['filter_status'])) {
|
|
$url .= '&filter_status=' . $this->request->get['filter_status'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
|
}
|
|
|
|
if (isset($this->request->get['sort'])) {
|
|
$url .= '&sort=' . $this->request->get['sort'];
|
|
}
|
|
|
|
if (isset($this->request->get['order'])) {
|
|
$url .= '&order=' . $this->request->get['order'];
|
|
}
|
|
|
|
$data['pagination'] = $this->load->controller('common/pagination', [
|
|
'total' => $subscription_total,
|
|
'page' => $page,
|
|
'limit' => $this->config->get('config_pagination_admin'),
|
|
'url' => $this->url->link('sale/subscription.list', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}')
|
|
]);
|
|
|
|
$data['results'] = sprintf($this->language->get('text_pagination'), ($subscription_total) ? (($page - 1) * $this->config->get('config_pagination_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_pagination_admin')) > ($subscription_total - $this->config->get('config_pagination_admin'))) ? $subscription_total : ((($page - 1) * $this->config->get('config_pagination_admin')) + $this->config->get('config_pagination_admin')), $subscription_total, ceil($subscription_total / $this->config->get('config_pagination_admin')));
|
|
|
|
$data['sort'] = $sort;
|
|
$data['order'] = $order;
|
|
|
|
return $this->load->view('sale/subscription_list', $data);
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function info(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
if (isset($this->request->get['subscription_id'])) {
|
|
$subscription_id = (int)$this->request->get['subscription_id'];
|
|
} else {
|
|
$subscription_id = 0;
|
|
}
|
|
|
|
$this->document->setTitle($this->language->get('heading_title'));
|
|
|
|
$data['text_form'] = !$subscription_id ? $this->language->get('text_add') : sprintf($this->language->get('text_edit'), $subscription_id);
|
|
|
|
$url = '';
|
|
|
|
if (isset($this->request->get['filter_subscription_id'])) {
|
|
$url .= '&filter_subscription_id=' . $this->request->get['filter_subscription_id'];
|
|
}
|
|
|
|
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=' . urlencode(html_entity_decode($this->request->get['filter_customer'], ENT_QUOTES, 'UTF-8'));
|
|
}
|
|
|
|
if (isset($this->request->get['filter_subscription_status_id'])) {
|
|
$url .= '&filter_subscription_status_id=' . $this->request->get['filter_subscription_status_id'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_from'])) {
|
|
$url .= '&filter_date_from=' . $this->request->get['filter_date_from'];
|
|
}
|
|
|
|
if (isset($this->request->get['filter_date_to'])) {
|
|
$url .= '&filter_date_to=' . $this->request->get['filter_date_to'];
|
|
}
|
|
|
|
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'];
|
|
}
|
|
|
|
$data['breadcrumbs'] = [];
|
|
|
|
$data['breadcrumbs'][] = [
|
|
'text' => $this->language->get('text_home'),
|
|
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'])
|
|
];
|
|
|
|
$data['breadcrumbs'][] = [
|
|
'text' => $this->language->get('heading_title'),
|
|
'href' => $this->url->link('sale/subscription', 'user_token=' . $this->session->data['user_token'] . $url)
|
|
];
|
|
|
|
$data['back'] = $this->url->link('sale/subscription', 'user_token=' . $this->session->data['user_token'] . $url);
|
|
|
|
$data['subscription_id'] = $subscription_id;
|
|
|
|
$this->load->model('sale/subscription');
|
|
|
|
$subscription_info = $this->model_sale_subscription->getSubscription($data['subscription_id']);
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['subscription_id'] = $subscription_info['subscription_id'];
|
|
} else {
|
|
$data['subscription_id'] = '';
|
|
}
|
|
|
|
// Order
|
|
if (!empty($subscription_info)) {
|
|
$this->load->model('sale/order');
|
|
|
|
$order_info = $this->model_sale_order->getOrder($subscription_info['order_id']);
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['order'] = $this->url->link('sale/order.info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $subscription_info['order_id']);
|
|
} else {
|
|
$data['order'] = '';
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['order_id'] = $subscription_info['order_id'];
|
|
} else {
|
|
$data['order_id'] = 0;
|
|
}
|
|
|
|
// Customer
|
|
if (!empty($subscription_info)) {
|
|
$this->load->model('customer/customer');
|
|
|
|
$customer_info = $this->model_customer_customer->getCustomer($subscription_info['customer_id']);
|
|
}
|
|
|
|
if (!empty($customer_info)) {
|
|
$data['firstname'] = $customer_info['firstname'];
|
|
} else {
|
|
$data['firstname'] = '';
|
|
}
|
|
|
|
if (!empty($customer_info)) {
|
|
$data['lastname'] = $customer_info['lastname'];
|
|
} else {
|
|
$data['lastname'] = '';
|
|
}
|
|
|
|
if (!empty($customer_info)) {
|
|
$data['lastname'] = $customer_info['lastname'];
|
|
} else {
|
|
$data['lastname'] = '';
|
|
}
|
|
|
|
// Subscription
|
|
$data['subscription_plans'] = [];
|
|
|
|
$this->load->model('catalog/subscription_plan');
|
|
|
|
$results = $this->model_catalog_subscription_plan->getSubscriptionPlans();
|
|
|
|
foreach ($results as $result) {
|
|
$description = '';
|
|
|
|
if ($result['trial_status']) {
|
|
$trial_price = $this->currency->format($subscription_info['trial_price'], $this->config->get('config_currency'));
|
|
$trial_cycle = $result['trial_cycle'];
|
|
$trial_frequency = $this->language->get('text_' . $result['trial_frequency']);
|
|
$trial_duration = $result['trial_duration'];
|
|
|
|
$description .= sprintf($this->language->get('text_subscription_trial'), $trial_price, $trial_cycle, $trial_frequency, $trial_duration);
|
|
}
|
|
|
|
$price = $this->currency->format($subscription_info['price'], $this->config->get('config_currency'));
|
|
$cycle = $result['cycle'];
|
|
$frequency = $this->language->get('text_' . $result['frequency']);
|
|
$duration = $result['duration'];
|
|
|
|
if ($result['duration']) {
|
|
$description .= sprintf($this->language->get('text_subscription_duration'), $price, $cycle, $frequency, $duration);
|
|
} else {
|
|
$description .= sprintf($this->language->get('text_subscription_cancel'), $price, $cycle, $frequency);
|
|
}
|
|
|
|
$data['subscription_plans'][] = [
|
|
'subscription_plan_id' => $result['subscription_plan_id'],
|
|
'name' => $result['name'],
|
|
'description' => $description
|
|
];
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['subscription_plan_id'] = $subscription_info['subscription_plan_id'];
|
|
} else {
|
|
$data['subscription_plan_id'] = 0;
|
|
}
|
|
|
|
$subscription_plan_info = $this->model_catalog_subscription_plan->getSubscriptionPlan($data['subscription_plan_id']);
|
|
|
|
if (!empty($subscription_plan_info)) {
|
|
$data['subscription_plan'] = '';
|
|
|
|
if ($subscription_plan_info['trial_status']) {
|
|
$trial_price = $this->currency->format($subscription_info['trial_price'], $this->config->get('config_currency'));
|
|
$trial_cycle = $result['trial_cycle'];
|
|
$trial_frequency = $this->language->get('text_' . $subscription_plan_info['trial_frequency']);
|
|
$trial_duration = $subscription_plan_info['trial_duration'];
|
|
|
|
$data['subscription_plan'] .= sprintf($this->language->get('text_subscription_trial'), $trial_price, $trial_cycle, $trial_frequency, $trial_duration);
|
|
}
|
|
|
|
$price = $this->currency->format($subscription_info['price'], $this->config->get('config_currency'));
|
|
$cycle = $result['cycle'];
|
|
$frequency = $this->language->get('text_' . $subscription_plan_info['frequency']);
|
|
$duration = $subscription_plan_info['duration'];
|
|
|
|
if ($subscription_plan_info['duration']) {
|
|
$data['subscription_plan'] .= sprintf($this->language->get('text_subscription_duration'), $price, $cycle, $frequency, $duration);
|
|
} else {
|
|
$data['subscription_plan'] .= sprintf($this->language->get('text_subscription_cancel'), $price, $cycle, $frequency);
|
|
}
|
|
} else {
|
|
$data['subscription_plan'] = '';
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_price'] = $subscription_info['trial_price'];
|
|
} else {
|
|
$data['trial_price'] = 0;
|
|
}
|
|
|
|
$data['frequencies'] = [];
|
|
|
|
$data['frequencies'][] = [
|
|
'text' => $this->language->get('text_day'),
|
|
'value' => 'day'
|
|
];
|
|
|
|
$data['frequencies'][] = [
|
|
'text' => $this->language->get('text_week'),
|
|
'value' => 'week'
|
|
];
|
|
|
|
$data['frequencies'][] = [
|
|
'text' => $this->language->get('text_semi_month'),
|
|
'value' => 'semi_month'
|
|
];
|
|
|
|
$data['frequencies'][] = [
|
|
'text' => $this->language->get('text_month'),
|
|
'value' => 'month'
|
|
];
|
|
|
|
$data['frequencies'][] = [
|
|
'text' => $this->language->get('text_year'),
|
|
'value' => 'year'
|
|
];
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_frequency'] = $subscription_info['trial_frequency'];
|
|
} else {
|
|
$data['trial_frequency'] = '';
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_cycle'] = $subscription_info['trial_cycle'];
|
|
} else {
|
|
$data['trial_cycle'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_duration'] = $subscription_info['trial_duration'];
|
|
} else {
|
|
$data['trial_duration'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_remaining'] = $subscription_info['trial_remaining'];
|
|
} else {
|
|
$data['trial_remaining'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['trial_status'] = $subscription_info['trial_status'];
|
|
} else {
|
|
$data['trial_status'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['price'] = $subscription_info['price'];
|
|
} else {
|
|
$data['price'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['frequency'] = $subscription_info['frequency'];
|
|
} else {
|
|
$data['frequency'] = '';
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['cycle'] = $subscription_info['cycle'];
|
|
} else {
|
|
$data['cycle'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['duration'] = $subscription_info['duration'];
|
|
} else {
|
|
$data['duration'] = 0;
|
|
}
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['remaining'] = $subscription_info['remaining'];
|
|
} else {
|
|
$data['remaining'] = 0;
|
|
}
|
|
|
|
// Date next
|
|
if (!empty($subscription_info)) {
|
|
$data['date_next'] = date($this->language->get('date_format_short'), strtotime($subscription_info['date_next']));
|
|
} else {
|
|
$data['date_next'] = '';
|
|
}
|
|
|
|
|
|
|
|
// Payment method
|
|
if (!empty($subscription_info)) {
|
|
$data['payment_method'] = $subscription_info['payment_method']['name'];
|
|
} else {
|
|
$data['payment_method'] = '';
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!empty($order_info)) {
|
|
$data['date_added'] = date($this->language->get('date_format_short'), strtotime($order_info['date_added']));
|
|
} else {
|
|
$data['date_added'] = '';
|
|
}
|
|
|
|
// Product data
|
|
if (!empty($subscription_info)) {
|
|
$this->load->model('sale/order');
|
|
|
|
$product_info = $this->model_sale_order->getProductByOrderProductId($subscription_info['order_id'], $subscription_info['order_product_id']);
|
|
}
|
|
|
|
if (!empty($product_info['name'])) {
|
|
$data['product_name'] = $product_info['name'];
|
|
} else {
|
|
$data['product_name'] = '';
|
|
}
|
|
|
|
if (!empty($product_info)) {
|
|
$data['product'] = $this->url->link('catalog/product.form', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_info['product_id']);
|
|
} else {
|
|
$data['product'] = '';
|
|
}
|
|
|
|
$data['options'] = [];
|
|
|
|
$options = $this->model_sale_order->getOptions($subscription_info['order_id'], $subscription_info['order_product_id']);
|
|
|
|
foreach ($options as $option) {
|
|
if ($option['type'] != 'file') {
|
|
$data['options'][] = [
|
|
'name' => $option['name'],
|
|
'value' => $option['value'],
|
|
'type' => $option['type']
|
|
];
|
|
} else {
|
|
$upload_info = $this->model_tool_upload->getUploadByCode($option['value']);
|
|
|
|
if ($upload_info) {
|
|
$data['options'][] = [
|
|
'name' => $option['name'],
|
|
'value' => $upload_info['name'],
|
|
'type' => $option['type'],
|
|
'href' => $this->url->link('tool/upload.download', 'user_token=' . $this->session->data['user_token'] . '&code=' . $upload_info['code'])
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (!empty($product_info)) {
|
|
$data['quantity'] = $product_info['quantity'];
|
|
} else {
|
|
$data['quantity'] = '';
|
|
}
|
|
|
|
|
|
|
|
$this->load->model('localisation/subscription_status');
|
|
|
|
$data['subscription_statuses'] = $this->model_localisation_subscription_status->getSubscriptionStatuses();
|
|
|
|
if (!empty($subscription_info)) {
|
|
$data['subscription_status_id'] = $subscription_info['subscription_status_id'];
|
|
} else {
|
|
$data['subscription_status_id'] = '';
|
|
}
|
|
|
|
$data['history'] = $this->getHistory();
|
|
$data['orders'] = $this->getOrder();
|
|
|
|
// Additional tabs that are payment gateway specific
|
|
$data['tabs'] = [];
|
|
|
|
// Extension Order Tabs can are called here.
|
|
/*
|
|
$this->load->model('setting/extension');
|
|
|
|
if (!empty($order_info)) {
|
|
$extension_info = $this->model_setting_extension->getExtensionByCode('payment', $order_info['payment_method']['code']);
|
|
|
|
if ($extension_info && $this->user->hasPermission('access', 'extension/' . $extension_info['extension'] . '/payment/' . $extension_info['code'])) {
|
|
$output = $this->load->controller('extension/payment/' . $order_info['payment_code'] . '.subscription');
|
|
|
|
if (!$output instanceof \Exception) {
|
|
$this->load->language('extension/' . $extension_info['extension'] . '/payment/' . $extension_info['code'], 'extension');
|
|
|
|
$data['tabs'][] = [
|
|
'code' => $extension_info['code'],
|
|
'title' => $this->language->get('extension_heading_title'),
|
|
'content' => $output
|
|
];
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
$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('sale/subscription_info', $data));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function save(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$json = [];
|
|
|
|
if (isset($this->request->get['subscription_id'])) {
|
|
$subscription_id = (int)$this->request->get['subscription_id'];
|
|
} else {
|
|
$subscription_id = 0;
|
|
}
|
|
|
|
if (!$this->user->hasPermission('modify', 'sale/subscription')) {
|
|
$json['error'] = $this->language->get('error_permission');
|
|
} elseif ($this->request->post['subscription_plan_id'] == '') {
|
|
$json['error'] = $this->language->get('error_subscription_plan');
|
|
}
|
|
|
|
$this->load->model('catalog/subscription_plan');
|
|
|
|
$subscription_plan_info = $this->model_catalog_subscription_plan->getSubscriptionPlan($this->request->post['subscription_plan_id']);
|
|
|
|
if (!$subscription_plan_info) {
|
|
$json['error'] = $this->language->get('error_subscription_plan');
|
|
}
|
|
|
|
$this->load->model('sale/subscription');
|
|
|
|
$subscription_info = $this->model_sale_subscription->getSubscription($subscription_id);
|
|
|
|
if (!$subscription_info) {
|
|
$this->load->model('customer/customer');
|
|
|
|
$payment_method_info = $this->model_customer_customer->getPaymentMethod($subscription_info['customer_id'], $this->request->post['customer_payment_id']);
|
|
|
|
if (!$payment_method_info) {
|
|
$json['error'] = $this->language->get('error_payment_method');
|
|
}
|
|
} else {
|
|
$json['error'] = $this->language->get('error_subscription');
|
|
}
|
|
|
|
if (!$json) {
|
|
$this->model_sale_subscription->editSubscriptionPlan($subscription_id, $this->request->post['subscription_plan_id']);
|
|
|
|
$json['success'] = $this->language->get('text_success');
|
|
}
|
|
|
|
$this->response->addHeader('Content-Type: application/json');
|
|
$this->response->setOutput(json_encode($json));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function history(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$this->response->setOutput($this->getHistory());
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getHistory(): string {
|
|
if (isset($this->request->get['subscription_id'])) {
|
|
$subscription_id = (int)$this->request->get['subscription_id'];
|
|
} else {
|
|
$subscription_id = 0;
|
|
}
|
|
|
|
if (isset($this->request->get['page']) && $this->request->get['route'] == 'sale/subscription.history') {
|
|
$page = (int)$this->request->get['page'];
|
|
} else {
|
|
$page = 1;
|
|
}
|
|
|
|
$limit = 10;
|
|
|
|
$data['histories'] = [];
|
|
|
|
$this->load->model('sale/subscription');
|
|
|
|
$results = $this->model_sale_subscription->getHistories($subscription_id, ($page - 1) * $limit, $limit);
|
|
|
|
foreach ($results as $result) {
|
|
$data['histories'][] = [
|
|
'status' => $result['status'],
|
|
'comment' => nl2br($result['comment']),
|
|
'notify' => $result['notify'] ? $this->language->get('text_yes') : $this->language->get('text_no'),
|
|
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
|
|
];
|
|
}
|
|
|
|
$subscription_total = $this->model_sale_subscription->getTotalHistories($subscription_id);
|
|
|
|
$data['pagination'] = $this->load->controller('common/pagination', [
|
|
'total' => $subscription_total,
|
|
'page' => $page,
|
|
'limit' => $limit,
|
|
'url' => $this->url->link('sale/subscription.history', 'user_token=' . $this->session->data['user_token'] . '&subscription_id=' . $subscription_id . '&page={page}')
|
|
]);
|
|
|
|
$data['results'] = sprintf($this->language->get('text_pagination'), ($subscription_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($subscription_total - $limit)) ? $subscription_total : ((($page - 1) * $limit) + $limit), $subscription_total, ceil($subscription_total / $limit));
|
|
|
|
return $this->load->view('sale/subscription_history', $data);
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function addHistory(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$json = [];
|
|
|
|
if (isset($this->request->get['subscription_id'])) {
|
|
$subscription_id = (int)$this->request->get['subscription_id'];
|
|
} else {
|
|
$subscription_id = 0;
|
|
}
|
|
|
|
if (!$this->user->hasPermission('modify', 'sale/subscription')) {
|
|
$json['error'] = $this->language->get('error_permission');
|
|
}
|
|
|
|
// Subscription
|
|
$this->load->model('sale/subscription');
|
|
|
|
$subscription_info = $this->model_sale_subscription->getSubscription($subscription_id);
|
|
|
|
if (!$subscription_info) {
|
|
$json['error'] = $this->language->get('error_subscription');
|
|
}
|
|
|
|
// Subscription Plan
|
|
$this->load->model('localisation/subscription_status');
|
|
|
|
$subscription_status_info = $this->model_localisation_subscription_status->getSubscriptionStatus($this->request->post['subscription_status_id']);
|
|
|
|
if (!$subscription_status_info) {
|
|
$json['error'] = $this->language->get('error_subscription_status');
|
|
}
|
|
|
|
if (!$json) {
|
|
$this->model_sale_subscription->addHistory($subscription_id, $this->request->post['subscription_status_id'], $this->request->post['comment'], $this->request->post['notify']);
|
|
|
|
$json['success'] = $this->language->get('text_success');
|
|
}
|
|
|
|
$this->response->addHeader('Content-Type: application/json');
|
|
$this->response->setOutput(json_encode($json));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function order(): void {
|
|
$this->load->language('sale/subscription');
|
|
|
|
$this->response->setOutput($this->getOrder());
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getOrder(): string {
|
|
if (isset($this->request->get['subscription_id'])) {
|
|
$subscription_id = (int)$this->request->get['subscription_id'];
|
|
} else {
|
|
$subscription_id = 0;
|
|
}
|
|
|
|
if (isset($this->request->get['page']) && $this->request->get['route'] == 'sale/subscription.order') {
|
|
$page = (int)$this->request->get['page'];
|
|
} else {
|
|
$page = 1;
|
|
}
|
|
|
|
$limit = 10;
|
|
|
|
$data['orders'] = [];
|
|
|
|
$this->load->model('sale/order');
|
|
|
|
$results = $this->model_sale_order->getOrdersBySubscriptionId($subscription_id, ($page - 1) * $limit, $limit);
|
|
|
|
foreach ($results as $result) {
|
|
$data['orders'][] = [
|
|
'order_id' => $result['order_id'],
|
|
'status' => $result['status'],
|
|
'total' => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
|
|
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
|
|
'view' => $this->url->link('sale/subscription.order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $result['order_id'] . '&page={page}')
|
|
];
|
|
}
|
|
|
|
$order_total = $this->model_sale_order->getTotalOrdersBySubscriptionId($subscription_id);
|
|
|
|
$data['pagination'] = $this->load->controller('common/pagination', [
|
|
'total' => $order_total,
|
|
'page' => $page,
|
|
'limit' => $limit,
|
|
'url' => $this->url->link('sale/subscription.order', 'user_token=' . $this->session->data['user_token'] . '&subscription_id=' . $subscription_id . '&page={page}')
|
|
]);
|
|
|
|
$data['results'] = sprintf($this->language->get('text_pagination'), ($order_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($order_total - $limit)) ? $order_total : ((($page - 1) * $limit) + $limit), $order_total, ceil($order_total / $limit));
|
|
|
|
return $this->load->view('sale/subscription_order', $data);
|
|
}
|
|
}
|