Ferien: added to vilesci menu, made oe_kurzbz optional, added default ferientypen, made studiengang_kz column deprecated

This commit is contained in:
Alexei Karpenko
2026-05-05 18:14:27 +02:00
parent 8ae3afa98a
commit 179386bea9
8 changed files with 56 additions and 32 deletions
+9
View File
@@ -119,6 +119,15 @@ $config['navigation_header'] = array(
'requiredPermissions' => array(
'lehre/zgvpruefung:r'
)
),
'ferien' => array(
'link' => site_url('lehre/Ferienverwaltung'),
'description' => 'Ferienverwaltung',
'expand' => true,
'sort' => 55,
'requiredPermissions' => array(
'basis/ferien:r'
)
)
)
),
@@ -67,8 +67,6 @@ class Ferien extends FHCAPI_Controller
*/
public function getFerien()
{
// TODO check input
$filterVonDatum = $this->input->get('filterVonDatum');
$filterBisDatum = $this->input->get('filterBisDatum');
@@ -337,12 +335,10 @@ class Ferien extends FHCAPI_Controller
$this->form_validation->set_rules('vondatum', 'Von Datum', 'required|is_valid_date');
$this->form_validation->set_rules('bisdatum', 'Bis Datum', 'required|is_valid_date');
$this->form_validation->set_rules('bezeichnung', 'Bezeichnung', 'required|max_length[128]');
$this->form_validation->set_rules('oe_kurzbz', 'Organisationseinheit', 'required|max_length[32]');
$this->form_validation->set_rules('oe_kurzbz', 'Organisationseinheit', 'max_length[32]');
$this->form_validation->set_rules('studienplan_id', 'Studienplan', 'numeric');
$this->form_validation->set_rules('ferientyp_kurzbz', 'Ferientyp', 'max_length[64]');
//Events::trigger('konto_insert_validation', $this->form_validation);
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
@@ -43,24 +43,18 @@ class Ferien_model extends DB_Model
$parents = array_column(getData($result), 'oe_kurzbz');
// get ferien - use oe_kurzbz, if "old" ferien without oe, use studiengang
// get ferien - use oe_kurzbz
$qry = "
SELECT
*
FROM
lehre.tbl_ferien
WHERE
(bisdatum >= ? AND vondatum < ?)
AND (CASE
WHEN oe_kurzbz IS NOT NULL
THEN oe_kurzbz IN ?
ELSE
studiengang_kz=0
OR studiengang_kz=?
END)
bisdatum >= ? AND vondatum < ?
AND (oe_kurzbz IS NULL OR oe_kurzbz IN ?)
ORDER BY
vondatum";
return $this->execReadOnlyQuery($qry, [$vondatum, $bisdatum, $parents, $studiengang_kz]);
return $this->execReadOnlyQuery($qry, [$vondatum, $bisdatum, $parents]);
}
}
+4 -7
View File
@@ -17,14 +17,11 @@
$this->load->view('templates/FHC-Header', $includesArray);
?>
<div id="main">
<div id="content">
<div>
<ferienverwaltung></ferienverwaltung>
</div>
</div>
<div id="main">
<div>
<ferienverwaltung></ferienverwaltung>
</div>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
+2 -7
View File
@@ -103,13 +103,8 @@ class ferien extends basis_db
FROM
lehre.tbl_ferien
WHERE
(CASE
WHEN oe_kurzbz IS NOT NULL
THEN oe_kurzbz IN (".$this->implode4SQL($parents).")
ELSE
studiengang_kz=0
OR studiengang_kz=".$this->db_add_param($stg_kz, FHC_INTEGER)."
END)
oe_kurzbz IS NULL
OR oe_kurzbz IN (".$this->implode4SQL($parents).")
ORDER BY
vondatum";
@@ -1,4 +1,5 @@
import {CoreFilterCmpt} from "../filter/Filter.js";
import {CoreNavigationCmpt} from "../navigation/Navigation.js";
import FormInput from "../Form/Input.js";
import FerienModal from "./Modal.js";
@@ -8,6 +9,7 @@ export default {
name: "Ferienverwaltung",
components: {
CoreFilterCmpt,
CoreNavigationCmpt,
FormInput,
FerienModal
},
@@ -16,6 +18,8 @@ export default {
filterVonDatum: null,
filterBisDatum: null,
loading: false,
sideMenuEntries: {},
headerMenuEntries: {},
tabulatorOptions: {
ajaxURL: 'dummy',
ajaxRequestFunc: () => this.$api.call(
@@ -223,6 +227,13 @@ export default {
});
},
template: `
<core-navigation-cmpt
v-bind:add-side-menu-entries="sideMenuEntries"
v-bind:add-header-menu-entries="headerMenuEntries"
>
</core-navigation-cmpt>
<div class="h-100 d-flex flex-column">
<div class="row justify-content-center">
<div class="col-5">
@@ -147,6 +147,7 @@ export default {
:label="$p.t('ferien/organisationseinheit')"
@change="getStudienplaene"
>
<option :value="null">-- {{ $p.t('ui/alle') }} --</option>
<option v-for="oe in oeList" :key="oe.oe_kurzbz" :value="oe.oe_kurzbz">
{{ oe.organisationseinheittyp_kurzbz + ' ' + oe.bezeichnung }}
</option>
+24 -3
View File
@@ -120,6 +120,7 @@ if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname =
}
}
// add new fields to tbl_ferien, migrate data (add oe_kurzbz data), mark studiengang_kz as deprecated
if(!$result = @$db->db_query("SELECT oe_kurzbz FROM lehre.tbl_ferien LIMIT 1"))
{
$qry = "ALTER TABLE lehre.tbl_ferien
@@ -138,8 +139,21 @@ if(!$result = @$db->db_query("SELECT oe_kurzbz FROM lehre.tbl_ferien LIMIT 1"))
ADD COLUMN IF NOT EXISTS updateamum timestamp,
ADD COLUMN IF NOT EXISTS updatevon VARCHAR(32);
UPDATE lehre.tbl_ferien
SET oe_kurzbz = (SELECT oe_kurzbz FROM public.tbl_studiengang WHERE studiengang_kz = tbl_ferien.studiengang_kz)
WHERE oe_kurzbz IS NULL AND studiengang_kz IS NOT NULL;";
SET oe_kurzbz = (
SELECT
CASE
WHEN studiengang_kz = 0
THEN NULL
ELSE oe_kurzbz
END
FROM
public.tbl_studiengang
WHERE
studiengang_kz = tbl_ferien.studiengang_kz
)
WHERE oe_kurzbz IS NULL AND studiengang_kz IS NOT NULL;
ALTER TABLE lehre.tbl_ferien ALTER COLUMN studiengang_kz DROP NOT NULL;
COMMENT ON COLUMN lehre.tbl_ferien.studiengang_kz IS 'DEPRECATED';";
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_ferien: '.$db->db_last_error().'</strong><br>';
@@ -170,7 +184,14 @@ if (!$result = @$db->db_query('SELECT 0 FROM lehre.tbl_ferientyp WHERE 0 = 1'))
ALTER TABLE lehre.tbl_ferien ADD CONSTRAINT tbl_lehre_ferien_ferientyp_kurzbz_fk FOREIGN KEY (ferientyp_kurzbz)
REFERENCES lehre.tbl_ferientyp (ferientyp_kurzbz) MATCH FULL
ON DELETE SET NULL ON UPDATE CASCADE;';
ON DELETE SET NULL ON UPDATE CASCADE;
INSERT INTO lehre.tbl_ferientyp (ferientyp_kurzbz, beschreibung, mitarbeiter, studierende, lehre)
VALUES(\'Feiertag\', \'Gesetzliche und andere Feiertage\', true, true, false);
INSERT INTO lehre.tbl_ferientyp (ferientyp_kurzbz, beschreibung, mitarbeiter, studierende, lehre)
VALUES(\'Ferien\', \'Ferientage\', true, true, false);
INSERT INTO lehre.tbl_ferientyp (ferientyp_kurzbz, beschreibung, mitarbeiter, studierende, lehre)
VALUES(\'Info\', \'Weitere Zeiten für Ereignisse, z.B. Sportwoche, Ausgleichswoche... \', true, true, false);
';
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_ferientyp: '.$db->db_last_error().'</strong><br>';