diff --git a/booking.admin.inc b/booking.admin.inc index bd007d8..c49a9f8 100644 --- a/booking.admin.inc +++ b/booking.admin.inc @@ -128,8 +128,8 @@ function booking_admin() { ); $form['paypal']['booking_use_paypal'] = array( '#type' => 'radios', - '#title' => t('Use Paypal?'), - '#description' => t('Select whether to use paypal for automatic payment handling, or process payments manually.'), + '#title' => t('Use Paypal? (DEPRECATED)'), + '#description' => t('Select whether to use paypal for automatic payment handling, or process payments manually. This option is now deprecated. Use the payment processor option below instead.'), '#options' => array( 0 => t('No'), t('Yes') diff --git a/booking.helper.inc b/booking.helper.inc index 7eb2897..92d4356 100644 --- a/booking.helper.inc +++ b/booking.helper.inc @@ -790,27 +790,27 @@ function _booking_generate_statistics($booking_list) } //figure out if we're in the right time period for discounted registration rates -function _booking_is_earlybird() -{ +function _booking_is_earlybird() { global $event; - if ($event->booking_earlybird_close > time()) + if ($event->booking_earlybird_close > time()) { return TRUE; - else - { + } + else { return FALSE; } } -function _booking_datepaid_ts($nid) -{ +function _booking_datepaid_ts($nid) { $query = db_query("SELECT * FROM {booking_payment} where booking_person_nid = :nid", array(':nid' => $nid)) ->fetchObject(); - if ($query) + if ($query) { return $query->booking_payment_date; - else + } + else { return 0; + } } /** @@ -839,6 +839,29 @@ function _booking_add_paypal_fees($amount, $country) return $result; } +/** + * Helper function to calculate stripe transaction fees + */ +function _booking_add_stripe_fees($amount, $country) { + //add the 30 cent fixed cost + $result = '0.00'; + $result = (float) ($amount + (float) variable_get('booking_stripe_transaction_fee_fixedcost', '0.3')); + + //and the 2.6 percent transaction fee for australian transaction with no currency conversion + if ($country == variable_get('booking_default_country', 'Australia')) { + $percentage = (float) variable_get('booking_stripe_transaction_fee_percentage', '1.75'); + } else { + $percentage = (float) variable_get('booking_stripe_transaction_fee_percentage_intl', '2.9'); + } + + //apply the percentage + $percentage = (float) $percentage / 100; + $result = $result / (1 - $percentage); + + //return result + return $result; +} + /** * Helper function to return the amount for a booking deposit, if there is one */ @@ -852,12 +875,19 @@ function _booking_deposit_amount($person, $include_fees = TRUE) ->fetchObject(); if ($deposit) { - //if we're using paypal, add the transaction fee - if (variable_get('booking_use_paypal', 0) == 1 && $include_fees == TRUE) { - $amount_owing = _booking_add_paypal_fees($deposit->booking_price, $person->booking_country); + //if we're using paypal or stripe, add the transaction fee + $payment_processor_type = variable_get('booking_payment_processor', 0); + if ($include_fees == TRUE) { + if ($payment_processor_type == 0) { + $amount_owing = _booking_add_paypal_fees($deposit->booking_price, $person->booking_country); + } + elseif ($payment_processor_type == 1) { + $amount_owing = _booking_add_stripe_fees($deposit->booking_price, $person->booking_country); + } } + //otherwise we're using manual payment processing so don't add any fees else { - $amount_owing = $deposit->booking_price; + $amount_owing = $deposit->booking_price; } //return the calculated amount rounded to two decimal places return number_format($amount_owing, 2, '.', ''); @@ -1039,13 +1069,18 @@ function _booking_amount_owing($person, $amount_paid = 0, $include_fees = TRUE) //watchdog('booking', "This person doesn't owe any money: @info", array('@info' => var_export($person, TRUE))); return 0; } - - //@todo - use booking_payment_processor instead. 0 is paypal, 1 is stripe, 2 is manual - //if we're using paypal, add the transaction fee - if (variable_get('booking_use_paypal', 0) == 1 && $include_fees == TRUE) { - $amount_owing = _booking_add_paypal_fees($total_due - $amount_paid, $person->booking_country); + //if we're using paypal or stripe, add the transaction fee + $payment_processor_type = variable_get('booking_payment_processor', 0); + if ($include_fees == TRUE) { + if ($payment_processor_type == 0) { + $amount_owing = _booking_add_paypal_fees($total_due - $amount_paid, $person->booking_country); + } + elseif ($payment_processor_type == 1) { + $amount_owing = _booking_add_stripe_fees($total_due - $amount_paid, $person->booking_country); + } } + //otherwise we're using manual payment processing so don't add any fees else { $amount_owing = $total_due - $amount_paid; } @@ -1211,8 +1246,7 @@ function _booking_process_refund($person) $refund = $paid - _booking_deposit_amount($person, FALSE); //if there is a spouse, subtract their deposit too - if (variable_get('booking_enable_combined_pricing', 0) == 1 && $person->booking_partner_id > 0) - { + if (variable_get('booking_enable_combined_pricing', 0) == 1 && $person->booking_partner_id > 0) { $refund = $refund - _booking_deposit_amount($person, FALSE); } @@ -1270,64 +1304,6 @@ function _booking_process_refund($person) return $refund; } - -/** - * Helper function to generate paypal form for payments - */ -function _booking_paypal_form($person, $invoiceid, $amount_owing, $button_text) { - $form = drupal_get_form('_booking_paypal_form_builder', $person, $invoiceid, $amount_owing, $button_text); - return drupal_render($form); -} - -/** - * Helper function to generate form elements for paypal form - */ -function _booking_paypal_form_builder($node, &$form_state, $person, $invoiceid, $amount_owing, $button_text) { - global $event; - - //get our current path so we can send the user back here if they cancel - $path = isset($_GET['q']) ? $_GET['q'] : ''; - - //paypal specific settings - $vars = array( - 'module' => 'Booking System', - 'type' => $event->booking_eventname, - //'custom' => $data, - 'item_name' => $event->booking_eventname . ' ' . $person->booking_price_descrip, - 'invoice' => $invoiceid, - 'no_shipping' => TRUE, - 'no_note' => TRUE, - 'currency_code' => 'AUD', - 'return' => url('bookingfinal', array('absolute' => TRUE)), - 'cancel_return' => url($path, array('absolute' => TRUE)), - 'rm' => '2', - 'amount' => $amount_owing, - 'last_name' => $person->booking_lastname, - 'first_name' => $person->booking_firstname, - 'cmd' => '_xclick', - 'notify_url' => url(BOOKING_PAYPAL_IPN_PATH, array('absolute' => TRUE)), - 'business' => variable_get('booking_paypal_account', '') - ); - - $form['#action'] = url(variable_get('booking_paypal_sandbox', 0) ? BOOKING_PAYPAL_SUBMIT_URL_SANDBOX : BOOKING_PAYPAL_SUBMIT_URL, array('absolute' => TRUE)); - - //turn the array into a form - foreach($vars as $name => $value) { - $form[$name] = array( - '#type' => 'hidden', - '#value' => $value, - ); - } - - $form['submit'] = array( - '#type' => 'button', - '#value' => t($button_text), - ); - - //watchdog('booking', 'Booking Balance payment: @info', array ('@info' => var_export($form, TRUE))); - return $form; -} - /** * Helper function to provide a list of columns in the booking_person table * This will be used to select which fields to import/export to/from a CSV @@ -1346,7 +1322,6 @@ function _booking_get_person_fields() { return $list_of_columns; } - /** * Helper function to format registrations details for summary in the confirmation email */ diff --git a/booking.paypal.inc b/booking.paypal.inc index 8806396..43a5661 100644 --- a/booking.paypal.inc +++ b/booking.paypal.inc @@ -216,4 +216,61 @@ function booking_payment_completed_page() { ); return $return_array; -} \ No newline at end of file +} + +/** + * Helper function to generate paypal form for payments + */ +function _booking_paypal_form($person, $invoiceid, $amount_owing, $button_text) { + $form = drupal_get_form('_booking_paypal_form_builder', $person, $invoiceid, $amount_owing, $button_text); + return drupal_render($form); +} + +/** + * Helper function to generate form elements for paypal form + */ +function _booking_paypal_form_builder($node, &$form_state, $person, $invoiceid, $amount_owing, $button_text) { + global $event; + + //get our current path so we can send the user back here if they cancel + $path = isset($_GET['q']) ? $_GET['q'] : ''; + + //paypal specific settings + $vars = array( + 'module' => 'Booking System', + 'type' => $event->booking_eventname, + //'custom' => $data, + 'item_name' => $event->booking_eventname . ' ' . $person->booking_price_descrip, + 'invoice' => $invoiceid, + 'no_shipping' => TRUE, + 'no_note' => TRUE, + 'currency_code' => 'AUD', + 'return' => url('bookingfinal', array('absolute' => TRUE)), + 'cancel_return' => url($path, array('absolute' => TRUE)), + 'rm' => '2', + 'amount' => $amount_owing, + 'last_name' => $person->booking_lastname, + 'first_name' => $person->booking_firstname, + 'cmd' => '_xclick', + 'notify_url' => url(BOOKING_PAYPAL_IPN_PATH, array('absolute' => TRUE)), + 'business' => variable_get('booking_paypal_account', '') + ); + + $form['#action'] = url(variable_get('booking_paypal_sandbox', 0) ? BOOKING_PAYPAL_SUBMIT_URL_SANDBOX : BOOKING_PAYPAL_SUBMIT_URL, array('absolute' => TRUE)); + + //turn the array into a form + foreach($vars as $name => $value) { + $form[$name] = array( + '#type' => 'hidden', + '#value' => $value, + ); + } + + $form['submit'] = array( + '#type' => 'button', + '#value' => t($button_text), + ); + + //watchdog('booking', 'Booking Balance payment: @info', array ('@info' => var_export($form, TRUE))); + return $form; +} diff --git a/booking.stripe.js b/booking.stripe.js index 18d326f..5b35051 100644 --- a/booking.stripe.js +++ b/booking.stripe.js @@ -7,32 +7,23 @@ jQuery(document).ready(function($) { locale: 'auto', token: function(token) { try { - //var $token_id = $(':input[name="token_id"]', $stripeForm); - //var $token_email = $(':input[name="token_email"]', $stripeForm); + // Use the token to create the charge with a server-side script. + // You can access the token ID with `token.id` $(':input[name="token_id"]', $stripeForm).val(token.id); $(':input[name="token_email"]', $stripeForm).val(token.email); $stripeForm.get(0).submit(); } catch(err) { - console.log([err]); - alert(err.message); + console.log([err]); + alert(err.message); } - - // Use the token to create the charge with a server-side script. - // You can access the token ID with `token.id` - //if (currentForm === undefined) - // return; - //currentForm.find('input[name="token_id"]').val(token.id); - //currentForm.find('input[name="token_email"]').val(token.email); - //currentForm.submit(); } }); - //var currentForm = undefined; $('.form-submit').click(function (e) { - currentForm = $(this).closest('form'); - if (currentForm === undefined) - return; + //currentForm = $(this).closest('form'); + //if (currentForm === undefined) + // return; var settings = Drupal.settings.booking_stripe; var $stripeForm = $("#" + settings.form_selector); //$description = $(':input[name="description"]', $stripeForm).val();