diff --git a/aleksis/apps/kolego/frontend/components/AbsenceReasons.vue b/aleksis/apps/kolego/frontend/components/AbsenceReasons.vue index a5398ec6d126e462d16558a9ba4c66c43eba7931..504b9045a2b579bb3bf854f820cb77d851a36140 100644 --- a/aleksis/apps/kolego/frontend/components/AbsenceReasons.vue +++ b/aleksis/apps/kolego/frontend/components/AbsenceReasons.vue @@ -20,9 +20,9 @@ import InlineCRUDList from "aleksis.core/components/generic/InlineCRUDList.vue"; <script> import { - gqlAbsenceReasons, - createAbsenceReason, - deleteAbsenceReason, + absenceReasons, + createAbsenceReasons, + deleteAbsenceReasons, updateAbsenceReasons, } from "./absenceReasons.graphql"; @@ -41,10 +41,10 @@ export default { }, ], i18nKey: "kolego.absence_reason", - gqlQuery: gqlAbsenceReasons, - gqlCreateMutation: createAbsenceReason, + gqlQuery: absenceReasons, + gqlCreateMutation: createAbsenceReasons, gqlPatchMutation: updateAbsenceReasons, - gqlDeleteMutation: deleteAbsenceReason, + gqlDeleteMutation: deleteAbsenceReasons, defaultItem: { shortName: "", name: "", diff --git a/aleksis/apps/kolego/frontend/components/Absences.vue b/aleksis/apps/kolego/frontend/components/Absences.vue index 168ef7b04b1d4270e4103cd456f731fcbca3fc7d..852eacc5bd464ac7d8203cd9ff95f5a41d87f3f1 100644 --- a/aleksis/apps/kolego/frontend/components/Absences.vue +++ b/aleksis/apps/kolego/frontend/components/Absences.vue @@ -13,7 +13,6 @@ import DateTimeField from "aleksis.core/components/generic/forms/DateTimeField.v :gql-create-mutation="gqlCreateMutation" :gql-patch-mutation="gqlPatchMutation" :gql-delete-mutation="gqlDeleteMutation" - :get-patch-data="getPatchData" :default-item="defaultItem" > <template #datetimeStart="{ item }"> @@ -89,9 +88,9 @@ import DateTimeField from "aleksis.core/components/generic/forms/DateTimeField.v <script> import { - gqlAbsences, - createAbsence, - deleteAbsence, + absences, + createAbsences, + deleteAbsences, updateAbsences, } from "./absences.graphql"; import { gqlAbsenceReasons, gqlPersons } from "./helper.graphql"; @@ -123,10 +122,10 @@ export default { }, ], i18nKey: "kolego.absence", - gqlQuery: gqlAbsences, - gqlCreateMutation: createAbsence, + gqlQuery: absences, + gqlCreateMutation: createAbsences, gqlPatchMutation: updateAbsences, - gqlDeleteMutation: deleteAbsence, + gqlDeleteMutation: deleteAbsences, defaultItem: { datetimeStart: new Date().toISOString(), datetimeEnd: new Date().toISOString(), @@ -137,18 +136,6 @@ export default { required: [(value) => !!value || this.$t("forms.errors.required")], }; }, - methods: { - getPatchData(items) { - return items.map((item) => ({ - id: item.id, - datetimeStart: item.datetimeStart, - datetimeEnd: item.datetimeEnd, - person: item.person.id, - reason: item.reason.id, - comment: item.comment, - })); - }, - }, apollo: { persons: gqlPersons, absenceReasons: gqlAbsenceReasons, diff --git a/aleksis/apps/kolego/frontend/components/absenceReasons.graphql b/aleksis/apps/kolego/frontend/components/absenceReasons.graphql index 996e514cdb4511ace135b73a354f39a79c793199..ddbe73af90f67c99f6800a2a03f89bc35c1ba4e2 100644 --- a/aleksis/apps/kolego/frontend/components/absenceReasons.graphql +++ b/aleksis/apps/kolego/frontend/components/absenceReasons.graphql @@ -1,4 +1,4 @@ -query gqlAbsenceReasons($orderBy: [String], $filters: JSONString) { +query absenceReasons($orderBy: [String], $filters: JSONString) { items: absenceReasons(orderBy: $orderBy, filters: $filters) { id shortName @@ -8,9 +8,9 @@ query gqlAbsenceReasons($orderBy: [String], $filters: JSONString) { } } -mutation createAbsenceReason($input: CreateAbsenceReasonInput!) { - createAbsenceReason(input: $input) { - absenceReason { +mutation createAbsenceReasons($input: [BatchCreateAbsenceReasonInput]!) { + createAbsenceReasons(input: $input) { + items: absenceReasons { id shortName name @@ -20,14 +20,14 @@ mutation createAbsenceReason($input: CreateAbsenceReasonInput!) { } } -mutation deleteAbsenceReason($id: ID!) { - deleteAbsenceReason(id: $id) { - ok +mutation deleteAbsenceReasons($ids: [ID]!) { + deleteAbsenceReasons(ids: $ids) { + deletionCount } } mutation updateAbsenceReasons($input: [BatchPatchAbsenceReasonInput]!) { - batchMutation: updateAbsenceReasons(input: $input) { + updateAbsenceReasons(input: $input) { items: absenceReasons { id shortName diff --git a/aleksis/apps/kolego/frontend/components/absences.graphql b/aleksis/apps/kolego/frontend/components/absences.graphql index c3ca66b3284d292edde228a7c89745265cb6cfc7..25d5c0ea2027a6d42e080bd50bb6f50194c58911 100644 --- a/aleksis/apps/kolego/frontend/components/absences.graphql +++ b/aleksis/apps/kolego/frontend/components/absences.graphql @@ -1,4 +1,4 @@ -query gqlAbsences($orderBy: [String], $filters: JSONString) { +query absences($orderBy: [String], $filters: JSONString) { items: absences(orderBy: $orderBy, filters: $filters) { id person { @@ -18,9 +18,9 @@ query gqlAbsences($orderBy: [String], $filters: JSONString) { } } -mutation createAbsence($input: CreateAbsenceInput!) { - createAbsence(input: $input) { - absence { +mutation createAbsences($input: [BatchCreateAbsenceInput]!) { + createAbsences(input: $input) { + items: absences { id person { id @@ -40,14 +40,14 @@ mutation createAbsence($input: CreateAbsenceInput!) { } } -mutation deleteAbsence($id: ID!) { - deleteAbsence(id: $id) { - ok +mutation deleteAbsences($ids: [ID]!) { + deleteAbsences(ids: $ids) { + deletionCount } } mutation updateAbsences($input: [BatchPatchAbsenceInput]!) { - batchMutation: updateAbsences(input: $input) { + updateAbsences(input: $input) { items: absences { id person { diff --git a/aleksis/apps/kolego/schema/__init__.py b/aleksis/apps/kolego/schema/__init__.py index f511f5773f3a162f3c538346b2802aec1bccf4b0..4fd07d96cd16188d60c035d0a46c247fb492d091 100644 --- a/aleksis/apps/kolego/schema/__init__.py +++ b/aleksis/apps/kolego/schema/__init__.py @@ -6,13 +6,11 @@ from aleksis.core.schema.base import FilterOrderList from .absence import ( AbsenceBatchCreateMutation, + AbsenceBatchDeleteMutation, AbsenceBatchPatchMutation, - AbsenceCreateMutation, - AbsenceDeleteMutation, AbsenceReasonBatchCreateMutation, + AbsenceReasonBatchDeleteMutation, AbsenceReasonBatchPatchMutation, - AbsenceReasonCreateMutation, - AbsenceReasonDeleteMutation, AbsenceReasonType, AbsenceType, ) @@ -28,12 +26,10 @@ class Query(graphene.ObjectType): class Mutation(graphene.ObjectType): - create_absence = AbsenceCreateMutation.Field() create_absences = AbsenceBatchCreateMutation.Field() - delete_absence = AbsenceDeleteMutation.Field() + delete_absences = AbsenceBatchDeleteMutation.Field() update_absences = AbsenceBatchPatchMutation.Field() - create_absence_reason = AbsenceReasonCreateMutation.Field() create_absence_reasons = AbsenceReasonBatchCreateMutation.Field() - delete_absence_reason = AbsenceReasonDeleteMutation.Field() + delete_absence_reasons = AbsenceReasonBatchDeleteMutation.Field() update_absence_reasons = AbsenceReasonBatchPatchMutation.Field() diff --git a/aleksis/apps/kolego/schema/absence.py b/aleksis/apps/kolego/schema/absence.py index 37cb8eb91afc0ca09070d5a6b87061b7fe7c275a..bb66bf940d0d451e1993dc822901b350b1025a25 100644 --- a/aleksis/apps/kolego/schema/absence.py +++ b/aleksis/apps/kolego/schema/absence.py @@ -5,14 +5,13 @@ from django.conf import settings from graphene_django.types import DjangoObjectType from graphene_django_cud.mutations import ( DjangoBatchCreateMutation, + DjangoBatchDeleteMutation, DjangoBatchPatchMutation, - DjangoCreateMutation, ) from guardian.shortcuts import get_objects_for_user from zoneinfo import ZoneInfo from aleksis.core.schema.base import ( - DeleteMutation, DjangoFilterMixin, PermissionBatchPatchMixin, PermissionsTypeMixin, @@ -49,7 +48,7 @@ class AbsenceType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): return get_objects_for_user(info.context.user, "kolego.view_absence", queryset) -class AbsenceCreateMutation(DjangoCreateMutation): +class AbsenceBatchCreateMutation(DjangoBatchCreateMutation): class Meta: model = Absence fields = ("person", "reason", "comment", "datetime_start", "datetime_end") @@ -68,20 +67,15 @@ class AbsenceCreateMutation(DjangoCreateMutation): @classmethod def before_save(cls, root, info, input, obj): # noqa: A002 - obj.timezone = ZoneInfo(settings.TIME_ZONE) # FIXME Use TZ provided by client + for absence in obj: + absence.timezone = ZoneInfo(settings.TIME_ZONE) # FIXME Use TZ provided by client return obj -class AbsenceBatchCreateMutation(DjangoBatchCreateMutation): +class AbsenceBatchDeleteMutation(DjangoBatchDeleteMutation): class Meta: model = Absence - fields = ("id", "person", "reason", "comment", "datetime_start", "datetime_end") - permissions = ("kolego.add_absence",) # FIXME - - -class AbsenceDeleteMutation(DeleteMutation): - klass = Absence - permission_required = "kolego.delete_absence" # FIXME + permission_required = "kolego.delete_absence" # FIXME class AbsenceBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): @@ -107,7 +101,7 @@ class AbsenceBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutat return obj -class AbsenceReasonCreateMutation(DjangoCreateMutation): +class AbsenceReasonBatchCreateMutation(DjangoBatchCreateMutation): class Meta: model = AbsenceReason fields = ("short_name", "name") @@ -115,17 +109,10 @@ class AbsenceReasonCreateMutation(DjangoCreateMutation): permissions = ("kolego.create_absencereason",) # FIXME -class AbsenceReasonBatchCreateMutation(DjangoBatchCreateMutation): +class AbsenceReasonBatchDeleteMutation(DjangoBatchDeleteMutation): class Meta: model = AbsenceReason - fields = ("short_name", "name") - optional_fields = ("name",) - permissions = ("kolego.create_absencereason",) # FIXME - - -class AbsenceReasonDeleteMutation(DeleteMutation): - klass = AbsenceReason - permission_required = "kolego.delete_absencereason" # FIXME + permission_required = "kolego.delete_absencereason" # FIXME class AbsenceReasonBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation):