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 27, 2023
1 parent a657582 commit a377126
Show file tree
Hide file tree
Showing 9 changed files with 132 additions and 42 deletions.
13 changes: 10 additions & 3 deletions upload/admin/controller/setting/store.php
Expand Up @@ -701,16 +701,23 @@ public function delete(): void {
}

$this->load->model('sale/order');
$this->load->model('sale/subscription');

foreach ($selected as $store_id) {
if (!$store_id) {
$json['error'] = $this->language->get('error_default');
}

$store_total = $this->model_sale_order->getTotalOrdersByStoreId($store_id);
$order_total = $this->model_sale_order->getTotalOrdersByStoreId($store_id);

if ($store_total) {
$json['error'] = sprintf($this->language->get('error_store'), $store_total);
if ($order_total) {
$json['error'] = sprintf($this->language->get('error_store'), $order_total);
}

$subscription_total = $this->model_sale_subscription->getTotalSubscriptionsByStoreId($store_id);

if ($subscription_total) {
$json['error'] = sprintf($this->language->get('error_store'), $subscription_total);
}
}

Expand Down
3 changes: 2 additions & 1 deletion upload/admin/language/en-gb/setting/store.php
Expand Up @@ -113,7 +113,8 @@
$_['error_pagination'] = 'Pagination required!';
$_['error_customer_group_display'] = 'You must include the default customer group if you are going to use this feature!';
$_['error_default'] = 'Warning: You cannot delete your default store!';
$_['error_store'] = 'Warning: This Store cannot be deleted as it is currently assigned to %s orders!';
$_['error_order'] = 'Warning: This Store cannot be deleted as it is currently assigned to %s orders!';
$_['error_subscription'] = 'Warning: This Store cannot be deleted as it is currently assigned to %s subscriptions!';
$_['error_image_thumb'] = 'Product Image Thumb Size dimensions required!';
$_['error_image_popup'] = 'Product Image Popup Size dimensions required!';
$_['error_image_product'] = 'Product List Size dimensions required!';
Expand Down
5 changes: 1 addition & 4 deletions upload/admin/model/catalog/subscription_plan.php
Expand Up @@ -50,10 +50,7 @@ public function getDescription(int $subscription_plan_id): array {
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "subscription_plan_description` WHERE `subscription_plan_id` = '" . (int)$subscription_plan_id . "'");

foreach ($query->rows as $result) {
$subscription_plan_description_data[$result['language_id']] = [
'name' => $result['name'],
'description' => $result['description']
];
$subscription_plan_description_data[$result['language_id']] = ['name' => $result['name']];
}

return $subscription_plan_description_data;
Expand Down
6 changes: 6 additions & 0 deletions upload/admin/model/sale/subscription.php
Expand Up @@ -162,6 +162,12 @@ public function getTotalSubscriptions(array $data = []): int {
return (int)$query->row['total'];
}

public function getTotalSubscriptionsByStoreId(int $store_id): int {
$query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "subscription` WHERE `store_id` = '" . (int)$store_id . "'");

return (int)$query->row['total'];
}

public function getTotalSubscriptionsBySubscriptionStatusId(int $subscription_status_id): int {
$query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "subscription` WHERE `subscription_status_id` = '" . (int)$subscription_status_id . "'");

Expand Down
28 changes: 21 additions & 7 deletions upload/catalog/controller/checkout/confirm.php
Expand Up @@ -99,6 +99,7 @@ public function index(): string {

// Payment Details
if ($this->config->get('config_checkout_payment_address')) {
$order_data['payment_address_id'] = $this->session->data['payment_address']['payment_address_id'];
$order_data['payment_firstname'] = $this->session->data['payment_address']['firstname'];
$order_data['payment_lastname'] = $this->session->data['payment_address']['lastname'];
$order_data['payment_company'] = $this->session->data['payment_address']['company'];
Expand All @@ -113,6 +114,7 @@ public function index(): string {
$order_data['payment_address_format'] = $this->session->data['payment_address']['address_format'];
$order_data['payment_custom_field'] = isset($this->session->data['payment_address']['custom_field']) ? $this->session->data['payment_address']['custom_field'] : [];
} else {
$order_data['payment_address_id'] = 0;
$order_data['payment_firstname'] = '';
$order_data['payment_lastname'] = '';
$order_data['payment_company'] = '';
Expand All @@ -135,6 +137,7 @@ public function index(): string {

// Shipping Details
if ($this->cart->hasShipping()) {
$order_data['shipping_address_id'] = $this->session->data['shipping_address']['shipping_address_id'];
$order_data['shipping_firstname'] = $this->session->data['shipping_address']['firstname'];
$order_data['shipping_lastname'] = $this->session->data['shipping_address']['lastname'];
$order_data['shipping_company'] = $this->session->data['shipping_address']['company'];
Expand All @@ -149,6 +152,7 @@ public function index(): string {
$order_data['shipping_address_format'] = $this->session->data['shipping_address']['address_format'];
$order_data['shipping_custom_field'] = isset($this->session->data['shipping_address']['custom_field']) ? $this->session->data['shipping_address']['custom_field'] : [];
} else {
$order_data['shipping_address_id'] = 0;
$order_data['shipping_firstname'] = '';
$order_data['shipping_lastname'] = '';
$order_data['shipping_company'] = '';
Expand Down Expand Up @@ -237,18 +241,28 @@ public function index(): string {
$order_data['marketing_id'] = 0;
$order_data['tracking'] = '';

if ($this->config->get('config_affiliate_status') && isset($this->session->data['tracking'])) {
if (isset($this->session->data['tracking'])) {
$subtotal = $this->cart->getSubTotal();

// Affiliate
$this->load->model('account/affiliate');
if ($this->config->get('config_affiliate_status')) {
$this->load->model('account/affiliate');

$affiliate_info = $this->model_account_affiliate->getAffiliateByTracking($this->session->data['tracking']);
$affiliate_info = $this->model_account_affiliate->getAffiliateByTracking($this->session->data['tracking']);

if ($affiliate_info) {
$order_data['affiliate_id'] = $affiliate_info['customer_id'];
$order_data['commission'] = ($subtotal / 100) * $affiliate_info['commission'];
$order_data['tracking'] = $this->session->data['tracking'];
if ($affiliate_info) {
$order_data['affiliate_id'] = $affiliate_info['customer_id'];
$order_data['commission'] = ($subtotal / 100) * $affiliate_info['commission'];
$order_data['tracking'] = $this->session->data['tracking'];
}
}

$this->load->model('marketing/marketing');

$marketing_info = $this->model_marketing_marketing->getMarketingByCode($this->session->data['tracking']);

if ($marketing_info) {
$order_data['marketing_id'] = $marketing_info['marketing_id'];
}
}

Expand Down
1 change: 0 additions & 1 deletion upload/catalog/language/en-gb/account/order.php
Expand Up @@ -28,7 +28,6 @@
$_['text_no_results'] = 'You have not made any previous orders!';
$_['text_error'] = 'The order you requested could not be found!';


// Column
$_['column_order_id'] = 'Order ID';
$_['column_customer'] = 'Customer';
Expand Down
59 changes: 39 additions & 20 deletions upload/catalog/model/checkout/order.php
Expand Up @@ -19,33 +19,52 @@ public function addOrder(array $data): int {
$this->db->query("INSERT INTO `" . DB_PREFIX . "order_option` SET `order_id` = '" . (int)$order_id . "', `order_product_id` = '" . (int)$order_product_id . "', `product_option_id` = '" . (int)$option['product_option_id'] . "', `product_option_value_id` = '" . (int)$option['product_option_value_id'] . "', `name` = '" . $this->db->escape($option['name']) . "', `value` = '" . $this->db->escape($option['value']) . "', `type` = '" . $this->db->escape($option['type']) . "'");
}

if ($product['subscription']) {
if (!$product['subscription_id']) {
if ($product['subscription']['trial_duration'] && $product['subscription']['trial_remaining']) {
$date_next = date('Y-m-d', strtotime('+' . $product['subscription']['trial_cycle'] . ' ' . $product['subscription']['trial_frequency']));
} elseif ($product['subscription']['duration'] && $product['subscription']['remaining']) {
$date_next = date('Y-m-d', strtotime('+' . $product['subscription']['cycle'] . ' ' . $product['subscription']['frequency']));
}

$subscription_data = [
'order_product_id' => $order_product_id,
'customer_id' => $data['customer_id'],
'order_id' => $order_id,
'subscription_plan_id' => $product['subscription']['subscription_plan_id'],
'name' => $product['subscription']['name'],
'description' => $product['subscription']['description'],
'trial_price' => $product['subscription']['trial_price'],
'trial_frequency' => $product['subscription']['trial_frequency'],
'trial_cycle' => $product['subscription']['trial_cycle'],
'trial_duration' => $product['subscription']['trial_duration'],
'trial_remaining' => $product['subscription']['trial_remaining'],
'trial_status' => $product['subscription']['trial_status'],
'price' => $product['subscription']['price'],
'frequency' => $product['subscription']['frequency'],
'cycle' => $product['subscription']['cycle'],
'duration' => $product['subscription']['duration'],
'remaining' => $product['subscription']['duration'],
'date_next' => $date_next,
'status' => $product['subscription']['status']
'order_id' => $order_id,
'order_product_id' => $order_product_id,
'store_id' => $data['store_id'],
'customer_id' => $data['customer_id'],
'customer_payment_id' => $data['customer_payment_id'],
'payment_address_id' => $data['payment_address_id'],
'shipping_address_id' => $data['shipping_address_id'],
'shipping_method' => $data['shipping_method'],
'shipping_code' => $data['shipping_code'],
'product_id' => $product['product_id'],
'quantity' => $product['quantity'],
'subscription_plan_id' => $product['subscription']['subscription_plan_id'],
'name' => $product['subscription']['name'],
'description' => $product['subscription']['description'],
'trial_price' => $product['subscription']['trial_price'],
'trial_frequency' => $product['subscription']['trial_frequency'],
'trial_cycle' => $product['subscription']['trial_cycle'],
'trial_duration' => $product['subscription']['trial_duration'],
'trial_remaining' => $product['subscription']['trial_remaining'],
'trial_status' => $product['subscription']['trial_status'],
'price' => $product['subscription']['price'],
'frequency' => $product['subscription']['frequency'],
'cycle' => $product['subscription']['cycle'],
'duration' => $product['subscription']['duration'],
'remaining' => $product['subscription']['duration'],
'date_next' => $date_next,
'comment' => $data['comment'],
'subscription_status_id' => 0,
'affiliate_id' => $data['affiliate_id'],
'commission' => $data['commission'],
'marketing_id' => $data['marketing_id'],
'tracking' => $data['tracking'],
'language_id' => $data['language_id'],
'currency_id' => $data['currency_id'],
'ip' => $data['ip'],
'forwarded_ip' => $data['forwarded_ip'],
'user_agent' => $data['user_agent'],
'accept_language' => $data['accept_language']
];

$this->model_checkout_subscription->addSubscription($order_id, $subscription_data);
Expand Down
54 changes: 53 additions & 1 deletion upload/catalog/model/checkout/subscription.php
Expand Up @@ -8,7 +8,59 @@ public function addSubscription(int $order_id, array $data): int {
$customer_payment_id = 0;
}

$this->db->query("INSERT INTO `" . DB_PREFIX . "subscription` SET `customer_id` = '" . (int)$data['customer_id'] . "', `order_id` = '" . (int)$order_id . "', `order_product_id` = '" . (int)$data['order_product_id'] . "', `subscription_plan_id` = '" . (int)$data['subscription_plan_id'] . "', `customer_payment_id` = '" . (int)$customer_payment_id . "', `name` = '" . $this->db->escape($data['name']) . "', `description` = '" . $this->db->escape($data['description']) . "', `reference` = '', `trial_price` = '" . (float)$data['trial_price'] . "', `trial_frequency` = '" . $this->db->escape($data['trial_frequency']) . "', `trial_cycle` = '" . (int)$data['trial_cycle'] . "', `trial_duration` = '" . (int)$data['trial_duration'] . "', `trial_remaining` = '" . (int)$data['trial_remaining'] . "', `trial_status` = '" . (int)$data['trial_status'] . "', `price` = '" . (float)$data['price'] . "', `frequency` = '" . $this->db->escape($data['frequency']) . "', `cycle` = '" . (int)$data['cycle'] . "', `duration` = '" . (int)$data['duration'] . "', `remaining` = '" . (int)$data['remaining'] . "', `date_next` = '" . $this->db->escape($data['date_next']) . "', `subscription_status_id` = '" . (int)$this->config->get('config_subscription_status_id') . "', `status` = '" . (int)$data['status'] . "', `date_added` = NOW(), `date_modified` = NOW()");
$this->db->query("INSERT INTO `" . DB_PREFIX . "subscription` SET
`order_id` = '" . (int)$data['order_id'] . "',
`order_product_id` = '" . (int)$data['order_product_id'] . "',
`store_id` = '" . (int)$data['store_id'] . "',
`customer_id` = '" . (int)$data['customer_id'] . "',
`customer_payment_id` = '" . (int)$data['customer_payment_id'] . "',
`payment_address_id` = '" . (int)$data['payment_address_id'] . "',
`shipping_address_id` = '" . (int)$data['shipping_address_id'] . "',
`shipping_method` = '" . (int)$data['shipping_method'] . "',
`shipping_code` = '" . (int)$data['shipping_code'] . "',
`subscription_plan_id` = '" . (int)$data['subscription_plan_id'] . "',
`product_id` = '" . (int)$data['product_id'] . "',
`quantity` = '" . (int)$data['quantity'] . "',
`name` = '" . $this->db->escape($data['name']) . "',
`trial_price` = '', `trial_price` = '" . (float)$data['trial_price'] . "',
`trial_frequency` = '" . $this->db->escape($data['trial_frequency']) . "',
`trial_cycle` = '" . (int)$data['trial_cycle'] . "',
`trial_duration` = '" . (int)$data['trial_duration'] . "',
`trial_remaining` = '" . (int)$data['trial_remaining'] . "',
`trial_status` = '" . (int)$data['trial_status'] . "',
`price` = '" . (float)$data['price'] . "',
`frequency` = '" . $this->db->escape($data['frequency']) . "',
`cycle` = '" . (int)$data['cycle'] . "',
`duration` = '" . (int)$data['duration'] . "',
`remaining` = '" . (int)$data['remaining'] . "',
`date_next` = '" . $this->db->escape($data['date_next']) . "',
`comment` = '" . $this->db->escape($data['comment']) . "',
`subscription_status_id` = '" . (int)$data['subscription_status_id'] . "',
`affiliate_id` = '" . (int)$data['affiliate_id'] . "',
`commission` = '" . (float)$data['commission'] . "',
`marketing_id` = '" . (int)$data['marketing_id'] . "',
`tracking` = '" . $this->db->escape($data['tracking']) . "',
`language_id` = '" . (int)$data['language_id'] . "',
`currency_id` = '" . (int)$data['currency_id'] . "',
`ip` = '" . $this->db->escape($data['ip']) . "',
`forwarded_ip` = '" . $this->db->escape($data['forwarded_ip']) . "',
`user_agent` = '" . $this->db->escape($data['user_agent']) . "',
`accept_language` = '" . $this->db->escape($data['accept_language']) . "',
`date_added` = NOW(),
`date_modified` = NOW()");

return $this->db->getLastId();
}
Expand Down
5 changes: 0 additions & 5 deletions upload/system/helper/db_schema.php
Expand Up @@ -6461,11 +6461,6 @@ function oc_db_schema() {
'type' => 'varchar(255)',
'not_null' => true
],
[
'name' => 'description',
'type' => 'text',
'not_null' => true
],
[
'name' => 'trial_price',
'type' => 'decimal(10,4)',
Expand Down

0 comments on commit a377126

Please sign in to comment.