diff --git a/backend/root/utils/routes.py b/backend/root/utils/routes.py index 56d96342b..97fca8328 100644 --- a/backend/root/utils/routes.py +++ b/backend/root/utils/routes.py @@ -5,7 +5,7 @@ DO NOT WRITE IN THIS FILE, AS IT WILL BE OVERWRITTEN ON NEXT UPDATE. THIS FILE WAS GENERATED BY: root.management.commands.generate_routes -LAST UPDATE: 2023-08-17 17:48:38.961443+00:00 +LAST UPDATE: 2023-08-29 08:57:57.685488+00:00 """ ############################################################ @@ -308,18 +308,36 @@ admin__samfundet_keyvalue_delete = 'admin:samfundet_keyvalue_delete' admin__samfundet_keyvalue_change = 'admin:samfundet_keyvalue_change' adminsamfundetkeyvalue__objectId = '' +admin__samfundet_recruitment_permissions = 'admin:samfundet_recruitment_permissions' +admin__samfundet_recruitment_permissions_manage_user = 'admin:samfundet_recruitment_permissions_manage_user' +admin__samfundet_recruitment_permissions_manage_group = 'admin:samfundet_recruitment_permissions_manage_group' admin__samfundet_recruitment_changelist = 'admin:samfundet_recruitment_changelist' admin__samfundet_recruitment_add = 'admin:samfundet_recruitment_add' admin__samfundet_recruitment_history = 'admin:samfundet_recruitment_history' admin__samfundet_recruitment_delete = 'admin:samfundet_recruitment_delete' admin__samfundet_recruitment_change = 'admin:samfundet_recruitment_change' adminsamfundetrecruitment__objectId = '' +admin__samfundet_recruitmentposition_permissions = 'admin:samfundet_recruitmentposition_permissions' +admin__samfundet_recruitmentposition_permissions_manage_user = 'admin:samfundet_recruitmentposition_permissions_manage_user' +admin__samfundet_recruitmentposition_permissions_manage_group = 'admin:samfundet_recruitmentposition_permissions_manage_group' admin__samfundet_recruitmentposition_changelist = 'admin:samfundet_recruitmentposition_changelist' admin__samfundet_recruitmentposition_add = 'admin:samfundet_recruitmentposition_add' admin__samfundet_recruitmentposition_history = 'admin:samfundet_recruitmentposition_history' admin__samfundet_recruitmentposition_delete = 'admin:samfundet_recruitmentposition_delete' admin__samfundet_recruitmentposition_change = 'admin:samfundet_recruitmentposition_change' adminsamfundetrecruitmentposition__objectId = '' +admin__samfundet_recruitmentadmission_permissions = 'admin:samfundet_recruitmentadmission_permissions' +admin__samfundet_recruitmentadmission_permissions_manage_user = 'admin:samfundet_recruitmentadmission_permissions_manage_user' +admin__samfundet_recruitmentadmission_permissions_manage_group = 'admin:samfundet_recruitmentadmission_permissions_manage_group' +admin__samfundet_recruitmentadmission_changelist = 'admin:samfundet_recruitmentadmission_changelist' +admin__samfundet_recruitmentadmission_add = 'admin:samfundet_recruitmentadmission_add' +admin__samfundet_recruitmentadmission_history = 'admin:samfundet_recruitmentadmission_history' +admin__samfundet_recruitmentadmission_delete = 'admin:samfundet_recruitmentadmission_delete' +admin__samfundet_recruitmentadmission_change = 'admin:samfundet_recruitmentadmission_change' +adminsamfundetrecruitmentadmission__objectId = '' +admin__samfundet_organization_permissions = 'admin:samfundet_organization_permissions' +admin__samfundet_organization_permissions_manage_user = 'admin:samfundet_organization_permissions_manage_user' +admin__samfundet_organization_permissions_manage_group = 'admin:samfundet_organization_permissions_manage_group' admin__samfundet_organization_changelist = 'admin:samfundet_organization_changelist' admin__samfundet_organization_add = 'admin:samfundet_organization_add' admin__samfundet_organization_history = 'admin:samfundet_organization_history' diff --git a/backend/samfundet/serializers.py b/backend/samfundet/serializers.py index 32e0a1ee2..f0c9d04bc 100644 --- a/backend/samfundet/serializers.py +++ b/backend/samfundet/serializers.py @@ -513,7 +513,15 @@ class Meta: ] +class ApplicantInfoSerializer(serializers.ModelSerializer): + + class Meta: + model = User + fields = ['id', 'first_name', 'last_name', 'email'] + + class RecruitmentAdmissionForGangSerializer(serializers.ModelSerializer): + user = ApplicantInfoSerializer(read_only=True) class Meta: model = RecruitmentAdmission diff --git a/backend/samfundet/views.py b/backend/samfundet/views.py index c354babfa..ebfe45080 100644 --- a/backend/samfundet/views.py +++ b/backend/samfundet/views.py @@ -1,5 +1,4 @@ from typing import Type - from django.contrib.auth import login, logout from django.contrib.auth.models import Group from django.db.models import QuerySet @@ -448,6 +447,13 @@ class RecruitmentPositionView(ModelViewSet): queryset = RecruitmentPosition.objects.all() +@method_decorator(ensure_csrf_cookie, 'dispatch') +class RecruitmentAdmissionView(ModelViewSet): + permission_classes = [AllowAny] + serializer_class = RecruitmentAdmissionForGangSerializer + queryset = RecruitmentAdmission.objects.all() + + @method_decorator(ensure_csrf_cookie, 'dispatch') class RecruitmentPositionsPerRecruitmentView(ListAPIView): permission_classes = [AllowAny] @@ -495,6 +501,7 @@ def list(self, request: Request) -> Response: class RecruitmentAdmissionForGangView(ModelViewSet): permission_classes = [IsAuthenticated] serializer_class = RecruitmentAdmissionForGangSerializer + queryset = RecruitmentAdmission.objects.all() # TODO: User should only be able to edit the fields that are allowed diff --git a/frontend/src/AppRoutes.tsx b/frontend/src/AppRoutes.tsx index dc0f84a5a..1102282f7 100644 --- a/frontend/src/AppRoutes.tsx +++ b/frontend/src/AppRoutes.tsx @@ -47,6 +47,7 @@ import { RecruitmentFormAdminPage } from './PagesAdmin/RecruitmentFormAdminPage' import { SaksdokumentAdminPage } from './PagesAdmin/SaksdokumentAdminPage'; import { PERM } from './permissions'; import { ROUTES } from './routes'; +import { RecruitmentPositionOverviewPage } from './PagesAdmin/RecruitmentPositionOverviewPage/RecruitmentPositionOverviewPage'; export function AppRoutes() { // Must be called within because it uses hook useLocation(). @@ -184,6 +185,10 @@ export function AppRoutes() { path={ROUTES.frontend.admin_recruitment_gang_position_create} element={} /> + } + /> } diff --git a/frontend/src/Components/Dropdown/Dropdown.tsx b/frontend/src/Components/Dropdown/Dropdown.tsx index 77e321e14..1b62660db 100644 --- a/frontend/src/Components/Dropdown/Dropdown.tsx +++ b/frontend/src/Components/Dropdown/Dropdown.tsx @@ -12,6 +12,7 @@ export type DropDownOption = { type DropdownProps = { className?: string; defaultValue?: DropDownOption; + initialValue?: T; options?: DropDownOption[]; label?: string | ReactElement; disabled?: boolean; @@ -22,6 +23,7 @@ type DropdownProps = { export function Dropdown({ options = [], defaultValue, + initialValue, onChange, className, label, @@ -50,9 +52,9 @@ export function Dropdown({ className={classNames(styles.samf_select, error && styles.error)} onChange={handleChange} disabled={disabled} - defaultValue={-1} + defaultValue={initialValue !== undefined ? options.map((e) => e.value).indexOf(initialValue) : -1} > - {defaultValue ? : } + {defaultValue ? : } {options.map((opt, index) => { return (