-
Notifications
You must be signed in to change notification settings - Fork 0
/
fond_commerce.module
71 lines (61 loc) · 2.28 KB
/
fond_commerce.module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php
/**
* @file
* Code for the Fond Commerce feature.
*/
include_once 'fond_commerce.features.inc';
/**
* Implements hook_migrate_api().
*/
function fond_commerce_migrate_api() {
$api = array(
'api' => 2,
'migrations' => array(
'FondProduct' => array('class_name' => 'FondProduct'),
'FondProductNode' => array('class_name' => 'FondProductNode'),
'FondDonationProduct' => array('class_name' => 'FondDonationProduct'),
'FondDonationNode' => array('class_name' => 'FondDonationNode'),
),
);
return $api;
}
/**
* Implements hook_commerce_checkout_complete().
*/
function fond_commerce_commerce_checkout_complete($order) {
// Order has a payment method, and is QuickPay for automatic captures.
if (isset($order->data['payment_method']) && $order->data['payment_method'] == 'quickpay|commerce_payment_quickpay') {
// Load the transaction that just occured.
$payments = commerce_payment_transaction_load_multiple(array(), array('order_id' => $order->order_id));
$transaction = !empty($payments) ? array_shift($payments) : NULL;
if (!$transaction) {
// Error?!
return FALSE;
}
// Sub out a few things so we can invoke existing methods
$form_state_stub = array(
'order' => $order,
'transaction' => $transaction,
'payment_method' => commerce_payment_method_instance_load($order->data['payment_method']),
'values' => array(
'finalize' => 1,
),
);
$qp = new Quickpay($form_state_stub['payment_method']['settings']);
$txn = $qp->transaction($transaction->remote_id);
// Calculate how much is left of the authorization (we might have partially
// captured it).
$txn_amount = Quickpay::wireAmount($txn->balance(), $txn->currency());
$balance = commerce_payment_order_balance($order);
if ($balance['amount'] > 0 && $balance['amount'] < $txn_amount) {
$default_amount = $balance['amount'];
}
else {
$default_amount = $txn_amount;
}
// Convert the price amount to a user friendly decimal value.
$default_amount = commerce_currency_amount_to_decimal($default_amount, $transaction->currency_code);
$form_state_stub['values']['amount'] = $default_amount;
commerce_quickpay_transaction_capture_form_submit(array(), $form_state_stub);
}
}