add Dropdown for Multiaction Print

add Event for adding Documents to PrintArray
add Berechtigung hasPermissionOutputformat to enable Print for odt and doc Formats (documents abschlusspruefung)
add Validations
This commit is contained in:
ma0068
2025-08-28 11:05:04 +02:00
parent 3a5c4444cb
commit 7b187ebadd
4 changed files with 103 additions and 193 deletions
@@ -572,29 +572,21 @@ class Dokumente extends FHCAPI_Controller
public function getDocumentDropDown($prestudent_id, $studiensemester_kurzbz, $studiengang_kz)
{
//TODO(Manu) Berechtigungen hasPermissionOutputformat
//TODO(Manu) remove: just for test ouput
$hasPermissionOutputformat = false;
//permission to create also odt, and doc outputs of certain documents(menu abschlusspruefung)
$hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's');
//TODO(Manu) Validierungen
if (!$prestudent_id) {
$this->terminateWithError('Prestudent id is required.');
}
if (!$prestudent_id)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Prestudent_id']), self::ERROR_TYPE_GENERAL);
if (!$studiensemester_kurzbz)
$this->terminateWithError("kein Studiensemester");
if (!$studiengang_kz)
$this->terminateWithError("kein Studiengang_kz");
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL);
if(!$studiengang_kz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$uid = $this->_loadUIDFromPrestudent($prestudent_id);
$semArray = $this->_getEntriesStudiensemester();
$stgTyp = $this->_getStudiengangstyp($studiengang_kz);
//TODO(Manu) check if if Array[0] bis Array[4] befüllt
//TODO(Manu) handling stgTyp ungleich b,m,d
// $semString = implode(";", $semArray);
// $this->terminateWithError("Semester " . $semString . " " . $semArray[0] . " " . $semArray[1]);
$documents = [
$this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uid, 10, null),
$this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uid, 20, null),
@@ -605,7 +597,6 @@ class Dokumente extends FHCAPI_Controller
$this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uid, 60, null),
$this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uid, 61, null),
// Studienerfolg Menüs automatisch
$this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz),
$this->buildStudienerfolgSubmenu("en", $uid, $semArray, $studiensemester_kurzbz),
$this->buildStudienerfolgSubmenu("de", $uid, $semArray, $studiensemester_kurzbz, true),
@@ -617,7 +608,7 @@ class Dokumente extends FHCAPI_Controller
"name" => "Verwaltung des StudierendenStatus",
"order" => 110,
"data" => [
$this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldungl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
$this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
$this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
$this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
$this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudent_id&output=pdf", $uid, null, null),
@@ -651,8 +642,11 @@ class Dokumente extends FHCAPI_Controller
return $documents || null;
}
public function getDocumentDropDownMulti()
public function getDocumentDropDownMulti($studiensemester_kurzbz,$studiengang_kz)
{
//permission to create also odt, and doc outputs of certain documents (menu abschlusspruefung)
$hasPermissionOutputformat = $this->permissionlib->isBerechtigt('system/change_outputformat', 's');
$studentUids = $this->input->get('studentUids');
$prestudentIds = [];
@@ -661,134 +655,71 @@ class Dokumente extends FHCAPI_Controller
$prestudent_id = $this-> _loadPrestudentFromUid($uid);
$prestudentIds[] = $prestudent_id;
}
} else {
echo "No prestudent IDs received.";
}
else
{
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Array StudentUIDs']), self::ERROR_TYPE_GENERAL);
}
if (!$studiensemester_kurzbz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiensemester']), self::ERROR_TYPE_GENERAL);
if(!$studiengang_kz)
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$uidString = implode(";", $studentUids);
$prestudentIdsString = implode(";", $prestudentIds);
$semArray = $this->_getEntriesStudiensemester();
$stgTyp = $this->_getStudiengangstyp($studiengang_kz);
$documents = [
[
"id" => "accountinfo1",
"type" => "documenturl",
"name" => "Accountinfoblatt",
"url" => "pdfExport.php?xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "ausbildungsvertrag1_de",
"type" => "documenturl",
"name" => "Ausbildungsvertrag Deutsch",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "ausbildungsvertrag1_en",
"type" => "documenturl",
"name" => "Ausbildungsvertrag Englisch",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "submenu_studienerfolg_1",
"type" => "submenu",
"name" => "Studienerfolg",
"data" => [
[
"id" => "submenu_studienerfolg_sem1",
"type" => "submenu",
"name" => "Studienerfolg WS2025",
"data" => [
[
"id" => "studienerfolg_sem_alle_1",
"type" => "submenu",
"name" => "Studienerfolg WS2025 Alle",
"data" => [
[
"id" => "studienerfolg_sem_alle_1_FA",
"type" => "documenturl",
"name" => "Studienerfolg Alle FINANZAMT",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "studienerfolg_sem_alle_1_nichtFA",
"type" => "documenturl",
"name" => "Studienerfolg Alle NICHT FINANZAMT",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
]
]
$this->buildDropdownEntry("accountinfo", "Accountinfoblatt", "xml=accountinfoblatt.xml.php&xsl=AccountInfo&output=pdf", $uidString, 10, null),
$this->buildDropdownEntry("ausbildungsvertrag", "Ausbildungsvertrag", "xml=ausbildungsvertrag.xml.php&xsl=Ausbildungsver&output=pdf", $uidString, 20, null),
$this->buildDropdownEntry("ausbildungsvertrag_en", "Ausbildungsvertrag Englisch", "xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf", $uidString, 21, null),
$this->buildDropdownEntry("studienbestaetigung", "Studienbestätigung", "xml=student.rdf.php&xsl=Inskription&output=pdf", $uidString, 40, null),
$this->buildDropdownEntry("studienbestaetigung_en", "Studienbestätigung Englisch", "xml=student.rdf.php&xsl=InskriptionEng&output=pdf", $uidString, 41, null),
$this->buildDropdownEntry("zutrittskarte", "Zutrittskarte", "xsl=ZutrittskarteStud&output=pdf&data=$uidString", $uidString,100, "zutrittskarte.php"),
$this->buildDropdownEntry("studienblatt", "Studienblatt", "xml=studienblatt.xml.php&xsl=Studienblatt&output=pdf&ss=$studiensemester_kurzbz", $uidString, 60, null),
$this->buildDropdownEntry("studienblatt_eng", "Studienblatt Englisch", "xml=studienblatt.xml.php&xsl=StudienblattEng&output=pdf&ss=$studiensemester_kurzbz", $uidString, 61, null),
// Studienerfolg Menüs automatisch
$this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz),
$this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz),
$this->buildStudienerfolgSubmenu("de", $uidString, $semArray, $studiensemester_kurzbz, true),
$this->buildStudienerfolgSubmenu("en", $uidString, $semArray, $studiensemester_kurzbz, true),
]
]
]
]
],
[
"id" => "submenu_studstatus",
"id" => "submenu_studstatus",
"type" => "submenu",
"name" => "Verwaltung des StudierendenStatus",
"order" => 110,
"data" => [
[
"id" => "Abmeldung",
"type" => "documenturl",
"name" => "Abmeldung",
"url" => "pdfExport.php?xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "Abmeldung durch Stg",
"type" => "documenturl",
"name" => "AntragAbmeldungStgl",
"url" => "pdfExport.php?xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
]
$this->buildDropdownEntry("Abmeldung", "Abmeldung", "xml=AntragAbmeldung.xml.php&xsl=AntragAbmeldung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
$this->buildDropdownEntry("Abmeldung durch Stgl", "AntragAbmeldungStgl", "xml=AntragAbmeldungStgl.xml.php&xsl=AntragAbmeldungStgl&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
$this->buildDropdownEntry("Unterbrechung", "Unterbrechung", "xml=AntragUnterbrechung.xml.php&xsl=AntragUnterbrechung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
$this->buildDropdownEntry("Wiederholung", "Abmeldung durch Ablauf der Wiederholungsfrist", "xml=AntragWiederholung.xml.php&xsl=AntragWiederholung&prestudent_id=$prestudentIdsString&output=pdf", $uidString, null, null),
]
],
[
"id" => "zutrittskarte",
"type" => "documenturl",
"name" => "Zutrittskarte",
"url" => "zutrittskarte.php?xsl=ZutrittskarteStud&output=pdf&data=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "zutrittskarte",
"type" => "parameterurl",
"name" => "Zutrittskarte",
"baseurl" => "zutrittskarte.php",
"parameterurl" =>"xsl=ZutrittskarteStud&output=pdf&data=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "studienbestaetigung",
"type" => "documenturl",
"name" => "Studienbestätigung",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
[
"id" => "studienerfolg",
"type" => "documenturl",
"name" => "Studienbestätigung",
"url" => "pdfExport.php?xml=ausbildungsvertrag.xml.php&xsl=AusbVerEng&output=pdf&uid=" . $uidString,
"scope" => "prestudent"
],
$this->loadDropDownEntriesFinalExam($hasPermissionOutputformat, $stgTyp, $uidString),
//TODO(Manu) also in Fas multi not working
/* $this->buildDropdownEntry("bescheid", "Bescheid (nur Voransicht)", "xml=abschlusspruefung.rdf.php&xsl_stg_kz=$studiengang_kz&xsl=Bescheid&output=pdf", $uidString, 80, null),
*/
$this->buildDropdownEntry("diplomasupp", "Diploma Supplement (nur Voransicht)", "xml=diplomasupplement.xml.php&xsl_stg_kz=$studiengang_kz&xsl=DiplSupplement&output=pdf", $uidString, 81, null)
];
/* Events::trigger('DocumentGenerationDropDownMulti',
Events::trigger('DocumentGenerationDropDownMulti',
// passing $menu per reference
function & () use (&$documents) {
return $documents;
},
$prestudent_id,
$studentUids,
$studiensemester_kurzbz,
$studiengang_kz
);*/
);
usort($documents, function ($a, $b) {
$orderA = isset($a['order']) ? (int)$a['order'] : PHP_INT_MAX;
@@ -796,7 +727,6 @@ class Dokumente extends FHCAPI_Controller
return $orderA <=> $orderB;
});
// FireEvent(DocumentGenerationDropDownMulti(&$documents);
$this->terminateWithSuccess($documents);
@@ -977,9 +907,7 @@ class Dokumente extends FHCAPI_Controller
else if ($stgTyp == 'm' || $stgTyp == 'd')
$postfix = 'Master';
else
//TODO(Manu) sollte nicht null sein!! -> dropdown wird im Falle von Lehrgängen nicht erstellt
return null;
return [];
$arrayFinalExam = [
'pruefungsprotokoll' => [
+2 -3
View File
@@ -74,16 +74,15 @@ export default {
};
},
getDocumentDropdown(params){
console.log(params);
return {
method: 'get',
url: 'api/frontend/v1/stv/dokumente/getDocumentDropDown/' + params.prestudent_id + '/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz,
};
},
getDocumentDropdownMulti(studentUids){
getDocumentDropdownMulti(studentUids, params){
return {
method: 'get',
url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/',
url: 'api/frontend/v1/stv/dokumente/getDocumentDropDownMulti/' + params.studiensemester_kurzbz + '/' + params.studiengang_kz,
params: {studentUids}
};
}
@@ -224,14 +224,11 @@ export default {
return retval;
},
showDropDownMulti(){
if (this.modelValue.length) {
console.log("started comp property showDropdown Multi " + this.modelValue.length);
return true;
}
return false;
}
},
watch: {
modelValue() {
@@ -308,17 +305,18 @@ export default {
.catch(this.$fhcAlert.handleSystemError);
if (this.modelValue.length) {
console.log("multi" + this.modelValue.length);
console.log(this.studentUids);
const params = {
studiensemester_kurzbz: this.currentSemester,
studiengang_kz: this.stg_kz
};
this.$api
.call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids))
.call(ApiStvDocuments.getDocumentDropdownMulti(this.studentUids, params))
.then(result => {
console.log(result);
this.documentDropdownObject = result;
})
.catch(this.$fhcAlert.handleSystemError);
} else {
console.log("single");
const params = {
prestudent_id: this.modelValue.prestudent_id,
studiensemester_kurzbz: this.currentSemester,
@@ -34,7 +34,6 @@ export default {
printDokument(url, scope){
//TODO Manu(check if logic not in content (Zutrittkarte also in content folder))
let linkToPdf = this.cisRoot + 'content/' + url;
console.log("in print " + linkToPdf + " scope" + scope);
window.open(linkToPdf, '_blank');
}
},
@@ -42,71 +41,57 @@ export default {
<div class="stv-document-dropdown">
<div class="btn-group">
<button
v-if="!showDropDownMulti"
ref="toolbarButton"
type="button"
class="btn btn-secondary dropdown-toggle"
class="btn btn-secondary dropdown-toggle px-5 ms-4"
data-bs-toggle="dropdown"
data-bs-auto-close="outside"
aria-expanded="false"
@[\`show.bs.dropdown\`]="event => { if (event.target.closest('.tabulator-row')) event.target.closest('.tabulator-row').style.zIndex = 12 }"
@[\`hidden.bs.dropdown\`]="event => { if (event.target.closest('.tabulator-row')) event.target.closest('.tabulator-row').style.zIndex = '' }"
>
{{this.$p.t('dokumente','dokument_erstellen')}}
</button>
<button
v-else
ref="toolbarButton"
type="button"
class="btn btn-secondary dropdown-toggle"
data-bs-toggle="dropdown"
data-bs-auto-close="outside"
aria-expanded="false"
>
multi: {{this.$p.t('tools','dokument_erstellen')}}
</button>
<ul class="dropdown-menu dropdown-menu-right">
<template v-for="doc in documents" :key="doc.id">
<li v-if="doc.type === 'documenturl'">
<button class="dropdown-item" type="button" @click="printDokument(doc.url, doc.scope)">
{{ doc.name }}
</button>
</li>
<ul class="dropdown-menu dropdown-menu-right">
<template v-for="doc in documents" :key="doc.id">
<li v-if="doc.type === 'documenturl'">
<button class="dropdown-item" type="button" @click="printDokument(doc.url, doc.scope)">
{{ doc.name }}
</button>
</li>
<li v-else-if="doc.type === 'submenu'" class="dropend">
<a
class="dropdown-item dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{{ doc.name }}
</a>
<li v-else-if="doc.type === 'submenu'" class="dropend">
<a
class="dropdown-item dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{{ doc.name }}
</a>
<ul class="dropdown-menu">
<template v-for="child in doc.data" :key="child.id">
<li v-if="child.type === 'documenturl'">
<button class="dropdown-item" type="button" @click="printDokument(child.url, child.scope)">
{{ child.name }}
</button>
</li>
<li v-else-if="child.type === 'submenu'" class="dropend">
<a
class="dropdown-item dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{{ child.name }}
</a>
</li>
</template>
</ul>
</li>
</template>
<ul class="dropdown-menu">
<template v-for="child in doc.data" :key="child.id">
<li v-if="child.type === 'documenturl'">
<button class="dropdown-item" type="button" @click="printDokument(child.url, child.scope)">
{{ child.name }}
</button>
</li>
<li v-else-if="child.type === 'submenu'" class="dropend">
<a
class="dropdown-item dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
{{ child.name }}
</a>
</li>
</template>
</ul>
</li>
</template>
</ul>
</div>