diff --git a/application/config/issueList.php b/application/config/issueList.php new file mode 100644 index 000000000..e4e4f278c --- /dev/null +++ b/application/config/issueList.php @@ -0,0 +1,11 @@ +router->method == 'addNewBankverbindung' ) { $person_id = current(array_slice($this->uri->rsegments, 2)); - + + if (is_null($person_id) || !ctype_digit((string)$person_id)) + $this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + $this->checkPermissionsForPerson($person_id, $permsMa, $permsStud); } elseif ($this->router->method == 'loadAddress' || $this->router->method == 'loadContact' @@ -119,6 +122,9 @@ class Kontakt extends FHCAPI_Controller $model = 'person/Bankverbindung_model'; } + if (!isset($id) || !ctype_digit((string)$id)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + $this->load->model($model, 'TempModel'); $result = $this->TempModel->load($id); $data = $this->getDataOrTerminateWithError($result); @@ -387,8 +393,11 @@ class Kontakt extends FHCAPI_Controller $this->terminateWithSuccess(getData($result) ?: []); } - public function getFirmen($searchString) + public function getFirmen($searchString = null) { + if (is_null($searchString)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + $this->load->model('ressource/firma_model', 'FirmaModel'); $result = $this->FirmaModel->searchFirmen($searchString); @@ -398,8 +407,11 @@ class Kontakt extends FHCAPI_Controller $this->terminateWithSuccess($result ?: []); } - public function getStandorte($searchString) + public function getStandorte($searchString = null) { + if (is_null($searchString)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + $this->load->model('organisation/standort_model', 'StandortModel'); $result = $this->StandortModel->searchStandorte($searchString); @@ -409,8 +421,11 @@ class Kontakt extends FHCAPI_Controller $this->terminateWithSuccess($data); } - public function getStandorteByFirma($firma_id) + public function getStandorteByFirma($firma_id = null) { + if (is_null($firma_id) || !ctype_digit((string)$firma_id)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + $this->load->model('organisation/standort_model', 'StandortModel'); $result = $this->StandortModel->getStandorteByFirma($firma_id); @@ -652,6 +667,9 @@ class Kontakt extends FHCAPI_Controller $bic = $this->input->post('bic'); $blz = $this->input->post('blz'); $kontonr = $this->input->post('kontonr'); + $iban = $this->input->post('iban'); + $typ = $this->input->post('typ'); + $verrechnung = $this->input->post('verrechnung'); $result = $this->BankverbindungModel->insert( [ @@ -659,13 +677,13 @@ class Kontakt extends FHCAPI_Controller 'name' => $name, 'anschrift' => $anschrift, 'bic' => $bic, - 'iban' => $_POST['iban'], + 'iban' => $iban, 'blz' => $blz, 'kontonr' => $kontonr, 'insertvon' => 'uid', 'insertamum' => date('c'), - 'typ' => $_POST['typ'], - 'verrechnung' => $_POST['verrechnung'], + 'typ' => $typ, + 'verrechnung' => $verrechnung, 'ext_id' => $ext_id, 'oe_kurzbz' => $oe_kurzbz, 'orgform_kurzbz' => $orgform_kurzbz diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index f805be88a..f24ef62bb 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -156,6 +156,8 @@ class Student extends FHCAPI_Controller $uid = $student ? current($student)->student_uid : null; + $studiengang_kz = $student ? current($student)->studiengang_kz : null; + $result = $this->PrestudentModel->loadWhere(['prestudent_id' => $prestudent_id]); $person = $this->getDataOrTerminateWithError($result); @@ -231,10 +233,27 @@ class Student extends FHCAPI_Controller // Do Updates if (count($update_lehrverband)) { - $result = $this->StudentlehrverbandModel->update([ + $curstudlvb = $this->StudentlehrverbandModel->load([ 'studiensemester_kurzbz' => $studiensemester_kurzbz, 'student_uid' => $uid - ], $update_lehrverband); + ]); + + if(hasData($curstudlvb) && count(getData($curstudlvb)) > 0 ) + { + $result = $this->StudentlehrverbandModel->update([ + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'student_uid' => $uid + ], $update_lehrverband); + } + else + { + $result = $this->StudentlehrverbandModel->insert(array_merge([ + 'studiensemester_kurzbz' => $studiensemester_kurzbz, + 'student_uid' => $uid, + 'studiengang_kz' => $studiengang_kz + ], $update_lehrverband)); + } + $this->getDataOrTerminateWithError($result); } diff --git a/application/controllers/jobs/IssueResolver.php b/application/controllers/jobs/IssueResolver.php index ca07439c3..fe7ee21f5 100755 --- a/application/controllers/jobs/IssueResolver.php +++ b/application/controllers/jobs/IssueResolver.php @@ -48,7 +48,9 @@ class IssueResolver extends IssueResolver_Controller 'CORE_PERSON_0001' => 'CORE_PERSON_0001', 'CORE_PERSON_0002' => 'CORE_PERSON_0002', 'CORE_PERSON_0003' => 'CORE_PERSON_0003', - 'CORE_PERSON_0004' => 'CORE_PERSON_0004' + 'CORE_PERSON_0004' => 'CORE_PERSON_0004', + 'CORE_PERSON_0005' => 'CORE_PERSON_0005', + 'CORE_PERSON_0006' => 'CORE_PERSON_0006' ); // fehler which are resolved by the job the same way as they are produced diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index f6e41d2e6..57aca0876 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -2375,16 +2375,50 @@ class InfoCenter extends Auth_Controller if ($statusgrund === 'null' || $studiengang === 'null' || $abgeschickt === 'null' || empty($personen)) $this->terminateWithJsonError("Bitte füllen Sie alle Felder aus"); - foreach($personen as $person) + if ($studiengang === 'all' && $abgeschickt === 'all') { - $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt); + foreach($personen as $person) + { + $prestudenten = $this->PrestudentModel->getByPersonWithoutLehrgang($person, $studienSemester); - if (!hasData($prestudent)) - continue; + if (!hasData($prestudenten)) + continue; - $prestudentData = getData($prestudent); + $prestudentenData = getData($prestudenten); + + foreach ($prestudentenData as $prestudent) + { + $this->saveAbsage($prestudent->prestudent_id, $statusgrund); + } + } + } + else + { + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + + $this->StudienplanModel->addSelect('1'); + $this->StudienplanModel->addJoin('lehre.tbl_studienordnung so', 'studienordnung_id'); + $escaped = $this->StudienplanModel->db->escape(strtoupper($studiengang)); + $this->StudienplanModel->db->where("UPPER(so.studiengangkurzbzlang || ':' || tbl_studienplan.orgform_kurzbz) = $escaped"); + $this->StudienplanModel->addLimit(1); + $studiengangResult = $this->StudienplanModel->load(); + + if (hasData($studiengangResult)) + { + foreach($personen as $person) + { + $prestudent = $this->PrestudentModel->getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $abgeschickt === 'all'); + + if (!hasData($prestudent)) + continue; + + $prestudentData = getData($prestudent); + $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); + } + } + else + $this->terminateWithJsonError("Falschen Studiengang übergeben!"); - $this->saveAbsage($prestudentData[0]->prestudent_id, $statusgrund); } $this->outputJsonSuccess("Success"); diff --git a/application/controllers/system/infocenter/Rueckstellung.php b/application/controllers/system/infocenter/Rueckstellung.php index 62af633ca..b1f2b60b7 100644 --- a/application/controllers/system/infocenter/Rueckstellung.php +++ b/application/controllers/system/infocenter/Rueckstellung.php @@ -14,7 +14,8 @@ class Rueckstellung extends Auth_Controller 'get' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'set' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'), - 'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw') + 'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), + 'setForPersonen' => array('infocenter:rw', 'lehre/zgvpruefung:rw'), ) ); @@ -79,7 +80,34 @@ class Rueckstellung extends Auth_Controller $this->outputJson($result); } - + + public function setForPersonen() + { + $personen = $this->input->post('personen'); + $datum_bis = $this->input->post('datum_bis'); + $status_kurzbz = $this->input->post('status_kurzbz'); + + foreach ($personen as $person) + { + $rueckstellung = $this->_ci->RueckstellungModel->loadWhere(array('person_id' => $person)); + if (hasData($rueckstellung)) + continue; + + $result = $this->_ci->RueckstellungModel->insert( + array('person_id' => $person, + 'status_kurzbz' => $status_kurzbz, + 'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'), + 'insertvon' => $this->_uid + ) + ); + + if (isError($result)) + $this->terminateWithJsonError(getError($result)); + $this->_log($person, $status_kurzbz); + } + $this->outputJsonSuccess("Erfolgreich gespeichert!"); + } + public function delete() { $person_id = $this->input->post('person_id'); diff --git a/application/controllers/system/issues/Issues.php b/application/controllers/system/issues/Issues.php index 44c2ff5d3..27a928fb4 100644 --- a/application/controllers/system/issues/Issues.php +++ b/application/controllers/system/issues/Issues.php @@ -6,7 +6,6 @@ class Issues extends Auth_Controller { private $_uid; - const FUNKTION_KURZBZ = 'ass'; // user having this funktion can see issues for oes assigned with this funktion const BERECHTIGUNG_KURZBZ = 'system/issues_verwalten'; // user having this permission can see issues for oes assigned with this permission public function __construct() @@ -28,6 +27,9 @@ class Issues extends Auth_Controller $this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel'); $this->load->model('system/Sprache_model', 'SpracheModel'); + // load config + $this->load->config('issueList'); + $this->loadPhrases( array( 'global', @@ -47,10 +49,12 @@ class Issues extends Auth_Controller { $oes_for_issues = $this->_getOesForIssues(); $language_index = $this->_getLanguageIndex(); + $apps = $this->config->item('issues_list_apps'); + $status = $this->config->item('issues_list_status'); $this->load->view( 'system/issues/issues', - array_merge($oes_for_issues, array('language_index' => $language_index)) + array_merge($oes_for_issues, array('language_index' => $language_index, 'apps' => $apps, 'status' => $status)) ); } @@ -121,6 +125,8 @@ class Issues extends Auth_Controller $oe_kurzbz_for_funktion = array(); $benutzerfunktionRes = $this->BenutzerfunktionModel->getBenutzerFunktionByUid($this->_uid, null, date('Y-m-d'), date('Y-m-d')); + $functions = $this->config->item('issues_list_functions'); + if (isError($benutzerfunktionRes)) show_error(getError($benutzerfunktionRes)); @@ -130,8 +136,8 @@ class Issues extends Auth_Controller { $all_funktionen_oe_kurzbz[$benutzerfunktion->oe_kurzbz][] = $benutzerfunktion->funktion_kurzbz; - // separate oes for the additional funktion which enables displaying issues - if ($benutzerfunktion->funktion_kurzbz == self::FUNKTION_KURZBZ) + // separate oes for the additional functions which enables displaying issues + if (in_array($benutzerfunktion->funktion_kurzbz, $functions)) { $oe_kurzbz_for_funktion[] = $benutzerfunktion->oe_kurzbz; diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index 14f7ed338..de7e866f4 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -95,6 +95,9 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod) }, $server_language); $user_language = getUserLanguage(); + $ci->load->config('javascript'); + $systemerror_mailto = $ci->config->item('systemerror_mailto'); + $FHC_JS_DATA_STORAGE_OBJECT = array( 'app_root' => APP_ROOT, 'ci_router' => $indexPage, @@ -103,6 +106,7 @@ function generateJSDataStorageObject($indexPage, $calledPath, $calledMethod) 'server_languages' => $server_language, 'user_language' => $user_language, 'timezone' => date_default_timezone_get(), + 'systemerror_mailto' => $systemerror_mailto, ); $toPrint = "\n"; diff --git a/application/libraries/AntragLib.php b/application/libraries/AntragLib.php index 885acac90..d90a98241 100644 --- a/application/libraries/AntragLib.php +++ b/application/libraries/AntragLib.php @@ -77,7 +77,9 @@ class AntragLib 'studiensemester_kurzbz'=>$prestudentstatus->studiensemester_kurzbz, 'ausbildungssemester'=>$prestudentstatus->ausbildungssemester ], [ - 'statusgrund_id' => null + 'statusgrund_id' => null, + 'updateamum' => date('c'), + 'updatevon' => $insertvon ]); } } @@ -335,7 +337,10 @@ class AntragLib 'status_kurzbz'=>$prestudentstatus->status_kurzbz, 'studiensemester_kurzbz'=>$prestudentstatus->studiensemester_kurzbz, 'ausbildungssemester'=>$prestudentstatus->ausbildungssemester - ], []); + ], [ + 'updateamum' => $insertam, + 'updatevon' => $insertvon + ]); if (isError($result)) { $errors[] = getError($result); diff --git a/application/libraries/issues/PlausicheckResolverLib.php b/application/libraries/issues/PlausicheckResolverLib.php index 26da985f6..2b20a7d93 100644 --- a/application/libraries/issues/PlausicheckResolverLib.php +++ b/application/libraries/issues/PlausicheckResolverLib.php @@ -13,7 +13,7 @@ class PlausicheckResolverLib private $_ci; // ci instance private $_extensionName; // name of extension private $_codeLibMappings = []; // mappings for issues which explicitly defined resolver - private $_codeProducerLibMappings = []; // mappings for issues which are resolved as produced + private $_codeProducerLibMappings = []; // mappings for issues which are resolved with the same check as they are produced public function __construct($params = null) { @@ -99,10 +99,11 @@ class PlausicheckResolverLib $issueResolved = getData($issueResolvedRes) === true; } } - elseif (isset($this->_codeProducerLibMappings[$issue->fehlercode])) + elseif (isset($this->_codeProducerLibMappings[$issue->fehlercode])) // check if it is an issue without explicit resolver, "self-resolving" { $libName = $this->_codeProducerLibMappings[$issue->fehlercode]; + // execute same check as used for issue production $issueResolvedRes = $this->_ci->plausicheckproducerlib->producePlausicheckIssue( $libName, $issue->fehler_kurzbz, diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0005.php b/application/libraries/issues/resolvers/CORE_PERSON_0005.php new file mode 100644 index 000000000..1d768e70c --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0005.php @@ -0,0 +1,36 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('person/Person_model', 'PersonModel'); + + // load geburtsnation for the given person + $this->_ci->PersonModel->addSelect('geburtsnation'); + $personRes = $this->_ci->PersonModel->load($params['issue_person_id']); + + if (isError($personRes)) return $personRes; + + if (hasData($personRes)) + { + // get person data + $personData = getData($personRes)[0]; + + // if geburtsnation present, issue is resolved + return success(!isEmptyString($personData->geburtsnation)); + } + else + return success(false); // if no person found, not resolved + } +} \ No newline at end of file diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0006.php b/application/libraries/issues/resolvers/CORE_PERSON_0006.php new file mode 100644 index 000000000..8b7ff9c56 --- /dev/null +++ b/application/libraries/issues/resolvers/CORE_PERSON_0006.php @@ -0,0 +1,37 @@ +_ci =& get_instance(); // get code igniter instance + + $this->_ci->load->model('codex/Uhstat1daten_model', 'UhstatModel'); + + $personRes = $this->_ci->UhstatModel->getUHSTAT1PersonData([$params['issue_person_id']]); + + if (isError($personRes)) return $personRes; + + if (hasData($personRes)) + { + // get person data + $personData = getData($personRes)[0]; + + // if person identification data present, issue is resolved + return success( + !isEmptyString($personData->ersatzkennzeichen) + || (!isEmptyString($personData->vbpkAs) && !isEmptyString($personData->vbpkBf)) + ); + } + else + return success(false); // if no person found, not resolved + } +} \ No newline at end of file diff --git a/application/models/codex/Uhstat1daten_model.php b/application/models/codex/Uhstat1daten_model.php index 9bca44b58..899f037ef 100644 --- a/application/models/codex/Uhstat1daten_model.php +++ b/application/models/codex/Uhstat1daten_model.php @@ -11,4 +11,44 @@ class Uhstat1daten_model extends DB_Model $this->dbTable = 'bis.tbl_uhstat1daten'; $this->pk = 'uhstat1daten_id'; } + + /** + * Gets person data needed for sending as UHSTAT1 data. + * @param array $person_id_arr + * @param string $studiensemester + * @param array $status_kurzbz + * @return object success with prestudents or error + */ + public function getUHSTAT1PersonData($person_id_arr) + { + if (!isset($person_id_arr) || isEmptyArray($person_id_arr)) return success([]); + + $params = array($person_id_arr); + + $prstQry = "SELECT + DISTINCT ON (pers.person_id) + pers.person_id, uhstat_daten.uhstat1daten_id, pers.svnr, pers.ersatzkennzeichen, pers.geburtsnation, + uhstat_daten.mutter_geburtsstaat, uhstat_daten.mutter_bildungsstaat, uhstat_daten.mutter_geburtsjahr, + uhstat_daten.mutter_bildungmax, uhstat_daten.vater_geburtsstaat, uhstat_daten.vater_bildungsstaat, + uhstat_daten.vater_geburtsjahr, uhstat_daten.vater_bildungmax, + kzVbpkAs.inhalt AS \"vbpkAs\", kzVbpkBf.inhalt AS \"vbpkBf\" + FROM + public.tbl_person pers + JOIN public.tbl_prestudent ps USING (person_id) + JOIN public.tbl_studiengang stg USING (studiengang_kz) + JOIN bis.tbl_uhstat1daten uhstat_daten USING (person_id) + LEFT JOIN public.tbl_kennzeichen kzVbpkAs ON kzVbpkAs.kennzeichentyp_kurzbz = 'vbpkAs'AND kzVbpkAs.person_id = pers.person_id AND kzVbpkAs.aktiv + LEFT JOIN public.tbl_kennzeichen kzVbpkBf ON kzVbpkBf.kennzeichentyp_kurzbz = 'vbpkBf'AND kzVbpkBf.person_id = pers.person_id AND kzVbpkBf.aktiv + WHERE + ps.bismelden + AND stg.melderelevant + AND pers.person_id IN ? + ORDER BY + pers.person_id"; + + return $this->execReadOnlyQuery( + $prstQry, + $params + ); + } } diff --git a/application/models/crm/Prestudent_model.php b/application/models/crm/Prestudent_model.php index 242c26518..ff56c3268 100644 --- a/application/models/crm/Prestudent_model.php +++ b/application/models/crm/Prestudent_model.php @@ -677,7 +677,7 @@ class Prestudent_model extends DB_Model )); } - public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt) + public function getPrestudentByStudiengangAndPerson($studiengang, $person, $studienSemester, $abgeschickt, $ignoreAbgeschickt = false) { $query = "SELECT ps.prestudent_id FROM public.tbl_prestudentstatus pss @@ -687,22 +687,42 @@ class Prestudent_model extends DB_Model JOIN lehre.tbl_studienordnung so USING(studienordnung_id) WHERE ps.person_id = ? AND UPPER(so.studiengangkurzbzlang || ':' || sp.orgform_kurzbz) = ? - AND pss.studiensemester_kurzbz = ? - AND"; + AND pss.studiensemester_kurzbz = ?"; - if ($abgeschickt === 'true') - $query .= " EXISTS"; - else - $query .= " NOT EXISTS"; + if (!$ignoreAbgeschickt) + { + $query .= "AND"; - $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss + if ($abgeschickt === 'true') + $query .= " EXISTS"; + else + $query .= " NOT EXISTS"; + + $query .= " (SELECT 1 FROM public.tbl_prestudentstatus spss JOIN public.tbl_prestudent sps USING(prestudent_id) WHERE sps.prestudent_id = ps.prestudent_id AND spss.bewerbung_abgeschicktamum IS NOT NULL)"; + } return $this->execQuery($query, array($person, $studiengang, $studienSemester)); } + public function getByPersonWithoutLehrgang($person, $studienSemester) + { + $query = "SELECT DISTINCT(ps.prestudent_id) + FROM public.tbl_prestudentstatus pss + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_studiengang sg USING(studiengang_kz) + JOIN lehre.tbl_studienplan sp USING(studienplan_id) + JOIN lehre.tbl_studienordnung so USING(studienordnung_id) + WHERE ps.person_id = ? + AND (sg.typ = 'b' OR sg.typ = 'm') + AND pss.studiensemester_kurzbz = ?"; + + return $this->execQuery($query, array($person, $studienSemester)); + } + + /** * Gets förderrelevant flag for a prestudent, from prestudent, or, if not set on prestudent level, from studiengang * @param int $prestudent_id diff --git a/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php b/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php index 6827beaa4..f81a2d518 100644 --- a/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php +++ b/application/models/vertragsbestandteil/Dienstverhaeltnis_model.php @@ -59,7 +59,14 @@ class Dienstverhaeltnis_model extends DB_Model } $qry .=" - ORDER BY dv.von desc + ORDER BY + CASE + WHEN (COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date) < 0 THEN NULL + ELSE + (COALESCE(dv.bis, '2999-12-31'::date) - NOW()::date) + END ASC NULLS LAST, + COALESCE(dv.bis, '2999-12-31'::date) DESC, + dv.von DESC "; return $this->execQuery($qry, $data); diff --git a/application/views/system/infocenter/infocenter.php b/application/views/system/infocenter/infocenter.php index 0b7a20c2c..157f98bf1 100644 --- a/application/views/system/infocenter/infocenter.php +++ b/application/views/system/infocenter/infocenter.php @@ -14,12 +14,13 @@ 'navigationwidget' => true, 'dialoglib' => true, 'phrases' => array( + 'infocenter' => array('statusAuswahl'), 'person' => array('vorname', 'nachname'), 'global' => array('mailAnXversandt'), 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ); $this->load->view('templates/FHC-Header', $includesArray); diff --git a/application/views/system/infocenter/infocenterAbgewiesen.php b/application/views/system/infocenter/infocenterAbgewiesen.php index 921d9f224..7129a3250 100644 --- a/application/views/system/infocenter/infocenterAbgewiesen.php +++ b/application/views/system/infocenter/infocenterAbgewiesen.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterAufgenommen.php b/application/views/system/infocenter/infocenterAufgenommen.php index 680d66a8a..d57f31d6b 100644 --- a/application/views/system/infocenter/infocenterAufgenommen.php +++ b/application/views/system/infocenter/infocenterAufgenommen.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterFreigegeben.php b/application/views/system/infocenter/infocenterFreigegeben.php index a240a0b5c..d843cc5c9 100644 --- a/application/views/system/infocenter/infocenterFreigegeben.php +++ b/application/views/system/infocenter/infocenterFreigegeben.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/infocenter/infocenterFreigegebenData.php b/application/views/system/infocenter/infocenterFreigegebenData.php index 27738719c..38285b6ae 100644 --- a/application/views/system/infocenter/infocenterFreigegebenData.php +++ b/application/views/system/infocenter/infocenterFreigegebenData.php @@ -112,7 +112,7 @@ $query = ' LIMIT 1 ) AS "AnzahlAbgeschickt", ( - SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz), \', \') + SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT UPPER(so.studiengangkurzbzlang) || \':\' || sp.orgform_kurzbz || \' [\' || pss.ausbildungssemester || \']\'), \', \') FROM public.tbl_prestudentstatus pss JOIN public.tbl_prestudent ps USING(prestudent_id) JOIN public.tbl_studiengang sg USING(studiengang_kz) diff --git a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php index a86e0df97..eef2a214a 100644 --- a/application/views/system/infocenter/infocenterReihungstestAbsolviert.php +++ b/application/views/system/infocenter/infocenterReihungstestAbsolviert.php @@ -20,7 +20,7 @@ 'ui' => array('bitteEintragWaehlen') ), 'customCSSs' => array('public/css/sbadmin2/tablesort_bootstrap.css', 'public/css/infocenter/infocenterPersonDataset.css'), - 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/infocenterPersonDataset.js') + 'customJSs' => array('public/js/bootstrapper.js', 'public/js/infocenter/rueckstellung.js', 'public/js/infocenter/infocenterPersonDataset.js') ) ); ?> diff --git a/application/views/system/issues/issuesData.php b/application/views/system/issues/issuesData.php index c60b03a74..edaee9058 100644 --- a/application/views/system/issues/issuesData.php +++ b/application/views/system/issues/issuesData.php @@ -1,11 +1,21 @@ db->escape($string); }, array_keys($all_funktionen_oe_kurzbz))) . ")"; + // all oes for which logged user has issues permissions, including permissions for "special" issue funktion -$ALL_OE_KURZBZ_BERECHTIGT = "('" . implode("','", $all_oe_kurzbz_berechtigt) . "')"; -$RELEVANT_PRESTUDENT_STATUS = "('Aufgenommener', 'Student', 'Incoming', 'Diplomand', 'Abbrecher', 'Unterbrecher', 'Absolvent')"; +$ALL_OE_KURZBZ_BERECHTIGT = isEmptyArray($all_oe_kurzbz_berechtigt) ? "(NULL)" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $all_oe_kurzbz_berechtigt)) . ")"; + +// app apps for which issues should be displayed +$APPS = isEmptyArray($apps) ? "" : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $apps)) . ")"; + +// all prestudent status for which issues should be displayed +$RELEVANT_PRESTUDENT_STATUS = isEmptyArray($status) ? "" + : "(" . implode(",", array_map(function($string) { return $this->db->escape($string); }, $status)) . ")"; // get issues for the oes of the logged user or for the persons (students, oe-zuordnung) of the oes $query = "WITH zustaendigkeiten AS ( @@ -37,8 +47,8 @@ $query .= " SELECT issue_id, fehlercode AS \"Fehlercode\", fehler_kurzbz AS \"Fehler Kurzbezeichnung\", iss.fehlercode_extern AS \"Fehlercode extern\", datum AS \"Datum\", inhalt AS \"Inhalt\", inhalt_extern AS \"Inhalt extern\", iss.person_id AS \"PersonId\", iss.oe_kurzbz AS \"OE\", - ftyp.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlertyp\", - stat.bezeichnung_mehrsprachig[".$language_index."] AS \"Fehlerstatus\", + ftyp.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlertyp\", + stat.bezeichnung_mehrsprachig[".$this->db->escape($language_index)."] AS \"Fehlerstatus\", verarbeitetvon AS \"Verarbeitet von\",verarbeitetamum AS \"Verarbeitet am\", fr.app AS \"Applikation\", fr.fehlertyp_kurzbz AS \"Fehlertypcode\", iss.status_kurzbz AS \"Statuscode\", pers.vorname AS \"Vorname\", pers.nachname AS \"Nachname\", @@ -118,44 +128,48 @@ $query .= " JOIN system.tbl_issue_status stat USING (status_kurzbz) LEFT JOIN public.tbl_person pers ON iss.person_id = pers.person_id WHERE - fr.app IN ('core', 'dvuh') - AND ( + ( EXISTS ( /* if oe or person is specified in fehler_zustaendigkeiten */ SELECT 1 FROM zustaendigkeiten WHERE fehlercode = iss.fehlercode AND zustaendig = TRUE)"; // show issue if it is assigend to oe of logged in user or to student of oe of logged in user -if (!isEmptyArray($all_oe_kurzbz_berechtigt)) -{ - $query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; +$query .= " OR iss.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT /* if issue is for oe */"; + +$query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ + SELECT 1 FROM public.tbl_prestudent ps + JOIN public.tbl_prestudentstatus pss USING (prestudent_id) + JOIN public.tbl_studiengang stg USING (studiengang_kz) + WHERE person_id = iss.person_id + AND stg.oe_kurzbz IN ".$ALL_OE_KURZBZ_BERECHTIGT; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND pss.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= " AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ + FROM public.tbl_prestudentstatus ps_finished + JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) + WHERE prestudent_id = ps.prestudent_id + AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') + AND datum::date + interval '2 months' < NOW() + AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ + JOIN public.tbl_prestudentstatus USING (prestudent_id) + JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) + WHERE person_id = ps.person_id + AND prestudent_id <> ps_finished.prestudent_id + AND tbl_studiensemester.start::date > sem_finished.start::date"; + +if (!isEmptyString($RELEVANT_PRESTUDENT_STATUS)) $query .= " AND tbl_prestudentstatus.status_kurzbz IN ".$RELEVANT_PRESTUDENT_STATUS; + +$query .= ") + ) + ) + )"; - $query .= " OR (iss.oe_kurzbz IS NULL AND EXISTS ( /* if person_id of issue is a student of studiengang oe */ - SELECT 1 FROM public.tbl_prestudent ps - JOIN public.tbl_prestudentstatus pss USING (prestudent_id) - JOIN public.tbl_studiengang stg USING (studiengang_kz) - WHERE person_id = iss.person_id - AND stg.oe_kurzbz IN $ALL_OE_KURZBZ_BERECHTIGT - AND pss.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND NOT EXISTS (SELECT 1 /* irrelevant if already finished studies and studied a while ago */ - FROM public.tbl_prestudentstatus ps_finished - JOIN public.tbl_studiensemester sem_finished USING (studiensemester_kurzbz) - WHERE prestudent_id = ps.prestudent_id - AND status_kurzbz IN ('Absolvent','Abbrecher','Abgewiesener') - AND datum::date + interval '2 months' < NOW() - AND EXISTS (SELECT 1 FROM public.tbl_prestudent /* if more recent prestudent exists, still display the issue */ - JOIN public.tbl_prestudentstatus USING (prestudent_id) - JOIN public.tbl_studiensemester USING (studiensemester_kurzbz) - WHERE tbl_prestudentstatus.status_kurzbz IN $RELEVANT_PRESTUDENT_STATUS - AND person_id = ps.person_id - AND prestudent_id <> ps_finished.prestudent_id - AND tbl_studiensemester.start::date > sem_finished.start::date) - ) - ) - )"; -} $query .= ") "; +if (!isEmptyString($APPS)) $query .= " AND fr.app IN ".$APPS; + $query .= " ORDER BY CASE WHEN fehlertyp_kurzbz = '".IssuesLib::ERRORTYPE_CODE."' THEN 0 diff --git a/cis/testtool/frage.php b/cis/testtool/frage.php index 0aa37b299..c38229cdf 100644 --- a/cis/testtool/frage.php +++ b/cis/testtool/frage.php @@ -148,7 +148,7 @@ echo ' alert(t("testtool/alleFragenBeantwortet")."'"?>); return true; } - + $(document).ready(function () { $(document).bind('cut copy paste', function(e) { @@ -717,7 +717,7 @@ if($frage->frage_id!='') if(!$demo) { - echo ''; + echo ''; } else { diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index ad15c6879..958468c9d 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -634,6 +634,7 @@ if(!$error) JOIN public.tbl_studiengang USING(studiengang_kz) WHERE mitarbeiter_uid=".$db->db_add_param($lem->mitarbeiter_uid)." AND + lower(mitarbeiter_uid) NOT LIKE '_dummy%' AND studiensemester_kurzbz=".$db->db_add_param($le->studiensemester_kurzbz)." AND bismelden"; diff --git a/include/lehrelisthelper.class.php b/include/lehrelisthelper.class.php index d6ceaf918..b1821391f 100644 --- a/include/lehrelisthelper.class.php +++ b/include/lehrelisthelper.class.php @@ -200,7 +200,7 @@ class LehreListHelper //Studierende der LV laden und in ein Array schreiben $qry = 'SELECT - distinct on(nachname, vorname, person_id) vorname, nachname, wahlname, matrikelnr, public.tbl_student.student_uid, + distinct on(nachname, vorname, public.tbl_benutzer.person_id) vorname, nachname, wahlname, matrikelnr, public.tbl_student.student_uid, tbl_studentlehrverband.semester, tbl_studentlehrverband.verband, tbl_studentlehrverband.gruppe, (SELECT status_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_student.prestudent_id @@ -209,7 +209,8 @@ class LehreListHelper tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_mitarbeiter.mitarbeiter_uid, tbl_person.matr_nr, tbl_person.geschlecht, tbl_studiengang.kurzbzlang, tbl_mobilitaet.mobilitaetstyp_kurzbz, tbl_zeugnisnote.note, (CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN 1 ELSE 0 END) as doubledegree, - (tbl_bisio.bis::timestamp - tbl_bisio.von::timestamp) as daysout + (tbl_bisio.bis::timestamp - tbl_bisio.von::timestamp) as daysout, + public.tbl_prestudent.gsstudientyp_kurzbz as ddtype FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) @@ -223,6 +224,7 @@ class LehreListHelper LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) LEFT JOIN public.tbl_studiengang ON(tbl_student.studiengang_kz=tbl_studiengang.studiengang_kz) LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + LEFT JOIN public.tbl_prestudent USING(prestudent_id) WHERE vw_student_lehrveranstaltung.lehrveranstaltung_id='.$this->db->db_add_param($this->lvid, FHC_INTEGER).' AND vw_student_lehrveranstaltung.studiensemester_kurzbz='.$this->db->db_add_param($this->studiensemester); @@ -231,7 +233,7 @@ class LehreListHelper if($this->lehreinheit!='') $qry.=' AND vw_student_lehrveranstaltung.lehreinheit_id='.$this->db->db_add_param($this->lehreinheit, FHC_INTEGER); - $qry.=' ORDER BY nachname, vorname, person_id, daysout DESC, doubledegree DESC'; + $qry.=' ORDER BY nachname, vorname, public.tbl_benutzer.person_id, daysout DESC, doubledegree DESC'; $stsem_obj = new studiensemester(); $stsem_obj->load($this->studiensemester); @@ -263,8 +265,13 @@ class LehreListHelper //Outgoing if($row->bisio_id != '' && $row->status != 'Incoming' && ($row->bis > $stsemdatumvon || $row->bis == '') - && $row->von < $stsemdatumbis && (anzahlTage($row->von, $row->bis) >= 30)) + && $row->von < $stsemdatumbis && (anzahlTage($row->von, $row->bis) >= 30)) { $zusatz .= '(o)(ab '.$datum->formatDatum($row->von, 'd.m.Y').')'; + } else if ($row->bisio_id != '' && $row->status != 'Incoming' && ($row->von > $stsemdatumvon || $row->von == '')) { + // if bis datum is not yet known but von is available already + $zusatz .= '(o)(ab '.$datum->formatDatum($row->von, 'd.m.Y').')'; + } + if($row->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen $zusatz.= '('. $row->anmerkung. ')'; @@ -275,8 +282,13 @@ class LehreListHelper if($row->stg_kz_student==$a_o_kz) //Außerordentliche Studierende $zusatz.='(a.o.)'; - if(($row->mobilitaetstyp_kurzbz != '') && ($row->doubledegree == 1)) //Double Degree Student - $zusatz .= '(d.d.)'; + if(($row->mobilitaetstyp_kurzbz != '') && ($row->doubledegree == 1)) { + //Double Degree Student + $zusatz .= '(d.d.'; + if($row->ddtype == 'Intern') $zusatz .= 'i.)'; + else if ($row->ddtype == 'Extern') $zusatz .='o.)'; + else $zusatz .= ')'; + } if(($row->wahlname != '')) { diff --git a/public/js/api/factory/addons.js b/public/js/api/factory/addons.js new file mode 100644 index 000000000..23fd19e39 --- /dev/null +++ b/public/js/api/factory/addons.js @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getLvMenu(lvid, studiensemester_kurzbz) { + return { + method: 'get', + url: `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}` + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/authinfo.js b/public/js/api/factory/authinfo.js new file mode 100644 index 000000000..5cf88604f --- /dev/null +++ b/public/js/api/factory/authinfo.js @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getAuthUID() { + return { + method: 'get', + url: '/api/frontend/v1/AuthInfo/getAuthUID' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/betriebsmittel.js b/public/js/api/factory/betriebsmittel.js new file mode 100644 index 000000000..bc007a20e --- /dev/null +++ b/public/js/api/factory/betriebsmittel.js @@ -0,0 +1,22 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import person from "./betriebsmittel/person.js"; + +export default { + person +}; diff --git a/public/js/api/factory/betriebsmittel/person.js b/public/js/api/factory/betriebsmittel/person.js new file mode 100644 index 000000000..912a5df31 --- /dev/null +++ b/public/js/api/factory/betriebsmittel/person.js @@ -0,0 +1,63 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getAllBetriebsmittel(type, id) { + return { + method: 'get', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + type + '/' + id + }; + }, + addNewBetriebsmittel(person_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' + person_id, + params + }; + }, + loadBetriebsmittel(betriebsmittelperson_id) { + return { + method: 'post', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id + }; + }, + updateBetriebsmittel(betriebsmittelperson_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id, + params + }; + }, + deleteBetriebsmittel(betriebsmittelperson_id) { + return { + method: 'post', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' + betriebsmittelperson_id + }; + }, + getTypenBetriebsmittel() { + return { + method: 'get', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/' + }; + }, + loadInventarliste(query) { + return { + method: 'get', + url: 'api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' + query + }; + } +}; diff --git a/public/js/api/factory/checkperson.js b/public/js/api/factory/checkperson.js new file mode 100644 index 000000000..dc5546cf5 --- /dev/null +++ b/public/js/api/factory/checkperson.js @@ -0,0 +1,37 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + updatePersonUnrulyStatus(person_id, unruly) { + const params = { person_id, unruly } + const url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus'; + return { + method: 'post', + url, + params + }; + }, + filterPerson(params, base = '') { + // TODO(chris): seems to be called from nowhere? + const url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson'; + return { + method: 'post', + url, + params + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/cis/dashboard.js b/public/js/api/factory/cis/dashboard.js new file mode 100644 index 000000000..cb1ec16bb --- /dev/null +++ b/public/js/api/factory/cis/dashboard.js @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getViewData() { + return { + method: 'get', + url: '/api/frontend/v1/Cis4FhcApi/getViewData' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/cis/menu.js b/public/js/api/factory/cis/menu.js new file mode 100644 index 000000000..829c5ff04 --- /dev/null +++ b/public/js/api/factory/cis/menu.js @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getMenu() { + return { + method: 'get', + url: '/api/frontend/v1/CisMenu/getMenu' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/cms.js b/public/js/api/factory/cms.js new file mode 100644 index 000000000..59ad4af5a --- /dev/null +++ b/public/js/api/factory/cms.js @@ -0,0 +1,64 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + content(content_id, version=null, sprache=null, sichtbar=null) { + return { + method: 'get', + url: '/api/frontend/v1/Cms/content', + params: { + content_id, + ...(version ? { version } : {}), + ...(sprache ? { sprache } : {}), + ...(sichtbar ? { sichtbar } : {}) + } + }; + }, + //api function used for the news View that renders the html + getNews(page = 1, page_size = 10, sprache) { + return { + method: 'get', + url: '/api/frontend/v1/Cms/getNews', + params: { + page, + page_size, + sprache + }, + }; + }, + //api function used for the widget component + news(limit) { + return { + method: 'get', + url: '/api/frontend/v1/Cms/news', + params: { limit } + }; + }, + getNewsRowCount() { + return { + method: 'get', + url: '/api/frontend/v1/Cms/getNewsRowCount' + }; + }, + getNewsExtra() { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Cms/getStudiengangInfoForNews' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/filter.js b/public/js/api/factory/filter.js new file mode 100644 index 000000000..5207fe1cf --- /dev/null +++ b/public/js/api/factory/filter.js @@ -0,0 +1,95 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + saveCustomFilter(wsParams) { + return { + method: 'post', + url: '/api/frontend/v1/filter/saveCustomFilter', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + customFilterName: wsParams.customFilterName + } + }; + }, + removeCustomFilter(wsParams) { + return { + method: 'post', + url: '/api/frontend/v1/filter/removeCustomFilter', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + filterId: wsParams.filterId + } + }; + }, + applyFilterFields(wsParams) { + return { + method: 'post', + url: '/api/frontend/v1/filter/applyFilterFields', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + filterFields: wsParams.filterFields + } + }; + }, + addFilterField(wsParams) { + return { + method: 'post', + url: '/api/frontend/v1/filter/addFilterField', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + filterField: wsParams.filterField + } + }; + }, + removeFilterField(wsParams) { + return { + method: 'post', + url: '/api/frontend/v1/filter/removeFilterField', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + filterField: wsParams.filterField + } + }; + }, + getFilterById(wsParams) { + return { + method: 'get', + url: '/api/frontend/v1/filter/getFilter', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType, + filterId: wsParams.filterId + } + }; + }, + getFilter(wsParams) { + return { + method: 'get', + url: '/api/frontend/v1/filter/getFilter', + params: { + filterUniqueId: wsParams.filterUniqueId, + filterType: wsParams.filterType + } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/lehre.js b/public/js/api/factory/lehre.js new file mode 100644 index 000000000..84c8e8662 --- /dev/null +++ b/public/js/api/factory/lehre.js @@ -0,0 +1,39 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getStudentenMail(lehreinheit_id) { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Lehre/lvStudentenMail', + params: { lehreinheit_id } + }; + }, + getLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) { + return { + method: 'get', + url: `/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}` + }; + }, + getStudentPruefungen(lehrveranstaltung_id) { + return { + method: 'get', + url: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}` + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/navigation.js b/public/js/api/factory/navigation.js new file mode 100644 index 000000000..896801dd7 --- /dev/null +++ b/public/js/api/factory/navigation.js @@ -0,0 +1,33 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getHeader(navigation_page) { + return { + method: 'get', + url: '/api/frontend/v1/navigation/header', + params: { navigation_page } + }; + }, + getMenu(navigation_page) { + return { + method: 'get', + url: '/api/frontend/v1/navigation/menu', + params: { navigation_page } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/notiz.js b/public/js/api/factory/notiz.js new file mode 100644 index 000000000..074d4b6a5 --- /dev/null +++ b/public/js/api/factory/notiz.js @@ -0,0 +1,22 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import person from "./notiz/person.js"; + +export default { + person +}; diff --git a/public/js/api/factory/notiz/person.js b/public/js/api/factory/notiz/person.js new file mode 100644 index 000000000..33b572d1a --- /dev/null +++ b/public/js/api/factory/notiz/person.js @@ -0,0 +1,87 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getNotizen(id, type) { + return { + method: 'get', + url: 'api/frontend/v1/notiz/notizPerson/getNotizen/' + id + '/' + type + }; + }, + getUid() { + return { + method: 'get', + url: 'api/frontend/v1/notiz/notizPerson/getUid/' + }; + }, + addNewNotiz(id, params) { + return { + method: 'post', + url: 'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id, + params + }; + }, + loadNotiz(notiz_id) { + return { + method: 'post', + url: 'api/frontend/v1/notiz/notizPerson/loadNotiz/', + params: { + notiz_id + } + }; + }, + loadDokumente(notiz_id) { + return { + method: 'post', + url: 'api/frontend/v1/notiz/notizPerson/loadDokumente/', + params: { + notiz_id + } + }; + }, + deleteNotiz(notiz_id, type_id, id) { + return { + method: 'post', + url: 'api/frontend/v1/notiz/notizPerson/deleteNotiz/', + params: { + notiz_id, + type_id, + id + } + }; + }, + updateNotiz(notiz_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id, + params + }; + }, + getMitarbeiter(event) { + return { + method: 'get', + url: 'api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event + }; + }, + isBerechtigt(id, type_id) { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: 'api/frontend/v1/notiz/notizPerson/isBerechtigt/' + }; + } +}; diff --git a/public/js/api/factory/ort.js b/public/js/api/factory/ort.js new file mode 100644 index 000000000..90488df1b --- /dev/null +++ b/public/js/api/factory/ort.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getContentID(ort_kurbz) { + return { + method: 'get', + url: '/api/frontend/v1/Ort/ContentID', + params: { ort_kurzbz: ort_kurbz } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/phrasen.js b/public/js/api/factory/phrasen.js new file mode 100644 index 000000000..a87e4f4be --- /dev/null +++ b/public/js/api/factory/phrasen.js @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + loadCategory(category) { + return { + method: 'get', + url: '/api/frontend/v1/phrasen/loadModule/' + category + }; + }, + setLanguage(categories,language) { + const params = {categories, language} + return { + method: 'post', + url: '/api/frontend/v1/phrasen/setLanguage', + params + }; + }, + getLanguage() { + return { + method: 'get', + url: '/api/frontend/v1/phrasen/getLanguage' + }; + }, + getActiveDbLanguages() { + return { + method: 'get', + url: '/api/frontend/v1/phrasen/getAllLanguages' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/profil.js b/public/js/api/factory/profil.js new file mode 100644 index 000000000..5da1f202d --- /dev/null +++ b/public/js/api/factory/profil.js @@ -0,0 +1,73 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getView(uid) { + return { + method: 'get', + url: `/api/frontend/v1/Profil/getView/${uid}` + }; + }, + fotoSperre(value) { + return { + method: 'get', + url: `/api/frontend/v1/Profil/fotoSperre/${value}` + }; + + }, + isStudent(uid) { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Profil/isStudent', + params: { uid } + }; + }, + isMitarbeiter(uid) { + return { + method: 'get', + url: `/api/frontend/v1/Profil/isMitarbeiter/${uid}` + }; + }, + getZustellAdresse() { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Profil/getZustellAdresse' + }; + }, + getZustellKontakt() { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Profil/getZustellKontakt' + }; + }, + getGemeinden(nation, zip) { + return { + method: 'get', + url: `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}` + }; + + }, + getAllNationen() { + return { + method: 'get', + url: '/api/frontend/v1/Profil/getAllNationen' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/profilUpdate.js b/public/js/api/factory/profilUpdate.js new file mode 100644 index 000000000..42e87ae0e --- /dev/null +++ b/public/js/api/factory/profilUpdate.js @@ -0,0 +1,110 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + //! API calls for profil update requests + getStatus() { + return { + method: 'get', + url: '/api/frontend/v1/ProfilUpdate/getStatus' + }; + }, + getTopic() { + return { + method: 'get', + url: '/api/frontend/v1/ProfilUpdate/getTopic' + }; + }, + acceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) { + return { + method: 'post', + url: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest', + params: { + profil_update_id, + uid, + status_message, + topic, + requested_change + } + }; + }, + denyProfilRequest({profil_update_id, uid, topic, status_message}) { + return { + method: 'post', + url: '/api/frontend/v1/ProfilUpdate/denyProfilRequest', + params: { + profil_update_id, + uid, + topic, + status_message + } + }; + }, + insertFile(dms, replace = null) { + return { + method: 'post', + url: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`, + params: dms + }; + }, + getProfilRequestFiles(requestID) { + return { + method: 'get', + url: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}` + }; + }, + selectProfilRequest(uid = null, id = null) { + return { + method: 'get', + url: '/api/frontend/v1/ProfilUpdate/selectProfilRequest', + params: { + ...(uid ? { uid } : {}), + ...(id ? { id } : {}) + } + }; + }, + insertProfilRequest(topic, payload, fileID = null) { + return { + method: 'post', + url: '/api/frontend/v1/ProfilUpdate/insertProfilRequest', + params: { + topic, + payload, + ...(fileID ? { fileID } : {}) + } + }; + }, + updateProfilRequest(topic, payload, ID, fileID = null) { + return { + method: 'post', + url: '/api/frontend/v1/ProfilUpdate/updateProfilRequest', + params: { + topic, + payload, + ID, + ...(fileID ? { fileID } : {}) + } + }; + }, + deleteProfilRequest(requestID) { + return { + method: 'post', + url: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest', + params: { requestID } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/searchbar.js b/public/js/api/factory/searchbar.js new file mode 100644 index 000000000..a7bd73b88 --- /dev/null +++ b/public/js/api/factory/searchbar.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + search(params) { + return { + method: 'post', + url: '/api/frontend/v1/searchbar/search', + params + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/studiengang.js b/public/js/api/factory/studiengang.js new file mode 100644 index 000000000..6d5ae15aa --- /dev/null +++ b/public/js/api/factory/studiengang.js @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + studiengangInformation() { + return { + method: 'get', + url: '/api/frontend/v1/Studgang/getStudiengangInfo' + }; + }, + getStudiengangByKz(studiengang_kz) { + return { + method: 'get', + url: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz', + params: { studiengang_kz } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/studstatus.js b/public/js/api/factory/studstatus.js new file mode 100644 index 000000000..459594f8d --- /dev/null +++ b/public/js/api/factory/studstatus.js @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import abmeldung from "./studstatus/abmeldung.js"; +import unterbrechung from "./studstatus/unterbrechung.js"; +import wiederholung from "./studstatus/wiederholung.js"; +import leitung from "./studstatus/leitung.js"; + +export default { + abmeldung, + unterbrechung, + wiederholung, + leitung +}; \ No newline at end of file diff --git a/public/js/api/factory/studstatus/abmeldung.js b/public/js/api/factory/studstatus/abmeldung.js new file mode 100644 index 000000000..81fe5fda7 --- /dev/null +++ b/public/js/api/factory/studstatus/abmeldung.js @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getDetails(antrag_id, prestudent_id) { + const url = '/api/frontend/v1/studstatus/abmeldung/' + + (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id); + return { + method: 'get', + url + }; + }, + create(studiensemester, prestudent_id, grund) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/abmeldung/createAntrag', + params: { + studiensemester, + prestudent_id, + grund + } + }; + }, + cancel(antrag_id) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/abmeldung/cancelAntrag', + params: { antrag_id } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/studstatus/leitung.js b/public/js/api/factory/studstatus/leitung.js new file mode 100644 index 000000000..cc6b87d25 --- /dev/null +++ b/public/js/api/factory/studstatus/leitung.js @@ -0,0 +1,100 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getStgs() { + return { + method: 'get', + url: '/api/frontend/v1/studstatus/leitung/getActiveStgs' + }; + }, + getAntraege(url, config, params) { + return { + method: 'get', + url: '/api/frontend/v1/studstatus/leitung/getAntraege/' + url + }; + }, + getHistory(antrag_id) { + return { + method: 'get', + url: '/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id + }; + }, + getPrestudents(query, signal) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/getPrestudents', + params: { query } + }; + }, + approve(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/approveAntrag', + params: antrag + }; + }, + reject(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/rejectAntrag', + params: antrag + }; + }, + reopen(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/reopenAntrag', + params: antrag + }; + }, + pause(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/pauseAntrag', + params: antrag + }; + }, + unpause(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/unpauseAntrag', + params: antrag + }; + }, + object(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/objectAntrag', + params: antrag + }; + }, + approveObjection(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/approveObjection', + params: antrag + }; + }, + denyObjection(antrag) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/leitung/denyObjection', + params: antrag + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/studstatus/unterbrechung.js b/public/js/api/factory/studstatus/unterbrechung.js new file mode 100644 index 000000000..bf772bf42 --- /dev/null +++ b/public/js/api/factory/studstatus/unterbrechung.js @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getDetails(antrag_id, prestudent_id) { + const url = '/api/frontend/v1/studstatus/unterbrechung/' + + (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id); + return { + method: 'get', + url + }; + }, + create(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/unterbrechung/createAntrag', + params: { + studiensemester, + prestudent_id, + grund, + datum_wiedereinstieg, + attachment + } + }; + }, + cancel(antrag_id) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', + params: { + antrag_id + } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/studstatus/wiederholung.js b/public/js/api/factory/studstatus/wiederholung.js new file mode 100644 index 000000000..3591bb6ed --- /dev/null +++ b/public/js/api/factory/studstatus/wiederholung.js @@ -0,0 +1,63 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getDetails(prestudent_id) { + const url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id; + return { + method: 'get', + url + }; + }, + getLvs(antrag_id) { + const url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id; + return { + method: 'get', + url + }; + }, + create(prestudent_id, studiensemester) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/wiederholung/createAntrag', + params: { + prestudent_id, + studiensemester + } + }; + }, + cancel(prestudent_id, studiensemester) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/wiederholung/cancelAntrag', + params: { + prestudent_id, + studiensemester + } + }; + }, + saveLvs(forbiddenLvs, mandatoryLvs) { + return { + method: 'post', + url: '/api/frontend/v1/studstatus/wiederholung/saveLvs', + params: { + forbiddenLvs, + mandatoryLvs + } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stundenplan.js b/public/js/api/factory/stundenplan.js new file mode 100644 index 000000000..3cfa3c641 --- /dev/null +++ b/public/js/api/factory/stundenplan.js @@ -0,0 +1,66 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getRoomInfo(ort_kurzbz, start_date, end_date) { + return { + method: 'get', + url: '/api/frontend/v1/Stundenplan/getRoomplan', + params: { ort_kurzbz, start_date, end_date } + }; + }, + getStundenplan(start_date, end_date, lv_id) { + return { + method: 'get', + url: '/api/frontend/v1/Stundenplan/getStundenplan', + params: { start_date, end_date, lv_id } + }; + }, + getStunden() { + // TODO(chris): seems to be called from nowhere? + return { + method: 'get', + url: '/api/frontend/v1/Stundenplan/Stunden' + }; + }, + getOrtReservierungen(ort_kurzbz, start_date, end_date) { + return { + method: 'get', + url: `/api/frontend/v1/Stundenplan/Reservierungen/${ort_kurzbz}`, + params: { start_date, end_date } + }; + }, + getStundenplanReservierungen(start_date, end_date) { + return { + method: 'get', + url: '/api/frontend/v1/Stundenplan/Reservierungen', + params: { start_date, end_date } + }; + }, + getLehreinheitStudiensemester(lehreinheit_id) { + return { + method: 'get', + url: `/api/frontend/v1/Stundenplan/getLehreinheitStudiensemester/${lehreinheit_id}` + }; + }, + studiensemesterDateInterval(date) { + return { + method: 'get', + url: `/api/frontend/v1/Stundenplan/studiensemesterDateInterval/${date}` + }; + }, +}; \ No newline at end of file diff --git a/public/js/api/factory/stv.js b/public/js/api/factory/stv.js new file mode 100644 index 000000000..7ea387263 --- /dev/null +++ b/public/js/api/factory/stv.js @@ -0,0 +1,48 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import app from './stv/app.js'; +import lists from './stv/lists.js'; +import verband from './stv/verband.js'; +import students from './stv/students.js'; +import filter from './stv/filter.js'; +import konto from './stv/konto.js'; +import kontakt from './stv/kontakt.js'; +import prestudent from './stv/prestudent.js'; +import status from './stv/status.js'; +import details from './stv/details.js'; +import exam from './stv/exam.js'; +import abschlusspruefung from './stv/abschlusspruefung.js'; +import grades from './stv/grades.js'; +import mobility from './stv/mobility.js'; + +export default { + app, + lists, + verband, + students, + filter, + konto, + kontakt, + prestudent, + status, + details, + exam, + abschlusspruefung, + grades, + mobility +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/abschlusspruefung.js b/public/js/api/factory/stv/abschlusspruefung.js new file mode 100644 index 000000000..37e442b19 --- /dev/null +++ b/public/js/api/factory/stv/abschlusspruefung.js @@ -0,0 +1,111 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getAbschlusspruefung(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + uid + }; + }, + addNewAbschlusspruefung(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', + params + }; + }, + loadAbschlusspruefung(id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', + params: { id } + }; + }, + updateAbschlusspruefung(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', + params + }; + }, + deleteAbschlusspruefung(id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', + params: { id } + }; + }, + getTypenAbschlusspruefung() { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/' + }; + }, + getTypenAntritte() { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/' + }; + }, + getBeurteilungen() { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/' + }; + }, + getAkadGrade(studiengang_kz) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', + params: { studiengang_kz } + }; + }, + getTypStudiengang(studiengang_kz) { + // TODO(chris): seems to be called from nowhere? + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', + params: { studiengang_kz } + }; + }, + getMitarbeiter(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString + }; + }, + getPruefer(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString + }; + }, + getNoten() { + return { + method: 'get', + url: 'api/frontend/v1/stv/abschlusspruefung/getNoten/' + }; + }, + checkForExistingExams(uids) { + return { + method: 'post', + url: 'api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', + params: { uid } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/app.js b/public/js/api/factory/stv/app.js new file mode 100644 index 000000000..6fcf46700 --- /dev/null +++ b/public/js/api/factory/stv/app.js @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + configStudent() { + return { + method: 'get', + url: 'api/frontend/v1/stv/config/student' + }; + }, + configStudents() { + return { + method: 'get', + url: 'api/frontend/v1/stv/config/students' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/details.js b/public/js/api/factory/stv/details.js new file mode 100644 index 000000000..282b0003e --- /dev/null +++ b/public/js/api/factory/stv/details.js @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(prestudent_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/student/get/' + prestudent_id + }; + }, + save(prestudent_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/student/save/' + prestudent_id, + params + }; + }, +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/exam.js b/public/js/api/factory/stv/exam.js new file mode 100644 index 000000000..0a03cf8f5 --- /dev/null +++ b/public/js/api/factory/stv/exam.js @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getPruefungen(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getPruefungen/' + uid + }; + }, + loadPruefung(pruefung_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id + }; + }, + getTypenPruefungen() { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getTypenPruefungen' + }; + }, + getAllLehreinheiten(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/pruefung/getAllLehreinheiten/', + params + }; + }, + getLvsByStudent(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid + }; + }, + getLvsandLesByStudent(uid, semester) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester + }; + }, + getLvsAndMas(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid + }; + }, + getMitarbeiterLv(id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id + }; + }, + getNoten() { + return { + method: 'get', + url: 'api/frontend/v1/stv/pruefung/getNoten' + }; + }, + checkZeugnisnoteLv(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', + params + }; + }, + addPruefung(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/pruefung/insertPruefung/', + params + }; + }, + updatePruefung(id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/pruefung/updatePruefung/' + id, + params + }; + }, + deletePruefung(id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/pruefung/deletePruefung/' + id + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/filter.js b/public/js/api/factory/stv/filter.js new file mode 100644 index 000000000..b81121702 --- /dev/null +++ b/public/js/api/factory/stv/filter.js @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getStg() { + return { + method: 'get', + url: 'api/frontend/v1/stv/filter/getStg' + }; + }, + setStg(studiengang_kz) { + return { + method: 'post', + url: 'api/frontend/v1/stv/filter/setStg', + params: { studiengang_kz } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/grades.js b/public/js/api/factory/stv/grades.js new file mode 100644 index 000000000..ea0d025eb --- /dev/null +++ b/public/js/api/factory/stv/grades.js @@ -0,0 +1,96 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + list() { + return { + method: 'get', + url: 'api/frontend/v1/stv/grades/list' + }; + }, + getCertificate(prestudent_id, all) { + all = all ? '/all' : ''; + return { + method: 'get', + url: 'api/frontend/v1/stv/grades/getCertificate/' + prestudent_id + all + }; + }, + getTeacherProposal(prestudent_id, all) { + all = all ? '/all' : ''; + return { + method: 'get', + url: 'api/frontend/v1/stv/grades/getTeacherProposal/' + prestudent_id + all + }; + }, + getRepeaterGrades(prestudent_id, all) { + all = all ? '/all' : ''; + return { + method: 'get', + url: 'api/frontend/v1/stv/grades/getRepeaterGrades/' + prestudent_id + all + }; + }, + updateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/grades/updateCertificate', + params: { + lehrveranstaltung_id, + student_uid, + studiensemester_kurzbz, + note + } + }; + }, + deleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/grades/deleteCertificate', + params: { + lehrveranstaltung_id, + student_uid, + studiensemester_kurzbz + } + }; + }, + copyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate', + params: { + lehrveranstaltung_id, + student_uid, + studiensemester_kurzbz + } + }; + }, + copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate', + params: { + studierendenantrag_lehrveranstaltung_id + } + }; + }, + getGradeFromPoints(points, lehrveranstaltung_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/grades/getGradeFromPoints', + params: { points, lehrveranstaltung_id } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/kontakt.js b/public/js/api/factory/stv/kontakt.js new file mode 100644 index 000000000..ef77f6d6b --- /dev/null +++ b/public/js/api/factory/stv/kontakt.js @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import address from './kontakt/address.js'; +import bankaccount from './kontakt/bankaccount.js'; +import contact from './kontakt/contact.js'; +import company from './kontakt/company.js'; + +export default { + address, + bankaccount, + contact, + company +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/kontakt/address.js b/public/js/api/factory/stv/kontakt/address.js new file mode 100644 index 000000000..78027835f --- /dev/null +++ b/public/js/api/factory/stv/kontakt/address.js @@ -0,0 +1,71 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getAdressen/' + uid + }; + }, + add(uid, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/addNewAddress/' + uid, + params + }; + }, + load(address_id){ + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/loadAddress/', + params: { address_id } + }; + }, + update(address_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id, + params + }; + }, + delete(address_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/deleteAddress/', + params: { address_id } + }; + }, + getTypes() { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getAdressentypen/' + }; + }, + getPlaces(plz) { + return { + method: 'get', + url: 'api/frontend/v1/stv/address/getPlaces/' + plz + }; + }, + getNations() { + return { + method: 'get', + url: 'api/frontend/v1/stv/address/getNations/' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/kontakt/bankaccount.js b/public/js/api/factory/stv/kontakt/bankaccount.js new file mode 100644 index 000000000..7af230878 --- /dev/null +++ b/public/js/api/factory/stv/kontakt/bankaccount.js @@ -0,0 +1,53 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getBankverbindung/' + uid + }; + }, + add(uid, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + uid, + params + }; + }, + load(bankverbindung_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/loadBankverbindung/', + params: { bankverbindung_id } + }; + }, + update(bankverbindung_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id, + params + }; + }, + delete(bankverbindung_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/deleteBankverbindung/', + params: { bankverbindung_id } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/kontakt/company.js b/public/js/api/factory/stv/kontakt/company.js new file mode 100644 index 000000000..e97a3de1e --- /dev/null +++ b/public/js/api/factory/stv/kontakt/company.js @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getFirmen/' + searchString + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/kontakt/contact.js b/public/js/api/factory/stv/kontakt/contact.js new file mode 100644 index 000000000..7193a65c9 --- /dev/null +++ b/public/js/api/factory/stv/kontakt/contact.js @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getKontakte/' + uid + }; + }, + add(uid, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/addNewContact/' + uid, + params + }; + }, + load(kontakt_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/loadContact/', + params: { kontakt_id } + }; + }, + update(kontakt_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id, + params + }; + }, + delete(kontakt_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/kontakt/deleteContact/', + params: { kontakt_id } + }; + }, + getTypes() { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getKontakttypen/' + }; + }, + getStandorteByFirma(searchString) { + return { + method: 'get', + url: 'api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/konto.js b/public/js/api/factory/stv/konto.js new file mode 100644 index 000000000..6c17d460d --- /dev/null +++ b/public/js/api/factory/stv/konto.js @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(person_id, only_open, studiengang_kz) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/get', + params: { + person_id, + only_open, + studiengang_kz + } + }; + }, + checkDoubles(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/checkDoubles', + params, + config: { + confirmErrorHandler: error => true + } + }; + }, + insert(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/insert', + params + }; + }, + counter(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/counter', + params + }; + }, + edit(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/update', + params + }; + }, + delete(buchungsnr) { + return { + method: 'post', + url: 'api/frontend/v1/stv/konto/delete', + params: { buchungsnr } + }; + }, + getBuchungstypen() { + return { + method: 'get', + url: 'api/frontend/v1/stv/konto/getBuchungstypen' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/lists.js b/public/js/api/factory/stv/lists.js new file mode 100644 index 000000000..4e7904d00 --- /dev/null +++ b/public/js/api/factory/stv/lists.js @@ -0,0 +1,55 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getSprachen() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getSprachen' + }; + }, + getGeschlechter() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getGeschlechter' + }; + }, + getAusbildungen() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getAusbildungen' + }; + }, + getStgs() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getStgs' + }; + }, + getOrgforms() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getOrgforms' + }; + }, + getStudiensemester() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getStudiensemester' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/mobility.js b/public/js/api/factory/stv/mobility.js new file mode 100644 index 000000000..262dbcf55 --- /dev/null +++ b/public/js/api/factory/stv/mobility.js @@ -0,0 +1,128 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getMobilitaeten(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getMobilitaeten/' + uid + }; + }, + getProgramsMobility() { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getProgramsMobility/' + }; + }, + addNewMobility(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/insertMobility/', + params + }; + }, + loadMobility(bisio_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/loadMobility/' + bisio_id + }; + }, + updateMobility(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/updateMobility/', + params + }; + }, + deleteMobility(bisio_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id + }; + }, + getLVList(studiengang_kz) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz + }; + }, + getAllLehreinheiten(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/getAllLehreinheiten/', + params + }; + }, + getLvsandLesByStudent(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid + }; + }, + getPurposes(bisio_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getPurposes/' + bisio_id + }; + }, + getSupports(bisio_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getSupports/' + bisio_id + }; + }, + getListPurposes() { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getListPurposes/' + }; + }, + getListSupports() { + return { + method: 'get', + url: 'api/frontend/v1/stv/mobility/getListSupports/' + }; + }, + deleteMobilityPurpose(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, + params + }; + }, + addMobilityPurpose(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, + params + }; + }, + deleteMobilitySupport(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, + params + }; + }, + addMobilitySupport(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, + params + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/prestudent.js b/public/js/api/factory/stv/prestudent.js new file mode 100644 index 000000000..a49dd1d7a --- /dev/null +++ b/public/js/api/factory/stv/prestudent.js @@ -0,0 +1,150 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + //------------- Prestudent.js------------------------------------------------------ + get(prestudent_id) { + return { + method: 'post', + url: 'api/frontend/v1/stv/prestudent/get/' + prestudent_id + }; + }, + updatePrestudent(prestudent_id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id, + params + }; + }, + getBezeichnungZGV() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getBezeichnungZGV/' + }; + }, + getBezeichnungMZgv() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getBezeichnungMZgv/' + }; + }, + getBezeichnungDZgv() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getBezeichnungDZgv/' + }; + }, + getStgs() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getStgs/' + }; + }, + getAusbildung() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getAusbildung/' + }; + }, + getAufmerksamdurch() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getAufmerksamdurch/' + }; + }, + getBerufstaetigkeit() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getBerufstaetigkeit/' + }; + }, + getTypenStg() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getTypenStg/' + }; + }, + getBisstandort() { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getBisstandort/' + }; + }, + //------------- MultiStatus.js------------------------------------------------------ + getHistoryPrestudent(prestudent_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/status/getHistoryPrestudent/' + prestudent_id + }; + }, + getMaxSem(studiengang_kzs) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/getMaxSemester/', + params: { studiengang_kzs } + }; + }, + advanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/advanceStatus/' + + prestudent_id + '/' + + status_kurzbz + '/' + + studiensemester_kurzbz + '/' + + ausbildungssemester + }; + }, + confirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/confirmStatus/' + + prestudent_id + '/' + + status_kurzbz + '/' + + studiensemester_kurzbz + '/' + + ausbildungssemester + }; + }, + isLastStatus(id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/status/isLastStatus/' + id + }; + }, + deleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/deleteStatus/' + + prestudent_id + '/' + + status_kurzbz + '/' + + studiensemester_kurzbz + '/' + + ausbildungssemester + }; + }, + getLastBismeldestichtag() { + return { + method: 'get', + url: 'api/frontend/v1/stv/status/getLastBismeldestichtag/' + }; + }, + //------------- History.js------------------------------------------------------ + getHistoryPrestudents(person_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + person_id + }; + }, +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/status.js b/public/js/api/factory/stv/status.js new file mode 100644 index 000000000..11e7f4fde --- /dev/null +++ b/public/js/api/factory/stv/status.js @@ -0,0 +1,98 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + //------------- Modal.js------------------------------------------------------ + insertStatus(id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/insertStatus/' + id, + params + }; + }, + loadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/loadStatus/' + + prestudent_id + '/' + + status_kurzbz + '/' + + studiensemester_kurzbz + '/' + + ausbildungssemester + }; + }, + updateStatus({ + prestudent_id, + status_kurzbz, + studiensemester_kurzbz, + ausbildungssemester + }, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/updateStatus/' + + prestudent_id + '/' + + status_kurzbz + '/' + + studiensemester_kurzbz + '/' + + ausbildungssemester, + params + }; + }, + getStudienplaene(prestudent_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id + }; + }, + getStudiengang(prestudent_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id + }; + }, + getStatusgruende() { + return { + method: 'get', + url: 'api/frontend/v1/stv/status/getStatusgruende/' + }; + }, + getStati() { + return { + method: 'get', + url: 'api/frontend/v1/stv/lists/getStati/' + }; + }, + //------------- Dropdown.js------------------------------------------------------ + addStudent(id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/addStudent/' + id, + params + }; + }, + changeStatus(id, params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/status/changeStatus/' + id, + params + }; + }, + getStatusarray() { + return { + method: 'get', + url: 'api/frontend/v1/stv/status/getStatusarray/' + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/students.js b/public/js/api/factory/stv/students.js new file mode 100644 index 000000000..582ba04e8 --- /dev/null +++ b/public/js/api/factory/stv/students.js @@ -0,0 +1,50 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + uid(uid) { + return { + method: 'get', + url: 'api/frontend/v1/stv/students/uid/' + uid + }; + }, + prestudent(prestudent_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/students/prestudent/' + prestudent_id + }; + }, + person(person_id) { + return { + method: 'get', + url: 'api/frontend/v1/stv/students/person/' + person_id + }; + }, + verband(relative_path) { + return { + method: 'get', + url: 'api/frontend/v1/stv/students/' + relative_path + }; + }, + check(params) { + return { + method: 'post', + url: 'api/frontend/v1/stv/student/check', + params + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/stv/verband.js b/public/js/api/factory/stv/verband.js new file mode 100644 index 000000000..114931e4c --- /dev/null +++ b/public/js/api/factory/stv/verband.js @@ -0,0 +1,43 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + get(path) { + let url = 'api/frontend/v1/stv/verband'; + if (path) + url += '/' + path; + return { + method: 'get', + url + }; + }, + favorites: { + get() { + return { + method: 'get', + url: 'api/frontend/v1/stv/favorites' + }; + }, + set(favorites) { + return { + method: 'post', + url: 'api/frontend/v1/stv/favorites/set', + params: { favorites } + }; + } + } +}; \ No newline at end of file diff --git a/public/js/api/factory/widget/ampeln.js b/public/js/api/factory/widget/ampeln.js new file mode 100644 index 000000000..b634766a8 --- /dev/null +++ b/public/js/api/factory/widget/ampeln.js @@ -0,0 +1,37 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + open() { + return { + method: 'get', + url: '/api/frontend/v1/Ampeln/open' + }; + }, + all() { + return { + method: 'get', + url: '/api/frontend/v1/Ampeln/all' + }; + }, + confirm(ampel_id) { + return { + method: 'get', + url: `/api/frontend/v1/Ampeln/confirm/${ampel_id}` + }; + } +}; \ No newline at end of file diff --git a/public/js/api/factory/widget/bookmark.js b/public/js/api/factory/widget/bookmark.js new file mode 100644 index 000000000..9768e25ac --- /dev/null +++ b/public/js/api/factory/widget/bookmark.js @@ -0,0 +1,45 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + getBookmarks() { + return { + method: 'get', + url: '/api/frontend/v1/Bookmark/getBookmarks' + }; + }, + delete(bookmark_id) { + return { + method: 'get', + url: `/api/frontend/v1/Bookmark/delete/${bookmark_id}` + }; + }, + update({ bookmark_id, url, title, tag=null }) { + return { + method: 'post', + url: `/api/frontend/v1/Bookmark/update/${bookmark_id}`, + params: { url, title } + }; + }, + insert({ url, title, tag }) { + return { + method: 'post', + url: `/api/frontend/v1/Bookmark/insert`, + params: { url, title, tag } + }; + } +}; \ No newline at end of file diff --git a/public/js/api/udf.js b/public/js/api/udf.js new file mode 100644 index 000000000..77d1e92cb --- /dev/null +++ b/public/js/api/udf.js @@ -0,0 +1,26 @@ +/** + * Copyright (C) 2025 fhcomplete.org + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +export default { + load({ ciModel, pk }) { + return { + method: 'post', + url: '/api/frontend/v1/udf/load/' + ciModel, + params: pk + }; + } +}; \ No newline at end of file diff --git a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js index 877805b8f..d6e5a4a27 100644 --- a/public/js/apps/Bismeldestichtag/Bismeldestichtag.js +++ b/public/js/apps/Bismeldestichtag/Bismeldestichtag.js @@ -23,7 +23,7 @@ import {CoreRESTClient} from '../../RESTClient.js'; import {CoreFetchCmpt} from '../../components/Fetch.js'; import {BismeldestichtagAPIs} from './API.js'; -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; const bismeldestichtagApp = Vue.createApp({ data: function() { @@ -237,4 +237,4 @@ const bismeldestichtagApp = Vue.createApp({ } }); -bismeldestichtagApp.use(Phrasen).mount('#main'); +bismeldestichtagApp.use(PluginsPhrasen).mount('#main'); diff --git a/public/js/apps/Cis.js b/public/js/apps/Cis.js index 482c2774a..b62592ebd 100644 --- a/public/js/apps/Cis.js +++ b/public/js/apps/Cis.js @@ -1,9 +1,7 @@ import FhcSearchbar from "../components/searchbar/searchbar.js"; import CisMenu from "../components/Cis/Menu.js"; -import FhcApi from '../plugin/FhcApi.js'; -import Phrasen from '../plugin/Phrasen.js'; -import fhcapifactory from "./api/fhcapifactory.js"; -Vue.$fhcapi = fhcapifactory; +import PluginsPhrasen from '../plugins/Phrasen.js'; +import ApiSearchbar from '../api/factory/searchbar.js'; const app = Vue.createApp({ name: 'CisApp', @@ -113,16 +111,15 @@ const app = Vue.createApp({ }, methods: { searchfunction: function(searchsettings) { - return Vue.$fhcapi.search.search(searchsettings); + return this.$api.call(ApiSearchbar.search(searchsettings)); } } }); -app.use(FhcApi); app.use(primevue.config.default, { zIndex: { overlay: 9000, tooltip: 8000 } }) -app.use(Phrasen); +app.use(PluginsPhrasen); app.mount('#cis-header'); diff --git a/public/js/apps/Cis/Documents.js b/public/js/apps/Cis/Documents.js index bcb01b6e8..de03769b4 100644 --- a/public/js/apps/Cis/Documents.js +++ b/public/js/apps/Cis/Documents.js @@ -1,4 +1,4 @@ -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; import {setScrollbarWidth} from "../../helpers/CssVarCalcHelpers.js"; const app = Vue.createApp({ @@ -89,5 +89,5 @@ const app = Vue.createApp({ setScrollbarWidth(); -app.use(Phrasen); +app.use(PluginsPhrasen); app.mount('#content'); diff --git a/public/js/apps/Cis/ProfilUpdateRequests.js b/public/js/apps/Cis/ProfilUpdateRequests.js index 05ce939e4..68465b202 100644 --- a/public/js/apps/Cis/ProfilUpdateRequests.js +++ b/public/js/apps/Cis/ProfilUpdateRequests.js @@ -1,6 +1,7 @@ import ProfilUpdateView from "../../components/Cis/ProfilUpdate/ProfilUpdateView.js"; -import Phrasen from "../../plugin/Phrasen.js"; +import PluginsPhrasen from "../../plugins/Phrasen.js"; +import ApiProfilUpdate from '../../api/factory/profilUpdate.js'; // TODO: sobald in verwendung den vue router pfad zu ProfilUpdateView definieren und diese app in component auslagern const app = Vue.createApp({ @@ -23,7 +24,8 @@ const app = Vue.createApp({ }, methods: {}, created() { - this.$fhcApi.factory.profilUpdate.getStatus() + this.$api + .call(ApiProfilUpdate.getStatus()) .then((response) => { this.profilUpdateStates = response.data; }) @@ -32,4 +34,4 @@ const app = Vue.createApp({ }); }, }); -app.use(Phrasen).mount("#content"); \ No newline at end of file +app.use(PluginsPhrasen).mount("#content"); \ No newline at end of file diff --git a/public/js/apps/Dashboard/Admin.js b/public/js/apps/Dashboard/Admin.js index 0470f82a7..4a5fcee2f 100644 --- a/public/js/apps/Dashboard/Admin.js +++ b/public/js/apps/Dashboard/Admin.js @@ -1,7 +1,6 @@ import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js'; import DashboardAdmin from '../../components/Dashboard/Admin.js'; -import FhcApi from '../../plugin/FhcApi.js'; -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; const app = Vue.createApp({ name: 'AdminApp', @@ -13,6 +12,5 @@ const app = Vue.createApp({ DashboardAdmin } }); -app.use(FhcApi); -app.use(Phrasen); +app.use(PluginsPhrasen); app.mount('#main'); \ No newline at end of file diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index ea8d512df..3b6bb5683 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -1,6 +1,5 @@ import FhcDashboard from '../../components/Dashboard/Dashboard.js'; -import FhcApi from '../../plugin/FhcApi.js'; -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; import contrast from '../../directives/contrast.js'; import {setScrollbarWidth} from "../../helpers/CssVarCalcHelpers.js"; import Stundenplan, {DEFAULT_MODE_STUNDENPLAN} from "../../components/Cis/Stundenplan/Stundenplan.js"; @@ -259,13 +258,12 @@ const app = Vue.createApp({ // kind of a bandaid for bad css on some pages to avoid horizontal scroll setScrollbarWidth(); app.use(router); -app.use(FhcApi); app.use(primevue.config.default, { zIndex: { overlay: 9000, tooltip: 8000 } }) -app.use(Phrasen); +app.use(PluginsPhrasen); app.directive('contrast', contrast); app.mount('#fhccontent'); \ No newline at end of file diff --git a/public/js/apps/LogsViewer/LogsViewer.js b/public/js/apps/LogsViewer/LogsViewer.js index 8aefa1d67..eeb4b38a7 100644 --- a/public/js/apps/LogsViewer/LogsViewer.js +++ b/public/js/apps/LogsViewer/LogsViewer.js @@ -21,7 +21,7 @@ import {LogsViewerTabulatorEventHandlers} from './TabulatorSetup.js'; import {CoreFilterCmpt} from '../../components/filter/Filter.js'; import {CoreNavigationCmpt} from '../../components/navigation/Navigation.js'; -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; const logsViewerApp = Vue.createApp({ data: function() { @@ -42,5 +42,5 @@ const logsViewerApp = Vue.createApp({ } }); -logsViewerApp.use(Phrasen).mount('#main'); +logsViewerApp.use(PluginsPhrasen).mount('#main'); diff --git a/public/js/apps/Studentenverwaltung.js b/public/js/apps/Studentenverwaltung.js index fbbee8e1d..bef605a10 100644 --- a/public/js/apps/Studentenverwaltung.js +++ b/public/js/apps/Studentenverwaltung.js @@ -18,7 +18,7 @@ import FhcStudentenverwaltung from "../components/Stv/Studentenverwaltung.js"; import fhcapifactory from "./api/fhcapifactory.js"; -import Phrasen from "../plugin/Phrasen.js"; +import PluginsPhrasen from "../plugins/Phrasen.js"; const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router; @@ -34,7 +34,9 @@ const router = VueRouter.createRouter({ ] }); -const app = Vue.createApp(); +const app = Vue.createApp({ + name: 'StudentenverwaltungApp' +}); app .use(router) @@ -43,5 +45,5 @@ app overlay: 1100 } }) - .use(Phrasen) + .use(PluginsPhrasen) .mount('#main'); diff --git a/public/js/apps/lehre/Antrag.js b/public/js/apps/lehre/Antrag.js index bb7de3485..97b4bda97 100644 --- a/public/js/apps/lehre/Antrag.js +++ b/public/js/apps/lehre/Antrag.js @@ -1,7 +1,7 @@ import StudierendenantragAntrag from "../../components/Studierendenantrag/Antrag.js"; import StudierendenantragStatus from "../../components/Studierendenantrag/Status.js"; import StudierendenantragInfoblock from "../../components/Studierendenantrag/Infoblock.js"; -import Phrasen from '../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../plugins/Phrasen.js'; const app = Vue.createApp({ name: 'AntragApp', @@ -21,5 +21,5 @@ const app = Vue.createApp({ } }); app - .use(Phrasen) + .use(PluginsPhrasen) .mount('#wrapper'); \ No newline at end of file diff --git a/public/js/apps/lehre/Antrag/Leitung.js b/public/js/apps/lehre/Antrag/Leitung.js index 22c3fa3f5..8fd8b117e 100644 --- a/public/js/apps/lehre/Antrag/Leitung.js +++ b/public/js/apps/lehre/Antrag/Leitung.js @@ -1,5 +1,5 @@ import StudierendenantragLeitung from '../../../components/Studierendenantrag/Leitung.js'; -import Phrasen from '../../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../../plugins/Phrasen.js'; const app = Vue.createApp({ name: 'LeitungApp', @@ -8,6 +8,6 @@ const app = Vue.createApp({ } }); app - .use(Phrasen) + .use(PluginsPhrasen) .use(primevue.config.default,{zIndex: {overlay: 9999}}) .mount('#wrapper'); \ No newline at end of file diff --git a/public/js/apps/lehre/Antrag/Lvzuweisung.js b/public/js/apps/lehre/Antrag/Lvzuweisung.js index ecad05fa5..7504e7dcf 100644 --- a/public/js/apps/lehre/Antrag/Lvzuweisung.js +++ b/public/js/apps/lehre/Antrag/Lvzuweisung.js @@ -1,5 +1,5 @@ import LvZuweisung from '../../../components/Studierendenantrag/Lvzuweisung.js'; -import Phrasen from '../../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../../plugins/Phrasen.js'; const app = Vue.createApp({ name: 'LvzuweisungApp', @@ -13,5 +13,5 @@ const app = Vue.createApp({ } }); app - .use(Phrasen) + .use(PluginsPhrasen) .mount('#wrapper'); \ No newline at end of file diff --git a/public/js/apps/lehre/Antrag/Student.js b/public/js/apps/lehre/Antrag/Student.js index 1848daea4..46150c541 100644 --- a/public/js/apps/lehre/Antrag/Student.js +++ b/public/js/apps/lehre/Antrag/Student.js @@ -1,5 +1,5 @@ import LvPopup from '../../../components/Studierendenantrag/Leitung/LvPopup.js'; -import Phrasen from '../../../plugin/Phrasen.js'; +import PluginsPhrasen from '../../../plugins/Phrasen.js'; const app = Vue.createApp({ name: 'StudentApp', @@ -8,5 +8,5 @@ const app = Vue.createApp({ } }); app - .use(Phrasen) + .use(PluginsPhrasen) .mount('#wrapper'); \ No newline at end of file diff --git a/public/js/apps/lehre/lvplanung/LvTemplates.js b/public/js/apps/lehre/lvplanung/LvTemplates.js index 5bb8694a0..655d611ce 100644 --- a/public/js/apps/lehre/lvplanung/LvTemplates.js +++ b/public/js/apps/lehre/lvplanung/LvTemplates.js @@ -17,9 +17,7 @@ import LvTemplateUebersicht from '../../../lehre/lvplanung/LvTemplateUebersicht.js'; import {CoreNavigationCmpt} from '../../../components/navigation/Navigation.js'; -import FhcAlert from '../../../plugin/FhcAlert.js'; -import FhcApi from "../../../plugin/FhcApi.js"; -import Phrasen from "../../../plugin/Phrasen.js"; +import PluginsPhrasen from "../../../plugins/Phrasen.js"; const lvTemplatesApp = Vue.createApp({ @@ -32,7 +30,5 @@ const lvTemplatesApp = Vue.createApp({ lvTemplatesApp .use(primevue.config.default,{zIndex: {overlay: 9999}}) - .use(FhcAlert) - .use(FhcApi) - .use(Phrasen) + .use(PluginsPhrasen) .mount('#main') \ No newline at end of file diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index d1c07db33..39681ffb4 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -35,13 +35,9 @@ export default { return { tabulatorOptions: { ajaxURL: 'dummy', - ajaxRequestFunc: this.endpoint.getAllBetriebsmittel, - ajaxParams: () => { - return { - type: this.typeId, - id: this.id - }; - }, + ajaxRequestFunc: () => this.$api.call( + this.endpoint.getAllBetriebsmittel(this.typeId, this.id) + ), ajaxResponse: (url, params, response) => response.data, columns: [ {title: "Nummer", field: "nummer", width: 150}, @@ -221,7 +217,9 @@ export default { .then(result => result ? betriebsmittelperson_id : Promise.reject({handled: true})) - .then(this.endpoint.deleteBetriebsmittel) + .then(betriebsmittelperson_id => this.$api.call( + this.endpoint.deleteBetriebsmittel(betriebsmittelperson_id)) + ) .then(result => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete')); window.scrollTo(0, 0); @@ -234,8 +232,8 @@ export default { this.formData.uid = this.uid; if (this.formData.betriebsmitteltyp == 'Inventar') this.formData.betriebsmittel_id = this.formData.inventarData?.betriebsmittel_id; - return this.endpoint - .addNewBetriebsmittel(this.$refs.betriebsmittelData, this.id, this.formData) + return this.$refs.betriebsmittelData + .call(this.endpoint.addNewBetriebsmittel(this.id, this.formData)) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.betriebsmittelModal.hide(); @@ -248,8 +246,11 @@ export default { updateBetriebsmittel(betriebsmittelperson_id) { if (this.formData.betriebsmitteltyp == 'Inventar') this.formData.betriebsmittel_id = this.formData.inventarData?.betriebsmittel_id; - return this.endpoint - .updateBetriebsmittel(this.$refs.betriebsmittelData, betriebsmittelperson_id, this.formData) + return this.$refs.betriebsmittelData + .call(this.endpoint.updateBetriebsmittel( + betriebsmittelperson_id, + this.formData + )) .then(response => { this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')); this.$refs.betriebsmittelModal.hide(); @@ -262,8 +263,8 @@ export default { loadBetriebsmittel(betriebsmittelperson_id) { this.resetModal(); this.statusNew = false; - return this.endpoint - .loadBetriebsmittel(betriebsmittelperson_id) + return this.$api + .call(this.endpoint.loadBetriebsmittel(betriebsmittelperson_id)) .then(result => { this.formData = result.data; }) @@ -271,8 +272,8 @@ export default { }, searchInventar(event) { const encodedQuery = encodeURIComponent(event.query); - return this.endpoint - .loadInventarliste(encodedQuery) + return this.$api + .call(this.endpoint.loadInventarliste(encodedQuery)) .then(result => { this.filteredInventar = result.data; }); @@ -294,8 +295,8 @@ export default { } }, created() { - return this.endpoint - .getTypenBetriebsmittel() + return this.$api + .call(this.endpoint.getTypenBetriebsmittel()) .then(result => { this.listBetriebsmitteltyp = result.data; }) diff --git a/public/js/components/Bootstrap/Alert.js b/public/js/components/Bootstrap/Alert.js index 075c9cf86..9afcfe475 100644 --- a/public/js/components/Bootstrap/Alert.js +++ b/public/js/components/Bootstrap/Alert.js @@ -1,6 +1,7 @@ import BsModal from './Modal.js'; export default { + name: 'BootstrapAlert', components: { BsModal }, diff --git a/public/js/components/Bootstrap/Confirm.js b/public/js/components/Bootstrap/Confirm.js index 7a6f74b15..a56885473 100644 --- a/public/js/components/Bootstrap/Confirm.js +++ b/public/js/components/Bootstrap/Confirm.js @@ -1,6 +1,7 @@ import BsAlert from './Alert.js'; export default { + name: 'BootstrapConfirm', mixins: [ BsAlert ], diff --git a/public/js/components/Bootstrap/Modal.js b/public/js/components/Bootstrap/Modal.js index e390319e8..2b3223ff7 100644 --- a/public/js/components/Bootstrap/Modal.js +++ b/public/js/components/Bootstrap/Modal.js @@ -1,6 +1,7 @@ -import Phrasen from '../../plugin/Phrasen.js'; +//import Phrasen from '../../plugin/Phrasen.js'; export default { + name: 'BootstrapModal', data: () => ({ modal: null }), @@ -77,6 +78,7 @@ export default { return new Promise((resolve,reject) => { const instance = Vue.createApp({ + name: 'ModalTmpApp', setup() { return () => Vue.h(BsModal, {...{ class: 'fade' @@ -104,9 +106,12 @@ export default { instance.use(primevue.config.default, {zIndex: {overlay: 9999}}) } - instance.use(Phrasen); // TODO(chris): find a more dynamic way - instance.mount(wrapper); - document.body.appendChild(wrapper); + //instance.use(Phrasen); // TODO(chris): find a more dynamic way + import('../../plugins/Phrasen.js').then((Phrasen) => { + instance.use(Phrasen.default); + instance.mount(wrapper); + document.body.appendChild(wrapper); + }); }); }, template: `