>
+ */
+ public function getSubscriptionPlans(array $data = []): array {
+ $sql = "SELECT * FROM `" . DB_PREFIX . "subscription_plan` `sp` LEFT JOIN `" . DB_PREFIX . "subscription_plan_description` `spd` ON (`sp`.`subscription_plan_id` = `spd`.`subscription_plan_id`) WHERE `spd`.`language_id` = '" . (int)$this->config->get('config_language_id') . "'";
+
+ if (!empty($data['filter_name'])) {
+ $sql .= " AND spd.`name` LIKE '" . $this->db->escape((string)$data['filter_name'] . '%') . "'";
+ }
+
+ $sort_data = [
+ 'spd.name',
+ 'sp.sort_order'
+ ];
+
+ if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
+ $sql .= " ORDER BY " . $data['sort'];
+ } else {
+ $sql .= " ORDER BY `spd`.`name`";
+ }
+
+ if (isset($data['order']) && ($data['order'] == 'DESC')) {
+ $sql .= " DESC";
+ } else {
+ $sql .= " ASC";
+ }
+
+ if (isset($data['start']) || isset($data['limit'])) {
+ if ($data['start'] < 0) {
+ $data['start'] = 0;
+ }
+
+ if ($data['limit'] < 1) {
+ $data['limit'] = 20;
+ }
+
+ $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
+ }
+
+ $query = $this->db->query($sql);
+
+ return $query->rows;
+ }
+
+ /**
+ * Get Total Subscription Plans
+ *
+ * @return int
+ */
+ public function getTotalSubscriptionPlans(): int {
+ $query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "subscription_plan`");
+
+ return (int)$query->row['total'];
+ }
+}
diff --git a/upload/catalog/model/extension/payment/paypal.php b/upload/catalog/model/extension/payment/paypal.php
index 0c6e4d081..81deb25c0 100644
--- a/upload/catalog/model/extension/payment/paypal.php
+++ b/upload/catalog/model/extension/payment/paypal.php
@@ -162,13 +162,13 @@ public function getPayPalOrderSubscription(int $order_id): array {
}
public function addOrderSubscription(int $order_id, string $description, array $data, string $reference): int {
- $this->db->query("INSERT INTO `" . DB_PREFIX . "order_subscription` SET `order_id` = '" . (int)$order_id . "', `product_id` = '" . (int)$data['product_id'] . "', `order_product_id` = '" . (int)$data['order_product_id'] . "', `subscription_plan_id` = '" . (int)$data['subscription']['subscription_plan_id'] . "', `frequency` = '" . $this->db->escape($data['subscription']['frequency']) . "', `cycle` = '" . (int)$data['subscription']['cycle'] . "', `duration` = '" . (int)$data['subscription']['duration'] . "', `price` = '" . (float)$data['subscription']['price'] . "', `tax` = '" . (float)$data['subscription']['tax'] . "', `trial_frequency` = '" . $this->db->escape($data['subscription']['trial_frequency']) . "', `trial_cycle` = '" . (int)$data['subscription']['trial_cycle'] . "', `trial_duration` = '" . (int)$data['subscription']['trial_duration'] . "', `trial_price` = '" . (float)$data['subscription']['trial_price'] . "'");
+ $this->db->query("INSERT INTO `" . DB_PREFIX . "order_subscription` SET `order_id` = '" . (int)$order_id . "', `product_id` = '" . (int)$data['subscription']['product_id'] . "', `order_product_id` = '" . (int)$data['subscription']['order_product_id'] . "', `subscription_plan_id` = '" . (int)$data['subscription']['subscription_plan_id'] . "', `frequency` = '" . $this->db->escape($data['subscription']['frequency']) . "', `cycle` = '" . (int)$data['subscription']['cycle'] . "', `duration` = '" . (int)$data['subscription']['duration'] . "', `price` = '" . (float)$data['subscription']['price'] . "', `tax` = '" . (float)$data['subscription']['tax'] . "', `trial_frequency` = '" . $this->db->escape($data['subscription']['trial_frequency']) . "', `trial_cycle` = '" . (int)$data['subscription']['trial_cycle'] . "', `trial_duration` = '" . (int)$data['subscription']['trial_duration'] . "', `trial_price` = '" . (float)$data['subscription']['trial_price'] . "'");
return $this->db->getLastId();
}
public function editOrderSubscriptionStatus(int $order_id, int $status): void {
- $this->db->query("UPDATE `" . DB_PREFIX . "paypal_checkout_integration_order` SET `status` = '" . (int)$status . "' WHERE `order_id` = '" . (int)$order_id . "'");
+ $this->db->query("UPDATE `" . DB_PREFIX . "paypal_checkout_integration_order_subscription` SET `status` = '" . (int)$status . "' WHERE `order_id` = '" . (int)$order_id . "'");
}
public function deleteOrderSubscription(int $order_id): void {
@@ -205,12 +205,14 @@ public function deleteOrderSubscriptionTransaction(int $order_id): void {
* subscriptionPayment
*
* @param array $item
- * @param array $order_data
+ * @param array $order_info
* @param array $paypal_order_data
*
* @return void
*/
- public function subscriptionPayment(array $item, array $order_data, array $paypal_order_data): void {
+ public function subscriptionPayment(array $item, array $order_info, array $paypal_order_data): void {
+ $this->load->model('checkout/subscription');
+
$_config = new Config();
$_config->load('paypal');
@@ -220,8 +222,6 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
$transaction_method = $setting['general']['transaction_method'];
- $recurring_name = $item['subscription']['name'];
-
if ($item['subscription']['trial_status'] == 1) {
$price = $item['subscription']['trial_price'];
$trial_amt = $this->currency->format($this->tax->calculate($item['subscription']['trial_price'], $item['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['quantity'] . ' ' . $this->session->data['currency'];
@@ -257,8 +257,6 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
}
}
- $order_subscription_id = $this->addOrderSubscription($order_data['order_id'], $description, $item, $paypal_order_data['transaction_id']);
-
$next_payment = new \DateTime('now');
$trial_end = new \DateTime('now');
$subscription_end = new \DateTime('now');
@@ -284,7 +282,9 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
$subscription_end = new \DateTime('0000-00-00');
}
- $result = $this->createPayment($order_data, $paypal_order_data, $price, $order_subscription_id, $recurring_name);
+ $order_subscription_id = $this->addOrderSubscription($order_info['order_id'], $description, $item, $paypal_order_data['transaction_id']);
+
+ $result = $this->createPayment($order_info, $paypal_order_data, $price, $order_subscription_id, $item['subscription']['name']);
$transaction_status = '';
$transaction_id = '';
@@ -308,11 +308,11 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
}
if ($transaction_id && $transaction_status && $currency_code && $amount) {
- $this->editOrderRecurringStatus($order_subscription_id, 1);
+ $this->editOrderSubscriptionStatus($order_info['order_id'], 1);
$paypal_order_subscription_data = [
'order_subscription_id' => $order_subscription_id,
- 'order_id' => $order_data['order_id'],
+ 'order_id' => $order_info['order_id'],
'trial_end' => date_format($trial_end, 'Y-m-d H : i: s'),
'subscription_end' => date_format($subscription_end, 'Y-m-d H: i: s'),
'currency_code' => $currency_code,
@@ -329,9 +329,11 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
'amount' => $amount
];
- $this->addOrderRecurringTransaction($order_subscription_transaction_data);
+ $this->addOrderSubscriptionTransaction($order_subscription_transaction_data);
$this->editPayPalOrderSubscriptionNextPayment($order_subscription_id, date_format($next_payment, 'Y-m-d H:i:s'));
+
+ $this->model_checkout_subscription->addSubscription($item['subscription']);
} else {
$order_subscription_transaction_data = [
'order_subscription_id' => $order_subscription_id,
@@ -340,7 +342,7 @@ public function subscriptionPayment(array $item, array $order_data, array $paypa
'amount' => $amount
];
- $this->addOrderRecurringTransaction($order_subscription_transaction_data);
+ $this->addOrderSubscriptionTransaction($order_subscription_transaction_data);
}
}
}
@@ -428,7 +430,7 @@ public function cronPayment(): void {
'amount' => $amount
];
- $this->addOrderRecurringTransaction($order_subscription_transaction_data);
+ $this->addOrderSubscriptionTransaction($order_subscription_transaction_data);
$this->editPayPalOrderSubscriptionNextPayment($order_subscription['order_id'], date_format($next_payment, 'Y-m-d H:i:s'));
} else {
@@ -439,7 +441,7 @@ public function cronPayment(): void {
'amount' => $amount
];
- $this->addOrderRecurringTransaction($order_subscription_transaction_data);
+ $this->addOrderSubscriptionTransaction($order_subscription_transaction_data);
}
}
}
@@ -611,13 +613,13 @@ private function calculateSchedule(string $frequency, \DateTime $next_payment, i
public function getAgreeStatus(): bool {
$agree_status = true;
- $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "country WHERE status = '1' AND (iso_code_2 = 'CU' OR iso_code_2 = 'IR' OR iso_code_2 = 'SY' OR iso_code_2 = 'KP')");
+ $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE `status` = '1' AND (`iso_code_2` = 'CU' OR `iso_code_2` = 'IR' OR `iso_code_2` = 'SY' OR `iso_code_2` = 'KP')");
if ($query->rows) {
$agree_status = false;
}
- $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone WHERE country_id = '220' AND status = '1' AND (`code` = '43' OR `code` = '14' OR `code` = '09')");
+ $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE `country_id` = '220' AND `status` = '1' AND (`code` = '43' OR `code` = '14' OR `code` = '09')");
if ($query->rows) {
$agree_status = false;
@@ -660,18 +662,16 @@ public function update(): void {
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order_subscription` (
`paypal_subscription_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
- `order_id` int(11) NOT NULL,
`next_payment` datetime NOT NULL,
`trial_end` datetime DEFAULT NULL,
`subscription_end` datetime DEFAULT NULL,
`currency_code` varchar(3) NOT NULL,
- `total` decimal(10, 2) NOT NULL,
+ `total` decimal(10, 2) NOT NULL,
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
PRIMARY KEY (`paypal_subscription_id`),
- KEY (`order_id`),
- KEY (`subscription_id`))
- ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
+ KEY (`order_id`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
$this->db->query("
CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "order_subscription_transaction` (
@@ -700,9 +700,9 @@ public function update(): void {
$config_setting = $_config->get('paypal_setting');
- $this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE store_id = '0' AND `code` = 'paypal_version'");
+ $this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE `store_id` = '0' AND `code` = 'paypal_version'");
- $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '0', `code` = 'paypal_version', `key` = 'paypal_version', `value` = '" . $this->db->escape($config_setting['version']) . "'");
+ $this->db->query("INSERT INTO " . DB_PREFIX . "setting SET `store_id` = '0', `code` = 'paypal_version', `key` = 'paypal_version', `value` = '" . $this->db->escape($config_setting['version']) . "'");
}
/**
diff --git a/upload/catalog/model/extension/payment/sagepay_server.php b/upload/catalog/model/extension/payment/sagepay_server.php
index 0c1a0da4b..6fae62806 100644
--- a/upload/catalog/model/extension/payment/sagepay_server.php
+++ b/upload/catalog/model/extension/payment/sagepay_server.php
@@ -118,7 +118,7 @@ public function deleteCard(int $card_id): void {
public function addOrder(array $order_info): void {
$this->db->query("DELETE FROM `" . DB_PREFIX . "sagepay_server_order` WHERE `order_id` = '" . (int)$order_info['order_id'] . "'");
- $this->db->query("INSERT INTO `" . DB_PREFIX . "sagepay_server_order` SET `order_id` = '" . (int)$order_info['order_id'] . "', `customer_id` = '" . (int)$this->customer->getId() . "', `vps_tx_id` = '" . $this->db->escape($order_info['VPSTxId']) . "', `vendor_tx_code` = '" . $this->db->escape($order_info['VendorTxCode']) . "', `security_key` = '" . $this->db->escape($order_info['SecurityKey']) . "', `date_added` = NOW(), `date_modified` = NOW(), `currency_code` = '" . $this->db->escape($order_info['currency_code']) . "', `total` = '" . $this->currency->format($order_info['total'], $order_info['currency_code'], false, false) . "'");
+ $this->db->query("INSERT INTO `" . DB_PREFIX . "sagepay_server_order` SET `order_id` = '" . (int)$order_info['order_id'] . "', `customer_id` = '" . (int)$this->customer->getId() . "', `vps_tx_id` = '" . $this->db->escape($order_info['VPSTxId']) . "', `vendor_tx_code` = '" . $this->db->escape($order_info['VendorTxCode']) . "', `security_key` = '" . $this->db->escape($order_info['SecurityKey']) . "', `currency_code` = '" . $this->db->escape($order_info['currency_code']) . "', `total` = '" . $this->currency->format($order_info['total'], $order_info['currency_code'], false, false) . "', `date_added` = NOW(), `date_modified` = NOW()");
}
/**
@@ -224,33 +224,14 @@ public function getReference(string $vendor_tx_code): array {
*
* @return void
*/
- public function addRecurringPayment(array $item, string $vendor_tx_code): void {
+ public function subscriptionPayment(array $item, string $vendor_tx_code): void {
$this->load->language('extension/payment/sagepay_server');
// Subscriptions
$this->load->model('checkout/subscription');
- // Trial information
- if ($item['subscription']['trial_status'] == 1) {
- $trial_amt = $this->currency->format($this->tax->calculate($item['subscription']['trial_price'], $item['subscription']['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['subscription']['quantity'] . ' ' . $this->session->data['currency'];
- $trial_text = sprintf($this->language->get('text_trial'), $trial_amt, $item['subscription']['trial_cycle'], $item['subscription']['trial_frequency'], $item['subscription']['trial_duration']);
- } else {
- $trial_text = '';
- }
-
- $subscription_amt = $this->currency->format($this->tax->calculate($item['subscription']['price'], $item['subscription']['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['subscription']['quantity'] . ' ' . $this->session->data['currency'];
- $subscription_description = $trial_text . sprintf($this->language->get('text_subscription'), $subscription_amt, $item['subscription']['cycle'], $item['subscription']['frequency']);
-
- $item['subscription']['description'] = [];
-
- if ($item['subscription']['duration'] > 0) {
- $subscription_description .= sprintf($this->language->get('text_length'), $item['subscription']['duration']);
- }
-
- $item['subscription']['description'] = $subscription_description;
-
// Create new subscription and set to pending status as no payment has been made yet.
- $subscription_id = $this->model_checkout_subscription->addSubscription($item['subscription']['subscription']);
+ $subscription_id = $this->model_checkout_subscription->addSubscription($item['subscription']);
//$this->model_checkout_subscription->editReference($subscription_id, $vendor_tx_code);
}
diff --git a/upload/catalog/view/theme/default/template/extension/payment/paypal/confirm.twig b/upload/catalog/view/theme/default/template/extension/payment/paypal/confirm.twig
index 364dff52f..6d000e8ef 100644
--- a/upload/catalog/view/theme/default/template/extension/payment/paypal/confirm.twig
+++ b/upload/catalog/view/theme/default/template/extension/payment/paypal/confirm.twig
@@ -336,27 +336,27 @@
{{ footer }}
\ No newline at end of file
diff --git a/upload/catalog/view/theme/default/template/extension/payment/paypal/paypal.twig b/upload/catalog/view/theme/default/template/extension/payment/paypal/paypal.twig
index ea47c9779..e68e4fbb8 100644
--- a/upload/catalog/view/theme/default/template/extension/payment/paypal/paypal.twig
+++ b/upload/catalog/view/theme/default/template/extension/payment/paypal/paypal.twig
@@ -42,33 +42,33 @@
{% endif %}
{% else %}
-