mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-09-18 04:34:59 +00:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
ab98f3a102
|
|||
7516e68d77 | |||
7b60b7a8af |
3
.changes/v4.4.2.md
Normal file
3
.changes/v4.4.2.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## v4.4.2 - 2025-09-12
|
||||||
|
### Fixed
|
||||||
|
* Fix document generation and workflow generation do not work on accompanying period work documents
|
@@ -6,6 +6,10 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|||||||
and is generated by [Changie](https://github.com/miniscruff/changie).
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
||||||
|
|
||||||
|
|
||||||
|
## v4.4.2 - 2025-09-12
|
||||||
|
### Fixed
|
||||||
|
* Fix document generation and workflow generation do not work on accompanying period work documents
|
||||||
|
|
||||||
## v4.4.1 - 2025-09-11
|
## v4.4.1 - 2025-09-11
|
||||||
### Fixed
|
### Fixed
|
||||||
* fix translations in duplicate evaluation document modal and realign close modal button
|
* fix translations in duplicate evaluation document modal and realign close modal button
|
||||||
|
@@ -4,7 +4,7 @@ import { StoredObject, StoredObjectVersion } from "../../types";
|
|||||||
import DropFileWidget from "ChillDocStoreAssets/vuejs/DropFileWidget/DropFileWidget.vue";
|
import DropFileWidget from "ChillDocStoreAssets/vuejs/DropFileWidget/DropFileWidget.vue";
|
||||||
import { computed, reactive } from "vue";
|
import { computed, reactive } from "vue";
|
||||||
import { useToast } from "vue-toast-notification";
|
import { useToast } from "vue-toast-notification";
|
||||||
import { DOCUMENT_REPLACE, DOCUMENT_ADD, trans } from "translator";
|
import { DOCUMENT_ADD, trans } from "translator";
|
||||||
|
|
||||||
interface DropFileConfig {
|
interface DropFileConfig {
|
||||||
allowRemove: boolean;
|
allowRemove: boolean;
|
||||||
@@ -78,9 +78,7 @@ function closeModal(): void {
|
|||||||
>
|
>
|
||||||
{{ trans(DOCUMENT_ADD) }}
|
{{ trans(DOCUMENT_ADD) }}
|
||||||
</button>
|
</button>
|
||||||
<button v-else @click="openModal" class="dropdown-item">
|
<button v-else @click="openModal" class="btn btn-edit"></button>
|
||||||
{{ trans(DOCUMENT_REPLACE) }}
|
|
||||||
</button>
|
|
||||||
<modal
|
<modal
|
||||||
v-if="state.showModal"
|
v-if="state.showModal"
|
||||||
:modal-dialog-class="modalClasses"
|
:modal-dialog-class="modalClasses"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
role="button"
|
role="button"
|
||||||
data-bs-toggle="dropdown"
|
data-bs-toggle="dropdown"
|
||||||
aria-expanded="false">
|
aria-expanded="false">
|
||||||
<i class="fa fa-flash"></i>
|
<i class="bi bi-lightning-fill"></i>
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-menu">
|
<div class="dropdown-menu">
|
||||||
{% for menu in menus %}
|
{% for menu in menus %}
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
:id="evaluation.id"
|
:id="evaluation.id"
|
||||||
:templates="templates"
|
:templates="templates"
|
||||||
:preventDefaultMoveToGenerate="true"
|
:preventDefaultMoveToGenerate="true"
|
||||||
@go-to-generate-document="$emit('submitBeforeGenerate', $event)"
|
@go-to-generate-document="submitBeforeGenerate"
|
||||||
>
|
>
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<label class="col-form-label">{{
|
<label class="col-form-label">{{
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
<li>
|
<li>
|
||||||
<drop-file-modal
|
<drop-file-modal
|
||||||
:allow-remove="false"
|
:allow-remove="false"
|
||||||
@add-document="$emit('addDocument', $event)"
|
@add-document="emit('addDocument', $event)"
|
||||||
></drop-file-modal>
|
></drop-file-modal>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -39,9 +39,34 @@ import {
|
|||||||
EVALUATION_GENERATE_A_DOCUMENT,
|
EVALUATION_GENERATE_A_DOCUMENT,
|
||||||
trans,
|
trans,
|
||||||
} from "translator";
|
} from "translator";
|
||||||
|
import { buildLink } from "ChillDocGeneratorAssets/lib/document-generator";
|
||||||
|
import { useStore } from "vuex";
|
||||||
|
|
||||||
defineProps(["evaluation", "templates"]);
|
const store = useStore();
|
||||||
defineEmits(["addDocument", "submitBeforeGenerate"]);
|
|
||||||
|
const props = defineProps(["evaluation", "templates"]);
|
||||||
|
const emit = defineEmits(["addDocument"]);
|
||||||
|
|
||||||
|
async function submitBeforeGenerate({ template }) {
|
||||||
|
const callback = (data) => {
|
||||||
|
let evaluationId = data.accompanyingPeriodWorkEvaluations.find(
|
||||||
|
(e) => e.key === props.evaluation.key,
|
||||||
|
).id;
|
||||||
|
|
||||||
|
window.location.assign(
|
||||||
|
buildLink(
|
||||||
|
template,
|
||||||
|
evaluationId,
|
||||||
|
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluation",
|
||||||
|
),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return store.dispatch("submit", callback).catch((e) => {
|
||||||
|
console.log(e);
|
||||||
|
throw e;
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
@@ -58,7 +58,7 @@
|
|||||||
:preventDefaultMoveToGenerate="true"
|
:preventDefaultMoveToGenerate="true"
|
||||||
:goToGenerateWorkflowPayload="{ doc: d }"
|
:goToGenerateWorkflowPayload="{ doc: d }"
|
||||||
@go-to-generate-workflow="
|
@go-to-generate-workflow="
|
||||||
$emit('goToGenerateWorkflow', $event)
|
goToGenerateWorkflowEvaluationDocument
|
||||||
"
|
"
|
||||||
></list-workflow-modal>
|
></list-workflow-modal>
|
||||||
</li>
|
</li>
|
||||||
@@ -95,10 +95,9 @@
|
|||||||
<a
|
<a
|
||||||
class="dropdown-item"
|
class="dropdown-item"
|
||||||
@click="
|
@click="
|
||||||
$emit(
|
goToGenerateDocumentNotification(
|
||||||
'goToGenerateNotification',
|
|
||||||
d,
|
d,
|
||||||
true,
|
false,
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
@@ -113,8 +112,7 @@
|
|||||||
<a
|
<a
|
||||||
class="dropdown-item"
|
class="dropdown-item"
|
||||||
@click="
|
@click="
|
||||||
$emit(
|
goToGenerateDocumentNotification(
|
||||||
'goToGenerateNotification',
|
|
||||||
d,
|
d,
|
||||||
false,
|
false,
|
||||||
)
|
)
|
||||||
@@ -150,15 +148,35 @@
|
|||||||
"
|
"
|
||||||
></document-action-buttons-group>
|
></document-action-buttons-group>
|
||||||
</li>
|
</li>
|
||||||
|
<!--replace document-->
|
||||||
|
<li
|
||||||
|
v-if="
|
||||||
|
Number.isInteger(d.id) &&
|
||||||
|
d.storedObject._permissions.canEdit
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<drop-file-modal
|
||||||
|
:existing-doc="d.storedObject"
|
||||||
|
:allow-remove="false"
|
||||||
|
@add-document="
|
||||||
|
(arg) =>
|
||||||
|
replaceDocument(
|
||||||
|
d,
|
||||||
|
arg.stored_object,
|
||||||
|
arg.stored_object_version,
|
||||||
|
)
|
||||||
|
"
|
||||||
|
></drop-file-modal>
|
||||||
|
</li>
|
||||||
<li v-if="Number.isInteger(d.id)">
|
<li v-if="Number.isInteger(d.id)">
|
||||||
<div class="duplicate-dropdown">
|
<div class="duplicate-dropdown">
|
||||||
<button
|
<button
|
||||||
class="btn btn-edit dropdown-toggle"
|
class="btn btn-outline-primary dropdown-toggle"
|
||||||
type="button"
|
type="button"
|
||||||
data-bs-toggle="dropdown"
|
data-bs-toggle="dropdown"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
>
|
>
|
||||||
{{ trans(EVALUATION_DOCUMENT_EDIT) }}
|
<i class="bi bi-lightning-fill"></i>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<!--delete-->
|
<!--delete-->
|
||||||
@@ -180,27 +198,6 @@
|
|||||||
}}
|
}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<!--replace document-->
|
|
||||||
<li
|
|
||||||
v-if="
|
|
||||||
d.storedObject._permissions
|
|
||||||
.canEdit
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<drop-file-modal
|
|
||||||
:existing-doc="d.storedObject"
|
|
||||||
:allow-remove="false"
|
|
||||||
@add-document="
|
|
||||||
(arg) =>
|
|
||||||
$emit(
|
|
||||||
'replaceDocument',
|
|
||||||
d,
|
|
||||||
arg.stored_object,
|
|
||||||
arg.stored_object_version,
|
|
||||||
)
|
|
||||||
"
|
|
||||||
></drop-file-modal>
|
|
||||||
</li>
|
|
||||||
<!--duplicate document-->
|
<!--duplicate document-->
|
||||||
<li>
|
<li>
|
||||||
<a
|
<a
|
||||||
@@ -300,35 +297,45 @@ import {
|
|||||||
EVALUATION_DOCUMENTS,
|
EVALUATION_DOCUMENTS,
|
||||||
EVALUATION_DOCUMENT_MOVE,
|
EVALUATION_DOCUMENT_MOVE,
|
||||||
EVALUATION_DOCUMENT_DELETE,
|
EVALUATION_DOCUMENT_DELETE,
|
||||||
EVALUATION_DOCUMENT_EDIT,
|
|
||||||
EVALUATION_DOCUMENT_DUPLICATE_HERE,
|
EVALUATION_DOCUMENT_DUPLICATE_HERE,
|
||||||
EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_EVALUATION,
|
EVALUATION_DOCUMENT_DUPLICATE_TO_OTHER_EVALUATION,
|
||||||
trans,
|
trans,
|
||||||
} from "translator";
|
} from "translator";
|
||||||
import { ref, watch } from "vue";
|
import { computed, ref, watch } from "vue";
|
||||||
import AccompanyingPeriodWorkSelectorModal from "ChillPersonAssets/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkSelectorModal.vue";
|
import AccompanyingPeriodWorkSelectorModal from "ChillPersonAssets/vuejs/_components/AccompanyingPeriodWorkSelector/AccompanyingPeriodWorkSelectorModal.vue";
|
||||||
|
import { buildLinkCreate } from "ChillMainAssets/lib/entity-workflow/api";
|
||||||
|
import { buildLinkCreate as buildLinkCreateNotification } from "ChillMainAssets/lib/entity-notification/api";
|
||||||
|
import { useStore } from "vuex";
|
||||||
|
|
||||||
defineProps([
|
const props = defineProps([
|
||||||
"documents",
|
"documents",
|
||||||
"docAnchorId",
|
"docAnchorId",
|
||||||
"accompanyingPeriodId",
|
"accompanyingPeriodId",
|
||||||
"accompanyingPeriodWorkId",
|
"evaluation",
|
||||||
]);
|
]);
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
"inputDocumentTitle",
|
"inputDocumentTitle",
|
||||||
"removeDocument",
|
"removeDocument",
|
||||||
"duplicateDocument",
|
"duplicateDocument",
|
||||||
"statusDocumentChanged",
|
"statusDocumentChanged",
|
||||||
"goToGenerateWorkflow",
|
|
||||||
"goToGenerateNotification",
|
|
||||||
"duplicateDocumentToWork",
|
"duplicateDocumentToWork",
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const store = useStore();
|
||||||
|
|
||||||
const showAccompanyingPeriodSelector = ref(false);
|
const showAccompanyingPeriodSelector = ref(false);
|
||||||
const selectedEvaluation = ref(null);
|
const selectedEvaluation = ref(null);
|
||||||
const selectedDocumentToDuplicate = ref(null);
|
const selectedDocumentToDuplicate = ref(null);
|
||||||
const selectedDocumentToMove = ref(null);
|
const selectedDocumentToMove = ref(null);
|
||||||
|
|
||||||
|
const AmIRefferer = computed(() => {
|
||||||
|
return !(
|
||||||
|
store.state.work.accompanyingPeriod.user &&
|
||||||
|
store.state.me &&
|
||||||
|
store.state.work.accompanyingPeriod.user.id !== store.state.me.id
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
const prepareDocumentDuplicationToWork = (d) => {
|
const prepareDocumentDuplicationToWork = (d) => {
|
||||||
selectedDocumentToDuplicate.value = d;
|
selectedDocumentToDuplicate.value = d;
|
||||||
/** ensure selectedDocumentToMove is null */
|
/** ensure selectedDocumentToMove is null */
|
||||||
@@ -358,4 +365,91 @@ watch(selectedEvaluation, (val) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function goToGenerateWorkflowEvaluationDocument({
|
||||||
|
workflowName,
|
||||||
|
payload,
|
||||||
|
}) {
|
||||||
|
const callback = (data) => {
|
||||||
|
let evaluation = data.accompanyingPeriodWorkEvaluations.find(
|
||||||
|
(e) => e.key === props.evaluation.key,
|
||||||
|
);
|
||||||
|
let updatedDocument = evaluation.documents.find(
|
||||||
|
(d) => d.key === payload.doc.key,
|
||||||
|
);
|
||||||
|
window.location.assign(
|
||||||
|
buildLinkCreate(
|
||||||
|
workflowName,
|
||||||
|
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluationDocument",
|
||||||
|
updatedDocument.id,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return store.dispatch("submit", callback).catch((e) => {
|
||||||
|
console.log(e);
|
||||||
|
throw e;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces a document in the store with a new document.
|
||||||
|
*
|
||||||
|
* @param {Object} oldDocument - The document to be replaced.
|
||||||
|
* @param {StoredObject} storedObject - The stored object of the new document.
|
||||||
|
* @param {StoredObjectVersion} storedObjectVersion - The new version of the document
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
async function replaceDocument(oldDocument, storedObject, storedObjectVersion) {
|
||||||
|
let document = {
|
||||||
|
type: "accompanying_period_work_evaluation_document",
|
||||||
|
storedObject: storedObject,
|
||||||
|
title: oldDocument.title,
|
||||||
|
};
|
||||||
|
|
||||||
|
return store.commit("replaceDocument", {
|
||||||
|
key: props.evaluation.key,
|
||||||
|
document,
|
||||||
|
oldDocument: oldDocument,
|
||||||
|
stored_object_version: storedObjectVersion,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function goToGenerateDocumentNotification(document, tos) {
|
||||||
|
const callback = (data) => {
|
||||||
|
let evaluation = data.accompanyingPeriodWorkEvaluations.find(
|
||||||
|
(e) => e.key === props.evaluation.key,
|
||||||
|
);
|
||||||
|
let updatedDocument = evaluation.documents.find(
|
||||||
|
(d) => d.key === document.key,
|
||||||
|
);
|
||||||
|
window.location.assign(
|
||||||
|
buildLinkCreateNotification(
|
||||||
|
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluationDocument",
|
||||||
|
updatedDocument.id,
|
||||||
|
tos === true
|
||||||
|
? store.state.work.accompanyingPeriod.user?.id
|
||||||
|
: null,
|
||||||
|
window.location.pathname +
|
||||||
|
window.location.search +
|
||||||
|
window.location.hash,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return store.dispatch("submit", callback).catch((e) => {
|
||||||
|
console.log(e);
|
||||||
|
throw e;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function submitBeforeLeaveToEditor() {
|
||||||
|
console.log("submit beore edit 2");
|
||||||
|
// empty callback
|
||||||
|
const callback = () => null;
|
||||||
|
return store.dispatch("submit", callback).catch((e) => {
|
||||||
|
console.log(e);
|
||||||
|
throw e;
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@@ -24,8 +24,8 @@
|
|||||||
v-if="evaluation.documents.length > 0"
|
v-if="evaluation.documents.length > 0"
|
||||||
:documents="evaluation.documents"
|
:documents="evaluation.documents"
|
||||||
:docAnchorId="docAnchorId"
|
:docAnchorId="docAnchorId"
|
||||||
|
:evaluation="evaluation"
|
||||||
:accompanyingPeriodId="store.state.work.accompanyingPeriod.id"
|
:accompanyingPeriodId="store.state.work.accompanyingPeriod.id"
|
||||||
:accompanying-period-work-id="store.state.work.id"
|
|
||||||
@inputDocumentTitle="onInputDocumentTitle"
|
@inputDocumentTitle="onInputDocumentTitle"
|
||||||
@removeDocument="removeDocument"
|
@removeDocument="removeDocument"
|
||||||
@duplicateDocument="duplicateDocument"
|
@duplicateDocument="duplicateDocument"
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
"
|
"
|
||||||
@move-document-to-evaluation="moveDocumentToEvaluation"
|
@move-document-to-evaluation="moveDocumentToEvaluation"
|
||||||
@statusDocumentChanged="onStatusDocumentChanged"
|
@statusDocumentChanged="onStatusDocumentChanged"
|
||||||
@goToGenerateWorkflow="goToGenerateWorkflowEvaluationDocument"
|
|
||||||
@goToGenerateNotification="goToGenerateDocumentNotification"
|
@goToGenerateNotification="goToGenerateDocumentNotification"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@@ -42,7 +41,6 @@
|
|||||||
:evaluation="evaluation"
|
:evaluation="evaluation"
|
||||||
:templates="getTemplatesAvailables"
|
:templates="getTemplatesAvailables"
|
||||||
@addDocument="addDocument"
|
@addDocument="addDocument"
|
||||||
@submitBeforeGenerate="submitBeforeGenerate"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -290,29 +288,6 @@ function onStatusDocumentChanged(newStatus) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function goToGenerateWorkflowEvaluationDocument({ workflowName, payload }) {
|
|
||||||
const callback = (data) => {
|
|
||||||
let evaluation = data.accompanyingPeriodWorkEvaluations.find(
|
|
||||||
(e) => e.key === props.evaluation.key,
|
|
||||||
);
|
|
||||||
let updatedDocument = evaluation.documents.find(
|
|
||||||
(d) => d.key === payload.doc.key,
|
|
||||||
);
|
|
||||||
window.location.assign(
|
|
||||||
buildLinkCreate(
|
|
||||||
workflowName,
|
|
||||||
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluationDocument",
|
|
||||||
updatedDocument.id,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
store.dispatch("submit", callback).catch((e) => {
|
|
||||||
console.log(e);
|
|
||||||
throw e;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function goToGenerateDocumentNotification(document, tos) {
|
function goToGenerateDocumentNotification(document, tos) {
|
||||||
const callback = (data) => {
|
const callback = (data) => {
|
||||||
let evaluation = data.accompanyingPeriodWorkEvaluations.find(
|
let evaluation = data.accompanyingPeriodWorkEvaluations.find(
|
||||||
|
Reference in New Issue
Block a user