mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-22 09:22:22 +00:00
Start View Karteireiter, Components Unassigned, Details and Stati
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
<?php
|
||||
|
||||
|
||||
if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
use \DateTime as DateTime;
|
||||
|
||||
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' => self::PERM_LOGGED,
|
||||
'getStatiOfContract' => self::PERM_LOGGED,
|
||||
'loadContract' => ['admin:r', 'assistenz:r'],
|
||||
'updateContract' => ['admin:r', 'assistenz:r'],
|
||||
'addNewContract' => ['admin:r', 'assistenz:r'],
|
||||
'deleteContract' => ['admin:r', 'assistenz:r'],
|
||||
|
||||
]);
|
||||
|
||||
//Load Models
|
||||
$this->load->model('accounting/Vertrag_model', 'VertragModel');
|
||||
$this->load->model('accounting/Vertragsstatus_model', 'VertragsstatusModel');
|
||||
$this->load->model('accounting/Vertragstyp_model', 'VertragstypModel');
|
||||
$this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel');
|
||||
}
|
||||
|
||||
public function getAllVertraege($person_id)
|
||||
{
|
||||
$result = $this->VertragModel->loadContractsOfPerson($person_id);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function getAllContractsNotAssigned($person_id)
|
||||
{
|
||||
$result = $this->VertragModel->loadContractsOfPersonNotAssigned($person_id);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function getAllContractsAssigned($person_id, $vertrag_id)
|
||||
{
|
||||
$result = $this->VertragModel->loadContractsOfPersonAssigned($person_id, $vertrag_id);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function getStatiOfContract($vertrag_id)
|
||||
{
|
||||
$result = $this->VertragModel->getStatiOfContract($vertrag_id);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess((getData($result) ?: []));
|
||||
}
|
||||
|
||||
public function getAllContractTypes()
|
||||
{
|
||||
$result = $this->VertragstypModel->load();
|
||||
if (isError($result))
|
||||
{
|
||||
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
$this->terminateWithSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function addNewContract($person_id)
|
||||
{
|
||||
//$this->validateNewOrUpdate();
|
||||
//TODO(Manu) check validations
|
||||
|
||||
//$person_id = $this->input->post('person_id');
|
||||
$vertragsdatum = $this->input->post('vertragsdatum');
|
||||
$bezeichnung = $this->input->post('bezeichnung');
|
||||
$vertragstyp_kurzbz = $this->input->post('vertragstyp_kurzbz');
|
||||
$betrag = $this->input->post('betrag');
|
||||
$vertragsstunden = $this->input->post('vertragsstunden');
|
||||
$vertragsstunden_studiensemester_kurzbz = $this->input->post('vertragsstunden_studiensemester_kurzbz');
|
||||
$anmerkung = $this->input->post('anmerkung');
|
||||
|
||||
$this->db->trans_start();
|
||||
|
||||
$result = $this->VertragModel->insert( [
|
||||
'person_id' => $person_id,
|
||||
'vertragsdatum' => $vertragsdatum,
|
||||
'bezeichnung' => $bezeichnung,
|
||||
'vertragstyp_kurzbz' => $vertragstyp_kurzbz,
|
||||
'betrag' => $betrag,
|
||||
'vertragsstunden' => $vertragsstunden,
|
||||
'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz,
|
||||
'anmerkung' => $anmerkung,
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID()
|
||||
]);
|
||||
|
||||
//add entry with status neu in lehre.tbl_vertrag_vertragsstatus
|
||||
//TODO(Manu) validation, dass status nicht schon bereits vorhanden
|
||||
$status_result = $this->VertragvertragsstatusModel->insert([
|
||||
'vertrag_id' => $result->retval,
|
||||
'uid' => getAuthUID(),
|
||||
'vertragsstatus_kurzbz' => 'neu',
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID(),
|
||||
'datum' => date('c')
|
||||
]);
|
||||
|
||||
if (!$status_result) {
|
||||
$this->db->trans_rollback();
|
||||
$this->terminateWithError('Fehler beim Hinzufügen des Vertragsstatus.');
|
||||
}
|
||||
|
||||
$this->db->trans_complete();
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
public function loadContract($vertrag_id)
|
||||
{
|
||||
$result = $this->VertragModel->load($vertrag_id);
|
||||
|
||||
if (isError($result)) {
|
||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (!hasData($result)) {
|
||||
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess(current(getData($result)));
|
||||
}
|
||||
|
||||
public function updateContract($vertrag_id)
|
||||
{
|
||||
//$this->validateNewOrUpdate();
|
||||
//TODO(Manu)validations
|
||||
|
||||
|
||||
$vertrag_id = $this->input->post('vertrag_id');
|
||||
$person_id = $this->input->post('person_id');
|
||||
$vertragsdatum = $this->input->post('vertragsdatum');
|
||||
$bezeichnung = $this->input->post('bezeichnung');
|
||||
$vertragstyp_kurzbz = $this->input->post('vertragstyp_kurzbz');
|
||||
$betrag = $this->input->post('betrag');
|
||||
$vertragsstunden = $this->input->post('vertragsstunden');
|
||||
$vertragsstunden_studiensemester_kurzbz = $this->input->post('vertragsstunden_studiensemester_kurzbz');
|
||||
$anmerkung = $this->input->post('anmerkung');
|
||||
|
||||
$this->db->trans_start();
|
||||
|
||||
$result = $this->VertragModel->update($vertrag_id, [
|
||||
'person_id' => $person_id,
|
||||
'vertragsdatum' => $vertragsdatum,
|
||||
'bezeichnung' => $bezeichnung,
|
||||
'vertragstyp_kurzbz' => $vertragstyp_kurzbz,
|
||||
'betrag' => $betrag,
|
||||
'vertragsstunden' => $vertragsstunden,
|
||||
'vertragsstunden_studiensemester_kurzbz' => $vertragsstunden_studiensemester_kurzbz,
|
||||
'anmerkung' => $anmerkung,
|
||||
'vertragsstunden' => $vertragsstunden,
|
||||
'updateamum' => date('c'),
|
||||
'updatevon' => getAuthUID()
|
||||
]);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->db->trans_complete();
|
||||
|
||||
$this->terminateWithSuccess(true);
|
||||
}
|
||||
|
||||
public function deleteContract($vertrag_id)
|
||||
{
|
||||
//TODO(Manu) validations,
|
||||
$result = $this->VertragvertragsstatusModel->load([
|
||||
'vertrag_id' => $vertrag_id
|
||||
]);
|
||||
|
||||
if(hasData($result)){
|
||||
$data = getData($result);
|
||||
foreach ($data as $item) {
|
||||
//delete all entries in lehre.tbl_vertrag_vertragsstatus
|
||||
$result = $this->VertragvertragsstatusModel->delete([
|
||||
'vertrag_id' => $vertrag_id,
|
||||
'vertragsstatus_kurzbz' => $item->vertragsstatus_kurzbz,
|
||||
'uid' => $item->uid
|
||||
]);
|
||||
if(isError($result))
|
||||
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
}
|
||||
|
||||
//delete Contract
|
||||
$result = $this->VertragModel->delete(
|
||||
array('vertrag_id' => $vertrag_id,
|
||||
)
|
||||
);
|
||||
|
||||
if (isError($result)) {
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
if (!hasData($result)) {
|
||||
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id' => 'Vertrag_id']), self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
return $this->outputJsonSuccess(current(getData($result)));
|
||||
}
|
||||
}
|
||||
@@ -330,4 +330,163 @@ class Vertrag_model extends DB_Model
|
||||
|
||||
return $bezeichnung;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Contracts of a Person
|
||||
* @param $person_id
|
||||
* @return array of objects
|
||||
*/
|
||||
public function loadContractsOfPerson($person_id)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
*,
|
||||
tbl_vertrag.bezeichnung as bezeichnung,
|
||||
tbl_vertragstyp.bezeichnung as vertragstyp_bezeichnung,
|
||||
TO_CHAR(tbl_vertrag.vertragsdatum::timestamp, 'DD.MM.YYYY') AS format_vertragsdatum,
|
||||
(SELECT bezeichnung FROM lehre.tbl_vertragsstatus
|
||||
JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||
WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung
|
||||
FROM
|
||||
lehre.tbl_vertrag
|
||||
LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz)
|
||||
WHERE person_id= ?";
|
||||
|
||||
|
||||
return $this->execQuery($query, array($person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Contracts of a Person that are not assigned yet
|
||||
* @param $person_id
|
||||
* @return array of objects
|
||||
*/
|
||||
public function loadContractsOfPersonNotAssigned($person_id)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
'Lehrauftrag' as type,
|
||||
lehreinheit_id,
|
||||
mitarbeiter_uid,
|
||||
null as pruefung_id,
|
||||
null as projektarbeit_id,
|
||||
(tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
null as betreuerart_kurzbz,
|
||||
( SELECT
|
||||
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE
|
||||
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||
as bezeichnung
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
WHERE
|
||||
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||
AND vertrag_id IS NULL
|
||||
UNION
|
||||
SELECT
|
||||
'Betreuung' as type,
|
||||
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||
null as mitarbeiter_uid,
|
||||
null::integer as pruefung_id,
|
||||
projektarbeit_id,
|
||||
(tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||
as bezeichnung
|
||||
FROM
|
||||
lehre.tbl_projektbetreuer
|
||||
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
WHERE
|
||||
tbl_projektbetreuer.person_id=?
|
||||
AND vertrag_id IS NULL
|
||||
";
|
||||
|
||||
return $this->execQuery($query, array($person_id, $person_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads all Contracts of a Person that are assigned yet
|
||||
* @param $person_id, $vertrag_id
|
||||
* @return array of objects
|
||||
*/
|
||||
//TODO(Manu) vereinfachen!
|
||||
public function loadContractsOfPersonAssigned($person_id, $vertrag_id)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
'Lehrauftrag' as type,
|
||||
lehreinheit_id,
|
||||
mitarbeiter_uid,
|
||||
null as pruefung_id,
|
||||
null as projektarbeit_id,
|
||||
(tbl_lehreinheitmitarbeiter.semesterstunden * tbl_lehreinheitmitarbeiter.stundensatz) as betrag,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
null as betreuerart_kurzbz,
|
||||
( SELECT
|
||||
upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN public.tbl_studiengang USING(studiengang_kz)
|
||||
WHERE
|
||||
lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id)
|
||||
as bezeichnung
|
||||
FROM
|
||||
lehre.tbl_lehreinheitmitarbeiter
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
WHERE
|
||||
mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?)
|
||||
AND vertrag_id = ?
|
||||
UNION
|
||||
SELECT
|
||||
'Betreuung' as type,
|
||||
tbl_projektarbeit.lehreinheit_id as lehreinheit_id,
|
||||
null as mitarbeiter_uid,
|
||||
null::integer as pruefung_id,
|
||||
projektarbeit_id,
|
||||
(tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag,
|
||||
tbl_lehreinheit.studiensemester_kurzbz,
|
||||
tbl_projektbetreuer.betreuerart_kurzbz,
|
||||
(SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid)
|
||||
as bezeichnung
|
||||
FROM
|
||||
lehre.tbl_projektbetreuer
|
||||
JOIN lehre.tbl_projektarbeit USING(projektarbeit_id)
|
||||
JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
|
||||
WHERE
|
||||
tbl_projektbetreuer.person_id=?
|
||||
AND vertrag_id = ?
|
||||
";
|
||||
|
||||
return $this->execQuery($query, array($person_id, $vertrag_id, $person_id, $vertrag_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all stati of a contract
|
||||
*
|
||||
* @param $vertrag_id
|
||||
* @return array
|
||||
*/
|
||||
public function getStatiOfContract($vertrag_id)
|
||||
{
|
||||
$query = "
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
lehre.tbl_vertrag_vertragsstatus
|
||||
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||
WHERE
|
||||
tbl_vertrag_vertragsstatus.vertrag_id = ?
|
||||
ORDER BY datum DESC";
|
||||
|
||||
return $this->execQuery($query, array($vertrag_id));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -11,4 +11,5 @@ class Vertragstyp_model extends DB_Model
|
||||
$this->dbTable = 'lehre.tbl_vertragstyp';
|
||||
$this->pk = 'vertragstyp_kurzbz';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -190,4 +190,6 @@ class Vertragvertragsstatus_model extends DB_Model
|
||||
|
||||
return $this->loadWhere($condition);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import stv from "./stv.js";
|
||||
import notiz from "./notiz.js";
|
||||
import betriebsmittel from "./betriebsmittel.js";
|
||||
import checkperson from "./checkperson.js";
|
||||
import vertraege from "./vertraege.js";
|
||||
|
||||
export default {
|
||||
search,
|
||||
@@ -34,5 +35,6 @@ export default {
|
||||
stv,
|
||||
notiz,
|
||||
betriebsmittel,
|
||||
checkperson
|
||||
checkperson,
|
||||
vertraege
|
||||
};
|
||||
@@ -0,0 +1,5 @@
|
||||
import person from "./vertraege/person.js";
|
||||
|
||||
export default {
|
||||
person
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
getAllVertraege(url, config, params){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);
|
||||
},
|
||||
getAllContractsNotAssigned(url, config, params){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);
|
||||
},
|
||||
getAllContractsAssigned(url, config, params){
|
||||
console.log(params.person_id, params.vertrag_id);
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);
|
||||
},
|
||||
getAllContractsNotAssigned2(person_id){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);
|
||||
},
|
||||
getStatiOfContract(url, config, params){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);
|
||||
},
|
||||
getAllContractTypes(){
|
||||
return this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');
|
||||
},
|
||||
addNewContract(person_id, formData) {
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/addNewContract/' +
|
||||
person_id, formData
|
||||
);
|
||||
},
|
||||
loadContract(vertrag_id){
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);
|
||||
},
|
||||
updateContract(vertrag_id, formData) {
|
||||
return this.$fhcApi.post( 'api/frontend/v1/vertraege/vertraege/updateContract/' + vertrag_id,
|
||||
formData);
|
||||
},
|
||||
deleteContract(vertrag_id){
|
||||
return this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);
|
||||
},
|
||||
}
|
||||
@@ -43,6 +43,7 @@ export default {
|
||||
},
|
||||
template: `
|
||||
<div class="stv-details h-100 pb-3 d-flex flex-column">
|
||||
|
||||
<div v-if="!students?.length" class="justify-content-center d-flex h-100 align-items-center">
|
||||
Bitte StudentIn auswählen!
|
||||
</div>
|
||||
|
||||
@@ -318,6 +318,9 @@ export default{
|
||||
@saved="reload"
|
||||
>
|
||||
</status-modal>
|
||||
TEST1: Anzahl Students:
|
||||
{{modelValue.length}}
|
||||
|
||||
|
||||
<core-filter-cmpt
|
||||
v-if="!this.modelValue.length"
|
||||
@@ -332,6 +335,8 @@ export default{
|
||||
@click:new="actionNewStatus"
|
||||
>
|
||||
|
||||
TEST 2
|
||||
|
||||
<template #actions="{updateData2}">
|
||||
<!-- SingleSelectButton-->
|
||||
<status-dropdown
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
import {CoreFilterCmpt} from "../../filter/Filter.js";
|
||||
|
||||
import BsModal from "../../Bootstrap/Modal.js";
|
||||
import CoreForm from '../../Form/Form.js';
|
||||
import FormInput from '../../Form/Input.js';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
BsModal,
|
||||
CoreForm,
|
||||
FormInput
|
||||
},
|
||||
props: {
|
||||
person_id: {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
vertrag_id: {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
//tableData: [],
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: this.$fhcApi.factory.vertraege.person.getAllContractsAssigned,
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
person_id: this.person_id,
|
||||
vertrag_id: this.vertrag_id
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
//Version with saving Data in tableData Object
|
||||
/* ajaxResponse: (url, params, response) => {
|
||||
this.tableData = response.data;
|
||||
return response.data;
|
||||
},*/
|
||||
columns: [
|
||||
{title: "Typ", field: "type"},
|
||||
{title: "Betrag", field: "betrag"},
|
||||
{title: "Bezeichnung", field: "bezeichnung"},
|
||||
{title: "Studiensemester", field: "studiensemester_kurzbz"},
|
||||
{title: "PruefungId", field: "betrag", visible: false},
|
||||
{title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false},
|
||||
{title: "projektarbeit_id", field: "projektarbeit_id", visible: false},
|
||||
{title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
|
||||
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
|
||||
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
|
||||
{title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing
|
||||
{
|
||||
title: "VertragsstundenStudiensemester",
|
||||
field: "vertragsstunden_studiensemester_kurzbz",
|
||||
visible: false
|
||||
},
|
||||
],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: '200',
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
},
|
||||
clickedRows: [],
|
||||
/* table: null,
|
||||
tableData: []*/
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
person_id: 'updateTableData',
|
||||
vertrag_id: 'updateTableData'
|
||||
/* person_id() {
|
||||
this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + this.person_id + '/' + this.vertrag_id);
|
||||
},
|
||||
vertrag_id() {
|
||||
this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + this.person_id + '/' + this.vertrag_id);
|
||||
},*/
|
||||
},
|
||||
methods: {
|
||||
updateTableData() {
|
||||
this.$refs.table.tabulator.setData(`api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/ ' ${this.person_id}/${this.vertrag_id}`);
|
||||
}
|
||||
},
|
||||
template: `
|
||||
<!--TODO(Manu) check css, design -->
|
||||
<div class="core-vertraege h-50 d-flex flex-column w-100">
|
||||
person_id: {{person_id}}
|
||||
<br>
|
||||
vertrag_id: {{vertrag_id}}
|
||||
|
||||
<div>
|
||||
<!-- Tabulator-Container -->
|
||||
<div ref="table"></div>
|
||||
|
||||
<!-- Ausgabe der Daten -->
|
||||
<div v-for="row in tableData" :key="row.id">
|
||||
<p>{{ row.name }} - {{ row.value }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>Vertragdetails</h4>
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</div>`
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import {CoreFilterCmpt} from "../../filter/Filter.js";
|
||||
|
||||
import BsModal from "../../Bootstrap/Modal.js";
|
||||
import CoreForm from '../../Form/Form.js';
|
||||
import FormInput from '../../Form/Input.js';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
BsModal,
|
||||
CoreForm,
|
||||
FormInput
|
||||
},
|
||||
props: {
|
||||
vertrag_id: {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: this.$fhcApi.factory.vertraege.person.getStatiOfContract,
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
vertrag_id: this.vertrag_id
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "Status", field: "status", width: 125},
|
||||
{title: "Datum", field: "datum", width: 150},
|
||||
{title: "vertrag_id", field: "vertrag_id", visible: false},
|
||||
{title: "User", field: "bezeichnung", width: 150},
|
||||
{title: "Vertragsstatus_kurzbz", field: "studiensemester_kurzbz"},
|
||||
{title: "insertvon", field: "insertvon", visible: false},
|
||||
{title: "insertamum", field: "insertamum", visible: false},
|
||||
{title: "updatevon", field: "updatevon", visible: false},
|
||||
{title: "updateamum", field: "updateamum", visible: true},
|
||||
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
|
||||
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
|
||||
],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: '200',
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
},
|
||||
clickedRows: []
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
vertrag_id() {
|
||||
this.$refs.table.tabulator.setData('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + this.vertrag_id);
|
||||
}
|
||||
},
|
||||
methods: { },
|
||||
template: `
|
||||
<!--TODO(Manu) check filter (akzeptiert, neu, erteilt?), design -->
|
||||
<div class="core-vertraege h-50 d-flex flex-column w-100">
|
||||
<!-- person_id: {{person_id}}-->
|
||||
<br>
|
||||
vertrag_id: {{vertrag_id}} !
|
||||
<h4>Vertragstatus</h4>
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</div>`
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
import {CoreFilterCmpt} from "../../filter/Filter.js";
|
||||
|
||||
import BsModal from "../../Bootstrap/Modal.js";
|
||||
import CoreForm from '../../Form/Form.js';
|
||||
import FormInput from '../../Form/Input.js';
|
||||
import {BismeldestichtagHelper} from "../../../apps/Bismeldestichtag/BismeldestichtagHelper";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
BsModal,
|
||||
CoreForm,
|
||||
FormInput
|
||||
},
|
||||
props: {
|
||||
endpoint: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
person_id: {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: this.$fhcApi.factory.vertraege.person.getAllContractsNotAssigned,
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
person_id: this.person_id
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "Typ", field: "type", width: 125},
|
||||
{title: "Betrag", field: "betrag", width: 150},
|
||||
{title: "Bezeichnung", field: "bezeichnung", width: 150},
|
||||
{title: "Studiensemester", field: "studiensemester_kurzbz"},
|
||||
{title: "PruefungId", field: "betrag", visible: false},
|
||||
{title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false},
|
||||
{title: "projektarbeit_id", field: "projektarbeit_id", visible: false},
|
||||
{title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
|
||||
{title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
|
||||
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
|
||||
{title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing
|
||||
{
|
||||
title: "VertragsstundenStudiensemester",
|
||||
field: "vertragsstunden_studiensemester_kurzbz",
|
||||
visible: false
|
||||
},
|
||||
],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: '200',
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
},
|
||||
clickedRows: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toggleRowClick(rowData){
|
||||
//id already existing?
|
||||
//const index = this.clickedRows.findIndex(row => row.id === id);
|
||||
|
||||
|
||||
//id alleine reicht nicht: Betreuerart ebenfalls
|
||||
/* if (this.clickedRows.indexOf(id) == -1) {
|
||||
console.log("Die Zahl " + id + " ist NICHT Array enthalten.");
|
||||
this.clickedRows.push(id);
|
||||
|
||||
} else {
|
||||
console.log("Die Zahl " + id + " ist im Array enthalten.");
|
||||
const index = this.clickedRows.indexOf(id);
|
||||
this.clickedRows.splice(index, 1);
|
||||
}*/
|
||||
|
||||
// check row
|
||||
const exists = this.clickedRows.some(row => JSON.stringify(row) === JSON.stringify(rowData));
|
||||
|
||||
if (exists) {
|
||||
this.clickedRows = this.clickedRows.filter(row => JSON.stringify(row) !== JSON.stringify(rowData));
|
||||
} else {
|
||||
this.clickedRows.push(rowData);
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.table.tabulator.on("rowClick", (e, row) => {
|
||||
const data = row.getData();
|
||||
this.toggleRowClick(data);
|
||||
});
|
||||
});
|
||||
},
|
||||
template: `
|
||||
<!--TODO(Manu) check css, design .. mybe list.js-->
|
||||
<div class="core-vertraege h-50 d-flex flex-column w-100">
|
||||
|
||||
{{clickedRows}}
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
</div>`
|
||||
}
|
||||
@@ -0,0 +1,389 @@
|
||||
import {CoreFilterCmpt} from "../filter/Filter.js";
|
||||
|
||||
import BsModal from "../Bootstrap/Modal.js";
|
||||
import CoreForm from '../Form/Form.js';
|
||||
import FormInput from '../Form/Input.js';
|
||||
import ListUnassigned from './List/Unassigned.js';
|
||||
import ContractDetails from './List/Details.js';
|
||||
import ContractStati from './List/Status.js';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
CoreFilterCmpt,
|
||||
BsModal,
|
||||
CoreForm,
|
||||
FormInput,
|
||||
ListUnassigned,
|
||||
ContractDetails,
|
||||
ContractStati
|
||||
},
|
||||
inject: {
|
||||
cisRoot: {
|
||||
from: 'cisRoot'
|
||||
},
|
||||
},
|
||||
props: {
|
||||
endpoint: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
person_id: {
|
||||
type: [Number],
|
||||
required: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
//TODO(Manu) check if filter bei Status: Abgerechnet wird zum Beispiel nicht angezeigt
|
||||
tabulatorOptions: {
|
||||
ajaxURL: 'dummy',
|
||||
ajaxRequestFunc: this.$fhcApi.factory.vertraege.person.getAllVertraege,
|
||||
ajaxParams: () => {
|
||||
return {
|
||||
person_id: this.person_id
|
||||
};
|
||||
},
|
||||
ajaxResponse: (url, params, response) => response.data,
|
||||
columns: [
|
||||
{title: "Bezeichnung", field: "bezeichnung", width: 150},
|
||||
{title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
|
||||
{title: "Betrag", field: "betrag", width: 150},
|
||||
{title: "Vertragstyp", field: "vertragstyp_bezeichnung", width: 125},
|
||||
{title: "Status", field: "status"},
|
||||
{title: "Vertragsdatum", field: "format_vertragsdatum", width: 128},
|
||||
{title: "VertragstypKurzbz", field: "vertragstyp_kurzbz", visible: false},
|
||||
{title: "VertragId", field: "vertrag_id", visible: false},
|
||||
{title: "Vertragsdatum_iso", field: "vertragsdatum", visible: false},
|
||||
{title: "Vertragsstunden", field: "vertragsstunden", visible: false},
|
||||
{title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", visible: false},
|
||||
{title: "Anmerkung", field: "anmerkung", visible: false},
|
||||
{
|
||||
title: 'Aktionen', field: 'actions',
|
||||
minWidth: 150, // Ensures Action-buttons will be always fully displayed
|
||||
maxWidth: 150,
|
||||
formatter: (cell, formatterParams, onRendered) => {
|
||||
let container = document.createElement('div');
|
||||
container.className = "d-flex gap-2";
|
||||
|
||||
let button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.innerHTML = '<i class="fa fa-edit"></i>';
|
||||
button.title = 'Vertrag bearbeiten';
|
||||
button.addEventListener(
|
||||
'click',
|
||||
(event) =>
|
||||
this.actionEditContract(cell.getData().vertrag_id)
|
||||
);
|
||||
container.append(button);
|
||||
|
||||
button = document.createElement('button');
|
||||
button.className = 'btn btn-outline-secondary btn-action';
|
||||
button.innerHTML = '<i class="fa fa-xmark"></i>';
|
||||
button.title = 'Vertrag löschen';
|
||||
button.addEventListener(
|
||||
'click',
|
||||
() =>
|
||||
this.actionDeleteContract(cell.getData().vertrag_id)
|
||||
);
|
||||
container.append(button);
|
||||
|
||||
return container;
|
||||
},
|
||||
frozen: true
|
||||
}],
|
||||
layout: 'fitColumns',
|
||||
layoutColumnsOnNewData: false,
|
||||
height: '250',
|
||||
selectableRangeMode: 'click',
|
||||
selectable: true,
|
||||
persistenceID: 'core-contracts'
|
||||
},
|
||||
tabulatorEvents: [
|
||||
{
|
||||
/* event: 'tableBuilt',
|
||||
handler: async() => {
|
||||
|
||||
await this.$p.loadCategory(['wawi', 'global', 'infocenter']);
|
||||
|
||||
let cm = this.$refs.table.tabulator.columnManager;
|
||||
|
||||
cm.getColumnByField('nummer').component.updateDefinition({
|
||||
title: this.$p.t('wawi', 'nummer')
|
||||
});
|
||||
cm.getColumnByField('anmerkung').component.updateDefinition({
|
||||
title: this.$p.t('global', 'anmerkung')
|
||||
});
|
||||
cm.getColumnByField('format_retour').component.updateDefinition({
|
||||
title: this.$p.t('wawi', 'retourdatum')
|
||||
});
|
||||
cm.getColumnByField('kaution').component.updateDefinition({
|
||||
title: this.$p.t('infocenter', 'kaution')
|
||||
});
|
||||
cm.getColumnByField('format_ausgabe').component.updateDefinition({
|
||||
title: this.$p.t('wawi', 'ausgabedatum')
|
||||
});
|
||||
|
||||
}*/
|
||||
}
|
||||
],
|
||||
statusNew: true,
|
||||
formData: {},
|
||||
listContractsUnassigned: [],
|
||||
listContractTypes: [],
|
||||
contractSelected: []
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
actionNewContract() {
|
||||
console.log("actionNewContract");
|
||||
this.resetModal();
|
||||
//this.loadContractsNotAssigned(this.person_id);
|
||||
this.$refs.contractModal.show();
|
||||
},
|
||||
actionEditContract(vertrag_id) {
|
||||
console.log("actionEditContract " + vertrag_id);
|
||||
this.statusNew = false;
|
||||
this
|
||||
.loadContract(vertrag_id)
|
||||
.then(this.$refs.contractModal.show);
|
||||
},
|
||||
actionDeleteContract(vertrag_id) {
|
||||
console.log("actionDeleteContract" + vertrag_id);
|
||||
this.$fhcAlert
|
||||
.confirmDelete()
|
||||
.then(result => result
|
||||
? vertrag_id
|
||||
: Promise.reject({handled: true}))
|
||||
.then(this.endpoint.deleteContract)
|
||||
.then(result => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
|
||||
window.scrollTo(0, 0);
|
||||
this.reload();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
addNewContract() {
|
||||
return this.endpoint
|
||||
.addNewContract(this.person_id, this.formData)
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
this.$refs.contractModal.hide();
|
||||
this.resetModal();
|
||||
window.scrollTo(0, 0);
|
||||
this.reload();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
updateContract(vertrag_id) {
|
||||
return this.endpoint
|
||||
.updateContract(vertrag_id, this.formData)
|
||||
.then(response => {
|
||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
||||
this.$refs.contractModal.hide();
|
||||
this.resetModal();
|
||||
window.scrollTo(0, 0);
|
||||
this.reload();
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
loadContract(vertrag_id) {
|
||||
this.resetModal();
|
||||
this.statusNew = false;
|
||||
return this.endpoint
|
||||
.loadContract(vertrag_id)
|
||||
.then(result => {
|
||||
this.formData = result.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
reload() {
|
||||
this.$refs.table.reloadTable();
|
||||
},
|
||||
resetModal(){
|
||||
this.formData = {};
|
||||
this.formData.vertragsdatum = new Date();
|
||||
this.formData.vertragstyp_kurzbz = null;
|
||||
this.statusNew = true;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
Promise.all([
|
||||
this.endpoint.getAllContractTypes(),
|
||||
this.endpoint.getAllContractsNotAssigned2(this.person_id)
|
||||
])
|
||||
.then(([result1, result2]) => {
|
||||
this.listContractTypes = result1.data;
|
||||
this.listContractsUnassigned = result2.data;
|
||||
})
|
||||
.catch(this.$fhcAlert.handleSystemError);
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.table.tabulator.on("rowClick", (e, row) => {
|
||||
this.contractSelected = row.getData();
|
||||
console.log("vertrag_id: ", this.contractSelected.vertrag_id);
|
||||
});
|
||||
});
|
||||
},
|
||||
template: `
|
||||
|
||||
<div class="core-vertraege h-100 d-flex flex-column">
|
||||
|
||||
{{formData}}
|
||||
|
||||
{{contractSelected}}
|
||||
|
||||
<core-filter-cmpt
|
||||
ref="table"
|
||||
:tabulator-options="tabulatorOptions"
|
||||
:tabulator-events="tabulatorEvents"
|
||||
table-only
|
||||
:side-menu="false"
|
||||
reload
|
||||
new-btn-show
|
||||
new-btn-label="Vertrag"
|
||||
@click:new="actionNewContract"
|
||||
>
|
||||
</core-filter-cmpt>
|
||||
Vertrag: {{contractSelected.vertrag_id}}
|
||||
|
||||
<div class = "row">
|
||||
|
||||
<div class="col-sm-6">
|
||||
<!-- ContractDetails -->
|
||||
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractDetails :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></ContractDetails>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6">
|
||||
<!-- ContractStati -->
|
||||
<div class="md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractStati :vertrag_id="contractSelected.vertrag_id"></ContractStati>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- <hr>
|
||||
<div>
|
||||
<!– ContractDetails –>
|
||||
<div class="row md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractDetails :person_id="person_id" :vertrag_id="contractSelected.vertrag_id"></ContractDetails>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!– ContractStati –>
|
||||
<div class="row md-4" v-if="contractSelected.vertrag_id !=null">
|
||||
<ContractStati :vertrag_id="contractSelected.vertrag_id"></ContractStati>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
|
||||
<!--Modal: contractModal-->
|
||||
<bs-modal ref="contractModal" dialog-class="modal-xl">
|
||||
<template #title>
|
||||
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('ui', 'add_contract')}}</p>
|
||||
<p v-else class="fw-bold mt-3">{{$p.t('ui', 'edit_contract')}}</p>
|
||||
</template>
|
||||
|
||||
<core-form class="row g-3" ref="unassignedData">
|
||||
|
||||
<ListUnassigned :endpoint="$fhcApi.factory.vertraege.person" :person_id="person_id"></ListUnassigned>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="DatePicker"
|
||||
:label="$p.t('ui/vertragsdatum')"
|
||||
name="vertragsdatum"
|
||||
v-model="formData.vertragsdatum"
|
||||
auto-apply
|
||||
:enable-time-picker="false"
|
||||
format="dd.MM.yyyy"
|
||||
preview-format="dd.MM.yyyy"
|
||||
:teleport="true"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="text"
|
||||
:label="$p.t('ui/bezeichnung')"
|
||||
name="bezeichnung"
|
||||
v-model="formData.bezeichnung"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="select"
|
||||
:label="$p.t('global/typ')"
|
||||
v-model="formData.vertragstyp_kurzbz"
|
||||
name="vertragstyp_kurzbz"
|
||||
>
|
||||
<option :value="null">-- {{$p.t('fehlermonitoring', 'keineAuswahl')}} --</option>
|
||||
<option
|
||||
v-for="entry in listContractTypes"
|
||||
:key="entry.vertragstyp_kurzbz"
|
||||
:value="entry.vertragstyp_kurzbz"
|
||||
>
|
||||
{{entry.bezeichnung}}
|
||||
</option>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
:label="$p.t('ui/betrag')"
|
||||
name="betrag"
|
||||
v-model="formData.betrag"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3" v-if="!statusNew">
|
||||
<form-input
|
||||
type="text"
|
||||
:label="$p.t('ui/Stunden (Vertrags-Urfassung')"
|
||||
name="vertragsstunden"
|
||||
v-model="formData.vertragsstunden"
|
||||
disabled
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3" v-if="!statusNew">
|
||||
<form-input
|
||||
type="text"
|
||||
:label="$p.t('ui/Studiensemester (Vertrags-Urfassung')"
|
||||
name="vertragsstunden_studiensemester_kurzbz"
|
||||
v-model="formData.vertragsstunden_studiensemester_kurzbz"
|
||||
disabled
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
<div class="row mb-3">
|
||||
<form-input
|
||||
type="textarea"
|
||||
:label="$p.t('global/anmerkung')"
|
||||
name="anmerkung"
|
||||
v-model="formData.anmerkung"
|
||||
>
|
||||
</form-input>
|
||||
</div>
|
||||
|
||||
</core-form>
|
||||
|
||||
<template #footer>
|
||||
<button type="button" class="btn btn-primary" @click="statusNew ? addNewContract() : updateContract(formData.vertrag_id)">{{$p.t('ui', 'speichern')}}</button>
|
||||
</template>
|
||||
|
||||
</bs-modal>
|
||||
</div>`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user