Ekdant-Online-Store/admininistrator/controller/sale/subscription.php
2024-08-06 18:06:00 +05:45

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);
}
}