| 1 | {* |
| 2 | +--------------------------------------------------------------------+ |
| 3 | | CiviCRM version 5 | |
| 4 | +--------------------------------------------------------------------+ |
| 5 | | Copyright CiviCRM LLC (c) 2004-2019 | |
| 6 | +--------------------------------------------------------------------+ |
| 7 | | This file is a part of CiviCRM. | |
| 8 | | | |
| 9 | | CiviCRM is free software; you can copy, modify, and distribute it | |
| 10 | | under the terms of the GNU Affero General Public License | |
| 11 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | |
| 12 | | | |
| 13 | | CiviCRM is distributed in the hope that it will be useful, but | |
| 14 | | WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| 16 | | See the GNU Affero General Public License for more details. | |
| 17 | | | |
| 18 | | You should have received a copy of the GNU Affero General Public | |
| 19 | | License and the CiviCRM Licensing Exception along | |
| 20 | | with this program; if not, contact CiviCRM LLC | |
| 21 | | at info[AT]civicrm[DOT]org. If you have questions about the | |
| 22 | | GNU Affero General Public License or the licensing of CiviCRM, | |
| 23 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | |
| 24 | +--------------------------------------------------------------------+ |
| 25 | *} |
| 26 | {* This template is used to change selections of fees for a participant *} |
| 27 | {literal} |
| 28 | <script type='text/javascript'> |
| 29 | function display(totalfee) { |
| 30 | {/literal}{if $optionFullTotalAmount} |
| 31 | totalfee += {$optionFullTotalAmount};{/if} |
| 32 | {literal}; |
| 33 | // totalfee is monetary, round it to 2 decimal points so it can |
| 34 | // go as a float - CRM-13491 |
| 35 | totalfee = Math.round(totalfee*100)/100; |
| 36 | // note : some variables used used here are global variables defined inside Calculate.tpl |
| 37 | var totalEventFee = formatMoney( totalfee, 2, seperator, thousandMarker); |
| 38 | cj('#pricevalue').html("<b>"+symbol+"</b> "+totalEventFee); |
| 39 | scriptfee = totalfee; |
| 40 | scriptarray = price; |
| 41 | cj('#total_amount').val(totalfee); |
| 42 | ( totalfee < 0 ) ? cj('table#pricelabel').addClass('disabled') : cj('table#pricelabel').removeClass('disabled'); |
| 43 | |
| 44 | // populate the balance amount div |
| 45 | // change the status selections according to updated selections |
| 46 | populatebalanceFee(totalfee, false); |
| 47 | } |
| 48 | |
| 49 | function populatebalanceFee(updatedAmt, onlyStatusUpdate) { |
| 50 | // updatedAmt is: selected line total |
| 51 | |
| 52 | // assign statuses |
| 53 | var partiallyPaid = {/literal}{$partiallyPaid}{literal}; |
| 54 | var pendingRefund = {/literal}{$pendingRefund}{literal}; |
| 55 | var participantStatus = {/literal}{$participantStatus}{literal}; |
| 56 | |
| 57 | // fee actually paid |
| 58 | var feePaid = {/literal}{$feePaid}{literal}; |
| 59 | |
| 60 | var updatedTotalLineTotal = updatedAmt; |
| 61 | |
| 62 | {/literal}{if $totalLineTotal}{literal} |
| 63 | // line total of current participant stored in DB |
| 64 | var linetotal = {/literal}{$lineItemTotal}{literal}; |
| 65 | |
| 66 | // line total of all the participants |
| 67 | var totalLineTotal = {/literal}{$totalLineTotal}{literal}; |
| 68 | updatedTotalLineTotal = totalLineTotal + (updatedAmt - linetotal); |
| 69 | {/literal}{/if}{literal} |
| 70 | |
| 71 | // calculate the balance amount using total paid and updated amount |
| 72 | var balanceAmt = updatedTotalLineTotal - feePaid; |
| 73 | |
| 74 | // change the status selections according to updated selections |
| 75 | if (balanceAmt > 0 && feePaid != 0) { |
| 76 | cj('#status_id').val(partiallyPaid); |
| 77 | } |
| 78 | else if(balanceAmt < 0) { |
| 79 | cj('#status_id').val(pendingRefund); |
| 80 | } |
| 81 | else { |
| 82 | cj('#status_id').val(participantStatus); |
| 83 | } |
| 84 | |
| 85 | if (!onlyStatusUpdate) { |
| 86 | balanceAmt = formatMoney(balanceAmt, 2, seperator, thousandMarker); |
| 87 | cj('#balance-fee').text(symbol+" "+balanceAmt); |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | CRM.$(function($) { |
| 92 | var updatedFeeUnFormatted = $('#pricevalue').text(); |
| 93 | var updatedAmt = parseFloat(updatedFeeUnFormatted.replace(/[^0-9-.]/g, '')); |
| 94 | |
| 95 | populatebalanceFee(updatedAmt, true); |
| 96 | }); |
| 97 | |
| 98 | {/literal} |
| 99 | </script> |
| 100 | <h3>Change Registration Selections</h3> |
| 101 | |
| 102 | <div class="crm-block crm-form-block crm-payment-form-block"> |
| 103 | <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> |
| 104 | {if !$email} |
| 105 | <div class="messages status no-popup"> |
| 106 | <i class="crm-i fa-info-circle"></i> {ts}You will not be able to send an automatic email receipt for this payment because there is no email address recorded for this contact. If you want a receipt to be sent when this payment is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the payment.{/ts} |
| 107 | </div> |
| 108 | {/if} |
| 109 | <table class="form-layout"> |
| 110 | <tr> |
| 111 | <td class="font-size12pt label"><strong>{ts}Participant{/ts}</strong></td><td class="font-size12pt"><strong>{$displayName}</strong></td> |
| 112 | </tr> |
| 113 | <tr> |
| 114 | <td class='label'>{ts}Event{/ts}</td><td>{$eventName}</td> |
| 115 | </tr> |
| 116 | <tr class="crm-participant-form-block-status_id"> |
| 117 | <td class="label">{$form.status_id.label}</td> |
| 118 | <td>{$form.status_id.html}</td> |
| 119 | </tr> |
| 120 | {if $lineItem} |
| 121 | <tr class="crm-event-eventfees-form-block-line_items"> |
| 122 | <td class="label">{ts}Current Selections{/ts}</td> |
| 123 | <td>{include file="CRM/Price/Page/LineItem.tpl" context="Event"}</td> |
| 124 | </tr> |
| 125 | {/if} |
| 126 | </table> |
| 127 | |
| 128 | {if $priceSet.fields} |
| 129 | <fieldset id="priceset" class="crm-group priceset-group"> |
| 130 | <table class='form-layout'> |
| 131 | <tr class="crm-event-eventfees-form-block-price_set_amount"> |
| 132 | <td class="label" style="padding-top: 10px;">{$form.amount.label}</td> |
| 133 | <td class="view-value"><table class="form-layout">{include file="CRM/Price/Form/PriceSet.tpl" extends="Event" noCalcValueDisplay=0 context="participant"}</table></td> |
| 134 | </tr> |
| 135 | {if $paymentInfo} |
| 136 | <tr><td></td><td> |
| 137 | <div class='crm-section'> |
| 138 | <div class='label'>{ts}Updated Fee(s){/ts}</div><div id="pricevalue" class='content updated-fee'></div> |
| 139 | <div class='label'>{ts}Total Paid{/ts}</div> |
| 140 | <div class='content'> |
| 141 | {$paymentInfo.paid|crmMoney}<br/> |
| 142 | <a class="crm-hover-button action-item crm-popup medium-popup" href='{crmURL p="civicrm/payment" q="view=transaction&action=browse&cid=`$contactId`&id=`$paymentInfo.id`&component=`$paymentInfo.component`&context=transaction"}'><i class="crm-i fa-list-alt"></i> {ts}view payments{/ts}</a> |
| 143 | </div> |
| 144 | <div class='label'><strong>{ts}Balance Owed{/ts}</strong></div><div class='content'><strong id='balance-fee'></strong></div> |
| 145 | </div> |
| 146 | {include file='CRM/Price/Form/Calculate.tpl' currencySymbol=$currencySymbol noCalcValueDisplay=1 displayOveride='true'} |
| 147 | {/if} |
| 148 | </table> |
| 149 | </fieldset> |
| 150 | {/if} |
| 151 | {if $email} |
| 152 | <fieldset id="email-receipt"><legend>{ts}Participant Confirmation{/ts}</legend> |
| 153 | <table class="form-layout" style="width:auto;"> |
| 154 | <tr class="crm-event-eventfees-form-block-send_receipt"> |
| 155 | <td class="label">{ts}Send Confirmation{/ts}</td> |
| 156 | <td>{$form.send_receipt.html}<br> |
| 157 | <span class="description">{ts 1=$email}Automatically email a confirmation to %1?{/ts}</span> |
| 158 | </td> |
| 159 | </tr> |
| 160 | <tr id="from-email" class="crm-event-eventfees-form-block-from_email_address"> |
| 161 | <td class="label">{$form.from_email_address.label}</td> |
| 162 | <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin}</td> |
| 163 | </tr> |
| 164 | <tr id='notice' class="crm-event-eventfees-form-block-receipt_text"> |
| 165 | <td class="label">{$form.receipt_text.label}</td> |
| 166 | <td><span class="description"> |
| 167 | {ts}Enter a message you want included at the beginning of the confirmation email. EXAMPLE: 'We have made the changes you requested to your registration.'{/ts} |
| 168 | </span><br /> |
| 169 | {$form.receipt_text.html|crmAddClass:huge} |
| 170 | </td> |
| 171 | </tr> |
| 172 | </table> |
| 173 | </fieldset> |
| 174 | {/if} |
| 175 | <fieldset> |
| 176 | <table class="form-layout"> |
| 177 | <tr class="crm-participant-form-block-note"> |
| 178 | <td class="label">{$form.note.label}</td><td>{$form.note.html}</td> |
| 179 | </tr> |
| 180 | </table> |
| 181 | </fieldset> |
| 182 | <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> |
| 183 | </div> |
| 184 | {if $email} |
| 185 | {include file="CRM/common/showHideByFieldValue.tpl" |
| 186 | trigger_field_id ="send_receipt" |
| 187 | trigger_value ="" |
| 188 | target_element_id ="notice" |
| 189 | target_element_type ="table-row" |
| 190 | field_type ="radio" |
| 191 | invert = 0 |
| 192 | } |
| 193 | {include file="CRM/common/showHideByFieldValue.tpl" |
| 194 | trigger_field_id ="send_receipt" |
| 195 | trigger_value ="" |
| 196 | target_element_id ="from-email" |
| 197 | target_element_type ="table-row" |
| 198 | field_type ="radio" |
| 199 | invert = 0 |
| 200 | } |
| 201 | {/if} |
| 202 | {literal} |
| 203 | <script type='text/javascript'> |
| 204 | CRM.$(function($) { |
| 205 | var $form = $('form.{/literal}{$form.formClass}{literal}'); |
| 206 | cj('.total_amount-section').remove(); |
| 207 | |
| 208 | cj($form).submit(function(e) { |
| 209 | var partiallyPaid = {/literal}{$partiallyPaid}{literal}; |
| 210 | var pendingRefund = {/literal}{$pendingRefund}{literal}; |
| 211 | var statusId = cj('#status_id').val(); |
| 212 | var statusLabel = cj('#status_id option:selected').text(); |
| 213 | var balanceFee = cj('#balance-fee').text(); |
| 214 | |
| 215 | // fee actually paid |
| 216 | var feePaid = {/literal}{$feePaid}{literal}; |
| 217 | |
| 218 | balanceFee = parseFloat(balanceFee.replace(/[^0-9-.]/g, '')); |
| 219 | |
| 220 | if ((balanceFee > 0 && feePaid != 0) && statusId != partiallyPaid) { |
| 221 | var result = confirm('Balance is owing for the updated selections. Expected participant status is \'Partially paid\'. Are you sure you want to set the participant status to ' + statusLabel + ' ? Click OK to continue, Cancel to change your entries.'); |
| 222 | if (result == false) { |
| 223 | e.preventDefault(); |
| 224 | } |
| 225 | } |
| 226 | else if ((balanceFee < 0 && feePaid != 0) && statusId != pendingRefund) { |
| 227 | var result = confirm('Balance is overpaid for the updated selections. Expected participant status is \'Pending refund\'. Are you sure you want to set the participant status to ' + statusLabel + ' ? Click OK to continue, Cancel to change your entries'); |
| 228 | if (result == false) { |
| 229 | e.preventDefault(); |
| 230 | } |
| 231 | } |
| 232 | }); |
| 233 | }); |
| 234 | </script> |
| 235 | {/literal} |