Skip to content

Commit

Permalink
https://github.com/opencart/opencart/issues/4977
Browse files Browse the repository at this point in the history
  • Loading branch information
danielkerr committed Jul 4, 2017
1 parent 57984a8 commit 6297ff7
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 29 deletions.
6 changes: 3 additions & 3 deletions upload/catalog/controller/extension/payment/pp_express.php
Expand Up @@ -1203,7 +1203,7 @@ public function expressComplete() {
}

//create new recurring and set to pending status as no payment has been made yet.
$recurring_id = $this->model_checkout_recurring->create($item, $order_id, $recurring_description);
$recurring_id = $this->model_checkout_recurring->addRecurring($order_id, $recurring_description, $item['recurring']);

$data['PROFILEREFERENCE'] = $recurring_id;
$data['DESC'] = $recurring_description;
Expand Down Expand Up @@ -1497,15 +1497,15 @@ public function checkoutReturn() {
}

//create new recurring and set to pending status as no payment has been made yet.
$recurring_id = $this->model_checkout_recurring->create($item, $order_id, $recurring_description);
$recurring_id = $this->model_checkout_recurring->addRecurring($order_id, $recurring_description, $item['recurring']);

$data['PROFILEREFERENCE'] = $recurring_id;
$data['DESC'] = $recurring_description;

$result = $this->model_extension_payment_pp_express->call($data);

if (isset($result['PROFILEID'])) {
$this->model_checkout_recurring->addReference($recurring_id, $result['PROFILEID']);
$this->model_checkout_recurring->editReference($recurring_id, $result['PROFILEID']);
} else {
// there was an error creating the recurring, need to log and also alert admin / user

Expand Down
7 changes: 3 additions & 4 deletions upload/catalog/model/checkout/recurring.php
@@ -1,19 +1,18 @@
<?php
class ModelCheckoutRecurring extends Model {
public function create($recurring, $order_id, $description) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "order_recurring` SET `order_id` = '" . (int)$order_id . "', `date_added` = NOW(), `status` = 6, `product_id` = '" . (int)$recurring['product_id'] . "', `product_name` = '" . $this->db->escape($recurring['name']) . "', `product_quantity` = '" . $this->db->escape($recurring['quantity']) . "', `recurring_id` = '" . (int)$recurring['recurring']['recurring_id'] . "', `recurring_name` = '" . $this->db->escape($recurring['recurring']['name']) . "', `recurring_description` = '" . $this->db->escape($description) . "', `recurring_frequency` = '" . $this->db->escape($recurring['recurring']['frequency']) . "', `recurring_cycle` = '" . (int)$recurring['recurring']['cycle'] . "', `recurring_duration` = '" . (int)$recurring['recurring']['duration'] . "', `recurring_price` = '" . (float)$recurring['recurring']['price'] . "', `trial` = '" . (int)$recurring['recurring']['trial'] . "', `trial_frequency` = '" . $this->db->escape($recurring['recurring']['trial_frequency']) . "', `trial_cycle` = '" . (int)$recurring['recurring']['trial_cycle'] . "', `trial_duration` = '" . (int)$recurring['recurring']['trial_duration'] . "', `trial_price` = '" . (float)$recurring['recurring']['trial_price'] . "', `reference` = ''");
public function addRecurring($order_id, $description, $data) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "order_recurring` SET `order_id` = '" . (int)$order_id . "', `date_added` = NOW(), `status` = 6, `product_id` = '" . (int)$data['product_id'] . "', `product_name` = '" . $this->db->escape($data['name']) . "', `product_quantity` = '" . $this->db->escape($data['quantity']) . "', `recurring_id` = '" . (int)$data['recurring_id'] . "', `recurring_name` = '" . $this->db->escape($data['name']) . "', `recurring_description` = '" . $this->db->escape($description) . "', `recurring_frequency` = '" . $this->db->escape($data['frequency']) . "', `recurring_cycle` = '" . (int)$data['cycle'] . "', `recurring_duration` = '" . (int)$data['duration'] . "', `recurring_price` = '" . (float)$data['price'] . "', `trial` = '" . (int)$data['trial'] . "', `trial_frequency` = '" . $this->db->escape($data['trial_frequency']) . "', `trial_cycle` = '" . (int)$data['trial_cycle'] . "', `trial_duration` = '" . (int)$data['trial_duration'] . "', `trial_price` = '" . (float)$data['trial_price'] . "', `reference` = ''");

return $this->db->getLastId();
}

public function addReference($order_recurring_id, $reference) {
public function editReference($order_recurring_id, $reference) {
$this->db->query("UPDATE " . DB_PREFIX . "order_recurring SET reference = '" . $this->db->escape($reference) . "' WHERE order_recurring_id = '" . (int)$order_recurring_id . "'");

if ($this->db->countAffected() > 0) {
return true;
} else {
return false;

}
}
}
33 changes: 17 additions & 16 deletions upload/catalog/model/extension/payment/sagepay_direct.php
Expand Up @@ -123,45 +123,46 @@ public function recurringPayment($item, $vendor_tx_code) {
$this->load->model('checkout/recurring');
$this->load->model('extension/payment/sagepay_direct');
//trial information
if ($item['recurring_trial'] == 1) {
$price = $item['recurring_trial_price'];
$trial_amt = $this->currency->format($this->tax->calculate($item['recurring_trial_price'], $item['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['quantity'] . ' ' . $this->session->data['currency'];
$trial_text = sprintf($this->language->get('text_trial'), $trial_amt, $item['recurring_trial_cycle'], $item['recurring_trial_frequency'], $item['recurring_trial_duration']);
if ($item['recurring']['trial'] == 1) {
$price = $item['recurring']['trial_price'];
$trial_amt = $this->currency->format($this->tax->calculate($item['recurring']['trial_price'], $item['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['quantity'] . ' ' . $this->session->data['currency'];
$trial_text = sprintf($this->language->get('text_trial'), $trial_amt, $item['recurring']['trial_cycle'], $item['recurring']['trial_frequency'], $item['recurring']['trial_duration']);
} else {
$price = $item['recurring_price'];
$price = $item['recurring']['price'];
$trial_text = '';
}

$recurring_amt = $this->currency->format($this->tax->calculate($item['recurring_price'], $item['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['quantity'] . ' ' . $this->session->data['currency'];
$recurring_description = $trial_text . sprintf($this->language->get('text_recurring'), $recurring_amt, $item['recurring_cycle'], $item['recurring_frequency']);
$recurring_amt = $this->currency->format($this->tax->calculate($item['recurring']['price'], $item['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency'], false, false) * $item['quantity'] . ' ' . $this->session->data['currency'];
$recurring_description = $trial_text . sprintf($this->language->get('text_recurring'), $recurring_amt, $item['recurring']['cycle'], $item['recurring']['frequency']);

if ($item['recurring_duration'] > 0) {
$recurring_description .= sprintf($this->language->get('text_length'), $item['recurring_duration']);
if ($item['recurring']['duration'] > 0) {
$recurring_description .= sprintf($this->language->get('text_length'), $item['recurring']['duration']);
}

//create new recurring and set to pending status as no payment has been made yet.
$order_recurring_id = $this->model_checkout_recurring->create($item, $this->session->data['order_id'], $recurring_description);
$order_recurring_id = $this->model_checkout_recurring->addRecurring($this->session->data['order_id'], $recurring_description, $item['recurring']);

$this->model_checkout_recurring->addReference($order_recurring_id, $vendor_tx_code);

$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);

$sagepay_order_info = $this->getOrder($this->session->data['order_id']);

$response_data = $this->setPaymentData($order_info, $sagepay_order_info, $price, $order_recurring_id, $item['recurring_name']);
$response_data = $this->setPaymentData($order_info, $sagepay_order_info, $price, $order_recurring_id, $item['recurring']['name']);

$next_payment = new DateTime('now');
$trial_end = new DateTime('now');
$subscription_end = new DateTime('now');

if ($item['recurring_trial'] == 1 && $item['recurring_trial_duration'] != 0) {
$next_payment = $this->calculateSchedule($item['recurring_trial_frequency'], $next_payment, $item['recurring_trial_cycle']);
$trial_end = $this->calculateSchedule($item['recurring_trial_frequency'], $trial_end, $item['recurring_trial_cycle'] * $item['recurring_trial_duration']);
if ($item['recurring']['trial'] == 1 && $item['recurring']['trial_duration'] != 0) {
$next_payment = $this->calculateSchedule($item['recurring']['trial_frequency'], $next_payment, $item['recurring']['trial_cycle']);
$trial_end = $this->calculateSchedule($item['recurring']['trial_frequency'], $trial_end, $item['recurring']['trial_cycle'] * $item['recurring']['trial_duration']);
} elseif ($item['recurring_trial'] == 1) {
$next_payment = $this->calculateSchedule($item['recurring_trial_frequency'], $next_payment, $item['recurring_trial_cycle']);
$next_payment = $this->calculateSchedule($item['recurring']['trial_frequency'], $next_payment, $item['recurring']['trial_cycle']);
$trial_end = new DateTime('0000-00-00');
}

if ($trial_end > $subscription_end && $item['recurring_duration'] != 0) {
if ($trial_end > $subscription_end && $item['recurring']['duration'] != 0) {
$subscription_end = new DateTime(date_format($trial_end, 'Y-m-d H:i:s'));
$subscription_end = $this->calculateSchedule($item['recurring_frequency'], $subscription_end, $item['recurring_cycle'] * $item['recurring_duration']);
} elseif ($trial_end == $subscription_end && $item['recurring_duration'] != 0) {
Expand Down
9 changes: 5 additions & 4 deletions upload/catalog/model/extension/payment/sagepay_server.php
Expand Up @@ -135,8 +135,9 @@ public function addRecurringPayment($item, $vendor_tx_code) {
}

//create new recurring and set to pending status as no payment has been made yet.
$recurring_id = $this->model_checkout_recurring->create($item, $this->session->data['order_id'], $recurring_description);
$this->model_checkout_recurring->addReference($recurring_id, $vendor_tx_code);
$recurring_id = $this->model_checkout_recurring->addRecurring($this->session->data['order_id'], $recurring_description, $item['recurring']);

$this->model_checkout_recurring->editReference($recurring_id, $vendor_tx_code);
}

public function updateRecurringPayment($item, $order_details) {
Expand All @@ -147,9 +148,9 @@ public function updateRecurringPayment($item, $order_details) {

//trial information
if ($item['trial'] == 1) {
$price = $this->currency->format($item['recurring']['trial_price'], $this->session->data['currency'], false, false);
$price = $this->currency->format($item['trial_price'], $this->session->data['currency'], false, false);
} else {
$price = $this->currency->format($item['recurring']['price'], $this->session->data['currency'], false, false);
$price = $this->currency->format($item['recurring_price'], $this->session->data['currency'], false, false);
}

$response_data = $this->setPaymentData($order_info, $order_details, $price, $item['order_recurring_id'], $item['recurring_name']);
Expand Down
5 changes: 3 additions & 2 deletions upload/catalog/model/extension/payment/worldpay.php
Expand Up @@ -121,8 +121,9 @@ public function recurringPayment($item, $order_id_rand, $token) {
$recurring_description .= sprintf($this->language->get('text_length'), $item['recurring']['duration']);
}

$order_recurring_id = $this->model_checkout_recurring->create($item, $this->session->data['order_id'], $recurring_description);
$this->model_checkout_recurring->addReference($order_recurring_id, $order_id_rand);
$order_recurring_id = $this->model_checkout_recurring->addRecurring($this->session->data['order_id'], $recurring_description, $item['recurring']);

$this->model_checkout_recurring->editReference($order_recurring_id, $order_id_rand);

$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);

Expand Down

0 comments on commit 6297ff7

Please sign in to comment.