Skip to content

Commit

Permalink
Another load of subscription work
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCartpenter committed Jan 20, 2024
1 parent db0ec8c commit ce1fccd
Show file tree
Hide file tree
Showing 7 changed files with 228 additions and 38 deletions.
2 changes: 1 addition & 1 deletion upload/admin/model/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ public function install(): void {
`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,
PRIMARY KEY (`paypal_subscription_id`),
KEY (`order_id`),
KEY (`subscription_id`)
Expand Down
12 changes: 7 additions & 5 deletions upload/catalog/controller/extension/payment/opayo.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public function confirm(): void {
$this->load->model('extension/payment/opayo');

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

// Setting
$_config = new \Config();
$_config->load('opayo');
Expand Down Expand Up @@ -378,6 +378,7 @@ public function confirm(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down Expand Up @@ -428,7 +429,7 @@ public function threeDSnotify(): void {
$this->load->model('checkout/order');

// Setting
$_config = new \Config();
$_config = new \Config();
$_config->load('opayo');

$config_setting = $_config->get('opayo_setting');
Expand Down Expand Up @@ -501,9 +502,9 @@ public function threeDSnotify(): void {

if ($setting['general']['transaction_method'] == 'PAYMENT') {
$payment_data = [];

$payment_data['VendorTxCode'] = $this->session->data['order_id'] . 'SD' . date('YmdHis') . mt_rand(1, 999);

$subscription_products = $this->cart->getSubscriptions();

$order_products = $this->model_checkout_order->getProducts($this->session->data['order_id']);
Expand Down Expand Up @@ -541,6 +542,7 @@ public function threeDSnotify(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand All @@ -560,7 +562,7 @@ public function threeDSnotify(): void {
$item['subscription']['forwarded_ip'] = $forwarded_ip;
$item['subscription']['user_agent'] = $user_agent;
$item['subscription']['accept_language'] = $accept_language;

$this->model_extension_payment_opayo->subscriptionPayment($item, $payment_data['VendorTxCode']);
}
}
Expand Down
4 changes: 4 additions & 0 deletions upload/catalog/controller/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -1389,6 +1389,7 @@ public function approveOrder(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down Expand Up @@ -1526,6 +1527,7 @@ public function approveOrder(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down Expand Up @@ -2650,6 +2652,7 @@ public function completeOrder(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down Expand Up @@ -2787,6 +2790,7 @@ public function completeOrder(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down
118 changes: 116 additions & 2 deletions upload/catalog/controller/extension/payment/sagepay_direct.php
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,65 @@ public function send(): void {
// Loop through any products that are subscription items
$subscription_products = $this->cart->getSubscriptions();

$order_products = $this->model_checkout_order->getProducts($this->session->data['order_id']);

if (isset($this->request->server['HTTP_X_REAL_IP'])) {
$ip = $this->request->server['HTTP_X_REAL_IP'];
} elseif (isset($this->request->server['REMOTE_ADDR'])) {
$ip = $this->request->server['REMOTE_ADDR'];
} else {
$ip = '';
}

if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) {
$forwarded_ip = $this->request->server['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) {
$forwarded_ip = $this->request->server['HTTP_CLIENT_IP'];
} else {
$forwarded_ip = '';
}

if (isset($this->request->server['HTTP_USER_AGENT'])) {
$user_agent = $this->request->server['HTTP_USER_AGENT'];
} else {
$user_agent = '';
}

if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) {
$accept_language = $this->request->server['HTTP_ACCEPT_LANGUAGE'];
} else {
$accept_language = '';
}

foreach ($subscription_products as $item) {
$this->model_extension_payment_sagepay_direct->subscriptionPayment($item, $payment_data['VendorTxCode']);
foreach ($order_products as $order_product) {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
$item['subscription']['customer_id'] = $this->customer->getId();
$item['subscription']['payment_address_id'] = $order_info['payment_address_id'];
$item['subscription']['payment_method'] = $order_info['payment_method'];
$item['subscription']['shipping_address_id'] = $order_info['shipping_address_id'];
$item['subscription']['shipping_method'] = $order_info['shipping_method'];
$item['subscription']['quantity'] = $order_product['quantity'];
$item['subscription']['comment'] = $order_info['comment'];
$item['subscription']['affiliate_id'] = $order_info['affiliate_id'];
$item['subscription']['marketing_id'] = $order_info['marketing_id'];
$item['subscription']['tracking'] = $order_info['tracking'];
$item['subscription']['language_id'] = $order_info['language_id'];
$item['subscription']['currency_id'] = $order_info['currency_id'];
$item['subscription']['ip'] = $ip;
$item['subscription']['forwarded_ip'] = $forwarded_ip;
$item['subscription']['user_agent'] = $user_agent;
$item['subscription']['accept_language'] = $accept_language;

$this->model_extension_payment_sagepay_direct->subscriptionPayment($item, $payment_data['VendorTxCode']);
}
}
}
}

Expand Down Expand Up @@ -454,8 +511,65 @@ public function callback(): void {
// Loop through any products that are subscription items
$subscription_products = $this->cart->getSubscriptions();

$order_products = $this->model_checkout_order->getProducts($this->session->data['order_id']);

if (isset($this->request->server['HTTP_X_REAL_IP'])) {
$ip = $this->request->server['HTTP_X_REAL_IP'];
} elseif (isset($this->request->server['REMOTE_ADDR'])) {
$ip = $this->request->server['REMOTE_ADDR'];
} else {
$ip = '';
}

if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) {
$forwarded_ip = $this->request->server['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) {
$forwarded_ip = $this->request->server['HTTP_CLIENT_IP'];
} else {
$forwarded_ip = '';
}

if (isset($this->request->server['HTTP_USER_AGENT'])) {
$user_agent = $this->request->server['HTTP_USER_AGENT'];
} else {
$user_agent = '';
}

if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) {
$accept_language = $this->request->server['HTTP_ACCEPT_LANGUAGE'];
} else {
$accept_language = '';
}

foreach ($subscription_products as $item) {
$this->model_extension_payment_sagepay_direct->subscriptionPayment($item, $sagepay_order_info['vendor_tx_code']);
foreach ($order_products as $order_product) {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
$item['subscription']['customer_id'] = $this->customer->getId();
$item['subscription']['payment_address_id'] = $order_info['payment_address_id'];
$item['subscription']['payment_method'] = $order_info['payment_method'];
$item['subscription']['shipping_address_id'] = $order_info['shipping_address_id'];
$item['subscription']['shipping_method'] = $order_info['shipping_method'];
$item['subscription']['quantity'] = $order_product['quantity'];
$item['subscription']['comment'] = $order_info['comment'];
$item['subscription']['affiliate_id'] = $order_info['affiliate_id'];
$item['subscription']['marketing_id'] = $order_info['marketing_id'];
$item['subscription']['tracking'] = $order_info['tracking'];
$item['subscription']['language_id'] = $order_info['language_id'];
$item['subscription']['currency_id'] = $order_info['currency_id'];
$item['subscription']['ip'] = $ip;
$item['subscription']['forwarded_ip'] = $forwarded_ip;
$item['subscription']['user_agent'] = $user_agent;
$item['subscription']['accept_language'] = $accept_language;

$this->model_extension_payment_sagepay_direct->subscriptionPayment($item, $sagepay_order_info['vendor_tx_code']);
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,9 @@ public function send(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['name'] = $order_product['name'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
$item['subscription']['customer_id'] = $this->customer->getId();
Expand Down Expand Up @@ -539,6 +541,7 @@ public function success(): void {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_id'] = $this->session->data['order_id'];
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
Expand Down
38 changes: 21 additions & 17 deletions upload/catalog/model/extension/payment/opayo.php
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,8 @@ public function subscriptionPayment(array $item, string $vendor_tx_code): void {
$this->updateSubscriptionOrder($subscription_id, date_format($next_payment, 'Y-m-d H:i:s'));

$this->addOrderTransaction($subscription_id, $response_data, 1);

$opayo_order_info = $this->getOrder($this->session->data['order_id']);
} else {
$this->addOrderTransaction($subscription_id, $response_data, 4);
}
Expand All @@ -309,37 +311,37 @@ public function cronPayment(): array {

$limit = $this->config->get('config_pagination');

$order_subscriptions = $this->model_account_subscription->getSubscriptions(0, $limit);
$subscriptions = $this->model_account_subscription->getSubscriptions(0, $limit);

$cron_data = [];

$i = 0;

foreach ($subscriptions as $subscription) {
$order_subscription = $this->model_account_subscription->getSubscriptionByOrderProductId($subscription['order_id'], $subscription['order_product_id']);
$subscription_info = $this->model_account_subscription->getSubscriptionByOrderProductId($subscription['order_id'], $subscription['order_product_id']);

if ($order_subscription && $order_subscription['status'] == 1) {
$opayo_order_info = $this->getOrder($order_subscription['order_id']);
if ($subscription_info && $subscription_info['status'] == 1) {
$opayo_order_info = $this->getOrder($subscription_info['order_id']);

$today = new \DateTime('now');
$unlimited = new \DateTime('0000-00-00');
$next_payment = new \DateTime($order_subscription['next_payment']);
$trial_end = new \DateTime($order_subscription['trial_end']);
$subscription_end = new \DateTime($order_subscription['subscription_end']);
$next_payment = new \DateTime($subscription_info['date_next']);
$trial_end = new \DateTime($subscription_info['trial_end']);
$subscription_end = new \DateTime($subscription_info['subscription_end']);

$order_info = $this->model_checkout_order->getOrder($order_subscription['order_id']);
$order_info = $this->model_checkout_order->getOrder($subscription_info['order_id']);

$order_product = $this->model_account_order->getProduct($order_subscription['order_id'], $order_subscription['order_product_id']);
$order_product = $this->model_account_order->getProduct($subscription_info['order_id'], $subscription_info['order_product_id']);

if ((date_format($today, 'Y-m-d H:i:s') > date_format($next_payment, 'Y-m-d H:i:s')) && (date_format($trial_end, 'Y-m-d H:i:s') > date_format($today, 'Y-m-d H:i:s') || date_format($trial_end, 'Y-m-d H:i:s') == date_format($unlimited, 'Y-m-d H:i:s'))) {
$price = $this->currency->format($order_subscription['trial_price'], $order_info['currency_code'], false, false);
$frequency = $order_subscription['trial_frequency'];
$cycle = $order_subscription['trial_cycle'];
$price = $this->currency->format($subscription_info['trial_price'], $order_info['currency_code'], false, false);
$frequency = $subscription_info['trial_frequency'];
$cycle = $subscription_info['trial_cycle'];
$next_payment = $this->calculateSchedule($frequency, $next_payment, $cycle);
} elseif ((date_format($today, 'Y-m-d H:i:s') > date_format($next_payment, 'Y-m-d H:i:s')) && (date_format($subscription_end, 'Y-m-d H:i:s') > date_format($today, 'Y-m-d H:i:s') || date_format($subscription_end, 'Y-m-d H:i:s') == date_format($unlimited, 'Y-m-d H:i:s'))) {
$price = $this->currency->format($order_subscription['price'], $order_info['currency_code'], false, false);
$frequency = $order_subscription['frequency'];
$cycle = $order_subscription['cycle'];
$price = $this->currency->format($subscription_info['price'], $order_info['currency_code'], false, false);
$frequency = $subscription_info['frequency'];
$cycle = $subscription_info['cycle'];
$next_payment = $this->calculateSchedule($frequency, $next_payment, $cycle);
} else {
continue;
Expand All @@ -351,8 +353,6 @@ public function cronPayment(): array {
$subscription_expiry = date_format($subscription_end, 'Y-m-d');
}

$subscription_id = $this->model_checkout_subscription->addSubscription($item['subscription']);

$subscription_frequency = date_diff(new \DateTime('now'), new \DateTime(date_format($next_payment, 'Y-m-d H:i:s')))->days;

$response_data = $this->setPaymentData($order_info, $opayo_order_info, $price, $subscription_id, $order_product['name'], $subscription_expiry, $subscription_frequency, $i);
Expand All @@ -363,6 +363,10 @@ public function cronPayment(): array {
$this->addOrderTransaction($subscription_id, $response_data, 1);

$this->updateSubscriptionOrder($subscription_id, date_format($next_payment, 'Y-m-d H:i:s'));

$opayo_order_info = $this->getOrder($subscription_info['order_id']);

$subscription_id = $this->model_checkout_subscription->addSubscription($subscription_info);
} else {
$this->addOrderTransaction($subscription_id, $response_data, 4);
}
Expand Down
Loading

0 comments on commit ce1fccd

Please sign in to comment.