Facilitator Log FullΔPrima Nota Event LogDate / TimeLocation- Select -Plant 3, BowdenSt. Nicholas Church Hall, 42 Greenhill Rd, WayvilleHarry Wierda ReserveKlemzig Community HallGreenacres LibraryLakeside Cafe, OakdenOtherOther LocationFacilitator- Select -Roman SherstobitovNina IouguinaMaryannYulia KirkinaSofia DeMond-IouguinaIlya DeGrootDenis ZarubinAdditional FacilitatorEvent Type Workshop Series One-off Workshop Choir Session Mafia Session Dance SessionWorkshop Series DataWorkshop Series Name- Select -Crafting circle with MaryannData StorytellingChristmas Ball PaintingSession number in seriesExpected number of participantsActual number of participantsNew participantsReturning participantsOne-off Workshop DataFor the One Time EventExpected number of participantsActual number of participantsFirst-time participants (new to Prima Nota)Known participants (familiar with Prima Nota)Completion rate (stayed until the end)Choir Session LogFor all Prima Nota choirsChoir Name- Select -Prima VocePrima DonnaMixed ChoirExpected number of participantsActual number of participantsNew participantsReturning participants jQuery(document).ready(function($) { console.log('🎵 Choir: Waiting for conditional logic...'); var calculati // Отслеживание изменений в DOM (когда появляются поля) var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList' || mutation.type === 'attributes') { checkAndInitChoir(); } }); }); // Начинаем отслеживать изменения в форме var formC'.fluentform'); if (formContainer) { observer.observe(formContainer, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); } function checkAndInitChoir() { // Ищем видимые поля хора var choirFields = $('input[name*="choir"]:visible, input[name*="participant"][name*="choir"]:visible'); var expectedField = $('input[name*="expected"]:visible').filter(function() { return $(this).attr('name').toLowerCase().includes('choir'); }); if (choirFields.length >= 4 && !calculationsActive && expectedField.length > 0) { console.log('✅ Choir fields are now visible! Initializing calculations...'); calculati initChoirCalculations(); } } function initChoirCalculations() { // Находим все поля хора var fields = { expected: $('input[name*="expected"]:visible').filter('[name*="choir"]'), actual: $('input[name*="actual"]:visible').filter('[name*="choir"]'), new: $('input[name*="new"]:visible').filter('[name*="choir"]'), returning: $('input[name*="returning"]:visible').filter('[name*="choir"]'), attendanceRate: $('input[name*="attendance"]:visible').filter('[name*="choir"]'), retentionRate: $('input[name*="retention"]:visible').filter('[name*="choir"]'), ratio: $('input[name*="ratio"]:visible').filter('[name*="choir"]') }; // Логируем найденные поля Object.keys(fields).forEach(function(key) { console.log(key + ':', fields[key].attr('name')); }); function calculateChoirMetrics() { var expected = parseFloat(fields.expected.val()) || 0; var actual = parseFloat(fields.actual.val()) || 0; var newP = parseFloat(fields.new.val()) || 0; var returning = parseFloat(fields.returning.val()) || 0; console.log('📊 Calculating:', {expected, actual, newP, returning}); // Attendance Rate if (expected > 0) { var attendanceRate = ((actual / expected) * 100).toFixed(1); fields.attendanceRate.val(attendanceRate); } // Retention Rate if (actual > 0) { var retenti / actual) * 100).toFixed(1); fields.retentionRate.val(retentionRate); } // Ratio if (returning > 0) { var ratio = (newP / returning).toFixed(2); fields.ratio.val("1:" + ratio); } else if (newP > 0) { fields.ratio.val("All new"); } else { fields.ratio.val("No data"); } console.log('✅ Choir calculations completed'); } // Делаем calculated поля read-only fields.attendanceRate.add(fields.retentionRate).add(fields.ratio).attr('readonly', true); // Привязываем события fields.expected.add(fields.actual).add(fields.new).add(fields.returning) .on('input keyup change blur', calculateChoirMetrics); // Первоначальный расчет calculateChoirMetrics(); console.log('🎵 Choir calculations initialized successfully!'); } // Также проверяем периодически (запасной вариант) var checkInterval = setInterval(function() { if (!calculationsActive) { checkAndInitChoir(); } else { clearInterval(checkInterval); } }, 1000); // Очистка через 30 секунд setTimeout(function() { clearInterval(checkInterval); if (observer) observer.disconnect(); }, 30000); }); Mafia Session DataVolkHauz Game Session LogExpected number of participantsActual number of participantsNew participantsReturning participantsNew Family UnitsReturning Family Units jQuery(document).ready(function($) { function calculateMafiaMetrics() { var expected = parseFloat($('input[name="expected_participants_mafia"]').val()) || 0; var actual = parseFloat($('input[name="actual_participants_mafia"]').val()) || 0; var newParticipants = parseFloat($('input[name="new_participants_mafia"]').val()) || 0; var returningParticipants = parseFloat($('input[name="returning_participants_mafia"]').val()) || 0; var newFamilies = parseFloat($('input[name="new_family_units"]').val()) || 0; var returningFamilies = parseFloat($('input[name="returning_family_units"]').val()) || 0; var totalFamilies = newFamilies + returningFamilies; // Attendance Rate if (expected > 0) { var attendanceRate = ((actual / expected) * 100).toFixed(1); $('input[name="mafia_attendance_rate"]').val(attendanceRate); } else { $('input[name="mafia_attendance_rate"]').val('0'); } // Participant Retention Rate if (actual > 0) { var participantRetention = ((returningParticipants / actual) * 100).toFixed(1); $('input[name="participant_retention_rate"]').val(participantRetention); } else { $('input[name="participant_retention_rate"]').val('0'); } // Family Unit Retention Rate if (totalFamilies > 0) { var familyRetention = ((returningFamilies / totalFamilies) * 100).toFixed(1); $('input[name="family_retention_rate"]').val(familyRetention); // Average Family Size var avgFamilySize = (actual / totalFamilies).toFixed(1); $('input[name="average_family_size"]').val(avgFamilySize); } else { $('input[name="family_retention_rate"]').val('0'); $('input[name="average_family_size"]').val('0'); } // New vs Returning Ratio if (returningParticipants > 0) { var ratio = (newParticipants / returningParticipants).toFixed(2); $('input[name="new_returning_ratio"]').val("1:" + ratio); } else if (newParticipants > 0) { $('input[name="new_returning_ratio"]').val("All new"); } else { $('input[name="new_returning_ratio"]').val("No data"); } // Data Validation var participantCheck = (newParticipants + returningParticipants === actual); var familyCheck = (totalFamilies > 0 && actual > 0); var validati; if (participantCheck && familyCheck) { validati; } else { validati; if (!participantCheck) validationStatus += "Participants "; if (!familyCheck) validationStatus += "Families "; } $('input[name="mafia_validation_check"]').val(validationStatus); } // Делаем calculated поля read-only $('input[name="mafia_attendance_rate"], input[name="participant_retention_rate"], input[name="family_retention_rate"], input[name="average_family_size"], input[name="new_returning_ratio"], input[name="mafia_validation_check"]').attr('readonly', true); // Обновление при изменении полей мафии $('input[name="expected_participants_mafia"], input[name="actual_participants_mafia"], input[name="new_participants_mafia"], input[name="returning_participants_mafia"], input[name="new_family_units"], input[name="returning_family_units"]').on('input keyup change', calculateMafiaMetrics); // Первоначальный расчет calculateMafiaMetrics(); }); Dance SessionZabava Session LogExpected number of participantsActual number of participantsNew participantsReturning participantsDemographics & EngagementAge Distribution (Number of participants):Ages 0–11Ages 12–17Ages 18-34Ages 35-54Ages 55-64Ages 65+Gender Distribution (Number of participants):WomenMenOtherCultural backgrounds represented Russian-speaking families Ukrainian families Australian-born participants Other Slavic backgrounds Mixed cultural families Other (please specify in notes)Please specify otherEngagement Observations High focus and attention Enthusiastic participation Good collaboration between participants Active asking questions Positive energy in the room Some participants seemed distracted Language barriers observedParticipant feedback collected Yes NoAdditional demographic notesSubmit Log