Skip to content

Commit

Permalink
https://github.com/opencart/opencart/issues/11458
Browse files Browse the repository at this point in the history
  • Loading branch information
danielkerr committed Jan 21, 2023
1 parent 2da089f commit c90c8cd
Show file tree
Hide file tree
Showing 10 changed files with 267 additions and 190 deletions.
329 changes: 162 additions & 167 deletions upload/admin/view/template/sale/order_info.twig

Large diffs are not rendered by default.

42 changes: 41 additions & 1 deletion upload/catalog/controller/account/order.php
Expand Up @@ -46,19 +46,28 @@ public function index(): void {
$data['orders'] = [];

$this->load->model('account/order');
$this->load->model('localisation/order_status');

$order_total = $this->model_account_order->getTotalOrders();

$results = $this->model_account_order->getOrders(($page - 1) * $limit, $limit);

foreach ($results as $result) {
$order_status_info = $this->model_localisation_order_status->getOrderStatus($result['order_status_id']);

if ($order_status_info) {
$order_status = $order_status_info['name'];
} else {
$order_status = '';
}

$product_total = $this->model_account_order->getTotalProductsByOrderId($result['order_id']);
$voucher_total = $this->model_account_order->getTotalVouchersByOrderId($result['order_id']);

$data['orders'][] = [
'order_id' => $result['order_id'],
'name' => $result['firstname'] . ' ' . $result['lastname'],
'status' => $result['status'],
'status' => $order_status,
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
'products' => ($product_total + $voucher_total),
'total' => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
Expand Down Expand Up @@ -220,6 +229,7 @@ public function info(): object|null {

$data['shipping_method'] = $order_info['shipping_method'];

$this->load->model('account/subscription');
$this->load->model('catalog/product');
$this->load->model('tool/upload');

Expand Down Expand Up @@ -252,6 +262,35 @@ public function info(): object|null {
];
}

$subscription_id = 0;
$description = '';
/*
$subscription_info = $this->model_account_subscription->getSubscriptionByOrderProductId($order_id, $product['order_product_id']);
if ($subscription_info) {
$subscription_id = $subscription_info['subscription_id'];
$trial_price = $this->currency->format($subscription_info['trial_price'], $this->config->get('config_currency'));
$trial_cycle = $subscription_info['trial_cycle'];
$trial_frequency = $this->language->get('text_' . $subscription_info['trial_frequency']);
$trial_duration = $subscription_info['trial_duration'];
if ($subscription_info['trial_status']) {
$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 = $subscription_info['cycle'];
$frequency = $this->language->get('text_' . $subscription_info['frequency']);
$duration = $subscription_info['duration'];
if ($subscription_info['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);
}
}
*/
$product_info = $this->model_catalog_product->getProduct($product['product_id']);

if ($product_info) {
Expand All @@ -267,6 +306,7 @@ public function info(): object|null {
'quantity' => $product['quantity'],
'price' => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
'total' => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']),
'href' => $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . $product['product_id']),
'reorder' => $reorder,
'return' => $this->url->link('account/returns.add', 'language=' . $this->config->get('config_language') . '&order_id=' . $order_info['order_id'] . '&product_id=' . $product['product_id'])
];
Expand Down
27 changes: 21 additions & 6 deletions upload/catalog/controller/account/subscription.php
Expand Up @@ -46,6 +46,8 @@ public function index(): void {
$data['subscriptions'] = [];

$this->load->model('account/subscription');
$this->load->model('account/order');
$this->load->model('localisation/subscription_status');

$filter_data = [
'start' => ($page - 1) * $limit,
Expand All @@ -57,18 +59,31 @@ public function index(): void {
$results = $this->model_account_subscription->getSubscriptions($filter_data);

foreach ($results as $result) {
if ($result['status']) {
$status = $this->language->get('text_status_' . $result['status']);
$product_info = $this->model_account_order->getProduct($result['order_id'], $result['order_product_id']);

if ($product_info) {
$product_id = $product_info['product_id'];
$product_name = $product_info['name'];
} else {
$product_id = 0;
$product_name = '';
}

$subscription_status_info = $this->model_localisation_subscription_status->getSubscriptionStatus($result['subscription_status_id']);

if ($subscription_status_info) {
$subscription_status = $subscription_status_info['name'];
} else {
$status = '';
$subscription_status = '';
}

$data['subscriptions'][] = [
'subscription_id' => $result['subscription_id'],
'product' => $result['product'],
'status' => $status,
'product_name' => $product_name,
'product' => $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&product_id=' . $result['product_id']),
'status' => $subscription_status,
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
'view' => $this->url->link('account/subscription.info', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&subscription_id=' . $result['subscription_id']),
'view' => $this->url->link('account/subscription.info', 'language=' . $this->config->get('config_language') . '&customer_token=' . $this->session->data['customer_token'] . '&subscription_id=' . $result['subscription_id'])
];
}

Expand Down
6 changes: 0 additions & 6 deletions upload/catalog/language/en-gb/account/subscription.php
Expand Up @@ -16,12 +16,6 @@
$_['text_description'] = 'Description';
$_['text_reference'] = 'Reference';
$_['text_transaction'] = 'Transactions';
$_['text_status_1'] = 'Active';
$_['text_status_2'] = 'Inactive';
$_['text_status_3'] = 'Cancelled';
$_['text_status_4'] = 'Suspended';
$_['text_status_5'] = 'Expired';
$_['text_status_6'] = 'Pending';
$_['text_transaction_date_added'] = 'Created';
$_['text_transaction_payment'] = 'Payment';
$_['text_transaction_outstanding_payment'] = 'Outstanding payment';
Expand Down
2 changes: 1 addition & 1 deletion upload/catalog/model/account/order.php
Expand Up @@ -110,7 +110,7 @@ public function getOrders(int $start = 0, int $limit = 20): array {
$limit = 1;
}

$query = $this->db->query("SELECT o.`order_id`, o.`firstname`, o.`lastname`, os.`name` AS status, o.`date_added`, o.`total`, o.`currency_code`, o.`currency_value` FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_status` os ON (o.`order_status_id` = os.`order_status_id`) WHERE o.`customer_id` = '" . (int)$this->customer->getId() . "' AND o.`order_status_id` > '0' AND o.`store_id` = '" . (int)$this->config->get('config_store_id') . "' AND os.`language_id` = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.`order_id` DESC LIMIT " . (int)$start . "," . (int)$limit);
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE `customer_id` = '" . (int)$this->customer->getId() . "' AND `order_status_id` > '0' AND `store_id` = '" . (int)$this->config->get('config_store_id') . "' ORDER BY `order_id` DESC LIMIT " . (int)$start . "," . (int)$limit);

return $query->rows;
}
Expand Down
6 changes: 3 additions & 3 deletions upload/catalog/model/account/subscription.php
@@ -1,8 +1,8 @@
<?php
namespace Opencart\Catalog\Model\Account;
class Subscription extends \Opencart\System\Engine\Model {
public function editStatus(int $subscription_id, bool $status): void {
$this->db->query("UPDATE `" . DB_PREFIX . "subscription` SET `status` = '" . (bool)$status . "' WHERE `subscription_id` = '" . (int)$subscription_id . "'");
public function editSubscriptionStatus(int $subscription_id, bool $subscription_status_id): void {
$this->db->query("UPDATE `" . DB_PREFIX . "subscription` SET `subscription_status_id` = '" . (bool)$subscription_status_id . "' WHERE `subscription_id` = '" . (int)$subscription_id . "'");
}

public function editTrialRemaining(int $subscription_id, int $trial_remaining): void {
Expand All @@ -20,7 +20,7 @@ public function getSubscription(int $subscription_id): array {
}

public function getSubscriptions(array $data): array {
$sql = "SELECT s.`subscription_id`, s.`trial_status`, s.`trial_duration`, s.`trial_remaining`, s.`duration`, s.`remaining`, s.`customer_payment_id`, s.`trial_cycle`, s.`trial_frequency`, s.`cycle`, s.`frequency`, o.*, o.`payment_method`, o.`currency_id`, o.`currency_value` FROM `" . DB_PREFIX . "subscription` s LEFT JOIN `" . DB_PREFIX . "order` o ON (s.`order_id` = o.`order_id`)";
$sql = "SELECT s.`subscription_id`, s.`order_id`, s.`order_product_id`, s.`trial_status`, s.`trial_duration`, s.`trial_remaining`, s.`duration`, s.`remaining`, s.`customer_payment_id`, s.`trial_cycle`, s.`trial_frequency`, s.`cycle`, s.`frequency`, s.`subscription_status_id`, o.*, o.`payment_method`, o.`currency_id`, o.`currency_value` FROM `" . DB_PREFIX . "subscription` s LEFT JOIN `" . DB_PREFIX . "order` o ON (s.`order_id` = o.`order_id`)";

$implode = [];

Expand Down
23 changes: 23 additions & 0 deletions upload/catalog/model/localisation/subscription_status.php
@@ -0,0 +1,23 @@
<?php
namespace Opencart\Catalog\Model\Localisation;
class SubscriptionStatus extends \Opencart\System\Engine\Model {
public function getSubscriptionStatus(int $subscription_status_id): array {
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "subscription_status` WHERE `subscription_status_id` = '" . (int)$subscription_status_id . "' AND `language_id` = '" . (int)$this->config->get('config_language_id') . "'");

return $query->row;
}

public function getSubscriptionStatuses(): array {
$subscription_status_data = $this->cache->get('subscription_status.' . (int)$this->config->get('config_language_id'));

if (!$subscription_status_data) {
$query = $this->db->query("SELECT `subscription_status_id`, `name` FROM `" . DB_PREFIX . "subscription_status` WHERE `language_id` = '" . (int)$this->config->get('config_language_id') . "' ORDER BY `name`");

$subscription_status_data = $query->rows;

$this->cache->set('subscription_status.' . (int)$this->config->get('config_language_id'), $subscription_status_data);
}

return $subscription_status_data;
}
}
17 changes: 14 additions & 3 deletions upload/catalog/view/template/account/order_info.twig
Expand Up @@ -67,11 +67,22 @@
<tbody>
{% for product in products %}
<tr>
<td class="text-start">{{ product.name }}
<td class="text-start"><a href="{{ product.href }}">{{ product.name }}</a>
{% for option in product.option %}
<br/>
&nbsp;
<small> - {{ option.name }}: {{ option.value }}</small> {% endfor %}</td>
<small> - {{ option.name }}: {{ option.value }}</small>
{% endfor %}

{% if order_product.reward %}
<br/>
<small> - {{ text_points }}: {{ order_product.reward }}</small>
{% endif %}

{% if order_product.subscription %}
<br/>
<small> - {{ text_subscription }}: <a href="index.php?route=sale/subscription.info&user_token={{ user_token }}&subscription_id={{ order_product.subscription_id }}" target="_blank">{{ order_product.subscription }}</a></small>
{% endif %}
</td>
<td class="text-start">{{ product.model }}</td>
<td class="text-end">{{ product.quantity }}</td>
<td class="text-end">{{ product.price }}</td>
Expand Down
4 changes: 2 additions & 2 deletions upload/catalog/view/template/account/subscription_list.twig
Expand Up @@ -24,7 +24,7 @@
{% for subscription in subscriptions %}
<tr>
<td class="text-end">#{{ subscription.subscription_id }}</td>
<td class="text-start">{{ subscription.product }}</td>
<td class="text-start"><a href="{{ subscription.product }}">{{ subscription.product_name }}</a></td>
<td class="text-start">{{ subscription.status }}</td>
<td class="text-start">{{ subscription.date_added }}</td>
<td class="text-end"><a href="{{ subscription.view }}" data-bs-toggle="tooltip" title="{{ button_view }}" class="btn btn-info"><i class="fa-solid fa-eye"></i></a></td>
Expand All @@ -43,4 +43,4 @@
{{ content_bottom }}</div>
{{ column_right }}</div>
</div>
{{ footer }}
{{ footer }}
1 change: 0 additions & 1 deletion upload/system/helper/db_schema.php
Expand Up @@ -6620,7 +6620,6 @@ function oc_db_schema() {
'not_null' => true,
'auto_increment' => true
],

[
'name' => 'trial_price',
'type' => 'decimal(10,4)',
Expand Down

0 comments on commit c90c8cd

Please sign in to comment.