Sunday, 29 July 2018

calculate fee based on membership date

Players register at our events. I type their name in (#P1, #P2, etc.) and the function getCCCRexpire(ele) looks up their club expiration date. I want to modify function calcEntryFee to calculate the entrance fee. If the players expiration date is later than today, the fee (#E1, #E2, etc.) is $3. If the players expiration date is today or earlier, the fee is $5.

The problem is that the non-blank players with memberships expiring today or earlier don't get picked up. For example, NAME = "Jones, John" MEMBERSHIP_EXPIRES = "2017.01.12" should populate the fee with "$5" but it just leaves it blank.

A second problem is the unnecessary complexity of the function calcEntryFee. I've never seen anything this advanced or frankly obfuscated. I would sure be grateful in someone could rewrite this function and make it work correctly. I am clearly in over my head. I'm not even close to a solution.

HTML

<div>
<div><input type = "text" id = "P1" onblur="calcEntryFee(this);" name = "N1" /></div>
<div><input type = "text" onblur="getCCCRexpire()" name = "cccr_exp" id = "CCCR_X1" /> </div>
<div><input type = "text" name = "ef-fee" id = "E1" /></div>
</div>

<div>
<div><input type = "text" id = "P2" onblur="calcEntryFee(this);" name = "N2" /></div>
<div><input type = "text" onblur="getCCCRexpire()" name = "cccr_exp" id = "CCCR_X2" /> </div>
<div><input type = "text" name = "ef-fee" id = "E2" /></div>
</div>

JS

<script>
function calcEntryFee( elem ) {
var idx, member, exDate, today, fee;

elem = elem || {};
if ( /^[PEMX](\d+)$/.test( elem.id ) ) {
    idx = RegExp.$1;
} else {
    return false;
}

member = getMemberData( jQuery( '#P' + idx ).val() );
mmfee = parseFloat( jQuery( '#M' + idx ).val() );
exDate = moment( member.cccrEXP, 'YYYY.MM.DD' );
today = moment();
fee = '';

if ( !member ) {fee = 0; } 
//if ( (exDate.isBefore( today ) || exDate == 0) && P1 > "") {fee = 5; } // my attempt to solve the issue. 
if ( (exDate.isBefore( today ) || !member) ) {fee = 5; } 
if ( exDate.isSameOrAfter( today ) ) {  fee = 3; } 
if ( member.cccrEXP == "" && mmfee > 0 ) {  fee = 0; }

// Updates the entry fee input value.
jQuery( '#E' + idx ).val( fee );

return fee;
}

</script>

<script async> // Lookup CCCR expiration date 

function getCCCRexpire(ele) {
var i = null;
for (i = 0; cccr_mems.length > i; i++) {
if (cccr_mems[i].Name == ele.value) {
return cccr_mems[i].cccrEXP;

}
}
return;
}


for (let i = 0; i <= 48; i++) {
$("#P" + i).on("blur", function(){
$("#CCCR_X" +i).val(getCCCRexpire(this));
});
}

</script>



from calculate fee based on membership date

No comments:

Post a Comment