Update GradeCard, improve styles

This commit is contained in:
adam-skowronek 2023-01-13 03:59:54 +01:00
parent 3d389b606f
commit 7a4f3128ef
8 changed files with 1187 additions and 283 deletions

View File

@ -19,7 +19,7 @@ const TopBar = ({
color: string color: string
}) => { }) => {
const linkClass = ({ isActive }: { isActive: boolean }) => const linkClass = ({ isActive }: { isActive: boolean }) =>
isActive ? 'underline font-bold' : '' isActive ? 'underline font-bold' : 'hover:text-gray-600 '
const [yearGroupId, setYearGroupId] = useLocalStorageState('yearGroupId', { const [yearGroupId, setYearGroupId] = useLocalStorageState('yearGroupId', {
defaultValue: 0, defaultValue: 0,

View File

@ -0,0 +1,181 @@
const options = [
[
'brak prezentacji; niezgłoszona nieobecność członków zespołu',
'brak demo systemu; brakuje jednej z wymaganych treści',
'jedna z treści niedostatecznie zaprezentowana',
'wszystkie treści zaprezentowane poprawnie',
],
[
'brak prezentacji; prezentacja zakończona przez komisję (z powodu innego niż przekroczenie czasu)',
'zespół prezentował w sposób nieprofesjonalny, prezentacja była nieczytelna lub trwała powyżej 20 minut; język prezentacji był nieadekwatny/niezrozumiały; brak płynności prezentacji',
'prezentacja zgodna ze sztuką; 12-16 minut; demonstracja systemu stanowi istotną część prezentacji',
'prezentacja zgodna ze sztuką, angażująca i dostosowana do odbiorców, forma prezentacji dopasowana do prezentowanych treści',
],
[
'brak demonstracji',
'demonstracja niespójna; prezentacja kodu niezbędna w celu wyjaśnienia jej działania; brak przygotowania odpowiednich danych do prezentacji',
'demonstracja poprawna; demonstracja ze środowiska deweloperskiego; brak elastyczności demonstracji (w tym brak możliwości szybkiego przejścia w aplikacji do określonego stanu)',
'demonstracja poprawna ze środowiska zbliżonego do docelowego; odpowiednio przygotowane dane do prezentacji; dobrze określony scenariusz prezentacji; brak zbędnych przestojów w demonstracji;',
],
[
'zespół nie był w stanie udzielić żadnej wiarygodnej odpowiedzi na >1 pytanie',
'zespół nie był wstanie udzielić wiarygodnej odpowiedzi na 1 pytanie',
'odpowiedzi na niektóre pytania były niewyczerpujące, ale zdowalające',
'zespół udzielił wyczerpującej odpowiedzi na wszystkie pytania',
],
[
'brak dokumentu; dokument niezgodny z szablonem',
'dokument nie zawiera niektórych wymaganych informacji; przedstawione informacje są błędne/nieprawdziwe; dokument nie pozwala ocenić czy projekt ma sens i jest realizowalny; zespół nie potrafi uzasadnić przydatności projektu',
'jeden aspekt dokumentu nie jest wystarczająco opisany (np. projekt nie definiuje grupy docelowej/klienta)',
'dokument poprawny',
],
[
'brak dokumentu, dokument niezgodny z szablonem; brak wymagań funkcjonalnych; brak kryteriów akceptacji projektu na oba semestry',
'brak weryfikowalnych kryteriów akceptacji projektu na oba semestry; dokument nie zawiera wszystkich wymaganych informacji; przedstawione informacje są błędne/nieprawdziwe; dokument nie odzwierciedla aktualnego stanu projektu; zadeklarowany zakres projektu jest zbyt mały; kryteria akceptacji są nie weryfikowalne; wskażniki wdrożeniowe są niemierzalne',
'dokument zaakceptowany przez prowadzącego; jeden aspekt dokumentu nie jest wystarczająco opisany; jedno kryterium akceptacji nie jest weryfikowalne; dokument w większości odzwierciedla aktualny stan projektu; zakres prac przewidziany na poszczególne semestry jest adekwatny',
'dokument poprawny; odzwierciedla aktualny stan projektu',
],
[
'brak dokumentacji',
'trywialna dokumentacja nie wnosząca dodatkowej wiedzy o systemie',
'brak dokumentacji, jeśli takie było wymaganie projektowe/dokumentacja tego typu jest zbędna (wymaga uzasadnienia); poprawna dokumentacja nieprzedstawiona klientowi/grupie docelowej',
'poprawnie zredagowana i użyteczna dokumentacja przekazana klientowi/grupie docelowej systemu; dokumentacja w postaci samouczka (np. w grach komputerowych)',
],
[
'brak dokumentacji',
'trywialna dokumentacja nie wnosząca dodatkowej wiedzy o systemie',
'dokumentacja użyteczna, jednak niekompletna (wyjaśnia wszystkich zasobów niezbędnych do rozpoczęcia pracy z projektem)',
'kompletna dokumentacja deweloperska określająca wszystkie zasoby niezbędne do rozpoczęcia pracy nad projektem/jego kontynuacji',
],
[
'brak określenia licencji lub udziału członków zespołu we własności projektu',
'prawa własności określone w sposób niewiążący lub nieadekwatny do projektu',
'poprawnie określone prawa własności i licencja na projekt',
'poprawnie i świadomie określone prawa własności; dołożono starań, aby zapewnić możliwie szeroki dostęp open source (jeśli dotyczy); licencja narzucona przez klienta nie jest krzywdząca dla zespołu',
],
[
'projekt zrealizowano w krótkim czasie poprzedzającym obronę',
'projekt realizowano tylko przed kamieniami milowymi; projekt realizowany niezgodnie z harmonogramem',
'projekt realizowany był przez cały semestr z różną równomiernością; drobne odstępstwa od harmonogramu',
'projekt był realizowany równomiernie przez cały semestr; wszystkie etapy projektu zrealizowane w terminie',
],
[
'tylko jedna osoba w zespole wypracowała liczbę godzin przewidzianą w siatce godzin; w zespole istnieją osoby nie prowadzące prac programistycznych (w II semestrze)',
'przynajmniej jedna osoba w zespole nie wypracowała liczby godzin przewidzianej w siatkach godzin',
'jedna osoba w zespole ma wyraźnie większy wkład w projekt, ale wszyscy spełniają minimalne kryteria; w zespole istnieją osoby nie prowadzące prac programistycznych (w I semestrze)',
'wkład wszystkich członków zespołu jest porównywalny',
],
[
'brak klienta, brak określonej grupy docelowej',
'brak regularnego kontaktu z klientem/grupą docelową',
'projekt realizowany we współpracy z klientem/grupą docelową (minimum 1 spotkanie w miesiącu), klient zaangażowany w testy akceptacyjne/użyteczności',
'klient/grupa docelowa aktywnie zaangażowana w określenie wymagań oraz rozwój oprogramowania; ciągły kontakt z klientem',
],
[
'brak śledzenia zmian w zakresie projektu',
'zakres projektu statyczny; dominują modyfikacje zakresu wynikające z błędów w harmonogramie lub możliwości technicznych; zespół nie aktualizuje dokumentów projektowych',
'zespół próbuje reagować z wyprzedzeniem na zmiany i nowe ryzyka, nawet w przypadku braku akceptacji ze strony klienta/grupy docelowej/prowadzącego',
'zespół elastycznie reaguje na zmiany i nowe ryzyka, w kontakcie z klientem oraz prowadzącym dokonuje istotnych zmian w zakresie projektu w celu dostarczenia optymalnego rozwiązania',
],
[
'brak metodyki; realizacja metodyki zawieszana okresowo; nie wszystkie osoby w zespole podporządkowują się metodyce; brak narzędzi wspierających (np. Jira)',
'przyjęta metodyka nie została poprawnie zdefiniowana lub nie ma cech z manifestu Agile; zespół pracuje częściowo w wybranej metodyce; dobrane narzędzia wspierające są nieadekwatne',
'zespół pracuje zgodnie z metodyką, realizując jej najważniejsze założenia; wykorzystanie narzędzi wspierających jest tylko częściowe i nie pozwala na zarządzanie całością prac w projekcie',
'wybrana metodyka pracy wspierana przez narzędzia informatyczne pozwala na skuteczną kontrolę systematyczności i stanu wykonania zadań w projekcie, reagowanie na zmiany w projekcie, kontrolę czasu spędzonego nad wykonaniem zadań projektowych, planowanie i harmonogramowanie prac, kontrolę jakości tworzonego rozwiązania',
],
[
'brak repozytorium kodu; wymiana kodu poza repozytorium (np. przez email)',
'część zespołu korzysta z repozytorium kodu; kod w repozytorium nie odzwierciedla aktualnego stanu projektu',
'regularność pracy i równomierne rozłożenie commitów pomiędzy członków zespołu oraz w czasie; zawsze istnieje działająca wersja systemu w repozytorium',
'regularność pracy i równomierne rozłożenie commitów pomiędzy członków zespołu oraz w czasie; korzystanie z code review; rozsądne zarządzanie branchami (lub pochodnymi)',
],
[
'system wydany/wdrożony tylko na potrzeby prezentacji lub wcale',
'więcej niż jedno wydanie w semestrze, brak automatyzacji',
'regularne wydania/wdrożenia, tylko część procesów jest zautomatyzowana',
'projekt realizowany zgodnie z modelem DevOps: ciągła integracja, regularne wydania, automatyzacja wdrożenia',
],
[
'projekt mało złożony zarówno technicznie, jak i funkcjonalnie; projekt mogłaby zrealizować jedna osoba w ciągu trwania przedmiotu; niska jakość produktu projektu pomimo jego małego rozmiaru',
'projekt mało złożony zarówno technicznie, jak i funkcjonalnie, ale akceptowalny dla zespołu mniejszego o jedną osobę; projekt zbyt rozbudowany jak na projekt inżynierski (niewykonalny); projekt za 3 punkty ale niskiej jakości',
'projekt mało złożony funkcjonalnie względem rozmiaru grupy, ale obejmuje kilka różnych platform/warstw (przynajmniej 1 na osobę); projekt za 1 punkt ale wysokiej jakości; projekt za 4 punty ale niskiej jakości',
'złożoność odpowiednia dla zespołu; projekt za 3 punkty ale wysokiej jakości',
],
[
'brak dostępu/system nie działa u członków komisji',
'zapewniono dostęp do systemu; komisja wykryła istotne błędy w systemie',
'dostęp ograniczony do urządzeń zapewnionych przez zespół; brak istotnych błędów wykrytych przez komisję',
'dostęp na urządzeniach komisji (jeśli taka możliwość wynika z charakteru projektu); brak błędów wykrytych przez komisję',
],
[
'brak dostępu do systemu dla komisji; istotne uchybienia w zakresie bezpieczeństwa (np. brak kontroli dostępu, niezgodne ze sztuką zabezpieczenie haseł, SQL Injection); błędy uniemożliwiające korzystanie z systemu (kluczowa funkcjonalność systemu nie działa)',
'brak walidacji danych; błędy istotnie utrudniające korzystanie z systemu (np. brak responsywności systemu); brak HTTPS (jeśli dotyczy)',
'system nie jest odporny na ataki złośliwego użytkownika; występuje okresowa nieresponsywność systemu',
'brak wykrytych błędów krytycznych',
],
[
'brak dostępu/system nie działa u członków komisji',
'zapewniono dostęp do systemu; komisja wykryła istotne błędy w systemie',
'brak istotnych błędów wykrytych przez komisję; zapewnienie dostępu do systemu nie jest możliwe (np: projekt obejmuje urządzenie fizyczne; zgoda wymaga akceptacji komisji)',
'brak błędów wykrytych przez komisję; wysoka responsywność oraz dostępnosć systemu;',
],
[
'niespełniono wymaganych kryteriów akceptacji',
'spełniono wymagane kryteria akceptacji, ale nie spełniono kryteriów oczekiwanych',
'spełniono oczekiwane kryteria akceptacji',
'spełniono wszystkie zadeklarowane kryteria akceptacji (w tym planowane)',
],
[
'brakuje istotnych funkcjonalności; nie zrealizowano przynajmniej połowy założonych funkcjonalności',
'brakuje istotnych funkcjonalności',
'zrealizowano wszystkie kluczowe funkcjonalności, oraz przynajmniej 85% pozostałych',
'zrealizowano wszystkie założone funkcjonalności',
],
[
'zespół nie potrafi uzasadnić przydatności projektu; zespół projektowy nie daje gwarancji realizacji kluczowych części projektu w czasie trwania przedmiotu; projekt nie daje możliwości zaliczenia PRI',
'istnieją uzasadnione obawy co do tego, czy projekt ma szanse zostać zrealizowany w czasie trwania przedmiotu; przedstawiony zakres projektu jest bardzo mały i wymaga rozszerzenia',
'kierunek rozwoju projektu nie odpowiada oczekiwaniom i wymaganiom przedmiotu, ale jest spójny',
'projekt rokuje na dalszy rozwój po zakończeniu przedmiotu; zespół jest gwarantem zakończenia projektu w czasie; rozmiar całości projektu jest adekwatny do wymagań',
],
[
'projekt nie nadaje się do wdrożenia',
'projekt nie został wdrożony; nie spełniono przynajmniej jednego wskaźnika wdrożeniowego ',
'projekt wdrożony bez sukcesu (brak rzeczywistych użytkowników); spełnienie wszystkich wskaźników wdrożeniowych; wartości niektórych wskaźników nie są obiektywnie weryfikowalne',
'projekt wdrożony z sukcesem (rzeczywiści użytkownicy); spełnienie wszystkich wskaźników wdrożeniowych; wartości wszystkich wskaźników są obiektywnie weryfikowalne',
],
[
'system nie przydatny dla grupy docelowej; brak użyteczności interfejsu oraz jej testów',
'niska przydatność dla grupy docelowej; brak użyteczności interfejsu stwierdzona na obronie mimo przeprowadzenia testów przez zespół; średnia użyteczność interfejsu i brak testów użyteczności',
'dobra użyteczność systemu przy braku testów; interfejs zgodny z przyjętymi standardami',
'dobra użyteczność lub wiarygodne testy użyteczności (w tym raporty z testów); projekt rozwiązuje rzeczywiste problemy grupy docelowej',
],
[
'brak prototypu',
'prototyp nieprzydatny, niezgodny ze specyfiką projektu, nieodpowiadający zaprezentowanemu projektowi',
'prototyp stworzony na własne potrzeby; częściowo wykorzystany przy tworzeniu docelowego interfejsu systemu',
'prototyp adekwatny do projektu, skonsultowany pozytywnie z klientem/grupą docelową i wykorzystany przy tworzeniu docelowego interfejsu systemu',
],
[
'nie przeprowadzono żadnych wiarygodnych testów; brak raportów z testów',
'przetestowano co najwyżej jeden obszar; przygotowane raporty z testów; przykładowo same testy jednostkowe lub same testy akceptacyjne',
'przetestowano trzy obszary; przygotowane raporty z testów; niektóre z przeprowadzonych testów nie były w pełni zautomatyzowane; przykładowo testy akceptacyjne, jednostowe oraz analiza statyczna jakości kodu',
'przetestowano różnorodne obszary z wykorzystaniem mechanizmów automartyzacji testów; przygotowana pełna dokumentacja potestowa; przykładowo testy jednostkowe, akceptacyjne i obciążeniowe',
],
[
'brak widocznej organizacji kodu; brak przemyślanej architektury systemu',
'architektura nieadekwatna do problemu; niestosowny dobór technologii i narzędzi',
'architektura poprawna, lecz nieudokumentowana; popełniono pewne błędy w projektowaniu oprogramowania',
'architektura poprawna i udokumentowana; odpowiadająca docelowemu obciążeniu systemu',
],
]
const grades = ['0', '1', '3', '4']
export const gradeOptions = options.map((optionsArray) => {
return optionsArray.map((o, index) => {
return {
value: grades[index],
label: o,
}
})
})

File diff suppressed because it is too large Load Diff

View File

@ -123,9 +123,22 @@ const Groups = () => {
<td>{points_for_first_term}</td> <td>{points_for_first_term}</td>
<td>{points_for_second_term}</td> <td>{points_for_second_term}</td>
<td> <td>
<div className="flex align-center gap-2">
<Link
to={`/${
location.pathname.includes('coordinator')
? 'coordinator'
: 'supervisor'
}/groups/${id}/grade-card`}
>
<button className="btn btn-xs btn-success ">
KARTA OCENY
</button>
</Link>
<button onClick={() => mutateDelete(id)}> <button onClick={() => mutateDelete(id)}>
<IconRemove /> <IconRemove />
</button> </button>
</div>
</td> </td>
</tr> </tr>
), ),

View File

@ -83,10 +83,13 @@ const Schedules = () => {
<button className="btn btn-success mt-4">Stwórz zapisy</button> <button className="btn btn-success mt-4">Stwórz zapisy</button>
</form> </form>
<h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2> <h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2>
<ul className="list-disc list-inside">
{schedules && {schedules &&
schedules?.data?.examination_schedules.map((schedule) => ( schedules?.data?.examination_schedules.map((schedule) => (
<h3 className="text-xl " key={schedule.title}> <li
-{' '} className="text-xl underline underline-offset-2 decoration-success "
key={schedule.title}
>
<Link <Link
to={`/coordinator/schedule/${schedule.id}`} to={`/coordinator/schedule/${schedule.id}`}
onClick={() => { onClick={() => {
@ -95,8 +98,9 @@ const Schedules = () => {
> >
{schedule.title} {schedule.title}
</Link> </Link>
</h3> </li>
))} ))}
</ul>
</div> </div>
) )
} }

View File

@ -13,15 +13,19 @@ const SupervisorAvailabilities = () => {
return ( return (
<div> <div>
<h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2> <h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2>
<ul className="list-disc list-inside">
{schedules && {schedules &&
schedules?.data?.examination_schedules.map((schedule) => ( schedules?.data?.examination_schedules.map((schedule) => (
<h3 className="text-xl" key={schedule.title}> <li
-{' '} className="text-xl underline underline-offset-2 decoration-success "
key={schedule.title}
>
<Link to={`/coordinator/supervisors_availability/${schedule.id}`}> <Link to={`/coordinator/supervisors_availability/${schedule.id}`}>
{schedule.title} {schedule.title}
</Link> </Link>
</h3> </li>
))} ))}
</ul>
</div> </div>
) )
} }

View File

@ -128,9 +128,22 @@ const SupervisorGroups = () => {
<td>{points_for_first_term}</td> <td>{points_for_first_term}</td>
<td>{points_for_second_term}</td> <td>{points_for_second_term}</td>
<td> <td>
<div className="flex align-center gap-2">
<Link
to={`/${
location.pathname.includes('coordinator')
? 'coordinator'
: 'supervisor'
}/groups/${id}/grade-card`}
>
<button className="btn btn-xs btn-success ">
KARTA OCENY
</button>
</Link>
<button onClick={() => mutateDelete(id)}> <button onClick={() => mutateDelete(id)}>
<IconRemove /> <IconRemove />
</button> </button>
</div>
</td> </td>
</tr> </tr>
), ),

View File

@ -13,15 +13,19 @@ const SupervisorSchedules = () => {
return ( return (
<div> <div>
<h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2> <h2 className="text-2xl font-bold mb-2">Wybierz zapisy:</h2>
<ul className="list-disc list-inside">
{schedules && {schedules &&
schedules?.data?.examination_schedules.map((schedule) => ( schedules?.data?.examination_schedules.map((schedule) => (
<h3 className="text-xl" key={schedule.title}> <li
-{' '} className="text-xl underline underline-offset-2 decoration-success "
key={schedule.title}
>
<Link to={`/supervisor/schedule/${schedule.id}`}> <Link to={`/supervisor/schedule/${schedule.id}`}>
{schedule.title} {schedule.title}
</Link> </Link>
</h3> </li>
))} ))}
</ul>
</div> </div>
) )
} }