From ec5733213ed0468839007448592a5448cf78fd47 Mon Sep 17 00:00:00 2001 From: patrol16d Date: Fri, 16 Dec 2022 06:50:55 +0100 Subject: [PATCH] change way od storage with user is loin in --- README.md | 2 +- backend/migrations/versions/13d387439f43_.py | 89 ----------- backend/migrations/versions/7deb011753b2_.py | 145 ------------------ frontend/src/api/leaders.ts | 1 - frontend/src/components/TopBar.tsx | 56 ++++++- frontend/src/views/Login.tsx | 89 ++++++++--- frontend/src/views/coordinator/AddLeader.tsx | 13 -- frontend/src/views/coordinator/Home.tsx | 2 +- .../views/supervisor/SupervisorSchedule.tsx | 2 +- 9 files changed, 123 insertions(+), 276 deletions(-) delete mode 100644 backend/migrations/versions/13d387439f43_.py delete mode 100644 backend/migrations/versions/7deb011753b2_.py diff --git a/README.md b/README.md index 434c4e0..4fea9b6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ System organizacji PRI ## Usage -First create `.env` file and fill with similar data like `./backend/.env.example`. +First create `.env` files in `./backend` and `./frontend` and fill with similar data like `.env.example`. Run application and init database ```bash diff --git a/backend/migrations/versions/13d387439f43_.py b/backend/migrations/versions/13d387439f43_.py deleted file mode 100644 index 42dc936..0000000 --- a/backend/migrations/versions/13d387439f43_.py +++ /dev/null @@ -1,89 +0,0 @@ -"""empty message - -Revision ID: 13d387439f43 -Revises: 7deb011753b2 -Create Date: 2022-12-15 18:06:57.906228 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '13d387439f43' -down_revision = '7deb011753b2' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('project_grade_sheets', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('group_id', sa.Integer(), nullable=True), - sa.Column('presentation_required_content_1', sa.Integer(), nullable=True), - sa.Column('presentation_required_content_2', sa.Integer(), nullable=True), - sa.Column('presentation_was_compatible_1', sa.Integer(), nullable=True), - sa.Column('presentation_was_compatible_2', sa.Integer(), nullable=True), - sa.Column('presentation_showing_1', sa.Integer(), nullable=True), - sa.Column('presentation_showing_2', sa.Integer(), nullable=True), - sa.Column('presentation_answers_to_questions_from_committee_1', sa.Integer(), nullable=True), - sa.Column('presentation_answers_to_questions_from_committee_2', sa.Integer(), nullable=True), - sa.Column('documentation_project_vision_1', sa.Integer(), nullable=True), - sa.Column('documentation_project_vision_2', sa.Integer(), nullable=True), - sa.Column('documentation_requirements_1', sa.Integer(), nullable=True), - sa.Column('documentation_requirements_2', sa.Integer(), nullable=True), - sa.Column('documentation_for_clients_1', sa.Integer(), nullable=True), - sa.Column('documentation_for_clients_2', sa.Integer(), nullable=True), - sa.Column('documentation_for_developers_1', sa.Integer(), nullable=True), - sa.Column('documentation_for_developers_2', sa.Integer(), nullable=True), - sa.Column('documentation_license_1', sa.Integer(), nullable=True), - sa.Column('documentation_license_2', sa.Integer(), nullable=True), - sa.Column('group_work_regularity_1', sa.Integer(), nullable=True), - sa.Column('group_work_regularity_2', sa.Integer(), nullable=True), - sa.Column('group_work_division_of_work_1', sa.Integer(), nullable=True), - sa.Column('group_work_division_of_work_2', sa.Integer(), nullable=True), - sa.Column('group_work_contact_with_client_1', sa.Integer(), nullable=True), - sa.Column('group_work_contact_with_client_2', sa.Integer(), nullable=True), - sa.Column('group_work_management_of_risk_1', sa.Integer(), nullable=True), - sa.Column('group_work_management_of_risk_2', sa.Integer(), nullable=True), - sa.Column('group_work_work_methodology_1', sa.Integer(), nullable=True), - sa.Column('group_work_work_methodology_2', sa.Integer(), nullable=True), - sa.Column('group_work_management_of_source_code_1', sa.Integer(), nullable=True), - sa.Column('group_work_management_of_source_code_2', sa.Integer(), nullable=True), - sa.Column('group_work_devops_1', sa.Integer(), nullable=True), - sa.Column('group_work_devops_2', sa.Integer(), nullable=True), - sa.Column('products_project_complexity_of_product_1', sa.Integer(), nullable=True), - sa.Column('products_project_complexity_of_product_2', sa.Integer(), nullable=True), - sa.Column('products_project_access_to_application_1', sa.Integer(), nullable=True), - sa.Column('products_project_access_to_application_2', sa.Integer(), nullable=True), - sa.Column('products_project_security_issues_1', sa.Integer(), nullable=True), - sa.Column('products_project_security_issues_2', sa.Integer(), nullable=True), - sa.Column('products_project_access_to_test_application_1', sa.Integer(), nullable=True), - sa.Column('products_project_access_to_test_application_2', sa.Integer(), nullable=True), - sa.Column('products_project_acceptance_criteria_1', sa.Integer(), nullable=True), - sa.Column('products_project_acceptance_criteria_2', sa.Integer(), nullable=True), - sa.Column('products_project_expected_functionality_1', sa.Integer(), nullable=True), - sa.Column('products_project_expected_functionality_2', sa.Integer(), nullable=True), - sa.Column('products_project_promises_well_1', sa.Integer(), nullable=True), - sa.Column('products_project_promises_well_2', sa.Integer(), nullable=True), - sa.Column('products_project_has_been_implemented_1', sa.Integer(), nullable=True), - sa.Column('products_project_has_been_implemented_2', sa.Integer(), nullable=True), - sa.Column('products_project_is_useful_1', sa.Integer(), nullable=True), - sa.Column('products_project_is_useful_2', sa.Integer(), nullable=True), - sa.Column('products_project_prototype_1', sa.Integer(), nullable=True), - sa.Column('products_project_prototype_2', sa.Integer(), nullable=True), - sa.Column('products_project_tests_1', sa.Integer(), nullable=True), - sa.Column('products_project_tests_2', sa.Integer(), nullable=True), - sa.Column('products_project_technology_1', sa.Integer(), nullable=True), - sa.Column('products_project_technology_2', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('project_grade_sheets') - # ### end Alembic commands ### diff --git a/backend/migrations/versions/7deb011753b2_.py b/backend/migrations/versions/7deb011753b2_.py deleted file mode 100644 index e9706be..0000000 --- a/backend/migrations/versions/7deb011753b2_.py +++ /dev/null @@ -1,145 +0,0 @@ -"""empty message - -Revision ID: 7deb011753b2 -Revises: -Create Date: 2022-11-16 22:48:36.220156 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '7deb011753b2' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('project_supervisors', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('first_name', sa.String(length=255), nullable=False), - sa.Column('last_name', sa.String(length=255), nullable=False), - sa.Column('email', sa.String(length=120), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('email') - ) - op.create_index(op.f('ix_project_supervisors_first_name'), 'project_supervisors', ['first_name'], unique=False) - op.create_index(op.f('ix_project_supervisors_last_name'), 'project_supervisors', ['last_name'], unique=False) - op.create_table('students', - sa.Column('first_name', sa.String(length=255), nullable=False), - sa.Column('last_name', sa.String(length=255), nullable=False), - sa.Column('email', sa.String(length=120), nullable=True), - sa.Column('pesel', sa.String(length=11), nullable=True), - sa.Column('index', sa.Integer(), nullable=False), - sa.PrimaryKeyConstraint('index'), - sa.UniqueConstraint('email') - ) - op.create_index(op.f('ix_students_first_name'), 'students', ['first_name'], unique=False) - op.create_index(op.f('ix_students_last_name'), 'students', ['last_name'], unique=False) - op.create_table('year_groups', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('name', sa.String(length=50), nullable=False), - sa.Column('mode', sa.String(length=1), nullable=False), - sa.Column('created_at', sa.DateTime(), nullable=False), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('examination_schedules', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('title', sa.String(length=100), nullable=False), - sa.Column('duration_time', sa.Integer(), nullable=False), - sa.Column('start_date_for_enrollment_students', sa.DateTime(), nullable=True), - sa.Column('end_date_for_enrollment_students', sa.DateTime(), nullable=True), - sa.Column('start_date', sa.DateTime(), nullable=False), - sa.Column('end_date', sa.DateTime(), nullable=False), - sa.Column('year_group_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['year_group_id'], ['year_groups.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('title') - ) - op.create_table('groups', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('name', sa.String(length=60), nullable=False), - sa.Column('cdyd_kod', sa.String(length=60), nullable=True), - sa.Column('prz_kod', sa.String(length=60), nullable=True), - sa.Column('tzaj_kod', sa.String(length=60), nullable=True), - sa.Column('project_supervisor_id', sa.Integer(), nullable=True), - sa.Column('year_group_id', sa.Integer(), nullable=True), - sa.Column('points_for_first_term', sa.Integer(), nullable=False), - sa.Column('points_for_second_term', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['project_supervisor_id'], ['project_supervisors.id'], ), - sa.ForeignKeyConstraint(['year_group_id'], ['year_groups.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('year_group_project_supervisors', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('project_supervisor_id', sa.Integer(), nullable=False), - sa.Column('year_group_id', sa.Integer(), nullable=False), - sa.Column('limit_group', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['project_supervisor_id'], ['project_supervisors.id'], ), - sa.ForeignKeyConstraint(['year_group_id'], ['year_groups.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('year_group_students', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('year_group_id', sa.Integer(), nullable=True), - sa.Column('student_index', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['student_index'], ['students.index'], ondelete='CASCADE'), - sa.ForeignKeyConstraint(['year_group_id'], ['year_groups.id'], ondelete='CASCADE'), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('students_groups', - sa.Column('group_id', sa.Integer(), nullable=False), - sa.Column('student_index', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ), - sa.ForeignKeyConstraint(['student_index'], ['students.index'], ) - ) - op.create_table('temporary_availabilities', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('start_date', sa.DateTime(), nullable=False), - sa.Column('end_date', sa.DateTime(), nullable=False), - sa.Column('examination_schedule_id', sa.Integer(), nullable=False), - sa.Column('project_supervisor_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['examination_schedule_id'], ['examination_schedules.id'], ), - sa.ForeignKeyConstraint(['project_supervisor_id'], ['project_supervisors.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('term_of_defences', - sa.Column('id', sa.Integer(), autoincrement=True, nullable=False), - sa.Column('start_date', sa.DateTime(), nullable=False), - sa.Column('end_date', sa.DateTime(), nullable=False), - sa.Column('examination_schedule_id', sa.Integer(), nullable=True), - sa.Column('group_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['examination_schedule_id'], ['examination_schedules.id'], ), - sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('committees', - sa.Column('term_of_defence_id', sa.Integer(), nullable=True), - sa.Column('project_supervisor_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['project_supervisor_id'], ['project_supervisors.id'], ), - sa.ForeignKeyConstraint(['term_of_defence_id'], ['term_of_defences.id'], ) - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('committees') - op.drop_table('term_of_defences') - op.drop_table('temporary_availabilities') - op.drop_table('students_groups') - op.drop_table('year_group_students') - op.drop_table('year_group_project_supervisors') - op.drop_table('groups') - op.drop_table('examination_schedules') - op.drop_table('year_groups') - op.drop_index(op.f('ix_students_last_name'), table_name='students') - op.drop_index(op.f('ix_students_first_name'), table_name='students') - op.drop_table('students') - op.drop_index(op.f('ix_project_supervisors_last_name'), table_name='project_supervisors') - op.drop_index(op.f('ix_project_supervisors_first_name'), table_name='project_supervisors') - op.drop_table('project_supervisors') - # ### end Alembic commands ### diff --git a/frontend/src/api/leaders.ts b/frontend/src/api/leaders.ts index a6fe3f0..c35af71 100644 --- a/frontend/src/api/leaders.ts +++ b/frontend/src/api/leaders.ts @@ -12,7 +12,6 @@ export interface Leader { first_name: string last_name: string email: string - stationary_mode: boolean limit_group?: number count_groups: number } diff --git a/frontend/src/components/TopBar.tsx b/frontend/src/components/TopBar.tsx index 1dfc535..fcb0951 100644 --- a/frontend/src/components/TopBar.tsx +++ b/frontend/src/components/TopBar.tsx @@ -1,8 +1,45 @@ +import { useState } from 'react' +import { useQuery } from 'react-query' import { NavLink } from 'react-router-dom' +import Select from 'react-select' +import { getYearGroups } from '../api/yearGroups' +import useLocalStorageState from 'use-local-storage-state' +import { getStudents } from '../api/students' + +type SelectValue = { + value: string | number + label: string +} const TopBar = ({ routes, color }: { routes: { name: string; path: string }[]; color: string}, ) => { - const linkClass = ({ isActive }: { isActive: boolean }) => - isActive ? 'underline font-bold' : '' + const linkClass = ({ isActive }: { isActive: boolean }) => isActive ? 'underline font-bold' : '' + + const [yearGroupId, setYearGroupId] = useLocalStorageState('yearGroupId', { + defaultValue: -1, + }) + const [userType, setUserType] = useLocalStorageState('userType', { + defaultValue: 'coordinator', + }) + const [yearGroupOptions, setYearGroupOptions] = useState() + const [name, setName] = useState("") + + + const onYearChange = (v: any) => { + setYearGroupId(v?.value) + } + useQuery('year_groups', () => getYearGroups({ per_page: 100 }), { + onSuccess: (data) => { + setYearGroupOptions( + data?.data.year_groups.map(({ name, id }) => { + return { + value: id, + label: name, + } + }), + ) + }, + }) + return (

System PRI

@@ -13,6 +50,21 @@ const TopBar = ({ routes, color }: { routes: { name: string; path: string }[]; c ))}
+
+ {userType == 'coordinator' ? ({ + ...styles, + padding: '0.3rem', + borderRadius: '0.5rem', + }), + }} + /> + {/*
*/}
- Koordynator + { + setUserType('coordinator') + navigate("/coordinator") + }} className="cursor-pointer">Koordynator {/* Student */} - Opiekun + {/* Opiekun */}
diff --git a/frontend/src/views/coordinator/AddLeader.tsx b/frontend/src/views/coordinator/AddLeader.tsx index eeb68c2..69221fe 100644 --- a/frontend/src/views/coordinator/AddLeader.tsx +++ b/frontend/src/views/coordinator/AddLeader.tsx @@ -7,7 +7,6 @@ import InputError from '../../components/InputError' const AddLeader = () => { const [isAlertVisible, setIsAlertVisible] = useState(false) - const [stationaryMode, setStationaryMode] = useState(false) const { register, handleSubmit, @@ -21,8 +20,6 @@ const AddLeader = () => { 'createLeader', (payload: Leader) => { delete payload.limit_group - payload.stationary_mode = stationaryMode - console.log(payload) return createLeader(payload) }, { @@ -104,16 +101,6 @@ const AddLeader = () => { Email jest wymagany )} -
- -
{/*
diff --git a/frontend/src/views/supervisor/SupervisorSchedule.tsx b/frontend/src/views/supervisor/SupervisorSchedule.tsx index 4715d1a..c51c213 100644 --- a/frontend/src/views/supervisor/SupervisorSchedule.tsx +++ b/frontend/src/views/supervisor/SupervisorSchedule.tsx @@ -35,7 +35,7 @@ const SupervisorSchedule = () => { const { id } = useParams<{ id: string }>() const [yearGroupId] = useLocalStorageState('yearGroupId') - const [supervisorId] = useLocalStorageState('supervisorId') + const [supervisorId] = useLocalStorageState('userId') const [events, setEvents] = useState< { id: number