Add Logic Permission and Phrases

This commit is contained in:
ma0068
2025-01-21 15:34:43 +01:00
parent ffc99379ae
commit 9c0baeacf2
11 changed files with 273 additions and 134 deletions
+26 -10
View File
@@ -11,6 +11,12 @@ export default {
CoreForm,
FormInput
},
inject: {
hasSchreibrechte: {
from: 'hasSchreibrechte',
default: false
},
},
props: {
person_id: {
type: [Number],
@@ -69,20 +75,30 @@ export default {
let type = cell.getData().type;
if (type == 'Lehrauftrag')
{
button.addEventListener(
'click',
() =>
this.actionDeleteLehrauftrag(cell.getData().vertrag_id, cell.getData().lehreinheit_id, cell.getData().mitarbeiter_uid)
);
if (!this.hasSchreibrechte) {
button.disabled = true;
button.classList.add('disabled');
} else {
button.addEventListener(
'click',
() =>
this.actionDeleteLehrauftrag(cell.getData().vertrag_id, cell.getData().lehreinheit_id, cell.getData().mitarbeiter_uid)
);
}
}
if (type == 'Betreuung')
{
button.addEventListener(
'click',
() =>
this.actionDeleteBetreuung(cell.getData().vertrag_id, cell.getData().projektarbeit_id, cell.getData().betreuerart_kurzbz)
);
if (!this.hasSchreibrechte) {
button.disabled = true;
button.classList.add('disabled');
} else {
button.addEventListener(
'click',
() =>
this.actionDeleteBetreuung(cell.getData().vertrag_id, cell.getData().projektarbeit_id, cell.getData().betreuerart_kurzbz)
);
}
}
container.append(button);
+17 -6
View File
@@ -11,6 +11,12 @@ export default {
CoreForm,
FormInput
},
inject: {
hasSchreibrechte: {
from: 'hasSchreibrechte',
default: false
},
},
props: {
vertrag_id: {
type: [Number],
@@ -69,11 +75,16 @@ export default {
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-xmark"></i>';
button.title = this.$p.t('vertrag', 'deleteStatus');
button.addEventListener(
'click',
() =>
this.actionDeleteStatus(cell.getData().vertrag_id, cell.getData().vertragsstatus_kurzbz)
);
if (!this.hasSchreibrechte) {
button.disabled = true;
button.classList.add('disabled');
} else {
button.addEventListener(
'click',
() =>
this.actionDeleteStatus(cell.getData().vertrag_id, cell.getData().vertragsstatus_kurzbz)
);
}
container.append(button);
@@ -263,7 +274,7 @@ export default {
</core-form>
<template #footer>
<button type="button" class="btn btn-primary" @click="statusNew ? handleSubmit('new') : handleSubmit('edit')">{{$p.t('ui', 'speichern')}}</button>
<button type="button" class="btn btn-primary" :disabled="!this.hasSchreibrechte" @click="statusNew ? handleSubmit('new') : handleSubmit('edit')">{{$p.t('ui', 'speichern')}}</button>
</template>
</bs-modal>
@@ -93,12 +93,12 @@ export default {
<p>
<strong class="text-muted">Email </strong>
<span v-if="!headerData?.alias">
<a :href="'mailto:'+headerData?.uid+'@'+domain">{{ headerData.uid }}@{{ domain }}</a>
<a :href="'mailto:'+headerData?.uid+'@'+domain">{{headerData.uid}}@{{domain}}</a>
</span>
<span v-if="headerData?.alias">
<a :href="'mailto:'+headerData?.alias+'@'+domain">{{ headerData.alias }}@{{ domain }}</a>
<a :href="'mailto:'+headerData?.alias+'@'+domain">{{headerData.alias}}@{{domain}}</a>
</span>
<span v-if="headerData?.telefonklappe" class="mb-2"> | <strong class="text-muted">DW</strong> {{ headerData?.telefonklappe }}</span>
<span v-if="headerData?.telefonklappe" class="mb-2"> | <strong class="text-muted">DW </strong>{{headerData?.telefonklappe}}</span>
</p>
</div>
@@ -78,53 +78,39 @@ export default {
handler: this.rowSelectionChanged
},
{
/* event: 'tableBuilt',
event: 'tableBuilt',
handler: async() => {
await this.$p.loadCategory(['ui', 'global', 'vertrag']);
await this.$p.loadCategory(['person', 'global', 'vertrag']);
let cm = this.$refs.table.tabulator.columnManager;
cm.getColumnByField('bezeichnung').component.updateDefinition({
title: this.$p.t('ui', 'bezeichnung')
cm.getColumnByField('person_id').component.updateDefinition({
title: this.$p.t('person', 'person_id')
});
cm.getColumnByField('lehreinheit_id').component.updateDefinition({
title: this.$p.t('ui', 'lehreinheit_id')
cm.getColumnByField('nachname').component.updateDefinition({
title: this.$p.t('person', 'nachname')
});
cm.getColumnByField('betrag').component.updateDefinition({
title: this.$p.t('ui', 'betrag')
cm.getColumnByField('vorname').component.updateDefinition({
title: this.$p.t('person', 'vorname')
});
cm.getColumnByField('status').component.updateDefinition({
title: this.$p.t('global', 'status')
cm.getColumnByField('aktiv').component.updateDefinition({
title: this.$p.t('global', 'aktiv')
});
cm.getColumnByField('vertragstyp_bezeichnung').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragstyp')
cm.getColumnByField('format_gebdatum').component.updateDefinition({
title: this.$p.t('person', 'geburtsdatum')
});
cm.getColumnByField('format_vertragsdatum').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsdatum')
cm.getColumnByField('unternehmen').component.updateDefinition({
title: this.$p.t('person', 'firma')
});
cm.getColumnByField('vertragsdatum').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsdatum_iso')
cm.getColumnByField('vertragsarten').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsarten')
});
cm.getColumnByField('vertragsstunden').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsstunden')
cm.getColumnByField('ids').component.updateDefinition({
title: this.$p.t('vertrag', 'idsDienstverhaeltnisse')
});
cm.getColumnByField('vertragsstunden_studiensemester_kurzbz').component.updateDefinition({
title: this.$p.t('vertrag', 'vertragsstunden_studiensemester')
});
cm.getColumnByField('vertrag_id').component.updateDefinition({
title: this.$p.t('ui', 'vertrag_id')
});
cm.getColumnByField('anmerkung').component.updateDefinition({
title: this.$p.t('global', 'anmerkung')
});
cm.getColumnByField('isabgerechnet').component.updateDefinition({
title: this.$p.t('vertrag', 'abgerechnet')
});
cm.getColumnByField('actions').component.updateDefinition({
title: this.$p.t('global', 'aktionen')
});
} */
}
}
],
selectedPerson: null,
@@ -147,14 +133,14 @@ export default {
},
template: `
<div class="core-mitarbeiter h-100 d-flex flex-column">
<h4>Vertragsverwaltung</h4>
<h4>{{$p.t('vertrag', 'vertragsverwaltung')}}</h4>
<!-- filter: show only active employees-->
<div class="justify-content-end py-3">
<form-input
container-class="form-switch"
type="checkbox"
label="nur aktive Mitarbeiter:innen anzeigen"
:label="$p.t('vertrag/nurAktiveMaAnzeigen')"
v-model="isFilterSet"
@change="onSwitchChange"
>
+38 -33
View File
@@ -21,6 +21,10 @@ export default {
cisRoot: {
from: 'cisRoot'
},
hasSchreibrechte: {
from: 'hasSchreibrechte',
default: false
},
},
props: {
endpoint: {
@@ -94,11 +98,17 @@ export default {
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-xmark"></i>';
button.title = this.$p.t('vertrag', 'deleteVertrag');
button.addEventListener(
'click',
() =>
this.actionDeleteContract(cell.getData().vertrag_id)
);
if (!this.hasSchreibrechte) {
button.disabled = true;
button.classList.add('disabled');
} else {
button.addEventListener(
'click',
() =>
this.actionDeleteContract(cell.getData().vertrag_id)
);
}
container.append(button);
return container;
@@ -443,17 +453,16 @@ export default {
//methods for functionality ADDON KU
printContract(){
this.getMitarbeiter_uid().then(()=> {
//check if at least 2 contracts chosen
if(this.arraySelectedContracts.length < 2) {
this.$fhcAlert.alertError('Bitte mindestens 2 Verträge auswählen');
this.$fhcAlert.alertError(this.$p.t('vertrag', 'alertMindestensZweiVertraege'));
return;
}
//check if status=="Genehmigt"
const statusNotGenehmigtExists = this.arraySelectedContracts.some(([_, status]) => status !== 'Genehmigt');
if(statusNotGenehmigtExists) {
this.$fhcAlert.alertError('Alle Verträge müssen genehmigt sein');
this.$fhcAlert.alertError(this.$p.t('vertrag', 'alertOnlyApprovedContracts'));
return;
}
@@ -507,42 +516,38 @@ export default {
.catch(this.$fhcAlert.handleSystemError);
},
mounted() {
//TODO(Manu) check if necessary
/* this.$nextTick(() => {
//necessary for reloading components Status and Details
this.$nextTick(() => {
this.$refs.table.tabulator.on("rowClick", (e, row) => {
this.contractSelected = row.getData();
console.log("selected Row ", this.contractSelected);
});
});*/
});
this.getFormattedDate();
},
template: `
<div class="core-contracts h-100 d-flex flex-column">
<!-- injected print functionality for KU Linz (printHonorarvertrag) -->
<div v-if="arraySelectedContracts.length >= 2" class="container mt-2">
<!-- injected print functionality for KU Linz (printHonorarvertrag) -->
<template v-if="arraySelectedContracts.length >= 2" class="container mt-2">
<div v-for="item in arraySelectedContracts" :key="item[0]" class="row">
<div class="col-md-6">
<input
class="form-control"
type="text"
:value="item[2] + ' | ' + item[1] + ' (ID: ' + item[0] + ')'"
aria-label="readonly input example"
readonly
>
</div>
<div v-for="item in arraySelectedContracts" :key="item[0]">
<input
class="form-control"
type="text"
:value="item[2] + ' | ' + item[1] + ' (ID: ' + item[0] + ')'"
aria-label="readonly input example"
readonly
>
</div>
<div class="d-flex">
<div class="ms-auto">
</template>
<template v-if="arraySelectedContracts.length >= 2" class="d-flex">
<div class="ms-auto mt-2">
<button type="button" class="btn btn-secondary mx-1" @click="clearSelection()"><i class="fa fa-trash"></i></button>
<button type="button" class="btn btn-primary o" @click="printContract()">Honorarvertrag drucken</button>
<button :disabled="!this.hasSchreibrechte" type="button" class="btn btn-primary" @click="printContract()">{{$p.t('vertrag', 'printHonorarvertrag')}}</button>
</div>
</div>
</div>
</template>
<hr>
<!-- filter: open means no status abgerechnet yet-->
@@ -698,7 +703,7 @@ export default {
<template #footer>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @click="reload()">{{$p.t('ui', 'abbrechen')}}</button>
<button type="button" class="btn btn-primary" @click="statusNew ? addNewContract() : updateContract(formData.vertrag_id)">{{$p.t('vertrag', 'vertragErstellen')}}</button>
<button type="button" class="btn btn-primary" :disabled="!this.hasSchreibrechte" @click="statusNew ? addNewContract() : updateContract(formData.vertrag_id)">{{$p.t('vertrag', 'vertragErstellen')}}</button>
</template>
</bs-modal>
</core-form>
@@ -16,13 +16,8 @@ export default {
},
provide() {
return {
// activeAddonBewerbung: this.activeAddons.split(';').includes('bewerbung'),
// configGenerateAlias: this.config.generateAlias,
// configChooseLayout: this.config.chooseLayout,
configDomain: this.config.domain,
//TODO(Manu) check permissions
hasSchreibrechtAss: this.permissions['assistenz_schreibrechte'],
hasAdminPermission: this.permissions['admin'],
hasSchreibrechte: this.permissions['vertragsverwaltung_schreibrechte'],
}
},
data() {
@@ -45,10 +40,8 @@ export default {
template: `
<div>
<div class="container-fluid overflow-hidden">
<!-- DOM: {{configDomain}} alias {{configAlias}} layout {{configChooseLayout}}-->
<div class="row h-100">
<main class="col-md-8 ms-sm-auto col-lg-9 col-xl-10">
<!--<div class="col-md-12">-->
<vertical-split>
<template #top>
<MitarbeiterHeader :filterMa="filterMa" :vertragsarten="vertragsarten" @selectedPerson="selectPerson" />
@@ -57,7 +50,7 @@ export default {
<div class="col" v-if="person_id!=null">
<mitarbeiter-details :person_id="person_id"></mitarbeiter-details>
<h5>Verträge</h5>
<Vertraege :endpoint="$fhcApi.factory.vertraege.person" :person_id="this.person_id" />
<Vertraege :endpoint="$fhcApi.factory.vertraege.person" :person_id="this.person_id"/>
</div>
<template>
</vertical-split>