diff --git a/cis/private/profile/zeitwunsch.php b/cis/private/profile/zeitwunsch.php index 41a295095..67c61f4f4 100644 --- a/cis/private/profile/zeitwunsch.php +++ b/cis/private/profile/zeitwunsch.php @@ -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 '
'; echo ''; - echo ''; + echo ''; // 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 ''; - if ($isVerplant) + if ($isGesperrt) { echo ''.$p->t('zeitwunsch/stundenBereitsVerplant', array($selected_ss)). ''; } @@ -686,9 +688,9 @@ function getStgMail($stgKz_arr) echo ''. $p->t('global/aenderungenZuruecksetzen'). '

'; echo ''; // 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 '
'; echo '
'; @@ -723,7 +725,7 @@ function getStgMail($stgKz_arr) echo '
'; // end col echo '
'; // end divCopyZWG - echo '
'; + echo '
'; // 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 '
'; // end panel heading echo '
'; // end panel echo ''; // end col - echo ''; // end divIsVerplant + echo ''; // end divisGesperrt // Speichern - Button echo '
'; diff --git a/include/zeitwunsch_gueltigkeit.class.php b/include/zeitwunsch_gueltigkeit.class.php index 32b51d9f6..b39027987 100644 --- a/include/zeitwunsch_gueltigkeit.class.php +++ b/include/zeitwunsch_gueltigkeit.class.php @@ -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)) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index 7b7fd0924..5ea1bd4a0 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -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
'; } } - -// 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 'campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'
'; - else - echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt
'; -} - -// 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 'campus.tbl_zeitwunsch: '.$db->db_last_error().'
'; - else - echo '
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 '
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 'campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'
'; + else + echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt
'; + } +} + +// 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 'campus.tbl_zeitwunsch: ' . $db->db_last_error() . '
'; + else + echo '
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'")) {