You are here

uc_bank_transfer.module in Bank Transfer | Ubercart Payment 6

Same filename and directory in other branches
  1. 7 uc_bank_transfer.module

File

uc_bank_transfer.module
View source
<?php

/* @file
 * Provides the Bank Transfer payment method.
 */

/**
 * Implementation of hook_init().
 */
function uc_bank_transfer_init() {
  global $conf;
  $conf['i18n_variables'][] = 'uc_bank_transfer_method_title';
  $conf['i18n_variables'][] = 'uc_bank_transfer_account_name';
  $conf['i18n_variables'][] = 'uc_bank_transfer_bank_code_appellation';
  $conf['i18n_variables'][] = 'uc_bank_transfer_account_bank';
  $conf['i18n_variables'][] = 'uc_bank_transfer_account_branch';
  $conf['i18n_variables'][] = 'uc_bank_transfer_policy';
}

/**
 * Implementation of hook_menu().
 */
function uc_bank_transfer_menu() {
  $items['admin/store/orders/%uc_order/receive_bank_transfer'] = array(
    'title' => 'Receive Bank Transfer',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'uc_bank_transfer_receive_bank_transfer_form',
      3,
    ),
    'access arguments' => array(
      'view all orders',
    ),
    'type' => MENU_CALLBACK,
    'file' => 'uc_bank_transfer.admin.inc',
  );
  return $items;
}
function uc_bank_transfer_theme() {
  return array(
    'uc_bank_transfer_receive_bank_transfer_form' => array(
      'arguments' => array(
        'form' => NULL,
      ),
      'file' => 'uc_bank_transfer.admin.inc',
    ),
    'uc_bank_transfer_bank_details' => array(
      'arguments' => array(
        'oid' => NULL,
      ),
    ),
  );
}

/**
 * Implementation of hook_payment_method().
 */
function uc_bank_transfer_payment_method() {
  $methods[] = array(
    'id' => 'bank_transfer',
    'name' => t('Bank Transfer'),
    'title' => variable_get('uc_bank_transfer_method_title', 'Bank Transfer'),
    'desc' => t('Pay by Bank Transfer.'),
    'callback' => 'uc_payment_method_bank_transfer',
    'weight' => 1,
    'bank_transferout' => TRUE,
    'no_gateway' => TRUE,
  );
  return $methods;
}

/**
 * Implementation of hook_token_values().
 */
function uc_bank_transfer_token_values($type, $object = NULL) {
  $values = array();
  if ($type == 'order') {
    $values['order-payment-bank-details'] = theme('uc_bank_transfer_bank_details', $object->order_id);
  }
  return $values;
}

/**
 * Implementation of hook_token_list(). (token.module)
 */
function uc_bank_transfer_token_list($type = 'all') {
  $tokens = array();
  if ($type == 'order' || $type == 'ubercart' || $type == 'all') {
    $tokens['order']['order-payment-bank-details'] = t('The bank details of the order.');
  }
  return $tokens;
}

/**
 * Implementation of hook_uc_invoice_templates().
 */
function uc_bank_transfer_uc_invoice_templates() {
  return array(
    'customer-bank_transfer',
  );
}

/**
 * Handle the Bank Transfer payment method.
 */
function uc_payment_method_bank_transfer($op, &$arg1) {
  switch ($op) {
    case 'cart-details':
      if (variable_get('uc_bank_transfer_subject_oid', TRUE)) {

        // order number is not yet generated at first display of cart details - skip to show standard message
        return '';
      }
      else {
        $details = t('To') . ': ' . theme('uc_bank_transfer_bank_details', $arg1->order_id);
        return $details;
      }
    case 'cart-review':
      $review[] = array(
        'title' => t('To'),
        'data' => theme('uc_bank_transfer_bank_details', $arg1->order_id),
      );
      return $review;
    case 'order-view':
      if (!variable_get('uc_payment_tracking', TRUE)) {
        return '';
      }
      $result = db_query("SELECT clear_date FROM {uc_payment_bank_transfer} WHERE " . "order_id = %d ", $arg1->order_id);
      if ($bank_transfer = db_fetch_object($result)) {
        $output = t('Clear Date:') . ' ' . format_date($bank_transfer->clear_date, 'custom', variable_get('uc_date_format_default', 'd/m/Y'));
      }
      else {
        $output = l(t('Receive Bank Transfer'), 'admin/store/orders/' . $arg1->order_id . '/receive_bank_transfer');
      }
      $output .= '<br />';
      return $output;
    case 'customer-view':
      if (!variable_get('uc_payment_tracking', TRUE)) {
        return '';
      }
      $result = db_query("SELECT clear_date FROM {uc_payment_bank_transfer} WHERE " . "order_id = %d ", $arg1->order_id);
      if ($bank_transfer = db_fetch_object($result)) {
        $output = t('Bank Transfer received') . '<br />' . t('Expected clear date:') . '<br />' . format_date($bank_transfer->clear_date, 'custom', variable_get('uc_date_format_default', 'd/m/Y'));
      }
      return $output;
    case 'settings':

      // help text
      $form['uc_bank_transfer_help_text'] = array(
        '#type' => 'item',
        '#prefix' => '<div class="help">',
        '#value' => t('<h4><strong>Installation instructions</strong></h4>
          <p>For better customer experience please use the token [order-payment-bank-details] to display the bank details on the invoice.
          You can find an example invoice template doing this in the uc_bank_transfer module folder.</p>'),
        '#suffix' => '</div>',
      );

      // settings
      $form['uc_bank_transfer_method_title'] = array(
        '#type' => 'textfield',
        '#title' => t('Payment method title'),
        '#description' => t('Provide specific description for the payment method on the order checkout page.'),
        '#default_value' => variable_get('uc_bank_transfer_method_title', 'Bank transfer'),
      );
      $form['uc_dd_bank'] = array(
        '#type' => 'fieldset',
        '#title' => t('Bank details'),
        '#description' => t('Enter the bank account details to display to customers who choose this payment method during checkout.
          Details left empty will not be shown. You can also choose to leave all bank details empty and create your own output using the payment instructions.
          '),
        '#collapsible' => TRUE,
        '#collapsed' => TRUE,
      );
      $form['uc_dd_bank']['uc_bank_transfer_account_name'] = uc_textfield(t('Account name'), variable_get('uc_bank_transfer_account_name', ''), FALSE, t('Name associated with bank account.'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_number'] = uc_textfield(t('Account number'), variable_get('uc_bank_transfer_account_number', ''), FALSE, NULL, 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_bsb'] = uc_textfield(t('BSB - OBSOLETE ! '), variable_get('uc_bank_transfer_account_bsb', ''), FALSE, t('Australian Bank State Branch code - OBSOLETE - use "bank code appellation" and "bank code" instead - this field will be removed soon without update path'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_iban'] = uc_textfield(t('IBAN'), variable_get('uc_bank_transfer_account_iban', ''), FALSE, t('International Bank Account Number'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_bank_code_appellation'] = uc_textfield(t('Bank code appellation'), variable_get('uc_bank_transfer_bank_code_appellation', 'Bank code'), FALSE, t('Appellation of bank code - depending on where your bank is located you should set this to: "BSB" (AU), "Sort code" (UK), "Bank code" (DE), "Clearing number" (CH), "Routing transit number" (US) or "Bank transit number" (CA)'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_bank_code'] = uc_textfield(t('Bank code'), variable_get('uc_bank_transfer_bank_code', ''), FALSE, t('Actual bank code, will be shown with appellation set above'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_swift'] = uc_textfield(t('SWIFT'), variable_get('uc_bank_transfer_account_swift', ''), FALSE, t('SWIFT-Code (aka BIC = Bank Identifier Code)'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_clearing'] = uc_textfield(t('Clearing number - OBSOLETE ! '), variable_get('uc_bank_transfer_account_clearing', ''), FALSE, t('OBSOLETE - use "bank code appellation" and "bank code" instead - this field will be removed soon without update path'), 128);
      $form['uc_dd_bank']['uc_bank_transfer_account_bank'] = uc_textfield(t('Banking institution'), variable_get('uc_bank_transfer_account_bank', ''), FALSE);
      $form['uc_dd_bank']['uc_bank_transfer_account_branch'] = uc_textfield(t('Branch office'), variable_get('uc_bank_transfer_account_branch', ''), FALSE);
      $form['uc_bank_transfer_subject_oid'] = array(
        '#type' => 'checkbox',
        '#title' => t('Display "Reason for payment: order number <i>[order ID]</i>"'),
        '#description' => t('Note: with this option enabled the details cannot be displayed on the checkout page (only later).'),
        '#default_value' => variable_get('uc_bank_transfer_subject_oid', FALSE),
      );
      $form['uc_bank_transfer_policy'] = array(
        '#type' => 'textarea',
        '#title' => t('Payment instructions'),
        '#description' => t('Instructions for customers on the checkout page. Use &lt;br /&gt; for line break.'),
        '#default_value' => variable_get('uc_bank_transfer_policy', ''),
        '#rows' => 3,
      );
      return $form;
  }
}

/**
 * Theme output displayed in checkout review, etc.
 */
function theme_uc_bank_transfer_bank_details($oid) {
  $output = uc_bank_transfer_bank_details($oid);
  return $output;
}

/**
 * Implementation of uc_bank_transfer_bank_details($oid).
 *
 * $oid = order ID
 */
function uc_bank_transfer_bank_details($oid) {
  if (variable_get('uc_bank_transfer_account_name', '') != '') {
    $bank_info[] = variable_get('uc_bank_transfer_account_name', '');
  }
  if (variable_get('uc_bank_transfer_account_number', '') != '') {
    $bank_info[] = t('Account number') . ': ' . variable_get('uc_bank_transfer_account_number', '');
  }
  if (variable_get('uc_bank_transfer_account_bsb', '') != '') {
    $bank_info[] = t('BSB') . ': ' . variable_get('uc_bank_transfer_account_bsb', '');
  }
  if (variable_get('uc_bank_transfer_account_iban', '') != '') {
    $bank_info[] = t('IBAN') . ': ' . variable_get('uc_bank_transfer_account_iban', '');
  }
  if (variable_get('uc_bank_transfer_bank_code', '') != '') {
    $bank_info[] = variable_get('uc_bank_transfer_bank_code_appellation', 'Bank code') . ': ' . variable_get('uc_bank_transfer_bank_code', '');
  }
  if (variable_get('uc_bank_transfer_account_swift', '') != '') {
    $bank_info[] = t('SWIFT') . ': ' . variable_get('uc_bank_transfer_account_swift', '');
  }
  if (variable_get('uc_bank_transfer_account_clearing', '') != '') {
    $bank_info[] = t('Clearing number') . ': ' . variable_get('uc_bank_transfer_account_clearing', '');
  }
  if (variable_get('uc_bank_transfer_account_bank', '') != '') {
    $bank_info[] = t('Banking institution') . ': ' . variable_get('uc_bank_transfer_account_bank', '');
  }
  if (variable_get('uc_bank_transfer_account_branch', '') != '') {
    $bank_info[] = t('Branch office') . ': ' . variable_get('uc_bank_transfer_account_branch', '');
  }
  if (variable_get('uc_bank_transfer_subject_oid', FALSE)) {
    isset($bank_info) ? $bank_info[] = '<br />' . t('Reason for payment') . ': ' . t('order number') . ' ' . $oid : ($bank_info[] = t('Reason for payment') . ': ' . t('order number') . ' ' . $oid);
  }
  if (variable_get('uc_bank_transfer_policy', '') != '') {
    isset($bank_info) ? $bank_info[] = '<br />' . variable_get('uc_bank_transfer_policy', '') : ($bank_info[] = variable_get('uc_bank_transfer_policy', ''));
  }
  isset($bank_info) ? $bank_details = implode('<br />', $bank_info) : ($bank_details = '');
  return $bank_details;
}

/**
 * Implementation of hook_recurring_info()
 * from uc_recurring module.
 */
function uc_bank_transfer_recurring_info() {
  $items['bank_transfer'] = array(
    'name' => t('Bank Transfer'),
    'payment method' => 'bank_transfer',
    'module' => 'uc_bank_transfer',
    'fee handler' => 'bank_transfer',
    'renew callback' => 'uc_bank_transfer_renew',
    'process callback' => 'uc_bank_transfer_process',
    'menu' => array(
      'charge' => UC_RECURRING_MENU_DEFAULT,
      'edit' => UC_RECURRING_MENU_DEFAULT,
      'cancel' => UC_RECURRING_MENU_DEFAULT,
    ),
  );
  return $items;
}
function uc_bank_transfer_renew($order, &$fee) {
  return TRUE;
}
function uc_bank_transfer_process($order, &$fee) {
  return TRUE;
}