Skip to content

Commit

Permalink
Add statement report, #151
Browse files Browse the repository at this point in the history
  • Loading branch information
njkim committed Jan 12, 2025
1 parent 6c9d793 commit bd40a04
Show file tree
Hide file tree
Showing 6 changed files with 175 additions and 9 deletions.
10 changes: 9 additions & 1 deletion arches_lingo/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class SchemeRightsSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
graph_slug = "scheme"
nodegroups = ["rights"]
nodegroups = ["rights", "right_statement"]
fields = "__all__"


Expand All @@ -49,6 +49,14 @@ class Meta:
fields = "__all__"


class SchemeRightStatementTileSerializer(ArchesTileSerializer):
class Meta:
model = TileModel
graph_slug = "scheme"
root_node = "right_statement"
fields = "__all__"


class SchemeLabelSerializer(ArchesModelSerializer):
class Meta:
model = ResourceInstance
Expand Down
26 changes: 26 additions & 0 deletions arches_lingo/src/arches_lingo/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,13 @@ export const updateSchemeNamespace = async (
return parsed;
};

export const fetchSchemeRightStatement = async (schemeId: string) => {
const response = await fetch(arches.urls.api_scheme_right_statement_tile(schemeId, tileid1, tileid2));
const parsed = await response.json();
if (!response.ok) throw new Error(parsed.message || response.statusText);
return parsed;
};

export const updateSchemeRights = async (
schemeId: string,
tileId: string,
Expand All @@ -241,6 +248,25 @@ export const updateSchemeRights = async (
return parsed;
};

export const updateSchemeRightStatement = async (
schemeId: string,
tileId: string,
childTileId: string,
schemeRightStatementValue: SchemeRightStatement,
) => {
const response = await fetch(arches.urls.api_scheme_right_statement_tile(schemeId, tileId, childTileId), {
method: "PATCH",
headers: {
"X-CSRFTOKEN": getToken(),
"Content-Type": "application/json",
},
body: JSON.stringify(schemeRightStatementValue),
});
const parsed = await response.json();
if (!response.ok) throw new Error(parsed.message || response.statusText);
return parsed;
};

export const fetchSearchResults = async (
searchTerm: string,
items: number,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import { inject, onMounted, ref, toRaw, type Ref } from "vue";
import { useRoute } from "vue-router";
import { useGettext } from "vue3-gettext";
import { useToast } from "primevue/usetoast";
import Button from "primevue/button";
import MetaStringViewer from "@/arches_lingo/components/generic/MetaStringViewer.vue";
import SchemeReportSection from "@/arches_lingo/components/scheme/report/SchemeSection.vue";
import {
fetchSchemeRights,
Expand All @@ -12,15 +14,18 @@ import {
fetchControlledListOptions,
} from "@/arches_lingo/api.ts";
import type {
ControlledListItem,
ControlledListItemResult,
DataComponentMode,
MetaStringText,
ResourceInstanceReference,
ResourceInstanceResult,
ControlledListItem,
ControlledListItemResult,
SchemeRights,
SchemeRightStatement,
} from "@/arches_lingo/types";
import {
selectedLanguageKey,
NEW,
VIEW,
EDIT,
OPEN_EDITOR,
Expand All @@ -30,6 +35,7 @@ import {
import ResourceInstanceRelationships from "@/arches_lingo/components/generic/ResourceInstanceRelationships.vue";
import ReferenceDatatype from "@/arches_lingo/components/generic/ReferenceDatatype.vue";
import type { Language } from "@/arches_vue_utils/types.ts";
import NonLocalizedString from "../../generic/NonLocalizedString.vue";
onMounted(async () => {
getSectionValue();
Expand All @@ -42,12 +48,23 @@ defineProps<{
const emit = defineEmits([OPEN_EDITOR, UPDATED]);
const schemeRight = ref<SchemeRights>();
const tileid = ref<string>();
const schemeRightStatement = ref<SchemeRightStatement>();
const schemeRightTileid = ref<string>();
const schemeRightStatementTileid = ref<string>();
const route = useRoute();
const { $gettext } = useGettext();
const actorRdmOptions = ref<ResourceInstanceReference[]>();
const selectedLanguage = inject(selectedLanguageKey) as Ref<Language>;
const rightTypeOptions = ref<ControlledListItem[]>();
const metaStringLabel: MetaStringText = {
deleteConfirm: $gettext("Are you sure you want to delete this label?"),
language: $gettext("Statement Language"),
name: $gettext("Statement"),
type: $gettext("Statement Type"),
noRecords: $gettext("No scheme right statement were found."),
};
async function getActorOptions(): Promise<ResourceInstanceReference[]> {
const options_person = await fetchPersonRdmSystemList();
const options_group = await fetchGroupRdmSystemList();
Expand Down Expand Up @@ -99,16 +116,24 @@ function onUpdateResourceInstance(
async function save() {
await updateSchemeRights(
route.params.id as string,
tileid.value as string,
schemeRightTileid.value as string,
schemeRight.value as SchemeRights,
);
emit(UPDATED);
};
async function getSectionValue() {
if (route.params.id === NEW) {
return;
}
const actorOptions = await getActorOptions();
const scheme = await fetchSchemeRights(route.params.id as string);
schemeRight.value = scheme?.rights;
tileid.value = schemeRight.value?.tileid;
const schemeInstance = await fetchSchemeRights(route.params.id as string);
if (schemeInstance?.right_statement && !Array.isArray(schemeInstance?.right_statement)) {
schemeInstance.right_statement = [schemeInstance.right_statement];
}
schemeRight.value = schemeInstance?.rights;
schemeRightStatement.value = schemeInstance?.right_statement;
schemeRightTileid.value = schemeRight.value?.tileid;
schemeRightStatementTileid.value = schemeRightStatement.value?.tileid;
actorRdmOptions.value = actorOptions.map((option) => {
const savedSource = schemeRight.value?.right_holder?.find(
(source: ResourceInstanceReference) =>
Expand All @@ -123,8 +148,15 @@ async function getSectionValue() {
rightTypeOptions.value = await getControlledListOptions(RIGHT_TYPE_CONTROLLED_LIST);
};
async function deleteSectionValue() {
console.log("deleting");
};
function editSectionValue() {
console.log("editing");
};
defineExpose({ getSectionValue });
const { $gettext } = useGettext();
</script>

<template>
Expand All @@ -145,6 +177,62 @@ const { $gettext } = useGettext();
:value="schemeRight?.right_type"
:mode=VIEW
/>
<h4>{{ $gettext('Rights Statements') }}</h4>
<MetaStringViewer
:meta-strings="schemeRightStatement"
:meta-string-text="metaStringLabel"
@edit-string="editSectionValue"
@delete-string="deleteSectionValue"
>
<template #name="{ rowData }">
<span>
{{
(rowData as SchemeRightStatement)
.right_statement_content
}}
</span>
</template>
<template #type="{ rowData }">
<ReferenceDatatype
:value="
(rowData as SchemeRightStatement)
.right_statement_type
"
:mode="VIEW"
>
</ReferenceDatatype>
</template>
<template #language="{ rowData }">
<ReferenceDatatype
:value="
(rowData as SchemeRightStatement)
.right_statement_language
"
:mode="VIEW"
>
</ReferenceDatatype>
</template>
<template #drawer="{ rowData }">
<div>
<span>{{ $gettext("Right Statement Label:") }}</span>
<NonLocalizedString
:value="
(rowData as SchemeRightStatement)
.right_statement_label
"
></NonLocalizedString>
</div>
<div>
<span>{{ $gettext("Right Statement Type Metatype:") }}</span>
<ReferenceDatatype
:value="
(rowData as SchemeRightStatement)
.right_statement_type_metatype
"
></ReferenceDatatype>
</div>
</template>
</MetaStringViewer>
</SchemeReportSection>
</div>
<div v-if="mode === EDIT">
Expand Down
10 changes: 10 additions & 0 deletions arches_lingo/src/arches_lingo/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,15 @@ export interface SchemeRights {
right_type?: ControlledListItem[];
}

export interface SchemeRightStatement {
tileid: string;
right_statement_content?: string;
right_statement_label?: string;
right_statement_language?: ControlledListItem[];
right_statement_type?: ControlledListItem[];
right_statement_type_metatype?: ControlledListItem[];
}

export interface SchemeInstance {
namespace?: {
namespace_name: string;
Expand All @@ -146,6 +155,7 @@ export interface SchemeInstance {
appellative_status?: AppellativeStatus[];
statement?: SchemeStatement[];
rights?: SchemeRights;
right_statement?: SchemeRightStatement[];
}

export interface SchemeResource {
Expand Down
18 changes: 18 additions & 0 deletions arches_lingo/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
SchemeCreationView,
SchemeRightsView,
SchemeRightsTileView,
SchemeRightsTileCreateView,
SchemeRightStatementTileView,
SchemeRightStatementTileCreateView,
SchemeDetailView,
SchemeLabelTileView,
SchemeLabelView,
Expand Down Expand Up @@ -75,6 +78,21 @@
SchemeRightsTileView.as_view(),
name="api-scheme-rights-tile",
),
path(
"api/scheme/rights/",
SchemeRightsTileCreateView.as_view(),
name="api-scheme-rights-tile-create",
),
path(
"api/scheme/<uuid:resource_id>/right_statement/<uuid:pk>",
SchemeRightStatementTileView.as_view(),
name="api-scheme-right-statement-tile",
),
path(
"api/scheme/right_statement",
SchemeRightStatementTileCreateView.as_view(),
name="api-scheme-right-statement-tile-create",
),
path(
"api/scheme/<uuid:pk>/label",
SchemeLabelView.as_view(),
Expand Down
16 changes: 16 additions & 0 deletions arches_lingo/views/api/pythonic_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
SchemeSerializer,
SchemeRightsSerializer,
SchemeRightsTileSerializer,
SchemeRightStatementTileSerializer,
SchemeStatementSerializer,
TextualWorkRdmSystemSerializer,
GroupRdmSystemSerializer,
Expand Down Expand Up @@ -75,6 +76,21 @@ class SchemeRightsTileView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
serializer_class = SchemeRightsTileSerializer


class SchemeRightsTileCreateView(ArchesModelAPIMixin, ListCreateAPIView):
permission_classes = [RDMAdministrator]
serializer_class = SchemeRightsTileSerializer


class SchemeRightStatementTileView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
permission_classes = [RDMAdministrator]
serializer_class = SchemeRightStatementTileSerializer


class SchemeRightStatementTileCreateView(ArchesModelAPIMixin, ListCreateAPIView):
permission_classes = [RDMAdministrator]
serializer_class = SchemeRightStatementTileSerializer


class SchemeLabelView(ArchesModelAPIMixin, RetrieveUpdateDestroyAPIView):
permission_classes = [RDMAdministrator]
serializer_class = SchemeLabelSerializer
Expand Down

0 comments on commit bd40a04

Please sign in to comment.