'Receive check', 'description' => 'Record details of a check that has been received.', 'page callback' => 'drupal_get_form', 'page arguments' => array('uc_payment_pack_receive_check_form', 3), 'access arguments' => array('view all orders'), 'file' => 'uc_payment_pack.admin.inc', ); return $items; } /** * Implements hook_uc_payment_method(). */ function uc_payment_pack_uc_payment_method() { $methods['check'] = array( 'name' => t('Check', array(), array('context' => 'cheque')), 'title' => t('Check or money order'), 'desc' => t('Pay by mailing a check or money order.'), 'callback' => 'uc_payment_method_check', 'weight' => 1, 'checkout' => TRUE, 'no_gateway' => TRUE, ); $methods['cod'] = array( 'name' => t('COD'), 'title' => t('Cash on delivery'), 'desc' => t('Pay cash on delivery on pick-up.'), 'callback' => 'uc_payment_method_cod', 'weight' => 1, 'checkout' => FALSE, 'no_gateway' => TRUE, ); $methods['other'] = array( 'name' => t('Other'), 'title' => t('Other'), 'desc' => t('A generic payment method type.'), 'callback' => 'uc_payment_method_other', 'weight' => 10, 'checkout' => FALSE, 'no_gateway' => TRUE, ); return $methods; } /** * Payment method callback for the generic payment method "Other". */ function uc_payment_method_other($op, &$order) { switch ($op) { case 'order-view': case 'customer-view': // Fetch the description for the payment entered by the administrator. if ($description = db_query('SELECT description FROM {uc_payment_other} WHERE order_id = :id', array(':id' => $order->order_id))->fetchField()) { return array('#markup' => t('Description: @desc', array('@desc' => $description))); } break; case 'order-details': $form['pm_other_description'] = array( '#type' => 'textfield', '#title' => t('Description'), '#default_value' => isset($order->payment_details['description']) ? $order->payment_details['description'] : '', '#size' => 32, '#maxlength' => 64, ); return $form; case 'order-load': $description = db_query('SELECT description FROM {uc_payment_other} WHERE order_id = :id', array(':id' => $order->order_id))->fetchField(); if (isset($description)) { $order->payment_details['description'] = $description; } break; case 'order-save': if (empty($order->payment_details['pm_other_description'])) { db_delete('uc_payment_other') ->condition('order_id', $order->order_id) ->execute(); } else { db_merge('uc_payment_other') ->key(array( 'order_id' => $order->order_id, )) ->fields(array( 'description' => $order->payment_details['pm_other_description'], )) ->execute(); } break; } } /** * Payment method callback for the "Cash on Delivery" payment method. */ function uc_payment_method_cod($op, &$order, $form = NULL, $form_state = NULL) { switch ($op) { case 'cart-details': $build['policy'] = array( '#markup' => '

' . variable_get('uc_cod_policy', t('Full payment is expected upon delivery or prior to pick-up.')) . '

', ); if (($max = variable_get('uc_cod_max_order', 0)) > 0 && is_numeric($max)) { $build['eligibility'] = array( '#markup' => '

' . t('Orders totalling more than !number are not eligible for COD.', array('!number' => uc_currency_format($max))) . '

', ); } if (variable_get('uc_cod_delivery_date', FALSE)) { $build += uc_payment_method_cod_form(array(), $form_state, $order); } return $build; case 'cart-process': if (variable_get('uc_cod_delivery_date', FALSE)) { $order->payment_details = $form_state['values']['panes']['payment']['details']; } return TRUE; case 'cart-review': $review = array(); if (variable_get('uc_cod_delivery_date', FALSE)) { $date = uc_date_format( $order->payment_details['delivery_month'], $order->payment_details['delivery_day'], $order->payment_details['delivery_year'] ); $review[] = array('title' => t('Delivery date'), 'data' => $date); } return $review; case 'order-view': case 'customer-view': $build = array('#markup' => ''); if (variable_get('uc_cod_delivery_date', FALSE) && isset($order->payment_details['delivery_month']) && isset($order->payment_details['delivery_day']) && isset($order->payment_details['delivery_year'])) { $build['#markup'] = t('Desired delivery date:') . '
' . uc_date_format( $order->payment_details['delivery_month'], $order->payment_details['delivery_day'], $order->payment_details['delivery_year'] ); } return $build; case 'order-details': $build = array(); if (variable_get('uc_cod_delivery_date', FALSE)) { $build = uc_payment_method_cod_form(array(), $form_state, $order); } return $build; case 'order-load': $result = db_query('SELECT * FROM {uc_payment_cod} WHERE order_id = :id', array(':id' => $order->order_id)); if ($row = $result->fetchObject()) { $order->payment_details = array( 'delivery_month' => $row->delivery_month, 'delivery_day' => $row->delivery_day, 'delivery_year' => $row->delivery_year, ); } break; case 'order-submit': if ($order->payment_method == 'cod' && ($max = variable_get('uc_cod_max_order', 0)) > 0 && is_numeric($max) && $order->order_total > $max) { $result[] = array( 'pass' => FALSE, 'message' => t('Your final order total exceeds the maximum for COD payment. Please go back and select a different method of payment.'), ); $_SESSION['expanded_panes'][] = 'payment'; return $result; } // TODO: This falls through to the order-save case - is this deliberate? // If so, it should be documented. case 'order-save': if (isset($order->payment_details['delivery_month']) && isset($order->payment_details['delivery_day']) && isset($order->payment_details['delivery_year']) ) { db_merge('uc_payment_cod') ->key(array('order_id' => $order->order_id)) ->fields(array( 'delivery_month' => $order->payment_details['delivery_month'], 'delivery_day' => $order->payment_details['delivery_day'], 'delivery_year' => $order->payment_details['delivery_year'], )) ->execute(); } break; case 'order-delete': db_delete('uc_payment_cod') ->condition('order_id', $order->order_id) ->execute(); break; case 'settings': $form['uc_cod_policy'] = array( '#type' => 'textarea', '#title' => t('Policy message'), '#default_value' => variable_get('uc_cod_policy', t('Full payment is expected upon delivery or prior to pick-up.')), '#description' => t('Help message shown at checkout.'), ); $form['uc_cod_max_order'] = array( '#type' => 'textfield', '#title' => t('Maximum order total eligible for COD'), '#default_value' => variable_get('uc_cod_max_order', 0), '#description' => t('Set to 0 for no maximum order limit.'), ); $form['uc_cod_delivery_date'] = array( '#type' => 'checkbox', '#title' => t('Let customers enter a desired delivery date.'), '#default_value' => variable_get('uc_cod_delivery_date', FALSE), ); return $form; } } /** * Collect additional information for the "Cash on Delivery" payment method. * * @ingroup forms */ function uc_payment_method_cod_form($form, &$form_state, $order) { $month = !empty($order->payment_details['delivery_month']) ? $order->payment_details['delivery_month'] : format_date(REQUEST_TIME, 'custom', 'n'); $day = !empty($order->payment_details['delivery_day']) ? $order->payment_details['delivery_day'] : format_date(REQUEST_TIME, 'custom', 'j'); $year = !empty($order->payment_details['delivery_year']) ? $order->payment_details['delivery_year'] : format_date(REQUEST_TIME, 'custom', 'Y'); $form['description'] = array( '#markup' => '
' . t('Enter a desired delivery date:') . '
', ); $form['delivery_month'] = uc_select_month(NULL, $month); $form['delivery_day'] = uc_select_day(NULL, $day); $form['delivery_year'] = uc_select_year(NULL, $year, format_date(REQUEST_TIME, 'custom', 'Y'), format_date(REQUEST_TIME, 'custom', 'Y') + 1); return $form; } /** * Payment method callback for the "Check" payment method. */ function uc_payment_method_check($op, &$order, $form = NULL, &$form_state = NULL) { switch ($op) { case 'cart-details': $build['instructions'] = array( '#markup' => t('Checks should be made out to:'), ); if (!variable_get('uc_check_mailing_street1', FALSE)) { $build['address'] = array( '#markup' => uc_address_format( uc_store_name(), NULL, variable_get('uc_store_company', ''), variable_get('uc_store_street1', ''), variable_get('uc_store_street2', ''), variable_get('uc_store_city', ''), variable_get('uc_store_zone', ''), variable_get('uc_store_postal_code', ''), variable_get('uc_store_country', 840) ), '#prefix' => '

', '#suffix' => '

', ); } else { $build['address'] = array( '#markup' => uc_address_format( variable_get('uc_check_mailing_name', ''), NULL, variable_get('uc_check_mailing_company', ''), variable_get('uc_check_mailing_street1', ''), variable_get('uc_check_mailing_street2', ''), variable_get('uc_check_mailing_city', ''), variable_get('uc_check_mailing_zone', ''), variable_get('uc_check_mailing_postal_code', ''), variable_get('uc_check_mailing_country', 840) ), '#prefix' => '

', '#suffix' => '

', ); } $build['policy'] = array( '#markup' => '

' . variable_get('uc_check_policy', '') . '

', ); return $build; case 'cart-review': if (!variable_get('uc_check_mailing_street1', FALSE)) { $review[] = array( 'title' => t('Mail to'), 'data' => uc_address_format( uc_store_name(), NULL, variable_get('uc_store_company', ''), variable_get('uc_store_street1', ''), variable_get('uc_store_street2', ''), variable_get('uc_store_city', ''), variable_get('uc_store_zone', ''), variable_get('uc_store_postal_code', ''), variable_get('uc_store_country', 840) ), ); } else { $review[] = array( 'title' => t('Mail to'), 'data' => uc_address_format( variable_get('uc_check_mailing_name', ''), NULL, variable_get('uc_check_mailing_company', ''), variable_get('uc_check_mailing_street1', ''), variable_get('uc_check_mailing_street2', ''), variable_get('uc_check_mailing_city', ''), variable_get('uc_check_mailing_zone', ''), variable_get('uc_check_mailing_postal_code', ''), variable_get('uc_check_mailing_country', 840) ), ); } return $review; case 'order-view': $build = array('#suffix' => '
'); $result = db_query('SELECT clear_date FROM {uc_payment_check} WHERE order_id = :id ', array(':id' => $order->order_id)); if ($clear_date = $result->fetchField()) { $build['#markup'] = t('Clear Date:') . ' ' . format_date($clear_date, 'uc_store'); } else { $build['#markup'] = l(t('Receive Check'), 'admin/store/orders/' . $order->order_id . '/receive_check'); } return $build; case 'customer-view': $build = array(); $result = db_query('SELECT clear_date FROM {uc_payment_check} WHERE order_id = :id ', array(':id' => $order->order_id)); if ($clear_date = $result->fetchField()) { $build['#markup'] = t('Check received') . '
' . t('Expected clear date:') . '
' . format_date($clear_date, 'uc_store'); } return $build; case 'settings': $form['check_address_info'] = array( '#markup' => '
' . t('Set the mailing address to display to customers who choose this payment method during checkout.') . '
', ); $form['uc_check_mailing_name'] = uc_textfield(t('Contact'), variable_get('uc_check_mailing_name', ''), FALSE, t('Direct checks to a person or department.'), 128); $form['uc_check_address'] = array( '#type' => 'uc_address', '#default_value' => array( 'uc_check_mailing_company' => variable_get('uc_check_mailing_company', ''), 'uc_check_mailing_street1' => variable_get('uc_check_mailing_street1', ''), 'uc_check_mailing_street2' => variable_get('uc_check_mailing_street2', ''), 'uc_check_mailing_city' => variable_get('uc_check_mailing_city', ''), 'uc_check_mailing_zone' => variable_get('uc_check_mailing_zone', ''), 'uc_check_mailing_country' => isset($form_state['values']['uc_check_mailing_country']) ? $form_state['values']['uc_check_mailing_country'] : variable_get('uc_check_mailing_country', ''), 'uc_check_mailing_postal_code' => variable_get('uc_check_mailing_postal_code', ''), ), '#required' => FALSE, '#key_prefix' => 'uc_check_mailing', ); $form['uc_check_policy'] = array( '#type' => 'textarea', '#title' => t('Check payment policy', array(), array('context' => 'cheque')), '#description' => t('Instructions for customers on the checkout page.'), '#default_value' => variable_get('uc_check_policy', t('Personal and business checks will be held for up to 10 business days to ensure payment clears before an order is shipped.')), '#rows' => 3, ); return $form; } }