// Definicja kategorii i ich kryteriów const categories = { frekwencja: [ { name: "Frekwencja 95-100%", id: "frekwencja" }, { name: "Brak godzin nieusprawiedliwionych", id: "brak_godzin" }, { name: "Minimum 85% frekwencja", id: "min_85" } ], olimpiady: [ { name: "Etap szkolny", id: "etap_szkolny" }, { name: "Etap rejonowy", id: "etap_rejonowy" }, { name: "Etap wojewódzki", id: "etap_wojewodzki" }, { name: "Etap ogólnopolski", id: "etap_ogolnopolski" } ], konkursy: [ { name: "Udział w konkursach", id: "udzial_konkurs" }, { name: "Wyróżnienie w konkursie", id: "wyroznienie_konkurs" } ], reprezentacja: [ { name: "Reprezentacja indywidualna", id: "reprezentacja_indywidualna" }, { name: "Reprezentacja zespołowa", id: "reprezentacja_zespolowa" }, { name: "Udział w zawodach", id: "udzial_zawody" } ], aktywnosc: [ { name: "Organizacja imprez", id: "organizacja_imprez" }, { name: "Funkcje w klasie", id: "funkcja_klasa" }, { name: "Uroczystości okolicznościowe", id: "uroczystosci" }, { name: "Udział w poczcie sztandarowej", id: "poczta_sztandar" }, { name: "Pomoc nauczycielowi", id: "pomoc_nauczyciel" }, { name: "Wolontariat", id: "wolontariat" } ] }; // Zmienna przechowująca aktualną kategorię let currentCategory = 'frekwencja'; // Funkcja do wczytywania pliku JSON async function fetchJSONFile(filePath) { try { const response = await fetch(filePath); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } return await response.json(); } catch (error) { console.error("Error fetching JSON file:", error); } } // Funkcja do wczytania pliku class.json async function loadClasses() { const classFilePath = '/data/class.json'; const classes = await fetchJSONFile(classFilePath); if (classes) { console.log('Classes loaded:', classes); let section_HTML = ""; // Iterowanie po wszystkich klasach i wczytywanie plików z danymi uczniów for (const classInfo of classes) { const studentsFilePath = '/data/' + classInfo.file_path; const studentsDataFromFile = await fetchJSONFile(studentsFilePath); // Wczytywanie klas do elementu select w html const selectClass = document.getElementById("select-class-select"); if (!section_HTML.includes(classInfo.class)) { const option = document.createElement('option'); option.value = classInfo.class; option.textContent = `Klasa: ${classInfo.class}`; selectClass.appendChild(option); console.log("DODANO KLASE ", classInfo.class, " DO SELECT"); section_HTML += classInfo.class; } if (studentsDataFromFile) { console.log(`Students loaded for class ${classInfo.class}:`, studentsDataFromFile); // Możesz tutaj przechowywać dane uczniów dla poszczególnych klas // Na przykład, dodając je do odpowiedniego obiektu lub tablicy } } } } // Funkcja do wczytania pliku criteria.json async function loadCriteria() { const criteriaFilePath = '/data/criteria.json'; const criteria = await fetchJSONFile(criteriaFilePath); console.log("Criteria loaded:", criteria); // Implementacja dalszego przetwarzania kryteriów, jeśli jest potrzebna } // Dane uczniów (przykładowe, powinny być ładowane z plików JSON) const studentsData = [ { name: "Jan Kowalski", behavior: {} }, { name: "Anna Nowak", behavior: {} }, { name: "Piotr Wiśniewski", behavior: {} }, { name: "Katarzyna Zielińska", behavior: {} } ]; let currentDay = 0; const baseDate = new Date(); // Funkcja do przełączania głównych zakładek function showTab(tabName) { // Ukryj wszystkie główne taby const tabs = document.querySelectorAll('.tab'); tabs.forEach(tab => tab.classList.remove('active')); // Pokaż wybrany tab const selectedTab = document.getElementById(tabName); if (selectedTab) { selectedTab.classList.add('active'); } if (tabName === 'criteria') { loadDayData(); } else if (tabName === 'points') { calculateStats(); } } // Funkcja do przełączania kategorii w tabeli uczniów function showInnerTab(category) { currentCategory = category; // Generowanie tabeli na podstawie wybranej kategorii generateTable(category); // Podkreślenie aktywnego przycisku const buttons = document.querySelectorAll('.category-buttons button'); buttons.forEach(button => button.classList.remove('active')); const activeButton = document.querySelector(`.category-buttons button[data-category="${category}"]`); if (activeButton) { activeButton.classList.add('active'); } } // Funkcja, aby ustawić domyślną kategorię i zakładkę document.addEventListener("DOMContentLoaded", function() { showInnerTab('frekwencja'); // Pokaż domyślnie zakładkę Frekwencja // Ustawienie daty na dziś document.getElementById('current-date').innerText = baseDate.toLocaleDateString(); // Uruchomienie wczytywania klas i kryteriów loadClasses(); loadCriteria(); }); // Funkcja do zmiany dnia function changeDay(direction) { saveDayData(); currentDay += direction; const newDate = new Date(baseDate); newDate.setDate(baseDate.getDate() + currentDay); document.getElementById('current-date').innerText = newDate.toLocaleDateString(); loadDayData(); } // Funkcja do ładowania danych dnia function loadDayData() { // Wczytaj dane dla aktualnego dnia, jeśli istnieją // Możesz tu zaimplementować dodatkową logikę, jeśli potrzebujesz calculateStats(); } // Funkcja do zapisywania danych dnia function saveDayData() { studentsData.forEach(student => { const studentId = student.name.replace(/ /g, '-'); const behavior = student.behavior[`day${currentDay}`] || {}; const categoryColumns = categories[currentCategory]; categoryColumns.forEach(column => { behavior[column.id] = document.getElementById(`${column.id}-${studentId}`).checked; }); student.behavior[`day${currentDay}`] = behavior; }); } // Funkcja do obliczania statystyk function calculateStats() { const frekwencjaPoints = parseInt(document.getElementById('frekwencja-punkty').value) || 0; const brakGodzinPoints = parseInt(document.getElementById('brak-godzin-punkty').value) || 0; const min85Points = parseInt(document.getElementById('min-85-punkty').value) || 0; const etapSzkolnyPoints = parseInt(document.getElementById('etap-szkolny-punkty')?.value) || 5; const etapRejonowyPoints = parseInt(document.getElementById('etap-rejonowy-punkty')?.value) || 10; const etapWojewodzkiPoints = parseInt(document.getElementById('etap-wojewodzki-punkty')?.value) || 15; const etapOgolnopolskiPoints = parseInt(document.getElementById('etap-ogolnopolski-punkty')?.value) || 20; const udzialKonkursPoints = parseInt(document.getElementById('udzial-konkurs-punkty')?.value) || 5; const wyroznienieKonkursPoints = parseInt(document.getElementById('wyroznienie-konkurs-punkty')?.value) || 10; const reprezentacjaIndPoints = parseInt(document.getElementById('reprezentacja-indywidualna-punkty')?.value) || 5; const reprezentacjaZesPoints = parseInt(document.getElementById('reprezentacja-zespolowa-punkty')?.value) || 10; const udzialZawodyPoints = parseInt(document.getElementById('udzial-zawody-punkty')?.value) || 15; const organizacjaImprezPoints = parseInt(document.getElementById('organizacja-imprez-punkty')?.value) || 10; const funkcjaKlasyPoints = parseInt(document.getElementById('funkcja-klasa-punkty')?.value) || 10; const uroczystosciPoints = parseInt(document.getElementById('uroczystosci-punkty')?.value) || 10; const pocztaSztandarPoints = parseInt(document.getElementById('poczta-sztandar-punkty')?.value) || 20; const pomocNauczycielaPoints = parseInt(document.getElementById('pomoc-nauczyciel-punkty')?.value) || 10; const wolontariatPoints = parseInt(document.getElementById('wolontariat-punkty')?.value) || 10; let stats = ''; studentsData.forEach(student => { let totalPoints = 0; Object.keys(student.behavior).forEach(day => { const behavior = student.behavior[day]; let dayPoints = 0; // Startowa liczba punktów if (behavior.frekwencja) dayPoints += frekwencjaPoints; if (behavior.brak_godzin) dayPoints += brakGodzinPoints; if (behavior.min_85) dayPoints += min85Points; if (behavior.etap_szkolny) dayPoints += etapSzkolnyPoints; if (behavior.etap_rejonowy) dayPoints += etapRejonowyPoints; if (behavior.etap_wojewodzki) dayPoints += etapWojewodzkiPoints; if (behavior.etap_ogolnopolski) dayPoints += etapOgolnopolskiPoints; if (behavior.udzial_konkurs) dayPoints += udzialKonkursPoints; if (behavior.wyroznienie_konkurs) dayPoints += wyroznienieKonkursPoints; if (behavior.reprezentacja_indywidualna) dayPoints += reprezentacjaIndPoints; if (behavior.reprezentacja_zespolowa) dayPoints += reprezentacjaZesPoints; if (behavior.udzial_zawody) dayPoints += udzialZawodyPoints; if (behavior.organizacja_imprez) dayPoints += organizacjaImprezPoints; if (behavior.funkcja_klasa) dayPoints += funkcjaKlasyPoints; if (behavior.uroczystosci) dayPoints += uroczystosciPoints; if (behavior.poczta_sztandar) dayPoints += pocztaSztandarPoints; if (behavior.pomoc_nauczyciel) dayPoints += pomocNauczycielaPoints; if (behavior.wolontariat) dayPoints += wolontariatPoints; totalPoints += dayPoints; }); stats += `${student.name}: ${totalPoints} punktów (${getGrade(totalPoints)})\n`; }); document.getElementById('stats-output').innerText = stats; } // Funkcja do przypisywania ocen na podstawie punktów function getGrade(points) { if (points >= 250) return "Wzorowe"; if (points >= 180) return "Bardzo dobre"; if (points >= 100) return "Dobre"; if (points >= 50) return "Poprawne"; if (points >= 0) return "Nieodpowiednie"; return "Naganne"; } // Funkcja do generowania tabeli uczniów na podstawie wybranej kategorii function generateTable(category) { const table = document.getElementById('student-table'); const thead = table.querySelector('thead tr'); const tbody = table.querySelector('tbody'); // Clear existing headers and body thead.innerHTML = ''; tbody.innerHTML = ''; // Add 'Imię i Nazwisko' header const thName = document.createElement('th'); thName.textContent = "Imię i Nazwisko"; thead.appendChild(thName); // Get columns for the category const categoryColumns = categories[category]; // Add headers for category categoryColumns.forEach(column => { const th = document.createElement('th'); th.textContent = column.name; thead.appendChild(th); }); // Generate rows studentsData.forEach(student => { const row = document.createElement('tr'); // Name cell const tdName = document.createElement('td'); tdName.textContent = student.name; row.appendChild(tdName); // Checkbox cells categoryColumns.forEach(column => { const td = document.createElement('td'); const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.id = `${column.id}-${student.name.replace(/ /g, '-')}`; checkbox.onchange = calculateStats; // Ustawienie stanu checkboxa na podstawie zapisanych danych if (student.behavior[`day${currentDay}`] && student.behavior[`day${currentDay}`][column.id]) { checkbox.checked = student.behavior[`day${currentDay}`][column.id]; } td.appendChild(checkbox); row.appendChild(td); }); tbody.appendChild(row); }); }