membership.js 7.65 KiB
var AnnualContributionAmount = null;
var ToPayAmount = null;
var otherAmountField;
var Syndicate;
var SyndicateId;
var membershipType;
var Frequency;
var Frequencies;
var FrequencySelector;
var MembershipStartDate;
var membershipEndDate;
const cartable_pick_membership_amount = function(){
    var SalarySelect = CRM.$('#cartable-membership-salary-select');
    AnnualContributionAmount = SalarySelect.val();
    // TODO: calculate effective months to be paid
    MonthlyContributionAmount = Math.round(AnnualContributionAmount/0.12)/100;
    var FrequencyControl = CRM.$('.cartable-membership-frequency-selector input[type=radio]:checked');
    var frequency_name = FrequencyControl.val();
    var AnnualTaxFreeAmount = cartable_fiscal_deducted(AnnualContributionAmount);
    var MonthlyTaxFreeAmount = cartable_fiscal_deducted(MonthlyContributionAmount);
    CRM.$('.cartable-membership-frequency-selector .year-amount').text( AnnualContributionAmount+cartable.Membership.currency.symbol );
    CRM.$('.cartable-membership-frequency-selector .month-amount').text( MonthlyContributionAmount+cartable.Membership.currency.symbol );
    CRM.$('.cartable-membership-frequency-selector .year-free-amount').text( AnnualTaxFreeAmount+cartable.Membership.currency.symbol );
    CRM.$('.cartable-membership-frequency-selector .month-free-amount').text( MonthlyTaxFreeAmount+cartable.Membership.currency.symbol );
    CRM.$('.cartable-membership-frequency-selector .end-date').text( membershipEndDate );
    CRM.$('.cartable-membership-frequency-selector .start-date').text( MembershipStartDate );
    if(!frequency_name || typeof cartable.Membership.FrequenciesData[frequency_name]==='undefined'){
        return;
    Frequency = cartable.Membership.FrequenciesData[frequency_name];
    if(Frequency.is_recur && Frequency.unit){
        CRM.$('#is_recur').prop('checked', 'checked').trigger('change');
        CRM.$('#frequency_unit').val(Frequency.unit);
    else{
        CRM.$('#is_recur').removeProp('checked').trigger('change');
        CRM.$('#frequency_unit').val('');
    ToPayAmount = AnnualContributionAmount;
    if(Frequency.unit == 'month'){
        ToPayAmount = MonthlyContributionAmount;
    otherAmountField.val(ToPayAmount);
function cartable_fiscal_deducted(amount){
    return Math.round(amount*(100-cartable.Membership.membershipTaxDeduction))/100;
function cartable_membership_text_replace(string){
    return string
        .replace('[year_amount]', '<span class="amount year-amount"></span>')
        .replace('[month_amount]', '<span class="amount month-amount"></span>')
        .replace('[year_free_amount]', '<span class="tax-free-amount year-free-amount"></span>')
        .replace('[month_free_amount]', '<span class="tax-free-amount month-free-amount"></span>')
        .replace('[start_date]', '<time class="membership-date start-date"></time>')
        .replace('[end_date]', '<time class="membership-date end-date"></time>')
function cartable_format_date(datestring){
    return CRM.utils.formatDate(datestring, cartable.Membership.i18n.dateformat);
const cartable_reset_membership_amount = function(){
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
CRM.$('#cartable-membership-selector').remove(); var MembershipSelector = CRM.$('<div>') .attr('id', 'cartable-membership-selector') ; var chosenSyndicateButton = CRM.$('.cartable-syndicate.active'); SyndicateId = chosenSyndicateButton.attr('data-id'); Syndicate = cartable.Syndicates.Syndicates[SyndicateId]; membershipType = cartable.Syndicates.IndexedMembershipTypes[SyndicateId]; MembershipStartDate = cartable_format_date(membershipType.start_day); membershipEndDate = cartable_format_date(membershipType.end_day); MembershipSelector.append( CRM.$('<h3>') .addClass('cartable-membership-title') .text('My contribution') ); MembershipSelector.append( CRM.$('<span>') .addClass('cartable-membership-chosen-syndicate-name') .text(chosenSyndicateButton.attr('data-name')) ); MembershipSelector.append( CRM.$('<h3>') .addClass('cartable-membership-salary-title') .text('Your monthly salary, tax free') ); var SalarySelect = CRM.$('<select>') .attr('id', 'cartable-membership-salary-select') .addClass('cartable-membership-salary-select') .on('change', cartable_pick_membership_amount) ; var membershipRates = cartable.Membership.membershipRates; if(Syndicate.MembershipRates !== undefined && Object.keys(Syndicate.MembershipRates).length){ membershipRates = Syndicate.MembershipRates; } for(var Salary in membershipRates){ SalarySelect.append( CRM.$('<option>') .attr('value', membershipRates[Salary]) .text(Salary+cartable.Membership.currency.symbol) ); } MembershipSelector.append(SalarySelect); FrequencySelector = CRM.$('<div>') .attr('id', 'cartable-membership-frequency-selector') ; MembershipSelector.append(FrequencySelector); Frequencies = Object.keys(cartable.Membership.FrequenciesData); if(Syndicate.PaymentFrequency !== undefined && Object.keys(Syndicate.PaymentFrequency).length){ Frequencies = Syndicate.PaymentFrequency; } Frequencies.forEach((frequency) => { FrequencyData = cartable.Membership.FrequenciesData[frequency]; var FrequencyItem = CRM.$('<div>') .addClass('cartable-membership-frequency-selector frequency-'+frequency) .append([ CRM.$('<input>') .attr('name', 'cartable-membership-frequency') .attr('value', frequency) .attr('data-frequency-unit', frequency) .attr('type', 'radio') .attr('id', 'cartable-membership-frequency-'+frequency)
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
.on('change click blur', cartable_pick_membership_amount) , CRM.$('<label>') .attr('for', 'cartable-membership-frequency-'+frequency) .addClass('frequency-label') .append( CRM.$('<div>') .addClass('frequency-title') .html(cartable_membership_text_replace(FrequencyData.title)) , CRM.$('<div>') .addClass('frequency-description') .html(cartable_membership_text_replace(FrequencyData.description)) , CRM.$('<span>') .addClass('frequency-amount') .html(cartable_membership_text_replace(FrequencyData.amount_label)) , FrequencyData.amount_help ? CRM.$('<span>') .addClass('frequency-amount-help') .html(cartable_membership_text_replace(FrequencyData.amount_help)) : null , CRM.$('<div>') .addClass('frequency-taxfree') .html(cartable_membership_text_replace(FrequencyData.tax_free_label)) , ) , ]) ; FrequencySelector.append(FrequencyItem); }); CRM.$('#cartable-tab-step-2').prepend(MembershipSelector); cartable_pick_membership_amount(); } jQuery(document).ready(function(){ if(cartable.Membership.otherAmountField !== null){ otherAmountField = CRM.$('#price_'+cartable.Membership.otherAmountField.id); CRM.$('#priceset .membership_amount-content input[type=radio]').on('chosen', cartable_reset_membership_amount); } });