Merge branch 'feature-15390/Zeitwuensche_pro_Semester' into feature-15391/Positive_Zeitsperre

This commit is contained in:
Andreas Österreicher
2022-04-08 14:00:37 +02:00
3 changed files with 153 additions and 205 deletions
+16 -14
View File
@@ -84,8 +84,10 @@ if(!$person->load($uid))
$ma = new mitarbeiter($uid);
$fixangestellt = $ma->fixangestellt;
// Check, ob Lektor bereits zugewiesene LVs hat
$isVerplant = checkIsVerplant($uid, $selected_ss); // boolean
// Check, ob Bearbeitung des ZW gesperrt ist.
// Gesperrt, wenn Lektor bereits zugewiesene LVs hat.
// Sperre in jeden Fall aufgehoben, wenn ein ZW kopiert wird. (denn ist eine eventuelle Sperre bereits manuell aufgehoben worden)
$isGesperrt = checkIsVerplant($uid, $selected_ss) && is_null($selected_past_ss); // boolean
// Erklärung zu Pausen bei geteilten Arbeitszeiten speichern
if (isset($_GET['selbstverwaltete-pause-akt']) && !empty($_GET['submit-akt']))
@@ -270,8 +272,8 @@ if (isset($_GET['type']) && $_GET['type'] == 'save')
}
// Wenn speichern möglich ist, dann hat der Lektor entweder keine LVs zugeteilt oder hat aktiv die Bearbeitungssperre
// deaktiviert. Bearbeitungssperre wird gesetzt, wenn isVerplant true ist. Deshalb hier mit false überschreiben.
$isVerplant = false;
// deaktiviert. Bearbeitungssperre wird gesetzt, wenn isGesperrt true ist. Deshalb hier mit false überschreiben.
$isGesperrt = false;
}
/**
@@ -452,8 +454,8 @@ function getStgMail($stgKz_arr)
$(function() {
// Bearbeitung deaktivieren, wenn Lektor zugewiesene LV im Studiensemester hat
const isVerplant = $('input[name=isVerplant]').val();
if (isVerplant == 'true')
const isGesperrt = $('input[name=isGesperrt]').val();
if (isGesperrt == 'true')
{
$('input[name=radioZWG]').attr("disabled", true);
$('input[name=submit]').attr("disabled", true);
@@ -465,7 +467,7 @@ function getStgMail($stgKz_arr)
$('input[name=submit]').attr("disabled", false);
$('#divChangeZWG').removeClass('hidden');
$('#divIsVerplant').addClass('hidden');
$('#divisGesperrt').addClass('hidden');
});
// Bei Wechsel von Studiensemester die Seite mit GET params neu laden
@@ -605,7 +607,7 @@ function getStgMail($stgKz_arr)
// FORM Begin
echo '<form name="zeitwunsch" method="post" action="zeitwunsch.php?stsem='. $selected_ss. '&type=save" onsubmit="return checkvalues()">';
echo '<input type="hidden" name="uid" value="'. $uid. '">';
echo '<input type="hidden" name="isVerplant" value="'. json_encode($isVerplant). '">';
echo '<input type="hidden" name="isGesperrt" value="'. json_encode($isGesperrt). '">';
// Mein Zeitwunsch-Semesterplan Dropdown, Default = naechstes Studiensemester
$next_ss_selected = $next_ss->studiensemester_kurzbz == $selected_ss ? 'selected' : '';
@@ -674,7 +676,7 @@ function getStgMail($stgKz_arr)
echo '<label class="radio-inline">';
echo '<b><input type="radio" name="radioZWG" id="radioCopyZWG" value="copy" '. $radioCopyChecked. '> '. $p->t('zeitwunsch/aendern'). '</b>';
echo '</label>';
if ($isVerplant)
if ($isGesperrt)
{
echo '<span class="label label-danger valign-top">'.$p->t('zeitwunsch/stundenBereitsVerplant', array($selected_ss)). '</span>';
}
@@ -686,9 +688,9 @@ function getStgMail($stgKz_arr)
echo '<span><small><a id="reload-table" style="cursor: pointer">'. $p->t('global/aenderungenZuruecksetzen'). '</a></small></span><br><br>';
echo '</div>'; // end col-xs-3
$divChangeHidden = !is_null($selected_past_ss) || $isVerplant ? 'hidden' : '';
$divCopyHidden = is_null($selected_past_ss) || $isVerplant ? 'hidden' : '';
$divIsVerplantHidden = $isVerplant ? '' : 'hidden';
$divChangeHidden = !is_null($selected_past_ss) || $isGesperrt ? 'hidden' : '';
$divCopyHidden = is_null($selected_past_ss) || $isGesperrt ? 'hidden' : '';
$divisGesperrtHidden = $isGesperrt ? '' : 'hidden';
echo '<div id="divChangeZWG" class="'. $divChangeHidden . '">';
echo '<div class="col-xs-8 col-lg-7">';
@@ -723,7 +725,7 @@ function getStgMail($stgKz_arr)
echo '</div>'; // end col
echo '</div>'; // end divCopyZWG
echo '<div id="divIsVerplant" class="'. $divIsVerplantHidden . '">';
echo '<div id="divisGesperrt" class="'. $divisGesperrtHidden . '">';
// Mail Adressen der Studiengaenge, wo Lektor ueber eine LV bereits verplant ist
$stgKzOfVerplant_arr = getStgOfVerplant($uid, $selected_ss);
@@ -740,7 +742,7 @@ function getStgMail($stgKz_arr)
echo '</div>'; // end panel heading
echo '</div>'; // end panel
echo '</div>'; // end col
echo '</div>'; // end divIsVerplant
echo '</div>'; // end divisGesperrt
// Speichern - Button
echo '<div class="col-xs-3">';
+17 -30
View File
@@ -138,58 +138,45 @@ class zeitwunsch_gueltigkeit extends basis_db
public function getByUID($uid, $limit = null, $activeOnly = true, $bis = null)
{
$qry = '
SELECT zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis,
insertamum, insertvon, updateamum, updatevon,
studiensemester_kurzbz, start, ende
FROM (
SELECT DISTINCT ON (bis) bis, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, insertamum, insertvon, updateamum, updatevon, studiensemester_kurzbz, start, ende
FROM campus.tbl_zeitwunsch_gueltigkeit zwg, public.tbl_studiensemester
WHERE zwg.mitarbeiter_uid = '.$this->db_add_param($uid);
WITH basic_select AS (
SELECT *,
row_number() over (PARTITION BY studiensemester_kurzbz ORDER BY von DESC) r
FROM campus.tbl_zeitwunsch_gueltigkeit, public.tbl_studiensemester
WHERE mitarbeiter_uid = ' . $this->db_add_param($uid);
// Wenn Bis-Datum angegeben
if (!is_null($bis))
{
// Zeitwuensche nur bis zum angegebenen Bis-Datum
$qry.= '
AND (von < ende AND '. $this->db_add_param($bis). '::date > start)
AND (von < ende AND '. $this->db_add_param($bis). '::date > start))
';
}
// Wenn kein Bis-Datum angegeben ist
else
{
// Alle Zeitwuensche
$qry.= '
AND (von < ende AND COALESCE(bis, \'2999-12-31\'::date ) > start)
';
// Zeitwuensche bis zum Semesterende des chronologisch letzten Zeitwunsches (also der ZWG, wo bis NULL ist)
$qry.= '
AND (von < ende AND COALESCE(bis, (SELECT ende FROM public.tbl_studiensemester WHERE von BETWEEN start AND ende)) > start))';
}
$qry.= '
ORDER BY bis, von DESC, bis DESC, start ASC
) temp
';
// Nach Gueltigkeits-Startdatum sortieren, zuerst die zuletzt gueltigen
$qry.= '
ORDER BY von DESC, bis DESC
';
SELECT *
FROM basic_select
';
// Wenn nur aktive Zeitwunschgueltigkeiten angezeigt werden sollen
if ($activeOnly)
{
// ...mit distinct die zuletzt erstellten pro Studiensemester filtern
$qry = '
SELECT DISTINCT ON (studiensemester_kurzbz) studiensemester_kurzbz,
start, ende, zeitwunsch_gueltigkeit_id, mitarbeiter_uid, von, bis,
insertamum, insertvon, updateamum, updatevon
FROM ('. $qry. ') temp
ORDER BY studiensemester_kurzbz, von DESC, bis DESC
';
$qry.= ' WHERE r = 1';
}
$qry.= ' ORDER BY von DESC, start DESC';
// Wenn Limit angegeben
if (!is_null($limit))
{
// Ausgabe limitieren
$qry.= 'LIMIT '.$this->db_add_param($limit);
$qry.= ' LIMIT '.$this->db_add_param($limit);
}
if ($result = $this->db_query($qry))
+120 -161
View File
@@ -5940,167 +5940,6 @@ if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_tbl_zeita
echo 'Index fuer campus.tbl_zeitaufzeichnung.uid hinzugefuegt<br>';
}
}
// Add table campus.tbl_zeitwunsch_gueltigkeit and migrate initial data
if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LIMIT 1;"))
{
$qry = "
CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit
(
zeitwunsch_gueltigkeit_id INTEGER NOT NULL,
mitarbeiter_uid CHARACTER VARYING(32) NOT NULL,
von DATE,
bis DATE,
insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
insertvon CHARACTER VARYING(32),
updateamum TIMESTAMP WITHOUT TIME ZONE,
updatevon CHARACTER VARYING(32)
);
CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
-- Add Primary Key
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id);
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id');
-- Add Permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci;
GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web;
-- Initial data migration
INSERT INTO campus.tbl_zeitwunsch_gueltigkeit
(
mitarbeiter_uid,
von,
bis,
insertamum,
insertvon,
updateamum,
updatevon
)
SELECT * FROM
(
-- Unique Mitarbeiter from Zeitwunsch Tabelle, Start and End of actual Studiensemester
SELECT DISTINCT mitarbeiter_uid,
(SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()),
(SELECT ende FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()),
NOW(),
'system',
NOW(),
'system'
FROM campus.tbl_zeitwunsch
UNION
-- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of next Studiensemester and open end
SELECT DISTINCT mitarbeiter_uid,
(SELECT start FROM public.tbl_studiensemester WHERE ende > NOW() LIMIT 1),
NULL::DATE AS \"ende\",
NOW(),
'system',
NOW(),
'system'
FROM campus.tbl_zeitwunsch
ORDER BY start, mitarbeiter_uid
) AS init_data
";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'</strong><br>';
else
echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt<br>';
}
// Add column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch
if (!$result = @$db->db_query("SELECT zeitwunsch_id FROM campus.tbl_zeitwunsch LIMIT 1"))
{
$qry = "
ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag
-- Add primary key and foreign key
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_id INTEGER;
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_gueltigkeit_id INTEGER;
-- Add comments
COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu';
COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED';
CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id');
UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id');
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id);
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE;
-- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester
UPDATE campus.tbl_zeitwunsch
SET zeitwunsch_gueltigkeit_id = (
SELECT zeitwunsch_gueltigkeit_id
FROM campus.tbl_zeitwunsch_gueltigkeit zwg
WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid
AND (zwg.von <= NOW() AND zwg.bis >= NOW())
);
-- Duplicate existing data and set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of next Studiensemester
INSERT INTO campus.tbl_zeitwunsch
(
stunde,
mitarbeiter_uid,
tag,
gewicht,
updateamum,
updatevon,
insertamum,
insertvon,
zeitwunsch_gueltigkeit_id
)
SELECT * FROM
(
SELECT
stunde,
mitarbeiter_uid,
tag,
gewicht,
NOW(),
'system',
NOW(),
'system',
(
SELECT zeitwunsch_gueltigkeit_id
FROM campus.tbl_zeitwunsch_gueltigkeit zwg
WHERE campus.tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid
AND bis IS NULL
) AS \"zeitwunsch_gueltigkeit_id\"
FROM campus.tbl_zeitwunsch
) AS basic_zeitwunsch_data;
-- Set primary key and foreign key NOT NULL
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL;
-- Set permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web;
";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch: '.$db->db_last_error().'</strong><br>';
else
echo '<br>campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.';
}
// Change size of wawi.tbl_kostenstelle.kostenstelle_nr from character varying(4) to character varying(6)
if ($result = $db->db_query("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='wawi' AND TABLE_NAME='tbl_kostenstelle' AND COLUMN_NAME = 'kostenstelle_nr' AND character_maximum_length < 6"))
{
@@ -6125,6 +5964,126 @@ if(!$result = @$db->db_query("SELECT behebung_parameter FROM system.tbl_issue LI
echo '<br>Added column behebung_parameter to table system.tbl_issue';
}
// Add table campus.tbl_zeitwunsch_gueltigkeit and migrate initial data
if($result = $db->db_query("SELECT * FROM information_schema.tables WHERE table_schema LIKE 'campus' AND table_name = 'tbl_zeitwunsch_gueltigkeit'"))
{
if ($db->db_fetch_object($result) == false)
{
$qry = "
CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit
(
zeitwunsch_gueltigkeit_id INTEGER NOT NULL,
mitarbeiter_uid CHARACTER VARYING(32) NOT NULL,
von DATE,
bis DATE,
insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(),
insertvon CHARACTER VARYING(32),
updateamum TIMESTAMP WITHOUT TIME ZONE,
updatevon CHARACTER VARYING(32)
);
CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
-- Add Primary Key
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id);
ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id');
-- Add Permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci;
GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web;
-- Initial data migration
INSERT INTO campus.tbl_zeitwunsch_gueltigkeit
(
mitarbeiter_uid,
von,
bis,
insertamum,
insertvon,
updateamum,
updatevon
)
SELECT * FROM
(
-- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of actual Studiensemester and open end
SELECT DISTINCT mitarbeiter_uid,
(SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()),
NULL::DATE AS \"ende\",
NOW(),
'system',
NOW(),
'system'
FROM campus.tbl_zeitwunsch
ORDER BY mitarbeiter_uid
) AS init_data
";
if(!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'</strong><br>';
else
echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt<br>';
}
}
// Add column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch
if ($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'campus' AND table_name = 'tbl_zeitwunsch' AND column_name IN ('zeitwunsch_id', 'zeitwunsch_gueltigkeit_id')"))
{
if ($db->db_num_rows($result) <> 2)
{
$qry = "
ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag
-- Add primary key and foreign key
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_id INTEGER;
ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_gueltigkeit_id INTEGER;
-- Add comments
COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu';
COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED';
CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id');
UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id');
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id);
ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE;
-- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester
UPDATE campus.tbl_zeitwunsch
SET zeitwunsch_gueltigkeit_id = (
SELECT zeitwunsch_gueltigkeit_id
FROM campus.tbl_zeitwunsch_gueltigkeit zwg
WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid
);
-- Set primary key and foreign key NOT NULL
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL;
ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL;
-- Set permissions
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci;
GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web;
";
if (!$db->db_query($qry))
echo '<strong>campus.tbl_zeitwunsch: ' . $db->db_last_error() . '</strong><br>';
else
echo '<br>campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.';
}
}
// Add index beschreibung to system.tbl_webservicelog
if ($result = $db->db_query("SELECT * FROM pg_class WHERE relname='idx_webservicelog_beschreibung'"))
{