$event->eid,)); //empty payment option $payment_type_options[0] = ''; foreach($result as $row) { $price = $early_price_applies == true ? $row->booking_price : $row->booking_late_price; $payment_type_options[$row->pid] = $row->booking_price_descrip . ' ($' . $price . ')'; } //any html to put at the start of the form $prefix = t("

Manually enter payment details.
Note that this adds to the total amount paid already by each person.

"); $form['booking_earlybird'] = array ( '#type' => 'hidden', '#value' => $early_price_applies, ); $form['payment-type'] = array( '#type' => 'select', '#title' => t('Payment Type'), '#required' => TRUE, '#default_value' => '0', '#options' => $payment_type_options, ); $form['payment-custom-amount'] = array( '#type' => 'textfield', '#title' => t('Custom Amount Paid'), '#maxlength' => 10, '#field_prefix' => '$', '#required' => FALSE, '#default_value' => '0.00' ); $header = array ( 'booking_nid' => array('data' => t('Booking ID')), 'booking_name' => array('data' => t('Name')), 'booking_email' => array('data' => t('Email Address')), 'amount_paid' => array('data' => t('Amount Paid To Date')), 'amount_reqd' => array('data' => t('Gross Payment Required')), 'booking_status' => t('Status'), 'booking_fully_paid' => t('Fully Paid?'), ); $result = db_query("SELECT * FROM {booking_person} WHERE booking_event_id = :eid", array(':eid' => $event->eid)); foreach($result as $data) { $options[$data->nid] = array ( 'booking_nid' => l(t('!id', array('!id' => $data->nid)), t('node/!id', array('!id' => $data->nid))), 'booking_name' => $data->booking_firstname . " " . $data->booking_lastname, 'booking_email' => $data->booking_email, 'amount_paid' => $data->booking_amount_paid, 'amount_reqd' => $data->booking_total_pay_reqd, 'booking_status' => _booking_status_generate($data->booking_status), 'booking_fully_paid' => $data->booking_amount_paid < $data->booking_total_pay_reqd ? 'No' : 'Yes', ); } $form['table'] = array ( '#type' => 'tableselect', '#header' => $header, '#options' => $options, ); $form['submit'] = array ( '#type' => 'submit', '#value' => t('Update'), ); return array ( 'first_para' => array ( '#type' => 'markup', '#markup' => $prefix, ), 'form' => $form, ); } function booking_manual_payment_admin_submit($form, &$form_state) { global $event; $counter = 0; $payment_date = REQUEST_TIME; $checkboxes = $form_state['values']['table']; //$values['booking_price_active']; //watchdog('booking', 'Formstate when setting buttons: @info', array ('@info' => var_export($form_state['values'], TRUE))); //watchdog('booking', 'Checkboxes when setting buttons: @info', array ('@info' => var_export($checkboxes, TRUE))); //watchdog('booking', 'Manual payment form contents: @info', array('@info' => var_export($form_state['values'], TRUE))); //check if there is a pre-defined payment type selected if ($form_state['values']['payment-type'] != '' && $form_state['values']['payment-custom-amount'] == '0.00') { //look up the price relating to the price id selected $price_query = db_query("SELECT price.booking_price, price.booking_late_price " . "FROM {booking_price} price " . "WHERE price.pid = :pid ", array(':pid' => $form_state['values']['payment-type'])) ->fetchObject(); $price = $form_state['values']['booking_earlybird'] == true ? $price_query->booking_price : $price_query->booking_late_price; } elseif ($form_state['values']['payment-custom-amount'] != '0.00' && is_numeric($form_state['values']['payment-custom-amount'])) { $price = $form_state['values']['payment-custom-amount']; } else { drupal_set_message("Error: Could not determine payment amount to update user(s).", 'error', FALSE); return; } foreach($checkboxes as $key => $value) { if (is_numeric($key) && $value != 0) { //check if they exist in the database first $person = db_query("SELECT person.nid, person.booking_firstname, person.booking_lastname, person.booking_status, person.booking_partner_id, person.booking_amount_paid " . "FROM {booking_person} person " . "WHERE nid = :nid", array(':nid' => $key)) ->fetchObject(); if ($person) { //add this payment to their existing balance $total_paid = $person->booking_amount_paid + $price; //determine what their booking status is now if (_booking_check_bookings_full() == True || $person->booking_status == 2) $status = 2; else $status = 1; watchdog('booking', 'Setting payment for regn id !nid to $!price and status to !status', array('!nid' => $key, '!price' => $price, '!status' => $status)); db_update('booking_person') ->fields(array( 'booking_amount_paid' => $total_paid, 'booking_status' => $status, )) ->condition('nid', $key) ->execute(); //Create a payment record entry for this update $result = db_insert('booking_payment') ->fields(array( 'booking_person_nid' => $key, 'booking_eventid' => $event->eid, 'booking_mc_gross' => $price, 'booking_mc_currency' => 'AUD', 'booking_mc_fee' => '0.00', 'booking_quantity' => 1, 'booking_invoice' => 'ManualPayment', 'booking_payer_id' => '', 'booking_payment_date' => $payment_date, 'booking_payment_status' => '', 'booking_first_name' => $person->booking_firstname, 'booking_last_name' => $person->booking_lastname, 'booking_buyer_email' => '', 'booking_payer_status' => '', 'booking_item_name' => '', 'booking_ipn_track_id' => '', )) ->execute(); $counter++; } else drupal_set_message("Error: Unable to find person with registration ID " . $key, 'error', FALSE); } } drupal_set_message("Added manual payments for $counter people of " . '$' . "$price.", 'status', FALSE); }