From b1452698f842aefb7030d9c529a4415a023b616a Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 4 Nov 2024 12:54:34 +0100 Subject: [PATCH] Start View Karteireiter, Components Unassigned, Details and Stati --- .../api/frontend/v1/vertraege/Vertraege.php | 224 ++++++++++ .../models/accounting/Vertrag_model.php | 159 +++++++ .../models/accounting/Vertragstyp_model.php | 1 + .../Vertragvertragsstatus_model.php | 2 + public/js/api/fhcapifactory.js | 4 +- public/js/api/vertraege.js | 5 + public/js/api/vertraege/person.js | 36 ++ .../Stv/Studentenverwaltung/Details.js | 1 + .../Details/Prestudent/MultiStatus.js | 5 + .../js/components/Vertraege/List/Details.js | 113 +++++ public/js/components/Vertraege/List/Status.js | 75 ++++ .../components/Vertraege/List/Unassigned.js | 113 +++++ public/js/components/Vertraege/Vertraege.js | 389 ++++++++++++++++++ 13 files changed, 1126 insertions(+), 1 deletion(-) create mode 100644 application/controllers/api/frontend/v1/vertraege/Vertraege.php create mode 100644 public/js/api/vertraege.js create mode 100644 public/js/api/vertraege/person.js create mode 100644 public/js/components/Vertraege/List/Details.js create mode 100644 public/js/components/Vertraege/List/Status.js create mode 100644 public/js/components/Vertraege/List/Unassigned.js create mode 100644 public/js/components/Vertraege/Vertraege.js diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php new file mode 100644 index 000000000..eaf3062f5 --- /dev/null +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -0,0 +1,224 @@ + ['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))); + } +} \ No newline at end of file diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index 8725cd98d..62b109922 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -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)); + } + + } diff --git a/application/models/accounting/Vertragstyp_model.php b/application/models/accounting/Vertragstyp_model.php index 42d248217..a3275af6e 100644 --- a/application/models/accounting/Vertragstyp_model.php +++ b/application/models/accounting/Vertragstyp_model.php @@ -11,4 +11,5 @@ class Vertragstyp_model extends DB_Model $this->dbTable = 'lehre.tbl_vertragstyp'; $this->pk = 'vertragstyp_kurzbz'; } + } diff --git a/application/models/accounting/Vertragvertragsstatus_model.php b/application/models/accounting/Vertragvertragsstatus_model.php index 78a065540..75b0794cc 100644 --- a/application/models/accounting/Vertragvertragsstatus_model.php +++ b/application/models/accounting/Vertragvertragsstatus_model.php @@ -190,4 +190,6 @@ class Vertragvertragsstatus_model extends DB_Model return $this->loadWhere($condition); } + + } diff --git a/public/js/api/fhcapifactory.js b/public/js/api/fhcapifactory.js index e30772ca7..45a172302 100644 --- a/public/js/api/fhcapifactory.js +++ b/public/js/api/fhcapifactory.js @@ -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 }; \ No newline at end of file diff --git a/public/js/api/vertraege.js b/public/js/api/vertraege.js new file mode 100644 index 000000000..1c23316ef --- /dev/null +++ b/public/js/api/vertraege.js @@ -0,0 +1,5 @@ +import person from "./vertraege/person.js"; + +export default { + person +} \ No newline at end of file diff --git a/public/js/api/vertraege/person.js b/public/js/api/vertraege/person.js new file mode 100644 index 000000000..cff6ea87d --- /dev/null +++ b/public/js/api/vertraege/person.js @@ -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); + }, +} \ No newline at end of file diff --git a/public/js/components/Stv/Studentenverwaltung/Details.js b/public/js/components/Stv/Studentenverwaltung/Details.js index 4df148063..dfa7e92ed 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details.js +++ b/public/js/components/Stv/Studentenverwaltung/Details.js @@ -43,6 +43,7 @@ export default { }, template: `
+
Bitte StudentIn auswählen!
diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js index ac4a2dd9e..4cf826bb3 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js @@ -318,6 +318,9 @@ export default{ @saved="reload" > + TEST1: Anzahl Students: + {{modelValue.length}} + + TEST 2 +