first commit

This commit is contained in:
sujan
2024-08-06 18:06:00 +05:45
commit a2fa49071a
2745 changed files with 391199 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,815 @@
<?php
namespace Opencart\Admin\Controller\Sale;
/**
* Class Returns
*
* @package Opencart\Admin\Controller\Sale
*/
class Returns extends \Opencart\System\Engine\Controller {
/**
* @return void
*/
public function index(): void {
$this->load->language('sale/returns');
$this->document->setTitle($this->language->get('heading_title'));
if (isset($this->request->get['filter_return_id'])) {
$filter_return_id = (int)$this->request->get['filter_return_id'];
} else {
$filter_return_id = '';
}
if (isset($this->request->get['filter_order_id'])) {
$filter_order_id = (int)$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_product'])) {
$filter_product = $this->request->get['filter_product'];
} else {
$filter_product = '';
}
if (isset($this->request->get['filter_model'])) {
$filter_model = $this->request->get['filter_model'];
} else {
$filter_model = '';
}
if (isset($this->request->get['filter_return_status_id'])) {
$filter_return_status_id = (int)$this->request->get['filter_return_status_id'];
} else {
$filter_return_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_return_id'])) {
$url .= '&filter_return_id=' . $this->request->get['filter_return_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_product'])) {
$url .= '&filter_product=' . urlencode(html_entity_decode($this->request->get['filter_product'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_model'])) {
$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_return_status_id'])) {
$url .= '&filter_return_status_id=' . $this->request->get['filter_return_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/returns', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['add'] = $this->url->link('sale/returns.form', 'user_token=' . $this->session->data['user_token'] . $url);
$data['delete'] = $this->url->link('sale/returns.delete', 'user_token=' . $this->session->data['user_token']);
$data['list'] = $this->getList();
$this->load->model('localisation/return_status');
$data['return_statuses'] = $this->model_localisation_return_status->getReturnStatuses();
$data['filter_return_id'] = $filter_return_id;
$data['filter_order_id'] = $filter_order_id;
$data['filter_customer'] = $filter_customer;
$data['filter_product'] = $filter_product;
$data['filter_model'] = $filter_model;
$data['filter_return_status_id'] = $filter_return_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/returns', $data));
}
/**
* @return void
*/
public function list(): void {
$this->load->language('sale/returns');
$this->response->setOutput($this->getList());
}
/**
* @return string
*/
protected function getList(): string {
if (isset($this->request->get['filter_return_id'])) {
$filter_return_id = (int)$this->request->get['filter_return_id'];
} else {
$filter_return_id = '';
}
if (isset($this->request->get['filter_order_id'])) {
$filter_order_id = (int)$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_product'])) {
$filter_product = $this->request->get['filter_product'];
} else {
$filter_product = '';
}
if (isset($this->request->get['filter_model'])) {
$filter_model = $this->request->get['filter_model'];
} else {
$filter_model = '';
}
if (isset($this->request->get['filter_return_status_id'])) {
$filter_return_status_id = (int)$this->request->get['filter_return_status_id'];
} else {
$filter_return_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 = 'r.return_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_return_id'])) {
$url .= '&filter_return_id=' . $this->request->get['filter_return_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_product'])) {
$url .= '&filter_product=' . urlencode(html_entity_decode($this->request->get['filter_product'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_model'])) {
$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_return_status_id'])) {
$url .= '&filter_return_status_id=' . $this->request->get['filter_return_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['action'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . $url);
$data['returns'] = [];
$filter_data = [
'filter_return_id' => $filter_return_id,
'filter_order_id' => $filter_order_id,
'filter_customer' => $filter_customer,
'filter_product' => $filter_product,
'filter_model' => $filter_model,
'filter_return_status_id' => $filter_return_status_id,
'filter_date_from' => $filter_date_from,
'filter_date_to' => $filter_date_to,
'sort' => $sort,
'order' => $order,
'start' => ($page - 1) * $this->config->get('config_pagination_admin'),
'limit' => $this->config->get('config_pagination_admin')
];
$this->load->model('sale/returns');
$return_total = $this->model_sale_returns->getTotalReturns($filter_data);
$results = $this->model_sale_returns->getReturns($filter_data);
foreach ($results as $result) {
$data['returns'][] = [
'return_id' => $result['return_id'],
'order_id' => $result['order_id'],
'customer' => $result['customer'],
'product' => $result['product'],
'model' => $result['model'],
'return_status' => $result['return_status'],
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])),
'edit' => $this->url->link('sale/returns.form', 'user_token=' . $this->session->data['user_token'] . '&return_id=' . $result['return_id'] . $url)
];
}
$url = '';
if (isset($this->request->get['filter_return_id'])) {
$url .= '&filter_return_id=' . $this->request->get['filter_return_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_product'])) {
$url .= '&filter_product=' . urlencode(html_entity_decode($this->request->get['filter_product'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_model'])) {
$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_return_status_id'])) {
$url .= '&filter_return_status_id=' . $this->request->get['filter_return_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_return_id'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.return_id' . $url);
$data['sort_order_id'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.order_id' . $url);
$data['sort_customer'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=customer' . $url);
$data['sort_product'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.product' . $url);
$data['sort_model'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.model' . $url);
$data['sort_status'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=return_status' . $url);
$data['sort_date_added'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.date_added' . $url);
$data['sort_date_modified'] = $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . '&sort=r.date_modified' . $url);
$url = '';
if (isset($this->request->get['filter_return_id'])) {
$url .= '&filter_return_id=' . $this->request->get['filter_return_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_product'])) {
$url .= '&filter_product=' . urlencode(html_entity_decode($this->request->get['filter_product'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_model'])) {
$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_return_status_id'])) {
$url .= '&filter_return_status_id=' . $this->request->get['filter_return_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'];
}
$data['pagination'] = $this->load->controller('common/pagination', [
'total' => $return_total,
'page' => $page,
'limit' => $this->config->get('config_pagination_admin'),
'url' => $this->url->link('sale/returns.list', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($return_total) ? (($page - 1) * $this->config->get('config_pagination_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_pagination_admin')) > ($return_total - $this->config->get('config_pagination_admin'))) ? $return_total : ((($page - 1) * $this->config->get('config_pagination_admin')) + $this->config->get('config_pagination_admin')), $return_total, ceil($return_total / $this->config->get('config_pagination_admin')));
$data['sort'] = $sort;
$data['order'] = $order;
return $this->load->view('sale/returns_list', $data);
}
/**
* @return void
*/
public function form(): void {
$this->load->language('sale/returns');
$this->document->setTitle($this->language->get('heading_title'));
$data['text_form'] = !isset($this->request->get['return_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
$url = '';
if (isset($this->request->get['filter_return_id'])) {
$url .= '&filter_return_id=' . $this->request->get['filter_return_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_product'])) {
$url .= '&filter_product=' . urlencode(html_entity_decode($this->request->get['filter_product'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_model'])) {
$url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
}
if (isset($this->request->get['filter_return_status_id'])) {
$url .= '&filter_return_status_id=' . $this->request->get['filter_return_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/returns', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['save'] = $this->url->link('sale/returns.save', 'user_token=' . $this->session->data['user_token']);
$data['back'] = $this->url->link('sale/returns', 'user_token=' . $this->session->data['user_token'] . $url);
if (isset($this->request->get['return_id'])) {
$this->load->model('sale/returns');
$return_info = $this->model_sale_returns->getReturn($this->request->get['return_id']);
}
if (isset($this->request->get['return_id'])) {
$data['return_id'] = (int)$this->request->get['return_id'];
} else {
$data['return_id'] = 0;
}
if (!empty($return_info)) {
$data['order_id'] = $return_info['order_id'];
} else {
$data['order_id'] = '';
}
if (!empty($return_info)) {
$data['date_ordered'] = ($return_info['date_ordered'] != '0000-00-00' ? $return_info['date_ordered'] : '');
} else {
$data['date_ordered'] = '';
}
if (!empty($return_info)) {
$data['customer'] = $return_info['customer'];
} else {
$data['customer'] = '';
}
if (!empty($return_info)) {
$data['customer_id'] = $return_info['customer_id'];
} else {
$data['customer_id'] = '';
}
if (!empty($return_info)) {
$data['firstname'] = $return_info['firstname'];
} else {
$data['firstname'] = '';
}
if (!empty($return_info)) {
$data['lastname'] = $return_info['lastname'];
} else {
$data['lastname'] = '';
}
if (!empty($return_info)) {
$data['email'] = $return_info['email'];
} else {
$data['email'] = '';
}
if (!empty($return_info)) {
$data['telephone'] = $return_info['telephone'];
} else {
$data['telephone'] = '';
}
if (!empty($return_info)) {
$data['product'] = $return_info['product'];
} else {
$data['product'] = '';
}
if (!empty($return_info)) {
$data['product_id'] = $return_info['product_id'];
} else {
$data['product_id'] = '';
}
if (!empty($return_info)) {
$data['model'] = $return_info['model'];
} else {
$data['model'] = '';
}
if (!empty($return_info)) {
$data['quantity'] = $return_info['quantity'];
} else {
$data['quantity'] = '';
}
if (!empty($return_info)) {
$data['opened'] = $return_info['opened'];
} else {
$data['opened'] = '';
}
$this->load->model('localisation/return_reason');
$data['return_reasons'] = $this->model_localisation_return_reason->getReturnReasons();
if (!empty($return_info)) {
$data['return_reason_id'] = $return_info['return_reason_id'];
} else {
$data['return_reason_id'] = 0;
}
$this->load->model('localisation/return_action');
$data['return_actions'] = $this->model_localisation_return_action->getReturnActions();
if (!empty($return_info)) {
$data['return_action_id'] = $return_info['return_action_id'];
} else {
$data['return_action_id'] = 0;
}
if (!empty($return_info)) {
$data['comment'] = $return_info['comment'];
} else {
$data['comment'] = '';
}
$this->load->model('localisation/return_status');
$data['return_statuses'] = $this->model_localisation_return_status->getReturnStatuses();
if (!empty($return_info)) {
$data['return_status_id'] = $return_info['return_status_id'];
} else {
$data['return_status_id'] = '';
}
$data['history'] = $this->getHistory();
$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/returns_form', $data));
}
/**
* @return void
*/
public function save(): void {
$this->load->language('sale/returns');
$json = [];
if (!$this->user->hasPermission('modify', 'sale/returns')) {
$json['error']['warning'] = $this->language->get('error_permission');
}
if (empty($this->request->post['order_id'])) {
$json['error']['order_id'] = $this->language->get('error_order_id');
}
if ((oc_strlen($this->request->post['firstname']) < 1) || (oc_strlen($this->request->post['firstname']) > 32)) {
$json['error']['firstname'] = $this->language->get('error_firstname');
}
if ((oc_strlen($this->request->post['lastname']) < 1) || (oc_strlen($this->request->post['lastname']) > 32)) {
$json['error']['lastname'] = $this->language->get('error_lastname');
}
if ((oc_strlen($this->request->post['email']) > 96) || !filter_var($this->request->post['email'], FILTER_VALIDATE_EMAIL)) {
$json['error']['email'] = $this->language->get('error_email');
}
if ((oc_strlen($this->request->post['telephone']) < 3) || (oc_strlen($this->request->post['telephone']) > 32)) {
$json['error']['telephone'] = $this->language->get('error_telephone');
}
if ((oc_strlen($this->request->post['product']) < 1) || (oc_strlen($this->request->post['product']) > 255)) {
$json['error']['product'] = $this->language->get('error_product');
}
if ((oc_strlen($this->request->post['model']) < 1) || (oc_strlen($this->request->post['model']) > 64)) {
$json['error']['model'] = $this->language->get('error_model');
}
if (empty($this->request->post['return_reason_id'])) {
$json['error']['reason'] = $this->language->get('error_reason');
}
if (isset($json['error']) && !isset($json['error']['warning'])) {
$json['error']['warning'] = $this->language->get('error_warning');
}
if (!$json) {
$this->load->model('sale/returns');
if (!$this->request->post['return_id']) {
$json['return_id'] = $this->model_sale_returns->addReturn($this->request->post);
} else {
$this->model_sale_returns->editReturn($this->request->post['return_id'], $this->request->post);
}
$json['success'] = $this->language->get('text_success');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
/**
* @return void
*/
public function delete(): void {
$this->load->language('sale/returns');
$json = [];
if (isset($this->request->post['selected'])) {
$selected = $this->request->post['selected'];
} else {
$selected = [];
}
if (!$this->user->hasPermission('modify', 'sale/returns')) {
$json['error'] = $this->language->get('error_permission');
}
if (!$json) {
$this->load->model('sale/returns');
foreach ($selected as $return_id) {
$this->model_sale_returns->deleteReturn($return_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/returns');
$this->response->setOutput($this->getHistory());
}
/**
* @return string
*/
public function getHistory(): string {
if (isset($this->request->get['return_id'])) {
$return_id = (int)$this->request->get['return_id'];
} else {
$return_id = 0;
}
if (isset($this->request->get['page']) && $this->request->get['route'] == 'sale/returns.history') {
$page = (int)$this->request->get['page'];
} else {
$page = 1;
}
$limit = 10;
$data['histories'] = [];
$this->load->model('sale/returns');
$results = $this->model_sale_returns->getHistories($return_id, ($page - 1) * $limit, $limit);
foreach ($results as $result) {
$data['histories'][] = [
'notify' => $result['notify'] ? $this->language->get('text_yes') : $this->language->get('text_no'),
'status' => $result['status'],
'comment' => nl2br($result['comment']),
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
];
}
$history_total = $this->model_sale_returns->getTotalHistories($return_id);
$data['pagination'] = $this->load->controller('common/pagination', [
'total' => $history_total,
'page' => $page,
'limit' => $limit,
'url' => $this->url->link('sale/returns.history', 'user_token=' . $this->session->data['user_token'] . '&return_id=' . $return_id . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($history_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($history_total - $limit)) ? $history_total : ((($page - 1) * $limit) + $limit), $history_total, ceil($history_total / $limit));
return $this->load->view('sale/returns_history', $data);
}
/**
* @return void
*/
public function addHistory(): void {
$this->load->language('sale/returns');
$json = [];
if (isset($this->request->get['return_id'])) {
$return_id = (int)$this->request->get['return_id'];
} else {
$return_id = 0;
}
if (!$this->user->hasPermission('modify', 'sale/returns')) {
$json['error'] = $this->language->get('error_permission');
}
$this->load->model('sale/returns');
$return_info = $this->model_sale_returns->getReturn($return_id);
if (!$return_info) {
$json['error'] = $this->language->get('error_return');
}
if (!$json) {
$this->model_sale_returns->addHistory($return_id, $this->request->post['return_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));
}
}

View File

@ -0,0 +1,980 @@
<?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);
}
}

View File

@ -0,0 +1,500 @@
<?php
namespace Opencart\Admin\Controller\Sale;
/**
* Class Voucher
*
* @package Opencart\Admin\Controller\Sale
*/
class Voucher extends \Opencart\System\Engine\Controller {
/**
* @return void
*/
public function index(): void {
$this->load->language('sale/voucher');
$this->document->setTitle($this->language->get('heading_title'));
$url = '';
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/voucher', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['add'] = $this->url->link('sale/voucher.form', 'user_token=' . $this->session->data['user_token'] . $url);
$data['delete'] = $this->url->link('sale/voucher.delete', 'user_token=' . $this->session->data['user_token']);
$data['list'] = $this->getList();
$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/voucher', $data));
}
/**
* @return void
*/
public function list(): void {
$this->load->language('sale/voucher');
$this->response->setOutput($this->getList());
}
/**
* @return string
*/
protected function getList(): string {
if (isset($this->request->get['sort'])) {
$sort = (string)$this->request->get['sort'];
} else {
$sort = 'v.date_added';
}
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['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['action'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . $url);
$data['vouchers'] = [];
$filter_data = [
'sort' => $sort,
'order' => $order,
'start' => ($page - 1) * $this->config->get('config_pagination_admin'),
'limit' => $this->config->get('config_pagination_admin')
];
$this->load->model('sale/voucher');
$voucher_total = $this->model_sale_voucher->getTotalVouchers();
$results = $this->model_sale_voucher->getVouchers($filter_data);
foreach ($results as $result) {
if ($result['order_id']) {
$order_href = $this->url->link('sale/order.info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $result['order_id'] . $url);
} else {
$order_href = '';
}
$data['vouchers'][] = [
'voucher_id' => $result['voucher_id'],
'code' => $result['code'],
'status' => $result['status'],
'from' => $result['from_name'],
'to' => $result['to_name'],
'theme' => $result['theme'],
'amount' => $this->currency->format($result['amount'], $this->config->get('config_currency')),
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
'edit' => $this->url->link('sale/voucher.form', 'user_token=' . $this->session->data['user_token'] . '&voucher_id=' . $result['voucher_id'] . $url),
'order' => $order_href
];
}
$url = '';
if ($order == 'ASC') {
$url .= '&order=DESC';
} else {
$url .= '&order=ASC';
}
$data['sort_code'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.code' . $url);
$data['sort_from'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.from_name' . $url);
$data['sort_to'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.to_name' . $url);
$data['sort_theme'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=theme' . $url);
$data['sort_amount'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.amount' . $url);
$data['sort_status'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.status' . $url);
$data['sort_date_added'] = $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . '&sort=v.date_added' . $url);
$url = '';
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' => $voucher_total,
'page' => $page,
'limit' => $this->config->get('config_pagination_admin'),
'url' => $this->url->link('sale/voucher.list', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($voucher_total) ? (($page - 1) * $this->config->get('config_pagination_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_pagination_admin')) > ($voucher_total - $this->config->get('config_pagination_admin'))) ? $voucher_total : ((($page - 1) * $this->config->get('config_pagination_admin')) + $this->config->get('config_pagination_admin')), $voucher_total, ceil($voucher_total / $this->config->get('config_pagination_admin')));
$data['sort'] = $sort;
$data['order'] = $order;
return $this->load->view('sale/voucher_list', $data);
}
/**
* @return void
*/
public function form(): void {
$this->load->language('sale/voucher');
$this->document->setTitle($this->language->get('heading_title'));
$data['text_form'] = !isset($this->request->get['voucher_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
$url = '';
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/voucher', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['save'] = $this->url->link('sale/voucher.save', 'user_token=' . $this->session->data['user_token']);
$data['back'] = $this->url->link('sale/voucher', 'user_token=' . $this->session->data['user_token'] . $url);
if (isset($this->request->get['voucher_id'])) {
$this->load->model('sale/voucher');
$voucher_info = $this->model_sale_voucher->getVoucher($this->request->get['voucher_id']);
}
if (isset($this->request->get['voucher_id'])) {
$data['voucher_id'] = (int)$this->request->get['voucher_id'];
} else {
$data['voucher_id'] = 0;
}
if (!empty($voucher_info)) {
$data['code'] = $voucher_info['code'];
} else {
$data['code'] = '';
}
if (!empty($voucher_info)) {
$data['from_name'] = $voucher_info['from_name'];
} else {
$data['from_name'] = '';
}
if (!empty($voucher_info)) {
$data['from_email'] = $voucher_info['from_email'];
} else {
$data['from_email'] = '';
}
if (!empty($voucher_info)) {
$data['to_name'] = $voucher_info['to_name'];
} else {
$data['to_name'] = '';
}
if (!empty($voucher_info)) {
$data['to_email'] = $voucher_info['to_email'];
} else {
$data['to_email'] = '';
}
$this->load->model('sale/voucher_theme');
$data['voucher_themes'] = $this->model_sale_voucher_theme->getVoucherThemes();
if (!empty($voucher_info)) {
$data['voucher_theme_id'] = $voucher_info['voucher_theme_id'];
} else {
$data['voucher_theme_id'] = '';
}
if (!empty($voucher_info)) {
$data['message'] = $voucher_info['message'];
} else {
$data['message'] = '';
}
if (!empty($voucher_info)) {
$data['amount'] = $voucher_info['amount'];
} else {
$data['amount'] = '';
}
if (!empty($voucher_info)) {
$data['status'] = $voucher_info['status'];
} else {
$data['status'] = true;
}
$data['history'] = $this->getHistory();
$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/voucher_form', $data));
}
/**
* @return void
*/
public function save(): void {
$this->load->language('sale/voucher');
$json = [];
if (!$this->user->hasPermission('modify', 'sale/voucher')) {
$json['error']['warning'] = $this->language->get('error_permission');
}
if ((oc_strlen($this->request->post['code']) < 3) || (oc_strlen($this->request->post['code']) > 10)) {
$json['error']['code'] = $this->language->get('error_code');
}
$this->load->model('sale/voucher');
$voucher_info = $this->model_sale_voucher->getVoucherByCode($this->request->post['code']);
if ($voucher_info) {
if (!isset($this->request->post['voucher_id'])) {
$json['error']['warning'] = $this->language->get('error_exists');
} elseif ($voucher_info['voucher_id'] != (int)$this->request->post['voucher_id']) {
$json['error']['warning'] = $this->language->get('error_exists');
}
}
if ((oc_strlen($this->request->post['to_name']) < 1) || (oc_strlen($this->request->post['to_name']) > 64)) {
$json['error']['to_name'] = $this->language->get('error_to_name');
}
if ((oc_strlen($this->request->post['to_email']) > 96) || !filter_var($this->request->post['to_email'], FILTER_VALIDATE_EMAIL)) {
$json['error']['to_email'] = $this->language->get('error_email');
}
if ((oc_strlen($this->request->post['from_name']) < 1) || (oc_strlen($this->request->post['from_name']) > 64)) {
$json['error']['from_name'] = $this->language->get('error_from_name');
}
if ((oc_strlen($this->request->post['from_email']) > 96) || !filter_var($this->request->post['from_email'], FILTER_VALIDATE_EMAIL)) {
$json['error']['from_email'] = $this->language->get('error_email');
}
if ($this->request->post['amount'] < 1) {
$json['error']['amount'] = $this->language->get('error_amount');
}
if (!$json) {
if (!$this->request->post['voucher_id']) {
$json['voucher_id'] = $this->model_sale_voucher->addVoucher($this->request->post);
} else {
$this->model_sale_voucher->editVoucher($this->request->post['voucher_id'], $this->request->post);
}
$json['success'] = $this->language->get('text_success');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
/**
* @return void
*/
public function delete(): void {
$this->load->language('sale/voucher');
$json = [];
if (isset($this->request->post['selected'])) {
$selected = $this->request->post['selected'];
} else {
$selected = [];
}
if (!$this->user->hasPermission('modify', 'sale/voucher')) {
$json['error'] = $this->language->get('error_permission');
}
$this->load->model('sale/order');
foreach ($selected as $voucher_id) {
$order_voucher_info = $this->model_sale_order->getVoucherByVoucherId($voucher_id);
if ($order_voucher_info) {
$json['error'] = sprintf($this->language->get('error_order'), $this->url->link('sale/order.info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_voucher_info['order_id']));
break;
}
}
if (!$json) {
$this->load->model('sale/voucher');
foreach ($selected as $voucher_id) {
$this->model_sale_voucher->deleteVoucher($voucher_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/voucher');
$this->response->setOutput($this->getHistory());
}
/**
* @return string
*/
public function getHistory(): string {
if (isset($this->request->get['voucher_id'])) {
$voucher_id = (int)$this->request->get['voucher_id'];
} else {
$voucher_id = 0;
}
if (isset($this->request->get['page']) && $this->request->get['route'] == 'sale/voucher.history') {
$page = (int)$this->request->get['page'];
} else {
$page = 1;
}
$limit = 10;
$data['histories'] = [];
$this->load->model('sale/voucher');
$results = $this->model_sale_voucher->getHistories($voucher_id, ($page - 1) * $limit, $limit);
foreach ($results as $result) {
$data['histories'][] = [
'order_id' => $result['order_id'],
'customer' => $result['customer'],
'amount' => $this->currency->format($result['amount'], $this->config->get('config_currency')),
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
];
}
$history_total = $this->model_sale_voucher->getTotalHistories($voucher_id);
$data['pagination'] = $this->load->controller('common/pagination', [
'total' => $history_total,
'page' => $page,
'limit' => $limit,
'url' => $this->url->link('sale/voucher.history', 'user_token=' . $this->session->data['user_token'] . '&voucher_id=' . $voucher_id . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($history_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($history_total - $limit)) ? $history_total : ((($page - 1) * $limit) + $limit), $history_total, ceil($history_total / $limit));
return $this->load->view('sale/voucher_history', $data);
}
/**
* @return void
*/
public function send(): void {
$this->load->language('mail/voucher');
$json = [];
if (!$this->user->hasPermission('modify', 'sale/voucher')) {
$json['error'] = $this->language->get('error_permission');
}
if (!$json) {
$this->load->model('sale/voucher');
$vouchers = [];
if (isset($this->request->post['selected'])) {
$vouchers = $this->request->post['selected'];
}
if (isset($this->request->post['voucher_id'])) {
$vouchers[] = $this->request->post['voucher_id'];
}
if ($vouchers) {
foreach ($vouchers as $voucher_id) {
$this->load->controller('mail/voucher', $voucher_id);
}
$json['success'] = $this->language->get('text_sent');
}
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}

View File

@ -0,0 +1,327 @@
<?php
namespace Opencart\Admin\Controller\Sale;
/**
* Class Voucher Theme
*
* @package Opencart\Admin\Controller\Sale
*/
class VoucherTheme extends \Opencart\System\Engine\Controller {
/**
* @return void
*/
public function index(): void {
$this->load->language('sale/voucher_theme');
$this->document->setTitle($this->language->get('heading_title'));
$url = '';
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/voucher_theme', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['add'] = $this->url->link('sale/voucher_theme.form', 'user_token=' . $this->session->data['user_token'] . $url);
$data['delete'] = $this->url->link('sale/voucher_theme.delete', 'user_token=' . $this->session->data['user_token']);
$data['list'] = $this->getList();
$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/voucher_theme', $data));
}
/**
* @return void
*/
public function list(): void {
$this->load->language('sale/voucher_theme');
$this->response->setOutput($this->getList());
}
/**
* @return string
*/
protected function getList(): string {
if (isset($this->request->get['sort'])) {
$sort = (string)$this->request->get['sort'];
} else {
$sort = 'vtd.name';
}
if (isset($this->request->get['order'])) {
$order = (string)$this->request->get['order'];
} else {
$order = 'ASC';
}
if (isset($this->request->get['page'])) {
$page = (int)$this->request->get['page'];
} else {
$page = 1;
}
$url = '';
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['action'] = $this->url->link('sale/voucher_theme.list', 'user_token=' . $this->session->data['user_token'] . $url);
$data['voucher_themes'] = [];
$filter_data = [
'sort' => $sort,
'order' => $order,
'start' => ($page - 1) * $this->config->get('config_pagination_admin'),
'limit' => $this->config->get('config_pagination_admin')
];
$this->load->model('sale/voucher_theme');
$voucher_theme_total = $this->model_sale_voucher_theme->getTotalVoucherThemes();
$results = $this->model_sale_voucher_theme->getVoucherThemes($filter_data);
foreach ($results as $result) {
$data['voucher_themes'][] = [
'voucher_theme_id' => $result['voucher_theme_id'],
'name' => $result['name'],
'edit' => $this->url->link('sale/voucher_theme.form', 'user_token=' . $this->session->data['user_token'] . '&voucher_theme_id=' . $result['voucher_theme_id'] . $url)
];
}
$url = '';
if ($order == 'ASC') {
$url .= '&order=DESC';
} else {
$url .= '&order=ASC';
}
$data['sort_name'] = $this->url->link('sale/voucher_theme.list', 'user_token=' . $this->session->data['user_token'] . '&sort=name' . $url);
$url = '';
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' => $voucher_theme_total,
'page' => $page,
'limit' => $this->config->get('config_pagination_admin'),
'url' => $this->url->link('sale/voucher_theme.list', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}')
]);
$data['results'] = sprintf($this->language->get('text_pagination'), ($voucher_theme_total) ? (($page - 1) * $this->config->get('config_pagination_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_pagination_admin')) > ($voucher_theme_total - $this->config->get('config_pagination_admin'))) ? $voucher_theme_total : ((($page - 1) * $this->config->get('config_pagination_admin')) + $this->config->get('config_pagination_admin')), $voucher_theme_total, ceil($voucher_theme_total / $this->config->get('config_pagination_admin')));
$data['sort'] = $sort;
$data['order'] = $order;
return $this->load->view('sale/voucher_theme_list', $data);
}
/**
* @return void
*/
public function form(): void {
$this->load->language('sale/voucher_theme');
$this->document->setTitle($this->language->get('heading_title'));
$data['text_form'] = !isset($this->request->get['voucher_theme_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
$url = '';
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/voucher_theme', 'user_token=' . $this->session->data['user_token'] . $url)
];
$data['save'] = $this->url->link('sale/voucher_theme.save', 'user_token=' . $this->session->data['user_token']);
$data['back'] = $this->url->link('sale/voucher_theme', 'user_token=' . $this->session->data['user_token'] . $url);
if (isset($this->request->get['voucher_theme_id'])) {
$this->load->model('sale/voucher_theme');
$voucher_theme_info = $this->model_sale_voucher_theme->getVoucherTheme($this->request->get['voucher_theme_id']);
}
if (isset($this->request->get['voucher_theme_id'])) {
$data['voucher_theme_id'] = (int)$this->request->get['voucher_theme_id'];
} else {
$data['voucher_theme_id'] = 0;
}
$this->load->model('localisation/language');
$data['languages'] = $this->model_localisation_language->getLanguages();
if (!empty($voucher_theme_info)) {
$data['voucher_theme_description'] = $this->model_sale_voucher_theme->getDescriptions($this->request->get['voucher_theme_id']);
} else {
$data['voucher_theme_description'] = [];
}
if (!empty($voucher_theme_info)) {
$data['image'] = $voucher_theme_info['image'];
} else {
$data['image'] = '';
}
$this->load->model('tool/image');
$data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);
if (is_file(DIR_IMAGE . html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8'))) {
$data['thumb'] = $this->model_tool_image->resize(html_entity_decode($data['image'], ENT_QUOTES, 'UTF-8'), 100, 100);
} else {
$data['thumb'] = $data['placeholder'];
}
$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/voucher_theme_form', $data));
}
/**
* @return void
*/
public function save(): void {
$this->load->language('sale/voucher_theme');
$json = [];
if (!$this->user->hasPermission('modify', 'sale/voucher_theme')) {
$json['error']['warning'] = $this->language->get('error_permission');
}
foreach ($this->request->post['voucher_theme_description'] as $language_id => $value) {
if ((oc_strlen($value['name']) < 3) || (oc_strlen($value['name']) > 32)) {
$json['error']['name_' . $language_id] = $this->language->get('error_name');
}
}
if (!$this->request->post['image']) {
$json['error']['image'] = $this->language->get('error_image');
}
if (!$json) {
$this->load->model('sale/voucher_theme');
if (!$this->request->post['voucher_theme_id']) {
$json['voucher_theme_id'] = $this->model_sale_voucher_theme->addVoucherTheme($this->request->post);
} else {
$this->model_sale_voucher_theme->editVoucherTheme($this->request->post['voucher_theme_id'], $this->request->post);
}
$json['success'] = $this->language->get('text_success');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
/**
* @return void
*/
public function delete(): void {
$this->load->language('sale/voucher_theme');
$json = [];
if (isset($this->request->post['selected'])) {
$selected = $this->request->post['selected'];
} else {
$selected = [];
}
if (!$this->user->hasPermission('modify', 'sale/voucher_theme')) {
$json['error'] = $this->language->get('error_permission');
}
$this->load->model('sale/voucher');
foreach ($selected as $voucher_theme_id) {
$voucher_total = $this->model_sale_voucher->getTotalVouchersByVoucherThemeId($voucher_theme_id);
if ($voucher_total) {
$json['error'] = sprintf($this->language->get('error_voucher'), $voucher_total);
}
}
if (!$json) {
$this->load->model('sale/voucher_theme');
foreach ($selected as $voucher_theme_id) {
$this->model_sale_voucher_theme->deleteVoucherTheme($voucher_theme_id);
}
$json['success'] = $this->language->get('text_success');
}
$this->response->addHeader('Content-Type: application/json');
$this->response->setOutput(json_encode($json));
}
}