diff --git a/application/controllers/Vertragsverwaltung.php b/application/controllers/Vertragsverwaltung.php index 243f57118..6dd3ad797 100644 --- a/application/controllers/Vertragsverwaltung.php +++ b/application/controllers/Vertragsverwaltung.php @@ -4,12 +4,13 @@ if (! defined('BASEPATH')) exit('No direct script access allowed'); class Vertragsverwaltung extends Auth_Controller { + //TODO(Manu) Permissions public function __construct() { $permissions = []; $router = load_class('Router'); - $permissions[$router->method] = ['admin:r', 'assistenz:r']; + $permissions[$router->method] = ['vertrag/mitarbeiter:r']; parent::__construct($permissions); // Load Libraries @@ -23,9 +24,7 @@ class Vertragsverwaltung extends Auth_Controller { $this->load->view('Vertragsverwaltung', [ 'permissions' => [ - 'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'), - 'admin' => $this->permissionlib->isBerechtigt('admin'), - 'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'), + 'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter','suid') ] ]); } diff --git a/application/controllers/api/frontend/v1/vertraege/Config.php b/application/controllers/api/frontend/v1/vertraege/Config.php index 1da49cd78..25414e04f 100644 --- a/application/controllers/api/frontend/v1/vertraege/Config.php +++ b/application/controllers/api/frontend/v1/vertraege/Config.php @@ -29,16 +29,8 @@ class Config extends FHCAPI_Controller { public function __construct() { - // TODO(Manu): permissions parent::__construct([ - 'printDocument' => ['admin:r', 'assistenz:r'], - ]); - - - // Load Phrases - $this->loadPhrases([ - 'global', - 'person', + 'printDocument' => ['vertrag/mitarbeiter:r'], ]); } diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index b17d8b4e6..276a75de8 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -9,28 +9,27 @@ class Vertraege extends FHCAPI_Controller public function __construct() { parent::__construct([ - 'getAllVertraege' => ['admin:r', 'assistenz:r'], - 'getAllContractsNotAssigned' => ['admin:r', 'assistenz:r'], - 'getAllContractsAssigned' => ['admin:r', 'assistenz:r'], - 'getAllContractTypes' => ['admin:r', 'assistenz:r'], - 'getAllContractStati' => ['admin:r', 'assistenz:r'], - 'getStatiOfContract' => ['admin:r', 'assistenz:r'], - 'loadContract' => ['admin:r', 'assistenz:r'], - 'loadContractStatus' => ['admin:r', 'assistenz:r'], - 'updateContract' => self::PERM_LOGGED, - 'addNewContract' => self::PERM_LOGGED, - 'deleteContract' => self::PERM_LOGGED, - 'insertContractStatus' => self::PERM_LOGGED, - 'deleteContractStatus' => self::PERM_LOGGED, - 'updateContractStatus' => self::PERM_LOGGED, - 'deleteLehrauftrag' => self::PERM_LOGGED, - 'deleteBetreuung' => self::PERM_LOGGED, - //TODO(Manu) Berechtigungen - 'getMitarbeiter' => self::PERM_LOGGED, - 'getHeader' => self::PERM_LOGGED, - 'getPersonAbteilung' => self::PERM_LOGGED, - 'getLeitungOrg' => self::PERM_LOGGED, - 'getMitarbeiter_uid' => self::PERM_LOGGED, + 'getAllVertraege' => ['vertrag/mitarbeiter:r'], + 'getAllContractsNotAssigned' => ['vertrag/mitarbeiter:r'], + 'getAllContractsAssigned' => ['vertrag/mitarbeiter:r'], + 'getAllContractTypes' => ['vertrag/mitarbeiter:r'], + 'getAllContractStati' => ['vertrag/mitarbeiter:r'], + 'getStatiOfContract' => ['vertrag/mitarbeiter:r'], + 'loadContract' => ['vertrag/mitarbeiter:r'], + 'loadContractStatus' => ['vertrag/mitarbeiter:r'], + 'updateContract' =>['vertrag/mitarbeiter:w'], + 'addNewContract' =>['vertrag/mitarbeiter:w'], + 'deleteContract' =>['vertrag/mitarbeiter:w'], + 'insertContractStatus' =>['vertrag/mitarbeiter:w'], + 'deleteContractStatus' =>['vertrag/mitarbeiter:w'], + 'updateContractStatus' =>['vertrag/mitarbeiter:w'], + 'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'], + 'deleteBetreuung' =>['vertrag/mitarbeiter:w'], + 'getMitarbeiter' => ['vertrag/mitarbeiter:r'], + 'getHeader' => ['vertrag/mitarbeiter:r'], + 'getPersonAbteilung' => ['vertrag/mitarbeiter:r'], + 'getLeitungOrg' => ['vertrag/mitarbeiter:r'], + 'getMitarbeiter_uid' => ['vertrag/mitarbeiter:r'], ]); //Load Models and Libraries diff --git a/application/views/Vertragsverwaltung.php b/application/views/Vertragsverwaltung.php index 0a663761f..988d5cdb8 100644 --- a/application/views/Vertragsverwaltung.php +++ b/application/views/Vertragsverwaltung.php @@ -32,9 +32,7 @@ $this->load->view('templates/FHC-Header', $includesArray); !defined('GENERATE_ALIAS_STUDENT') ? 'notDefined' : GENERATE_ALIAS_STUDENT, 'domain' => !defined('DOMAIN') ? 'notDefined' : DOMAIN, - 'chooseLayout' => !defined('CHOOSE_LAYOUT') ? 'notDefined' : CHOOSE_LAYOUT, ]; ?> diff --git a/public/js/components/Vertraege/List/Details.js b/public/js/components/Vertraege/List/Details.js index 2de19a06b..c11d178e7 100644 --- a/public/js/components/Vertraege/List/Details.js +++ b/public/js/components/Vertraege/List/Details.js @@ -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); diff --git a/public/js/components/Vertraege/List/Status.js b/public/js/components/Vertraege/List/Status.js index f912cc11b..02ba09d1a 100644 --- a/public/js/components/Vertraege/List/Status.js +++ b/public/js/components/Vertraege/List/Status.js @@ -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 = ''; 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 { diff --git a/public/js/components/Vertraege/MitarbeiterDetails.js b/public/js/components/Vertraege/MitarbeiterDetails.js index 53f00afa8..1d09d160c 100644 --- a/public/js/components/Vertraege/MitarbeiterDetails.js +++ b/public/js/components/Vertraege/MitarbeiterDetails.js @@ -93,12 +93,12 @@ export default {

Email - {{ headerData.uid }}@{{ domain }} + {{headerData.uid}}@{{domain}} - {{ headerData.alias }}@{{ domain }} + {{headerData.alias}}@{{domain}} - | DW {{ headerData?.telefonklappe }} + | DW {{headerData?.telefonklappe}}

diff --git a/public/js/components/Vertraege/MitarbeiterHeader.js b/public/js/components/Vertraege/MitarbeiterHeader.js index 5c6c3330b..76f3337f9 100644 --- a/public/js/components/Vertraege/MitarbeiterHeader.js +++ b/public/js/components/Vertraege/MitarbeiterHeader.js @@ -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: `
-

Vertragsverwaltung

+

{{$p.t('vertrag', 'vertragsverwaltung')}}

diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js index 60705d20a..d4f2f783b 100644 --- a/public/js/components/Vertraege/Vertraege.js +++ b/public/js/components/Vertraege/Vertraege.js @@ -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 = ''; 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: `
- -
+ + + + +
@@ -698,7 +703,7 @@ export default { diff --git a/public/js/components/Vertraege/Vertragsverwaltung.js b/public/js/components/Vertraege/Vertragsverwaltung.js index f5a1c6f00..33e276f3c 100644 --- a/public/js/components/Vertraege/Vertragsverwaltung.js +++ b/public/js/components/Vertraege/Vertragsverwaltung.js @@ -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: `
-
-