From: Chuck Scott Date: Fri, 20 Apr 2018 19:59:28 +0000 (-0400) Subject: Work on requested updates and fixes and some bugs found while working on Registrations X-Git-Tag: v1.0.0^2~19 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=6e1ddc1fb48f55ad1ef86a0b0329f0fa2b86fffe;p=WP-Plugins%2Fglm-member-db-registrations.git Work on requested updates and fixes and some bugs found while working on Registrations Added E-Mail address to accounts dashboard list in eventDashboard.html Fixed problem with event Payment Codes showing up in all Events in event_paymentCodes.php Replaced GLM Grid version stored summary with table driven version to work in E-Mail in summaryStore.html Fixed minor problems in cart and checkout summaries in cartSummary.html Added more data that can be used in notifications to attendee in regCartSupport.php Fixed save credit card text and checkbox showing when credit card payment not selected Now removing payment methods from events that are not enabled in management. --- diff --git a/classes/data/dataRegEvent.php b/classes/data/dataRegEvent.php index 5e0d552..e7d7655 100644 --- a/classes/data/dataRegEvent.php +++ b/classes/data/dataRegEvent.php @@ -352,6 +352,15 @@ class GlmDataRegistrationsRegEvent extends GlmDataAbstract public function entryPostProcessing( $result_data, $action ) { + // Remove payment methods that are turned of in management + foreach ($result_data['payment_methods']['bitmap'] as $pmKey=>$pm) { + $bit = pow(2, $pm['value']); + if (($bit & $this->config['settings']['reg_payment_methods']) == 0) { + unset($result_data['payment_methods']['bitmap'][$pmKey]); + unset($result_data['restricted_payment_methods']['bitmap'][$pmKey]); + } + } + // If $postProcAddedEventData option set if ($this->postProcAddedEventData) { @@ -466,6 +475,7 @@ class GlmDataRegistrationsRegEvent extends GlmDataAbstract 'id' => $savedFields['id'], 'event_name' => $savedFields['event_name'], 'notify_email' => $savedFields['notify_email'], + 'blabla' => 1, 'descr' => $savedFields['descr'], 'first_datetime' => $savedFields['first_datetime'], 'last_datetime' => $savedFields['last_datetime'] diff --git a/classes/regCartSupport.php b/classes/regCartSupport.php index f148314..94ea65a 100644 --- a/classes/regCartSupport.php +++ b/classes/regCartSupport.php @@ -1,4 +1,7 @@ cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'] as $registrantKey => $registrant) { // Provide a more friendly date/time output - $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['timeReformatted'] = date('m/d/Y g:i A', strtotime($registrant['event_time'])); + $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['timeReformatted'] = date('m/d/Y at g:i A', strtotime($registrant['event_time'])); // Add registrant account to accounts table if needed $this->addAccountToCart($registrant['account']); @@ -303,8 +306,12 @@ class GlmRegCartSupport // If custom fields add-on is installed - get custom fields data $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['event_attendee_custom_form'] = false; if (apply_filters('glm-members-customfields-plugin-active', false)) { + $form = apply_filters( 'glm-members-customfields-form-data-recall', '', "glm_reg_customfields_reg_event_attendee_".$event['reg_event'], $registrantKey, true ); $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['event_attendee_custom_form'] = $form; + + $form = apply_filters( 'glm-members-customfields-form-data-recall', '', "glm_reg_customfields_reg_event_".$event['reg_event']."_level_".$class['class'], $registrantKey, true ); + $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['event_attendee_custom_form_level'] = $form; } } // Each Registrant @@ -490,6 +497,12 @@ class GlmRegCartSupport if (!isset($regEventTimes[$registrant['reg_time']]) || !$regEventTimes[$registrant['reg_time']]['active']['value']) { $this->cart['messages'][] = "The event date and/or time selected for ".$registrant['fname'].' '.$registrant['fname']." has been dropped from the event. Registrant was removed."; $removeRegistrant = true; + } else { + + // Add some info from the time record to the registrant + $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['non_time_specific'] = $regEventTimes[$registrant['reg_time']]['non_time_specific']['value']; + $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['reg_event_descr'] = $regEventTimes[$registrant['reg_time']]['descr']; + } // Check the if registrant does not have a reg_time_pending entry @@ -552,7 +565,7 @@ class GlmRegCartSupport } // Add a more familiar date/time - $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['timeReformatted'] = date('m/d/Y g:i A', strtotime($registrant['event_time'])); + $this->cart['events'][$eventKey]['classes'][$classKey]['rates'][$rateKey]['registrants'][$registrantKey]['timeReformatted'] = date('m/d/Y at g:i A', strtotime($registrant['event_time'])); } // Each registrant @@ -1316,12 +1329,13 @@ class GlmRegCartSupport * * @param string $summary HTML Summary of checkout for sending to owner and requesting address * @param integer $requestId Specify the request ID - not required if cart is already loaded + * @param boolean $doNotUpdateInventory If TRUE, don't update the inventory numbers (for testing only) * * @return null * * @access public */ - public function checkoutUpdateInventoryAndNotify($summary = '', $requestId = false) + public function checkoutUpdateInventoryAndNotify($summary = '', $requestId = false, $doNotUpdateInventory = false) { $RegEvent = new GlmDataRegistrationsRegEvent($this->wpdb, $this->config); @@ -1357,16 +1371,23 @@ class GlmRegCartSupport */ $accountId = $this->cart['request']['account']; if (isset($this->cart['accounts'][$accountId])) { - $emailAddr = ''; + $submitAddr = ''; if (trim($this->cart['accounts'][$accountId]['email']) != '') { - $emailAddr = $this->cart['accounts'][$accountId]['email']; + $submitAddr = $this->cart['accounts'][$accountId]['email']; } elseif (trim($this->cart['accounts'][$accountId]['contact_email']) != '') { - $emailAddr = $this->cart['accounts'][$accountId]['contact_email']; + $submitAddr = $this->cart['accounts'][$accountId]['contact_email']; } - if ($emailAddr != '') { + if ($submitAddr != '') { + $subjectLine = $this->generateHTML($viewData, $regMisc['submission_notify_subject'], true); $emailMsg = $this->generateHTML($viewData, nl2br($regMisc['submission_notify_text']), true)."\n\n".$summary; - $this->sendHtmlEmail($emailAddr, $subjectLine, $emailMsg); + + // If front debug is on and this is a test submission output message to screen rather than semd. + if (GLM_MEMBERS_PLUGIN_FRONT_DEBUG && $doNotUpdateInventory) { + $this->displayEmailforTesting('Notice to Person Submitting Registrations', $submitAddr, $subjectLine, $emailMsg); + } else { + $this->sendHtmlEmail($submitAddr, $subjectLine, $emailMsg); + } } } @@ -1385,7 +1406,9 @@ class GlmRegCartSupport foreach ($rate['registrants'] as $registrant) { // Adjust the inventory and hold numbers - $this->updateTimeEntryCounts($registrant['reg_time'], -1, 1); + if (!$doNotUpdateInventory) { + $this->updateTimeEntryCounts($registrant['reg_time'], -1, 1); + } // Remove the hold record $this->wpdb->delete( @@ -1404,11 +1427,25 @@ class GlmRegCartSupport } elseif (trim($this->cart['accounts'][$accountId]['contact_email']) != '') { $emailAddr = $this->cart['accounts'][$accountId]['contact_email']; } - if ($emailAddr != '') { - $viewData['registrant'] = $registrant; - $subjectLine = $this->generateHTML($viewData, $regMisc['registrant_notify_subject'], true); - $emailMsg = $this->generateHTML($viewData, nl2br($regMisc['registrant_notify_text']), true); - $this->sendHtmlEmail($emailAddr, $subjectLine, $emailMsg); + if ($emailAddr != '' && $emailAddr != $submitAddr) { + $vData = array( + 'event' => $event['event_name'], + 'description' => $registrant['reg_event_descr'], + 'fname' => $registrant['fname'], + 'lname' => $registrant['lname'], + 'datetime' => $registrant['non_time_specific'] ? 'any time during event' : 'on '.$registrant['event_time_reformatted'], + 'request_fname' => $this->cart['request']['bill_fname'], + 'request_lname' => $this->cart['request']['bill_lname'] + ); + $subjectLine = $this->generateHTML($vData, $regMisc['registrant_notify_subject'], true); + $emailMsg = $this->generateHTML($vData, nl2br($regMisc['registrant_notify_text']), true); + + // If front debug is on and this is a test submission output message to screen rather than semd. + if (GLM_MEMBERS_PLUGIN_FRONT_DEBUG && $doNotUpdateInventory) { + $this->displayEmailforTesting("Notice to Registrant", $emailAddr, $subjectLine, $emailMsg); + } else { + $this->sendHtmlEmail($emailAddr, $subjectLine, $emailMsg); + } } } @@ -1427,13 +1464,47 @@ class GlmRegCartSupport $viewData['eventRegistrants'] = $eventRegistrants; $subjectLine = $this->generateHTML($viewData, $regMisc['instr_notify_subject'], true); $emailMsg = $this->generateHTML($viewData, nl2br($regMisc['instr_notify_text']), true); - $this->sendHtmlEmail($emailAddr, $subjectjectLine, $emailMsg); + + // If front debug is on and this is a test submission output message to screen rather than semd. + if (GLM_MEMBERS_PLUGIN_FRONT_DEBUG && $doNotUpdateInventory) { + $this->displayEmailforTesting('Notice to Contacts Listed in Event', $emailAddr, $subjectLine, $emailMsg); + } else { + $this->sendHtmlEmail($emailAddr, $subjectjectLine, $emailMsg); + } + } } } + /** + * Output an E-Mail message to screen for testing + * + * @param $whatMsg string What message is being sent + * @param $to string To Address + * @param $subject string Subject Line + * @param $msg string Message body + * + * @return void + * + */ + function displayEmailforTesting($whatMsg, $to, $subject, $msg) + { + echo ' +
+ + + + + +
E-Mail Message:'.$whatMsg.'
To:'.$to.'
Subject:'.$subject.'
Body:'.$msg.'
+
+ '; + + } + + /** * Merge template and data to produce HTML * diff --git a/models/admin/registrations/events_paymentCodes.php b/models/admin/registrations/events_paymentCodes.php index e9347d5..7cd7c74 100644 --- a/models/admin/registrations/events_paymentCodes.php +++ b/models/admin/registrations/events_paymentCodes.php @@ -13,6 +13,9 @@ * @link http://dev.gaslightmedia.com/ */ +// Get event ID +$eventId = filter_input(INPUT_GET, 'regEventID', FILTER_SANITIZE_NUMBER_INT); + require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataPaymentCode.php'; $PayCode = new GlmDataRegistrationsPaymentCode($this->wpdb, $this->config); @@ -31,21 +34,25 @@ if (isset($_REQUEST['option2']) && $_REQUEST['option2'] != '') { break; case 'update': - $payCodeId = ($_REQUEST['payCodeId'] - 0); - $res = $PayCode->updateEntry($payCodeId); - if (!$res['status']) { - foreach ($res['fieldFail'] as $ff) { - if (trim($ff) != '') { - $messages[] = $ff; + if ($eventId) { + $payCodeId = ($_REQUEST['payCodeId'] - 0); + $res = $PayCode->updateEntry($payCodeId); + if (!$res['status']) { + foreach ($res['fieldFail'] as $ff) { + if (trim($ff) != '') { + $messages[] = $ff; + } } } } break; case 'delete': - $payCodeId = ($_REQUEST['payCodeId'] - 0); - if ( $payCodeId > 0 ) { - $PayCode->deleteEntry( $payCodeId, true ); + if ($eventId) { + $payCodeId = ($_REQUEST['payCodeId'] - 0); + if ( $payCodeId > 0 ) { + $PayCode->deleteEntry( $payCodeId, true ); + } } break; } @@ -56,7 +63,11 @@ $newPayCode = $PayCode->newEntry(); // Specify the pay code type number that should be used. $refPaycodeType = $this->config['pay_code_ref_type_numb']['Event']; -$payCodes = $PayCode->getList("T.ref_type = $refPaycodeType"); +// If we have an event ID then get any pacodes for that event +$payCodes = false; +if ($eventId) { + $payCodes = $PayCode->getList("T.ref_type = $refPaycodeType AND T.ref_dest = $eventId"); +} if ($payCodes) { $havePayCodes = true; @@ -64,4 +75,5 @@ if ($payCodes) { $regEvent = $this->getEntry($regEventID); + $view = 'eventPaymentCodes'; diff --git a/models/front/registrations/checkoutProcess.php b/models/front/registrations/checkoutProcess.php index 310de57..9b1601e 100644 --- a/models/front/registrations/checkoutProcess.php +++ b/models/front/registrations/checkoutProcess.php @@ -277,7 +277,6 @@ class GlmMembersFront_registrations_checkoutProcess extends GlmRegCartSupport /* * Process Payment? */ -echo "Grand Total = ".$this->cart['grandTotal']."

"; require_once GLM_MEMBERS_REGISTRATIONS_PLUGIN_CLASS_PATH.'/data/dataManagement.php'; $Management = new GlmDataRegistrationsManagement($this->wpdb, $this->config); @@ -618,8 +617,11 @@ echo "Grand Total = ".$this->cart['grandTotal']."

"; ) ); + // Check if request to do a test checkout only - Don't clear session or update inventory + $doNotClear = $_REQUEST['bill_addr2'] == '*** GLM DO NOT CLEAR ***'; + // Save date, pay method, status, total - if (count($messages) == '' && $billing['addr2'] != '*** DO NOT CLEAR ***') { + if (count($messages) == '' && !$doNotClear) { $reqData = array_merge( $reqData, @@ -747,15 +749,12 @@ echo "Grand Total = ".$this->cart['grandTotal']."

"; array( 'id' => $requestId ), array('%s') ); - if ($updated != 1 && $billing['addr2'] != '*** DO NOT CLEAR ***') { + if ($updated != 1 && !$doNotClear) { $messages[] = 'Cart Summary did not store. This is a technical issue that means our systems could not store a summmary of what you submitted.'; } // Update inventory totals and send notifications unless this is a test submission - if ($billing['addr2'] != '*** DO NOT CLEAR ***') { - - $this->checkoutUpdateInventoryAndNotify($summary); - } + $this->checkoutUpdateInventoryAndNotify($summary, false, $doNotClear); // Send acknowledgement to person submitting request mail($request['email'], $misc['submission_ack_subject'], $summary); @@ -769,7 +768,7 @@ echo "Grand Total = ".$this->cart['grandTotal']."

"; * Remove cart from session * */ - if ($billing['addr2'] != '*** DO NOT CLEAR ***') { + if (!$doNotClear) { unset($_SESSION['glm_reg_cart_id']); } @@ -785,6 +784,7 @@ echo "Grand Total = ".$this->cart['grandTotal']."

"; 'guestAccount' => $guestAccount, 'requestId' => $requestId, 'summaryCheck' => $summaryCheck, + 'summary' => $summary, 'misc' => $misc, 'reg_account_id' => $accountId, 'states_list' => $this->config['states'], @@ -793,6 +793,8 @@ echo "Grand Total = ".$this->cart['grandTotal']."

"; 'passwordError' => $passwordError, ); + // echo "

".print_r($this->cart,1)."
"; + // Return status, any suggested view, and any data to controller return array( 'status' => true, diff --git a/views/admin/registrations/accountsDashboard.html b/views/admin/registrations/accountsDashboard.html index 2b461d3..2dc4e15 100644 --- a/views/admin/registrations/accountsDashboard.html +++ b/views/admin/registrations/accountsDashboard.html @@ -39,6 +39,7 @@ Active First Name Last Name + E-Mail Address Organization Title City @@ -59,6 +60,7 @@ {$account.active.name} {$account.fname} {$account.lname} + {$account.email} {$account.org} {$account.title} {$account.city} diff --git a/views/admin/registrations/eventPaymentCodes.html b/views/admin/registrations/eventPaymentCodes.html index 3c4cb47..6fe222d 100644 --- a/views/admin/registrations/eventPaymentCodes.html +++ b/views/admin/registrations/eventPaymentCodes.html @@ -22,7 +22,7 @@ {/if} -
 
ssss +
 
diff --git a/views/front/registrations/cartSummary.html b/views/front/registrations/cartSummary.html index 7753208..6a1f2bd 100644 --- a/views/front/registrations/cartSummary.html +++ b/views/front/registrations/cartSummary.html @@ -70,7 +70,52 @@ ${$customField.cost|number_format:2} {/if} - + + {else} + {if $summaryType=='store'} +
+
+ {$customField.field_name}: + {$customField.stored} +
+ {if $customField.cost > 0} +
+ ${$customField.cost|number_format:2} +
+ {/if} +
+ {/if} + {/if} + {/foreach} + {/if} + {if $registrant.event_attendee_custom_form_level} + {foreach $registrant.event_attendee_custom_form_level.form as $customField} + {if $customField.priority_display.value || $customField.cost > 0} +
+
+ {$customField.field_name}: + {$customField.stored} +
+ {if $customField.cost > 0} +
+ ${$customField.cost|number_format:2} +
+ {/if} +
+ {else} + {if $summaryType=='store'} +
+
+ {$customField.field_name}: + {$customField.stored} +
+ {if $customField.cost > 0} +
+ ${$customField.cost|number_format:2} +
+ {/if} +
+ {/if} {/if} {/foreach} {/if} @@ -97,28 +142,13 @@ {foreach $event.payCodes as $payCode}
- Discount Code: "{$payCode.code}", - {if $payCode.code_type == 'Free'}Free{/if} - {if $payCode.code_type =='Amount'}${$payCode.amount|number_format:2}{/if} - {if $payCode.code_type == 'Percent'}{$payCode.amount}%{/if} + Event {$terms.reg_term_payment_code_cap}: "{$payCode.code}",
- ${$payCode.thisDiscount|number_format:2} + -${$payCode.thisDiscount|number_format:2}
{/foreach} - {/if} - {if $event.eventDiscounts > 0} - {/if}
@@ -134,34 +164,17 @@
{if $cart.globalPayCodes}
- - {foreach $cart.globalPayCodes as $payCode}
- Discount Code: "{$payCode.code}", - {if $payCode.code_type == 'Free'}Free{/if} - {if $payCode.code_type =='Amount'}${$payCode.amount|number_format:2}{/if} - {if $payCode.code_type == 'Percent'}{$payCode.amount}%{/if} + Global {$terms.reg_term_payment_code_cap}: "{$payCode.code}",
- ${$payCode.thisDiscount|number_format:2} + -${$payCode.thisDiscount|number_format:2}
{/foreach}
-{/if} -{if $cart.totalDiscounts > 0} - {/if} -
{if $settings.reg_proc_methods == 2} {* If using Authorize.net *}
@@ -249,6 +248,7 @@
{/if} + {else}
diff --git a/views/front/registrations/summaryStore.html b/views/front/registrations/summaryStore.html index 1b83725..5c664e6 100644 --- a/views/front/registrations/summaryStore.html +++ b/views/front/registrations/summaryStore.html @@ -1,12 +1,6 @@ @@ -95,12 +96,12 @@
- + {if $account.fname || $account.lname} - + {/if} {if $account.phone} - + {/if} {if $account.fax} - + {/if} - - - - + + + +
Submission
Submission
Requested By:Requested By: {$account.fname} {$account.lname}{if $account.title}, {$account.title}{/if}
{if $account.org}{$account.org}
{/if} @@ -111,26 +112,26 @@
Phone:{$account.phone}
Phone:{$account.phone}
title:{$account.title}
title:{$account.title}
E-Mail Address:{$account.email}
Request #:{$request.id}
Submitted:{$request.date_submitted.datetime}
Status:{$request.status.name}
E-Mail Address:{$account.email}
Request #:{$request.id}
Submitted:{$request.date_submitted.datetime}
Status:{$request.status.name}
- + - + {if $request.bill_phone} - + {/if} {if $request.bill_email} - + {/if}
Billing
Billing
Contact:Contact: {$request.bill_fname} {$request.bill_lname}{if $request.bill_title}, {$request.bill_title}{/if}
{if $request.bill_org}{$request.bill_org}
{/if} @@ -140,10 +141,10 @@
Phone:{$request.bill_phone}
Phone:{$request.bill_phone}
E-Mail Address:{$request.bill_email}
E-Mail Address:{$request.bill_email}
@@ -151,41 +152,168 @@ {if $request.pay_method.value == $payMethodsNumb.CreditCard} - - - - - - - + + + + + + + {/if} {if $request.pay_method.value == $payMethodsNumb.Check} - - - - + + + + {/if} {if $request.pay_method.value == $payMethodsNumb.Cash} - - + + {/if} {if $request.pay_method.value == $payMethodsNumb.OnArrival} - - + + {/if} {if $request.pay_method.value == $payMethodsNumb.Pending} - - + + {/if}
Payment Method:{$request.pay_method.name}
Credit Card:{$request.cc_type.name}
Name on Card:{$request.cc_name}
Card Number:{$request.cc_numb}
Expiration:{$request.cc_exp}
Confirmation Code:{$request.cc_conf}
Total Charged:{$request.total}
Payment Method:{$request.pay_method.name}
Credit Card:{$request.cc_type.name}
Name on Card:{$request.cc_name}
Card Number:{$request.cc_numb}
Expiration:{$request.cc_exp}
Confirmation Code:{$request.cc_conf}
Total Charged:{$request.total}
Payment Method:{$request.pay_method.name}
Name on Check:{$request.cc_name}
Check Number:{$request.cc_numb}
Total Paid:{$request.total}
Payment Method:{$request.pay_method.name}
Name on Check:{$request.cc_name}
Check Number:{$request.cc_numb}
Total Paid:{$request.total}
Payment Method:{$request.pay_method.name}
Total Paid:{$request.total}
Payment Method:{$request.pay_method.name}
Total Paid:{$request.total}
Payment Method:{$request.pay_method.name}
To be paid on arrival:{$request.total}
Payment Method:{$request.pay_method.name}
To be paid on arrival:{$request.total}
Payment Method:{$request.pay_method.name}
Amount Pending:{$request.total}
Payment Method:{$request.pay_method.name}
Amount Pending:{$request.total}

{$terms.reg_term_registration_plur_cap}

-
- - {assign var="summaryType" value="store"} - {include file='front/registrations/cartSummary.html'} -
+ + + + +{foreach $cart.events as $event} + + + + + {foreach $event.classes as $class} + {foreach $class.rates as $rate} + + + + + {foreach $rate.registrants as $registrant} + + + + {if $registrant.event_attendee_custom_form && is_array($registrant.event_attendee_custom_form.form)} + {foreach $registrant.event_attendee_custom_form.form as $customField} + {if !$customField.displayOnly} + {if $customField.priority_display.value || $customField.cost > 0} + + + + + + {else} + + + + + + {/if} + {/if} + {/foreach} + {/if} + {if $registrant.event_attendee_custom_form_level && is_array($registrant.event_attendee_custom_form_level.form)} + {foreach $registrant.event_attendee_custom_form_level.form as $customField} + {if !$customField.displayOnly} + {if $customField.priority_display.value || $customField.cost > 0} + + + + + + {else} + + + + + + {/if} + {/if} + {/foreach} + {/if} + {if $registrant.registrantDiscounts > 0} + + + + + {/if} + {/foreach} {* Registrant *} + {/foreach} {* Rate *} + + {/foreach} {* Class *} + {foreach $event.payCodes as $payCode} + + + + + + {/foreach} + + + + + +{/foreach} {* events *} + + + + + +{if $cart.globalPayCodes} + {foreach $cart.globalPayCodes as $payCode} + + + + + + {/foreach} +{/if} + + + + + + + + + + + +
{$event.event_name}
{$terms.reg_term_registration_cap} {$terms.reg_term_level_cap}:  {$class.class_name}{if $rate.rateBaseCharge > 0}{$rate.base_rate_money}{/if}
    {$terms.reg_term_attendee_cap}:  {$registrant.fname} {$registrant.lname} + {if $registrant.registrantRate > 0} + ${$registrant.registrantRate|number_format:2} + {else} + (included) + {/if} +
        {$customField.field_name}:{$customField.stored} + {if $customField.cost > 0} + ${$customField.cost|number_format:2} + {/if} +
        {$customField.field_name}:{$customField.stored} + {if $customField.cost > 0} + ${$customField.cost|number_format:2} + {/if} +
        {$customField.field_name}:{$customField.stored} + {if $customField.cost > 0} + ${$customField.cost|number_format:2} + {/if} +
        {$customField.field_name}:argh{$customField.stored} + {if $customField.cost > 0} + ${$customField.cost|number_format:2} + {/if} +
        {$terms.reg_term_attendee_cap} Discount${$registrant.registrantDiscounts|number_format:2}
 
  + Event {$terms.reg_term_payment_code_cap}: {$payCode.code} + -${$payCode.thisDiscount|number_format:2}
 Subtotal:${$event.eventCharges|number_format:2}
{$terms.reg_term_registration_cap} Request Totals
  + Global {$terms.reg_term_payment_code_cap}: {$payCode.code} + -${$payCode.thisDiscount|number_format:2}
 Total {$terms.reg_term_attendee_plur}:{$cart.totalRegistrants}
 Total Cost:${$cart.grandTotal|number_format:2}
- \ No newline at end of file +