--- uc_po.module.original 2009-02-13 12:25:11.000000000 +0100 +++ uc_po.module 2009-02-13 12:26:33.000000000 +0100 @@ -21,7 +21,7 @@ function uc_po_menu() { $items = array(); - + $items['admin/store/orders/po'] = array( 'title' => 'Search by PO', 'page callback' => 'drupal_get_form', @@ -32,6 +32,15 @@ function uc_po_menu() { 'type' => MENU_NORMAL_ITEM, ); + $items['admin/store/settings/po'] = array( + 'title' => t('Purchase Order Settings'), + 'page callback' => 'drupal_get_form', + 'page arguments' => array('uc_po_admin'), + 'access arguments' => array('access administration pages'), + 'description' => t('Configure Purchase Order'), + 'type' => MENU_NORMAL_ITEM, + ); + return $items; } @@ -165,22 +174,26 @@ function uc_payment_method_po($op, &$arg // Handles receiving the data entered by the customer. case 'cart-process': if (empty($_POST['po_number'])) { - drupal_set_message(t('You must specify a PO number to pay by purchase order.'), 'error'); - return FALSE; + $arg1->payment_details['po_number'] = "WEB ORDER"; + return TRUE; } $arg1->payment_details['po_number'] = check_plain($_POST['po_number']); return TRUE; // Display the PO number on the order review page prior to submission. case 'cart-review': - $review[] = array('title' => t('PO number'), 'data' => check_plain($arg1->payment_details['po_number'])); - return $review; + if (variable_get('uc_po_manual', 1) == 1) { + $review[] = array('title' => t('PO number'), 'data' => check_plain($arg1->payment_details['po_number'])); + return $review; + } // Display the PO number in the payment order pane. case 'customer-view': case 'order-view': - $output = t('PO number: !po_number', array('!po_number' => check_plain($arg1->payment_details['po_number']))); - return $output; + if (variable_get('uc_po_manual', 1) == 1) { + $output = t('PO number: !po_number', array('!po_number' => check_plain($arg1->payment_details['po_number']))); + return $output; + } // Displayed on the order edit screen so admin can update the PO number. case 'order-details': @@ -189,8 +202,10 @@ function uc_payment_method_po($op, &$arg // Update the PO number when the order form is submitted. case 'edit-process': - $changes['payment_details']['po_number'] = check_plain($_POST['po_number']); - return $changes; + if (variable_get('uc_po_manual', 1) == 1) { + $changes['payment_details']['po_number'] = check_plain($_POST['po_number']); + return $changes; + } // Add a few PO related fields to the payment methods settings form. case 'settings': @@ -210,70 +225,97 @@ function uc_payment_method_po($op, &$arg // Returns the form for users to enter or adjust a PO number. function uc_payment_method_po_form($order) { - $form['po_instructions'] = array( - '#value' => '
' - . variable_get('uc_po_instructions', uc_get_message('po_instructions')) - .'
', - ); - $form['po_number'] = array( - '#type' => 'textfield', - '#title' => t('PO number'), - '#default_value' => $order->payment_details['po_number'], - '#size' => 32, - ); - - return $form; + if (variable_get('uc_po_manual', 1) == 1) { + $form['po_instructions'] = array( + '#value' => '
' + . variable_get('uc_po_instructions', uc_get_message('po_instructions')) + .'
', + ); + $form['po_number'] = array( + '#type' => 'textfield', + '#title' => t('PO number'), + '#default_value' => $order->payment_details['po_number'], + '#size' => 32, + ); + return $form; + } } // Themes the PO entry form to be in a table with the appropriate CSS rules for // checkout and for the order edit screen. function theme_uc_payment_method_po_form($form) { - $form['po_number']['#title'] = ''; - $table = 'order-edit-table'; - $label = 'oet-label'; - - if (arg(0) !== 'admin') { - $output = drupal_render($form['po_instructions']); - $table = 'inline-pane-table'; - $label = 'field-label'; - } - $output .= '
' - . t('PO number') .':'. drupal_render($form['po_number']) + if (variable_get('uc_po_manual', 1) == 1) { + $form['po_number']['#title'] = ''; + $table = 'order-edit-table'; + $label = 'oet-label'; + + if (arg(0) !== 'admin') { + $output = drupal_render($form['po_instructions']); + $table = 'inline-pane-table'; + $label = 'field-label'; + } + + + $output .= '
' + . t('PO number') .':'. drupal_render($form['po_number']) .'
'; - return $output; + return $output; + } } // Allow administrators to search orders by PO number. function uc_po_search_form() { - $po_number = arg(4); - if (!empty($po_number)) { - $result = db_query("SELECT * FROM {uc_payment_po} WHERE po_number LIKE '%%%s%%'", $po_number); - while ($order = db_fetch_object($result)) { - $rows[] = array(l($order->order_id, 'admin/store/orders/'. $order->order_id), $order->po_number); + if (variable_get('uc_po_manual', 1) == 1) { + $po_number = arg(4); + + if (!empty($po_number)) { + $result = db_query("SELECT * FROM {uc_payment_po} WHERE po_number LIKE '%%%s%%'", $po_number); + while ($order = db_fetch_object($result)) { + $rows[] = array(l($order->order_id, 'admin/store/orders/'. $order->order_id), $order->po_number); + } + $header = array(t('Order ID'), t('PO number')); + $form['results'] = array( + '#value' => '

'. t('Search returned the following results:') + .'

'. theme('table', $header, $rows) .'
', + ); } - $header = array(t('Order ID'), t('PO number')); - $form['results'] = array( - '#value' => '

'. t('Search returned the following results:') - .'

'. theme('table', $header, $rows) .'
', - ); - } - $form['po_number'] = array( - '#type' => 'textfield', - '#title' => t('PO number'), - '#default_value' => $po_number, - '#size' => 32, - ); - $form['submit'] = array( - '#type' => 'submit', - '#value' => t('Submit'), - ); + $form['po_number'] = array( + '#type' => 'textfield', + '#title' => t('PO number'), + '#default_value' => $po_number, + '#size' => 32, + ); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Submit'), + ); - return $form; + return $form; + } else { + $form['results'] = array( + '#value' => '
'. t('Product Order number has been disabled.') . '
', + ); + return $form; + } } function uc_po_search_form_submit($form, &$form_state) { return 'admin/store/orders/po/'. check_plain($form_state['values']['po_number']); } + +// PO Settings page: used for enable/disable the PO field during the purchase workflow. +// WARNING: when disabled, the po_number field is set to "WEB ORDER". +function uc_po_admin(){ + $form['uc_po_manual'] = array( + '#type' => 'checkbox', + '#title' => t('Enable manual Purchase Order input'), + '#default_value' => variable_get('uc_po_manual', 1), + '#description' => t("Enabling manual PO, allow customers to specify the Purchase Order code. When disabled it will be setted automatically."), + '#required' => TRUE, + ); + + return system_settings_form($form); +}