feat: enable document duplication to another evaluation

- Introduce API method for duplicating a document to a different evaluation
- Add Vuex actions and mutations to handle duplication logic to another evaluation
This commit is contained in:
2025-08-13 12:35:40 +02:00
parent 56c43a0a76
commit 6a2ee232a9
5 changed files with 29 additions and 17 deletions

View File

@@ -129,7 +129,7 @@
<a <a
class="dropdown-item" class="dropdown-item"
@click="prepareDocumentDuplicationToWork(d)" @click="prepareDocumentDuplicationToWork(d)"
>{{ trans(EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_WORK) }}</a >{{ trans(EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_EVALUATION) }}</a
> >
</li> </li>
</ul> </ul>
@@ -183,7 +183,7 @@ import {
EVALUATION_DOCUMENTS, EVALUATION_DOCUMENTS,
EVALUATION_DOCUMENT_DUPLICATE, EVALUATION_DOCUMENT_DUPLICATE,
EVALUATION_DOCUMENT_DUPLICATE_HERE, EVALUATION_DOCUMENT_DUPLICATE_HERE,
EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_WORK, EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_EVALUATION,
trans, trans,
} from "translator"; } from "translator";
import { ref, watch } from "vue"; import { ref, watch } from "vue";

View File

@@ -52,9 +52,7 @@ import TimeSpentInput from "./TimeSpentInput.vue";
import CommentInput from "./CommentInput.vue"; import CommentInput from "./CommentInput.vue";
import DocumentsList from "./DocumentsList.vue"; import DocumentsList from "./DocumentsList.vue";
import DocumentActions from "./DocumentActions.vue"; import DocumentActions from "./DocumentActions.vue";
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
import { useToast } from "vue-toast-notification"; import { useToast } from "vue-toast-notification";
import { DOCUMENT_DUPLICATE_TO_EVALUATION_SUCCESS, trans } from "translator";
const props = defineProps(["evaluation", "docAnchorId"]); const props = defineProps(["evaluation", "docAnchorId"]);
const store = useStore(); const store = useStore();
@@ -242,16 +240,9 @@ function duplicateDocument(document) {
} }
function duplicateDocumentToEvaluation({ evaluation, document }) { function duplicateDocumentToEvaluation({ evaluation, document }) {
const url = `/api/1.0/person/accompanying-course-work-evaluation-document/${document.id}/evaluation/${evaluation.id}/duplicate`; store.dispatch("duplicateDocumentToEvaluation", {
// console.log('document id', document.id, 'evaluation id', evaluation.id) evaluation: evaluation,
document: document,
makeFetch("POST", url)
.then((response) => {
console.log("new document", response);
toast.open({ message: trans(DOCUMENT_DUPLICATE_TO_EVALUATION_SUCCESS) });
})
.catch((error) => {
console.log(error);
}); });
} }

View File

@@ -11,7 +11,7 @@ import { findSocialActionsBySocialIssue } from "ChillPersonAssets/vuejs/_api/Soc
import { create } from "ChillPersonAssets/vuejs/_api/AccompanyingCourseWork.js"; import { create } from "ChillPersonAssets/vuejs/_api/AccompanyingCourseWork.js";
import { fetchResults, makeFetch } from "ChillMainAssets/lib/api/apiMethods.ts"; import { fetchResults, makeFetch } from "ChillMainAssets/lib/api/apiMethods.ts";
import { fetchTemplates } from "ChillDocGeneratorAssets/api/pickTemplate.js"; import { fetchTemplates } from "ChillDocGeneratorAssets/api/pickTemplate.js";
import { duplicate } from "../_api/accompanyingCourseWorkEvaluationDocument"; import { duplicate, duplicateDocumentToEvaluation } from "../_api/accompanyingCourseWorkEvaluationDocument";
const debug = process.env.NODE_ENV !== "production"; const debug = process.env.NODE_ENV !== "production";
const evalFQDN = encodeURIComponent( const evalFQDN = encodeURIComponent(
@@ -302,6 +302,13 @@ const store = createStore({
document.key = evaluation.documents.length + 1; document.key = evaluation.documents.length + 1;
evaluation.documents.splice(0, 0, document); evaluation.documents.splice(0, 0, document);
}, },
addDuplicatedDocumentToEvaluation(state, { document, evaluation }) {
let evaluationDest = state.evaluationsPicked.find(
(e) => e.id === evaluation.id,
);
document.key = evaluationDest.documents.length + 1;
evaluationDest.documents.splice(0, 0, document);
},
/** /**
* Replaces a document in the state with a new document. * Replaces a document in the state with a new document.
* *
@@ -598,6 +605,10 @@ const store = createStore({
const newDoc = await duplicate(document.id); const newDoc = await duplicate(document.id);
commit("addDuplicatedDocument", { document: newDoc, evaluation_key }); commit("addDuplicatedDocument", { document: newDoc, evaluation_key });
}, },
async duplicateDocumentToEvaluation({ commit }, { document, evaluation }) {
const newDoc = await duplicateDocumentToEvaluation(document.id, evaluation.id);
commit("addDuplicatedDocumentToEvaluation", { document: newDoc, evaluation });
},
removeDocument({ commit }, payload) { removeDocument({ commit }, payload) {
commit("removeDocument", payload); commit("removeDocument", payload);
}, },

View File

@@ -9,3 +9,13 @@ export const duplicate = async (
`/api/1.0/person/accompanying-course-work-evaluation-document/${id}/duplicate`, `/api/1.0/person/accompanying-course-work-evaluation-document/${id}/duplicate`,
); );
}; };
export const duplicateDocumentToEvaluation = async (
document_id: number,
evaluation_id: number,
): Promise<AccompanyingPeriodWorkEvaluationDocument> => {
return makeFetch<null, AccompanyingPeriodWorkEvaluationDocument>(
"POST",
`/api/1.0/person/accompanying-course-work-evaluation-document/${document_id}/evaluation/${evaluation_id}/duplicate`,
);
};

View File

@@ -775,7 +775,7 @@ evaluation:
document: document:
duplicate: Dupliquer duplicate: Dupliquer
duplicate_here: Dupliquer ici duplicate_here: Dupliquer ici
duplicate_to_other_work: Dupliquer vers un autre actions d'accompagnement duplicate_to_other_evaluation: Dupliquer vers une autre évaluation
goal: goal: