Przejdź do treści
Intum

Plan Zajęć - aplikacja do planowania zajęć dodatkowych

Aktualizacja: 4 min czytania

Dane aplikacji

Aplikacja korzysta z modułów Noe (bazy słownikowe Noe::Db) oraz modułu Kalendarz (Calendar::Event). Wydarzenia są jednorazowe i trzymają snapshot danych w polu fields.

Bazy słownikowe (Noe::Db)

Kody baz (code w /noe/dbs/:code/records.json):

Code Nazwa Pola
pz_classes Klasy name
pz_rooms Sale name
pz_teachers Nauczyciele name, hourly_rate
pz_students Uczniowie name, class_name
pz_types Typy zajęć name, color
pz_bells Dzwonki lesson_no, label, start, end

API rekordów (każda baza działa tak samo):

GET    /noe/dbs/pz_teachers/records.json
POST   /noe/dbs/pz_teachers/records.json     { "record": { "data": { "name": "...", "hourly_rate": 80 } } }
PATCH  /noe/dbs/pz_teachers/records/:id.json { "record": { "data": { ... } } }
DELETE /noe/dbs/pz_teachers/records/:id.json

Wydarzenia w kalendarzu

Kalendarz nazywa się Zajęcia dodatkowe. Wydarzenia tworzone są standardowym API kalendarza:

POST /calendar/events.json
Content-Type: application/json

{
  "event": {
    "calendar_id": 42,
    "name": "Logopedia - Jan Kowalski - 3A",
    "start_time": "2026-06-10T13:30:00+02:00",
    "end_time": "2026-06-10T14:15:00+02:00",
    "fields": {
      "teacher_name": "Jan Kowalski",
      "class_name": "3A",
      "room_name": "Sala 12",
      "student_name": "Anna Nowak",
      "support_type": "Logopedia",
      "hourly_rate": 80,
      "cost": 60.0,
      "lesson_no": 4
    }
  }
}

Pole fields to snapshot - pełne nazwy i kwoty, nie ID. Dzięki temu:

  • raport działa nawet po skasowaniu nauczyciela ze słownika,
  • zmiana stawki nauczyciela nie modyfikuje już istniejących wydarzeń (zostają z historyczną stawką),
  • wydarzenie jest samowystarczalne - można je edytować w /calendar i raport to uwzględni.

Listowanie wydarzeń na raport

GET /calendar/events.json?calendar_id=42&from=2026-06-01&to=2026-06-30&per_page=100&page=1

Aplikacja paginuje strony po 100, łączy je i agreguje po polach teacher_name, support_type, class_name w pamięci klienta - bez osobnego endpointu raportowego.

Konfiguracja

Kalendarz Zajęcia dodatkowe i wszystkie sześć baz słownikowych aplikacja zakłada sama przy pierwszym uruchomieniu (view = setup). Po założeniu przechodzi do widoku planu (view = app).