aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-orig/www/include/modules/naplo/haladasi
diff options
context:
space:
mode:
authorM.Gergo2018-07-06 11:14:41 +0200
committerM.Gergo2018-07-06 11:14:41 +0200
commit43de9af71f7f4ca5731b94a06d688ae8412ba427 (patch)
tree54835de1dfcda504c02da261f0dc26885aed2e89 /mayor-orig/www/include/modules/naplo/haladasi
parent50310b0e4513ee3fcce67351ae61e8fff851130e (diff)
downloadmayor-43de9af71f7f4ca5731b94a06d688ae8412ba427.tar.gz
mayor-43de9af71f7f4ca5731b94a06d688ae8412ba427.zip
2018/Feb/28 -i állapot hozzáadva, mint a módosítások kiindulási állapota
Diffstat (limited to 'mayor-orig/www/include/modules/naplo/haladasi')
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/elmaradas.php27
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/elszamolas.php44
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/haladasi.php274
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/helyettesites.php945
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/oralatogatas.php30
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/osszevonas.php38
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/pluszora.php55
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/specialis.php167
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/stat.php103
-rw-r--r--mayor-orig/www/include/modules/naplo/haladasi/teremModositas.php30
10 files changed, 1713 insertions, 0 deletions
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/elmaradas.php b/mayor-orig/www/include/modules/naplo/haladasi/elmaradas.php
new file mode 100644
index 00000000..e6db4268
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/elmaradas.php
@@ -0,0 +1,27 @@
+<?php
+
+ function getHaladasiElmaradas() {
+
+ $ret = array();
+ $elozoTanitasiNapDt = getTanitasiNapVissza(1);
+
+ // Még beírható, de már elmúlt órák száma
+ $q = "SELECT ki, COUNT(*) AS db FROM ".__TANEVDBNEV.".ora WHERE tipus NOT LIKE 'elmarad%%'
+ AND (leiras = '' OR leiras IS NULL)
+ AND dt >= CAST('"._HALADASI_HATARIDO."' AS DATE)
+ AND dt <= CAST('%s' AS DATE) GROUP BY ki";
+ $ret['beirando'] = db_query($q, array(
+ 'fv' => 'getHaladasiElmaradas/#1', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'ki', 'values' => array($elozoTanitasiNapDt)
+ ));
+ // Lezárt hiányzások száma
+ $q = "SELECT ki, COUNT(*) AS db FROM ".__TANEVDBNEV.".ora WHERE tipus NOT LIKE 'elmarad%'
+ AND (leiras = '' OR leiras IS NULL)
+ AND dt < CAST('"._HALADASI_HATARIDO."' AS DATE)
+ GROUP BY ki
+ ORDER BY db DESC";
+ $ret['lezart'] = db_query($q, array('fv' => 'getHaladasiElmaradas/#2', 'modul' => 'naplo', 'result' => 'indexed'));
+
+ return $ret;
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/elszamolas.php b/mayor-orig/www/include/modules/naplo/haladasi/elszamolas.php
new file mode 100644
index 00000000..5490624a
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/elszamolas.php
@@ -0,0 +1,44 @@
+<?php
+
+ function getElszamolas($tolDt, $igDt, $tanarId = '') {
+
+ if (isset($tanarId) && intval($tanarId)!='') {
+ $w = " AND ki=%u";
+ $v2 = $tanarId;
+ } else $w='';
+
+ $A = array();
+ // Megtartott órák száma tanáronként, típusonként
+ $q = "SELECT ki,tipus,eredet,munkaido,COUNT(*) AS db FROM
+ ( SELECT DISTINCT ki,munkaido,tipus,dt,ora,eredet FROM
+ ora WHERE leiras != '' AND tipus NOT LIKE 'elmarad%%' AND '%s'<=dt AND dt<='%s' $w ) AS x
+ GROUP BY ki, munkaido, tipus,eredet";
+ $v = mayor_array_join(array($tolDt, $igDt),$v2);
+ $ret = db_query($q, array('fv' => 'getElszamolas', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v));
+ for ($i = 0; $i < count($ret); $i++) {
+ $A[ $ret[$i]['ki'] ][ $ret[$i]['tipus'] ] += intval($ret[$i]['db']);
+ $A['detailed'][ $ret[$i]['ki'] ][ $ret[$i]['tipus'] ][ $ret[$i]['munkaido'] ] = intval($ret[$i]['db']);
+ $A['detailed_ki_tipus_munkaido_eredet'][ $ret[$i]['ki'] ][ $ret[$i]['tipus'] ][ $ret[$i]['munkaido'] ][ $ret[$i]['eredet'] ] = intval($ret[$i]['db']);
+ }
+ // Tanárok heti óraszáma
+ $q = "SELECT tanarId,
+ COUNT(*)/(
+ SELECT COUNT(DISTINCT het) AS db FROM orarendiOra WHERE tolDt<=CURDATE() AND CURDATE()<=igDt
+ ) AS db
+ FROM orarendiOra WHERE tolDt <= CURDATE() AND CURDATE() <= igDt
+ GROUP BY tanarId";
+ $ret = db_query($q, array('fv' => 'getElszamolas', 'modul' => 'naplo', 'result'=> 'indexed'));
+ for ($i = 0; $i < count($ret); $i++) $A[ $ret[$i]['tanarId'] ]['oraszam'] = $ret[$i]['db'];
+
+ // Napok száma az adott időszak alatt - típusonként
+ $q = "SELECT munkatervId,tipus,COUNT(*) AS db FROM nap WHERE '%s'<=dt AND dt<='%s' GROUP BY munkatervId,tipus";
+ $ret = db_query($q, array(
+ 'fv' => 'getElszamolas', 'modul' => 'naplo', 'result' => 'indexed', 'keyfield' => 'tipus', 'values' => mayor_array_join(array($tolDt, $igDt),$v)
+ ));
+ foreach ($ret as $tmp) { $A['napok'][ $tmp['munkatervId'] ][ $tmp['tipus'] ] = $tmp['db']; }
+ $A['munkaterv'] = getMunkatervek(array('result'=>'assoc', 'keyfield'=>'munkatervId'));
+
+ return $A;
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/haladasi.php b/mayor-orig/www/include/modules/naplo/haladasi/haladasi.php
new file mode 100644
index 00000000..d3b9378c
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/haladasi.php
@@ -0,0 +1,274 @@
+<?php
+
+ require_once ( 'include/modules/naplo/share/oraModifier.php' );
+
+/*
+ function updateHaladasiNaploOra($oraId, $leiras, $csoportAdat = '', $ki = '', $olr = '') {
+
+ $RESULT = true;
+
+ $lr = $olr=='' ? db_connect('naplo', array('fv' => 'updateHaladasiNaploOra')):$olr;
+ // A módosítás előtti állapot lekérdezése
+ $oraAdat = getOraAdatById($oraId, __TANEV, $lr);
+ $dt = $oraAdat['dt'];
+ // Melyik tankör lesz a módosítás után
+ if ($csoportAdat != '') list($csoportId, $tankorId) = explode(':', $csoportAdat);
+ else $tankorId = $oraAdat['tankorId'];
+
+ // force to be numeric (CHECK)
+ $csoportId = intval($csoportId);
+ $tankorId = intval($tankorId);
+
+// $oraAdat['tanar'] = getTankorTanaraiByInterval($tankorId, array('tanev' => __TANEV, 'tolDt' => _SHOW_DAYS_FROM, 'igDt' => _SHOW_DAYS_TO, 'result' => 'nevsor'), $lr);
+ $oraAdat['tanar'] = getTankorTanaraiByInterval($tankorId, array('tanev' => __TANEV, 'tolDt' => $dt, 'igDt' => $dt, 'result' => 'nevsor'), $lr);
+ // Melyik ki id lesz módosítás után
+ if ($ki != '') $tanarId = $ki; else $tanarId = $oraAdat['ki'];
+ if (modosithatoOra($oraAdat)) {
+
+ // Tananyag beírása
+ $q = "UPDATE ora SET leiras='%s'";
+ $v = array($leiras);
+ if ($ki != '') { // Ha több tanára van a tankörnek, akkor az átváltható
+ $i = 0;
+ while ($i < ($db = count($oraAdat['tanar'])) && $ki != $oraAdat['tanar'][$i]['tanarId']) $i++;
+ if ($i < $db) {
+ $q .= ",ki=%u";
+ $v[] = $ki;
+ }
+ }
+ //!!! A csoportok tankörei válthatóak - ha ugyanaz a tanár tartja
+ if ($csoportAdat != '' && $oraAdat['tankorId'] != $tankorId) {
+ $q2 = "SELECT COUNT(tankorId) FROM tankorCsoport LEFT JOIN ".__INTEZMENYDBNEV.".tankorTanar USING (tankorId)
+ WHERE csoportId = %u AND tanarId = %u
+ AND tankorId IN (%u,%u)
+ AND (kiDt IS NULL OR kiDt>='%s') AND beDt<='%s'";
+ $v2 = array($csoportId, $tanarId, $tankorId, $oraAdat['tankorId'], $dt, $dt);
+ $num = db_query($q2, array('fv' => 'updateHaladasiNaploOra', 'modul' => 'naplo', 'result' => 'value', 'values' => $v2), $lr);
+ if (!$num) {
+ $_SESSION['alert'][] = 'message:wrong_data:updateHaladasiNaploOra:'.$num.':'.$csoportId;
+ $RESULT = false;
+ } elseif ($num == 2) {
+ $q .= ",tankorId=%u";
+ $v[] = $tankorId;
+ } else {
+ $_SESSION['alert'][] = 'message:wrong_data:updateHaladasiNaploOra:'.$num.':'.$csoportId;
+ $RESULT = false;
+ }
+ }
+ if ($RESULT!==false) {
+ $q .= " WHERE oraId=%u";
+ $v[] = $oraId;
+ $RESULT = db_query($q, array('fv' => 'updateHaladasiNaploOra', 'modul' => 'naplo', 'values' => $v), $lr);
+ //$_SESSION['alert'][] = $q;
+ }
+ } else {
+// $RESULT = false; // igaziból nincs hiba, hisz nem csináltunk semmit
+ $_SESSION['alert'][] = 'message:wrong_data:nem modosithato ora!!!';
+ }
+ if ($olr == '') db_close($lr);
+
+ return $RESULT;
+
+ }
+*/
+/* elköltözött a share/oraModifier.php - be
+ function modosithatoOra($haladasiOraAdat) {
+
+ global $_TANEV;
+ if (!defined('_HALADASI_HATARIDO')) $_SESSION['alert'][] = 'info::modosithatoOra.not defined._HALADASI_HATARIDO';
+ // feladat típusokra vonatkozó beállítások
+ $Feladat = is_numeric($haladasiOraAdat['feladatTipusId']) && $haladasiOraAdat['tipus']=='egyéb'; // 22-26 óra feletti kötött munkaidőbe tartó feladat
+ $tanarFeladat = $Feladat && defined('__USERTANARID') && __USERTANARID==$haladasiOraAdat['ki']; // ... amit az épp bejelentkezett tanár tart
+ $sajatTanarFeladat = $tanarFeladat && $haladasiOraAdat['eredet']=='plusz'; // ... és ő is vett fel
+ $eloirtTanarFeladat = $tanarFeladat && $haladasiOraAdat['eredet']=='órarend'; // ... illetve, amit számára a vezetőség előírt (nem törölhető)
+ $time = strtotime($haladasiOraAdat['dt']);
+ $ki = $haladasiOraAdat['ki'];
+ $normalOra = (in_array($haladasiOraAdat['tipus'],array('normál','normál máskor')));
+ for ($i = 0;
+ (
+ ($i < ($count = count($haladasiOraAdat['tanar'])))
+ && ($haladasiOraAdat['tanar'][$i]['tanarId'] != __USERTANARID)
+ );
+ $i++
+ );
+ $tanara = ($i < $count);
+
+ return ($_TANEV['szemeszter'][1]['statusz'] == 'aktív') // Csak aktív szemeszterbe írhatunk
+ && (
+ ((__VEZETOSEG || __NAPLOADMIN) && $Feladat && $haladasiOraAdat['eredet']=='órarend')
+ || $time <= time()
+ ) // A jövőbeli órák nem írhatók be, kivéve, ha az előírt tanári feladat (pl versenyfelügyelet)!
+ && (
+ // Az admin bármikor módosíthat - de csak vezetői utasításra teszi!
+ __NAPLOADMIN
+ // Az igazgató naplózárásig pótolhat, javíthat - utána elvileg nyomtatható a napló!
+ || (__VEZETOSEG and strtotime(_ZARAS_HATARIDO) <= $time)
+ || (
+ __TANAR
+ && (
+ // a számára felvett óra nem módosítható
+ !$eloirtTanarFeladat
+ && (
+ // tanár a saját tanköreinek óráit a _HALADASI_HATARIDO-ig módosíthatja
+ ($normalOra && $tanara && (strtotime(_HALADASI_HATARIDO) <= $time))
+ // tanár az általa helyettesített/felügyelt/összevont órát _visszamenőleg_ a _HELYETTESITES_HATARIDO-ig módosíthatja
+ || (!$normalOra && (__USERTANARID == $ki) && (strtotime(_HELYETTESITES_HATARIDO) <= $time) && $Feladat===false)
+ // a kötött munkaidőben végzett feladatok _HALADASI_HATARIDŐIG módosíthatók
+ || ($tanarFeladat && (strtotime(_HALADASI_HATARIDO) <= $time))
+ )
+ )
+ )
+ );
+ }
+*/
+
+ function getOraszamByOraId($oraId, $olr='') {
+
+
+ $lr = ($olr=='') ? db_connect('naplo', array('fv' => 'getOraszamByOraId')) : $olr;
+
+ $q = "SELECT tankorId, dt, ora FROM ora WHERE oraId=%u";
+ $r = db_query($q, array('fv' => 'getOraszamByOraId', 'modul' => 'naplo', 'result' => 'record', 'values' => array($oraId)), $lr);
+
+ $tankorId = $r['tankorId'];
+ $dt = $r['dt'];
+ $ora = $r['ora'];
+
+ if (defined('__ORASZAMOT_NOVELO_TIPUSOK')) {
+ $oraszamNoveloTipus = explode(',', __ORASZAMOT_NOVELO_TIPUSOK);
+ } else {
+ if (!in_array('info:missing_constant:__ORASZAMOT_NOVELO_TIPUSOK',$_SESSION['alert'])) $_SESSION['alert'][] = 'info:missing_constant:__ORASZAMOT_NOVELO_TIPUSOK';
+ $oraszamNoveloTipus = array('normál', 'normál máskor', 'helyettesítés', 'összevonás');
+ }
+ $q = "SELECT count(oraId) FROM ora
+ WHERE tankorId=%u
+ AND tipus IN ('".implode("','", array_fill(0, count($oraszamNoveloTipus), '%s'))."')
+ AND (dt<'%s' OR (dt='%s' AND ora<=%u))";
+ $v = mayor_array_join(array($tankorId), $oraszamNoveloTipus, array($dt, $dt, $ora));
+ $oraszam = db_query($q, array('fv' => 'getOraszamByOraId', 'modul' => 'naplo', 'result' => 'value', 'values' => $v), $lr);
+
+ if ($olr == '') db_close($lr);
+ return $oraszam;
+ }
+
+ function getHaladasi($Tankorok, $munkatervIds, $orderBy, $tanarId = '', $csakUres=false, $teremId=false) {
+
+ $ret = array();
+
+ // Munkatervidk
+ if (!is_array($munkatervIds) || count($munkatervIds)==0) $munkatervIds = array(1); // a default
+
+ // Az érintett tankörök id-inek listája
+ $tankorIds = $tankorAdat = array();
+ if (is_array($Tankorok) && ($count = count($Tankorok)) > 0) {
+ $tankorFeltetel = 'tankorId IN (' . $Tankorok[0]['tankorId'];
+ $tankorIds[] = $Tankorok[0]['tankorId'];
+ $Tankorok[0]['tanar'] = getTankorTanaraiByInterval($Tankorok[0]['tankorId'], array('tanev' => __TANEV, 'tolDt' => _SHOW_DAYS_FROM, 'igDt' => _SHOW_DAYS_TO, 'result' => 'nevsor'));
+ $tankorAdat[$Tankorok[0]['tankorId']] = $Tankorok[0];
+ for ($i = 1; $i < $count; $i++) {
+ $tankorFeltetel .= ', '.$Tankorok[$i]['tankorId'];
+ $tankorIds[] = $Tankorok[$i]['tankorId'];
+ $Tankorok[$i]['tanar'] = getTankorTanaraiByInterval($Tankorok[$i]['tankorId'], array('tanev' => __TANEV, 'tolDt' => _SHOW_DAYS_FROM, 'igDt' => _SHOW_DAYS_TO, 'result' => 'nevsor'));
+ $tankorAdat[$Tankorok[$i]['tankorId']] = $Tankorok[$i];
+ }
+ $tankorFeltetel .= ')';
+ }
+ elseif ($tanarId=='') return false;
+ // else return false; // Ha egy kollégának nincs rendszeres órája, tanköre, de helyettesít, akkor meg kell jelenjenek ezek az órái... (Bug #53)
+
+ if ($teremId!==false && is_numeric($teremId)) {
+ $teremFeltetel = ' and teremId = '.$teremId;
+ } else
+ $teremFeltetel = '';
+
+ // Ha tanarId is van, akkor az általa helyettesített órák is kellenek
+ if ($tanarId != '') {
+ if (isset($tankorFeltetel)) $kiFeltetel = 'OR ki = '.$tanarId;
+ else $kiFeltetel = 'ki = '.$tanarId;
+ }
+ if (isset($tankorFeltetel) || isset($kiFeltetel)) $feltetel = "AND ($tankorFeltetel $kiFeltetel)";
+ if (isset($csakUres) && $csakUres==true) $feltetel .= " AND (leiras='' OR leiras IS NULL) ";
+
+ // Csatlakozás az adatbázishoz
+ $lr = db_connect('naplo', array('fv' => 'getHaladasi'));
+ $q = "SELECT oraId, dt, ora, ki, kit, tankorId, teremId, ora.leiras, tipus, eredet, csoportId, feladatTipusId
+ FROM ora
+ LEFT JOIN tankorCsoport USING (tankorId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".feladatTipus USING (feladatTipusId)
+ WHERE dt>='%s' AND dt<='%s' AND tipus NOT LIKE 'elmarad%%'
+ $feltetel $teremFeltetel
+ ORDER BY ".implode(',',$orderBy);
+ $v = array(_SHOW_DAYS_FROM, _SHOW_DAYS_TO);
+ $r = db_query($q, array('fv' => 'getHaladasi', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if ($r===false) {
+ db_close($lr);
+ return false;
+ }
+ foreach ($r as $i => $sor) {
+ // ha nincs a tankorok kozott a tankorId, akkor le kell kérdezni az adatait
+ if (!in_array($sor['tankorId'],$tankorIds)) {
+ $T = getTankorById($sor['tankorId'], __TANEV);
+ $tankorIds[] = $sor['tankorId'];
+ $tankorAdat[$sor['tankorId']] = $T[0];
+ $Tankorok[$i]['tanar'] = getTankorTanaraiByInterval($sor['tankorId'], array('tanev' => __TANEV, 'tolDt' => _SHOW_DAYS_FROM, 'igDt' => _SHOW_DAYS_TO, 'result' => 'nevsor'));
+ }
+ $sor['kiCn'] = getTanarNevById($sor['ki'], $lr);
+ $sor['tankorNev'] = $tankorAdat[$sor['tankorId']]['tankorNev'];
+ $sor['tankorTipusId'] = $tankorAdat[$sor['tankorId']]['tankorTipusId'];
+ $sor['oraszam'] = getOraszamByOraId($sor['oraId'], $lr);
+ $sor['tanar'] = $tankorAdat[$sor['tankorId']]['tanar'];
+ // Az óracsoportokat is!!!
+ if (isset($sor['csoportId']) && $tanarId != '') { // Csak tanár nézet esetén lehet váltani!!!
+ if (!is_array($tankorAdat[$sor['tankorId']]['csoport'])) {
+ // Csoport adatok lekérdezése
+ // Ha minden oldalon le akarjuk kérdezi a csoportokat, akkor valahogy így...
+ // if ($sor['kit'] == '') $tanarId = $sor['ki'];
+ // else $tanarId = $sor['kit'];
+ $q = "SELECT DISTINCT tankorCsoport.tankorId AS tankorId, tankorNev
+ FROM tankorCsoport
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorTanar USING (tankorId)
+ WHERE tanarId=%u AND csoportId=%u
+ AND beDt<='"._SHOW_DAYS_TO."' AND (kiDt IS NULL OR '"._SHOW_DAYS_FROM."'<=kiDt)
+ AND tanev=" . __TANEV;
+ $v = array($tanarId, $sor['csoportId']);
+ $r_cs = db_query($q, array('fv' => 'getHaladasi/csoport', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if ($r_cs===false) { //!!!! nem jó simán a tagadás!
+ db_close($lr);
+ return false;
+ }
+ foreach ($r_cs as $key => $val) {
+ $tankorAdat[$sor['tankorId']]['csoport'][] = $val;
+ }
+ }
+ $sor['csoport'] = $tankorAdat[$sor['tankorId']]['csoport'];
+ }
+ $ret[$sor['dt']][] = $sor;
+ }
+ // Nap információk lekérdezése
+ $q = "SELECT dt,tipus,megjegyzes,orarendiHet FROM nap
+ WHERE dt>='%s' AND dt<='%s' AND munkatervId IN (".implode(',', $munkatervIds).")";
+ $v = array(_SHOW_DAYS_FROM, _SHOW_DAYS_TO);
+ $ret['napok'] = db_query($q, array('fv' => 'getHaladasi', 'modul' => 'naplo', 'result' => 'multiassoc', 'keyfield' => 'dt', 'values' => $v), $lr);
+ if (!$ret['napok']) {
+ db_close($lr);
+ return false;
+ }
+
+ // dolgozatok lekérdezése;
+ $ret['dolgozatok'] = getTankorDolgozatok($tankorIds,true,_SHOW_DAYS_FROM,_SHOW_DAYS_TO, $lr);
+ db_close($lr);
+ return $ret;
+ }
+
+ function haladasiTeremModositas($oraId,$teremId,$lr) {
+ if (!is_numeric($oraId) || !is_numeric($teremId)) return false;
+ $lr = $olr=='' ? db_connect('naplo', array('fv' => 'haladasiTeremModositas')):$olr;
+ $q = "UPDATE ora SET teremId=%u WHERE oraId=%u";
+ $v = array($teremId,$oraId);
+ $RESULT = db_query($q, array( 'fv' => 'haladasiTeremModositas','modul' => 'naplo', 'values' => $v), $lr);
+ if ($olr == '') db_close($lr);
+ return $RESULT;
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/helyettesites.php b/mayor-orig/www/include/modules/naplo/haladasi/helyettesites.php
new file mode 100644
index 00000000..2fbbc4ac
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/helyettesites.php
@@ -0,0 +1,945 @@
+<?php
+
+ // Valójában nem feltétlen hiányzók, hanem azok akiknek módosult az órarendje...
+ function getHianyzok($dt = '', $olr = null) {
+
+ $dt = readVariable($dt, 'datetime', date('Y-m-d'));
+ $hianyzok = array();
+
+ $q = "SELECT kit, ki, eredet FROM ora
+ WHERE dt='%s' AND ((kit IS NOT NULL AND kit != '') OR (eredet='plusz' AND feladatTipusId IS NULL))
+ ORDER BY kit, ora";
+ $result = db_query($q, array('fv' => 'getHianyzok', 'modul' => 'naplo', 'result' => 'indexed', 'values' => array($dt)), $olr);
+
+ foreach ($result as $key => $sor) {
+ // Ha a kit nem üres, akkor az az eredeti tanár, különben a ki (plusz óránál lehet)
+ if ($sor['kit'] != '') {
+ if (!in_array($sor['kit'], $hianyzok)) $hianyzok[] = $sor['kit'];
+ } elseif ($sor['ki'] != '' && !in_array($sor['ki'], $hianyzok)) {
+ $hianyzok[] = $sor['ki'];
+ }
+ }
+
+ return $hianyzok;
+
+ }
+
+
+ function getHianyzoOrak($dt = '', $olr = '') {
+
+
+ if($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ // Kik érintettek az aktuális helyettesítésekben
+ $ORAK['helyettesites']['tanarIds'] = getHianyzok($dt, $lr);
+
+ // Az érintettek óráinak adatai, kivéve a kötött munkaidő plusz óráit, hiszen azok nem számítanak. Nem számítanak?
+ if (count($ORAK['helyettesites']['tanarIds']) > 0) {
+ $q = "SELECT DISTINCT
+ oraId, dt, ora, ki, kit, tankorId, teremId, leiras, tipus, eredet, tankorNev, targyId,feladatTipusId,munkaido
+ FROM ora
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankor USING (tankorId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".feladatTipus USING (feladatTipusId)
+ WHERE (
+ ki IN (".implode(',', array_fill(0, count($ORAK['helyettesites']['tanarIds']),'%u')).") OR
+ kit IN (".implode(',', array_fill(0, count($ORAK['helyettesites']['tanarIds']), '%u')).")
+ )
+ AND dt='%s'
+ AND (tanev=".__TANEV." OR feladatTipusId IS NOT NULL)
+ ORDER BY ora";
+ $v = mayor_array_join($ORAK['helyettesites']['tanarIds'], $ORAK['helyettesites']['tanarIds'], array($dt));
+ $result = db_query($q, array('fv' => 'getHianyzoOrak', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if (!$result) {
+ if($olr == '') $lr = db_close($lr);
+ return false;
+ }
+ foreach ($result as $key => $sor) {
+ if ($sor['kit'] != '') {
+ $ORAK['helyettesites'][$sor['kit']]['orak'][] = $sor;
+ }
+ if (in_array($sor['ki'], $ORAK['helyettesites']['tanarIds'])) {
+ $ORAK['helyettesites'][$sor['ki']]['orak'][] = $sor;
+ }
+ }
+ }
+
+ // Tanárnevek lekérése
+ $TANAR_NEVSOR = getTanarok(array('tanev' => __TANEV,'beDt'=>$dt,'kiDt'=>$dt), $lr);
+ for ($i = 0; $i < count($TANAR_NEVSOR); $i++) {
+ $ORAK['tanarok']['tanarIds'][] = $TANAR_NEVSOR[$i]['tanarId'];
+ $ORAK['tanarok'][$TANAR_NEVSOR[$i]['tanarId']] = array('tanarNev' => $TANAR_NEVSOR[$i]['tanarNev']);
+ }
+ // Az adott napon ki melyik órákban tanít, első, utolsó, db
+ $q = "SELECT ki, ora FROM ora
+ WHERE dt = '%s' AND ki != ''
+ ORDER BY ki, ora";
+ $r = db_query($q, array('fv' => 'getHianyzoOrak', 'modul' => 'naplo', 'result' => 'indexed', 'values' => array($dt)), $lr);
+ foreach ($r as $key => $val) {
+ $ki = $val['ki']; $ora = $val['ora'];
+ if (!is_array($ORAK['tanarok']['foglaltak'][$ora]) // gyűjtjük, hogy kik tanítanak az adott órában
+ || !in_array($ki, $ORAK['tanarok']['foglaltak'][$ora])
+ ) $ORAK['tanarok']['foglaltak'][$ora][] = $ki;
+ $ORAK['tanarok'][$ki]['orak'][$ora] = true;
+ $ORAK['tanarok'][$ki]['db']++;
+ if (
+ !isset($ORAK['tanarok'][$ki]['elso ora']) or
+ $ORAK['tanarok'][$ki]['elso ora'] > $ora
+ ) $ORAK['tanarok'][$ki]['elso ora'] = $ora;
+ if ($ORAK['tanarok'][$ki]['utolso ora'] < $ora) $ORAK['tanarok'][$ki]['utolso ora'] = $ora;
+ }
+
+ // Milyen tárgyat és mely osztályokban tanít az adott tanévben! (TANAR_NEVSOR tömbből válogassuk hozzá a tanáridket)
+ $q = "SELECT tanarId,targyId FROM ".__INTEZMENYDBNEV.".mkTanar
+ LEFT JOIN ".__INTEZMENYDBNEV.".targy USING (mkId)
+ WHERE mkTanar.tanarId IN (".implode(',', array_fill(0, count($ORAK['tanarok']['tanarIds']), '%u')).")";
+ $r = db_query($q, array('fv' => 'getHianyzoOrak', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $ORAK['tanarok']['tanarIds']), $lr);
+ if (count($r)>0) foreach ($r as $key => $val) {
+ $tanarId = $val['tanarId']; $targyId = $val['targyId'];
+ $ORAK['tanarok'][$tanarId]['targyak'][$targyId] = true;
+ }
+ // Egészítsük ki a képesítése szerint is! (2011, 2015)
+ $q = "SELECT tanarId,targyId FROM ".__INTEZMENYDBNEV.".tanarKepesites LEFT JOIN ".__INTEZMENYDBNEV.".kepesitesTargy USING (kepesitesId) ".
+ "WHERE tanarId IN (".implode(',', array_fill(0, count($ORAK['tanarok']['tanarIds']), '%u')).")";
+ $r = db_query($q, array('fv' => 'getHianyzoOrak', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $ORAK['tanarok']['tanarIds']), $lr);
+ if (count($r)>0) foreach ($r as $key => $val) {
+ $tanarId = $val['tanarId'];
+ $targyId = $val['targyId'];
+ $ORAK['tanarok'][$tanarId]['targyak'][$targyId] = true;
+ }
+
+ // Az összevonó/foglalt tanárok
+ for ($i = 0; $i < count($ORAK['helyettesites']['tanarIds']);$i++) {
+
+ $tanarId = $ORAK['helyettesites']['tanarIds'][$i];
+ $tanarOrak = $ORAK['helyettesites'][$tanarId]['orak'];
+
+ for ($j = 0; $j < count($tanarOrak); $j++) {
+
+ $ora = $tanarOrak[$j]['ora'];
+ $Foglaltak = $ORAK['tanarok']['foglaltak'][$ora];
+ // Ha a tanár szakos, akkor összevonhat.
+ // Itt most egyelőre annyit kérdezünk le, hogy ugyanabban az időben ki tanít
+ for ($f = 0; $f < count($Foglaltak); $f++) {
+ if ($Foglaltak[$f] != $tanarId) {
+ if ($ORAK['tanarok'][$Foglaltak[$f]]['targyak'][$tanarOrak[$j]['targyId']])
+ $ORAK['helyettesites'][$tanarId]['orak'][$j]['osszevono'][] = $Foglaltak[$f];
+ else
+ $ORAK['helyettesites'][$tanarId]['orak'][$j]['foglalt'][] = $Foglaltak[$f];
+ }
+ } // Adott óra öszzevonói/foglaltjai
+ } // Adott tanár órái
+ } // A helyettesítésben érintett tanárok
+ $q = "SELECT ki, ora FROM ora
+ WHERE dt = '%s' AND ki != '' AND feladatTipusId IS NOT NULL
+ ORDER BY ki, ora";
+ $r = db_query($q, array('fv' => 'getHianyzoOrak', 'modul' => 'naplo', 'result' => 'indexed', 'values' => array($dt)), $lr);
+ for ($i=0; $i<count($r); $i++) {
+ $ORAK['egyeb'][$r[$i]['ora']][]=$r[$i]['ki'];
+ }
+ $ORAK['termek'] = getTermek(array('result'=>'assoc'));
+
+ if($olr=='') $lr = db_close($lr);
+ return $ORAK;
+ }
+
+ function ujHianyzokFelvetele($ujHianyzok, $dt, $olr = '') {
+
+
+ if (count($ujHianyzok) > 0) {
+
+ if ($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ $where = "ki IN (".implode(',', array_fill(0, count($ujHianyzok), '%u')).")";
+ $v = $ujHianyzok;
+
+ // Ha visszamenőleg állítunk elmaradtra egy órát, akkor kezelni kell a hozzá tartozó bejegyzéseket
+ if (strtotime($dt) < time()) {
+ // Az elmaradó órák id-inek lekérdezése
+ $q = "SELECT oraId FROM ora
+ WHERE dt='%s'
+ AND ki IN (".implode(',', array_fill(0, count($ujHianyzok), '%u')).")
+ AND (
+ tipus='normál' OR
+ tipus='helyettesítés' OR
+ tipus='felügyelet' OR
+ tipus='összevonás'
+ )";
+ $v = mayor_array_join(array($dt), $ujHianyzok);
+ $oraIds = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v), $lr);
+
+ if (is_array($oraIds) && count($oraIds) > 0) { // Ha van elmaradt óra
+ $where_id = "oraId IN (".implode(',', array_fill(0, count($oraIds), '%u')).")";
+
+ // Az elmaradt órákhoz tartozó hiányztások, késések, felszerelés hiányok, egyenruha hiányok törlése!
+ $q = "SELECT hianyzasId FROM hianyzas WHERE oraId IN (".implode(',', array_fill(0, count($oraIds), '%u')).")";
+ $hIds = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $oraIds), $lr);
+ if (count($hIds) > 0) {
+ logAction(
+ array(
+ 'tabla' => 'hianyzas',
+ 'szoveg'=> "hiányzó tanár - óraelmaradás: $where_id, hianyzasId IN (".implode(',', array_fill(0, count($hIds), '%u')).")",
+ 'values' => mayor_array_join($oraIds, $hIds)
+ ),
+ $lr
+ );
+ $q = "DELETE FROM hianyzas WHERE oraId IN (".implode(',', array_fill(0, count($oraIds), '%u')).")";
+ $r = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'values' => $oraIds), $lr);
+ }
+ // Az elmaradt órákhoz rendelt jegyek hozzárendelésének törlése
+ $q = "UPDATE jegy SET oraId=NULL WHERE oraId IN (".implode(',', array_fill(0, count($oraIds), '%u')).")";
+ $r = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'values' => $oraIds), $lr);
+ }
+ }
+
+ $v = mayor_array_join(array($dt), $ujHianyzok);
+ // Normál órái elmaradnak
+ $q = "UPDATE ora
+ SET kit=ki, ki=NULL, tipus='elmarad', modositasDt=NOW()
+ WHERE dt='%s'
+ AND tipus='normál'
+ AND ki IN (".implode(',', array_fill(0, count($ujHianyzok), '%u')).")";
+ $r = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ // Helyettesített, felügyelt, összevont órái elmaradnak
+ $q = "UPDATE ora SET ki=NULL,tipus='elmarad', modositasDt=NOW()
+ WHERE dt='%s'
+ AND (
+ tipus='helyettesítés' OR
+ tipus='felügyelet' OR
+ tipus='összevonás'
+ )
+ AND ki IN (".implode(',', array_fill(0, count($ujHianyzok), '%u')).")";
+ $r = db_query($q, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ // Elmaradnak-e a rögzített feladatai? ??????????????
+
+ if ($olr == '') db_close($lr);
+ }
+ }
+
+ function toroltHianyzokVisszaallitasa($toroltHianyzok, $dt, $olr='') {
+
+
+ if (count($toroltHianyzok) > 0) {
+
+ if ($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ // Cserék visszaállítása
+ $q_cs = "SELECT oraId FROM ora WHERE tipus like '%%máskor'
+ AND (
+ ki IN (".implode(',', array_fill(0, count($toroltHianyzok), '%u')).")
+ OR kit IN (".implode(',', array_fill(0, count($toroltHianyzok), '%u')).")
+ ) AND dt = '%s'";
+ $v_cs = mayor_array_join($toroltHianyzok, $toroltHianyzok, array($dt));
+ $r_cs = db_query($q_cs, array('fv' => 'ujHianyzokFelvetele', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v_cs), $lr);
+ foreach ($r_cs as $key => $vissza_id) {
+ csereVisszaallitas($vissza_id, $lr);
+ }
+
+ // A nem hiáynzók helyettesített, összevont, elmaradt, felügyelt óráinak visszaállítása
+ // 2013. Itt vissza kell állítanunk munkaido-t 'lekötött'-re. Mi történik ugyanakkor, ha
+ // a visszaállított óra már nem fér bele... Ugye... Sajnos
+ $q_v = "UPDATE ora SET ki=kit, kit=NULL, tipus='normál', munkaido='lekötött', modositasDt=NOW()
+ WHERE tipus IN ('helyettesítés','felügyelet','összevonás','elmarad')
+ AND dt='%s' AND kit IN (".implode(',', array_fill(0, count($toroltHianyzok), '%u')).")";
+ $v_v = mayor_array_join(array($dt), $toroltHianyzok);
+ $r_v = db_query($q_v, array('fv' => 'toroltHianyzokVisszaallitasa', 'modul' => 'naplo', 'values' => $v_v), $lr);
+
+ if ($olr == '') db_close($lr);
+ }
+ }
+
+ function csereVisszaallitas($oraId, $olr = '') {
+
+
+ if ($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ // A csere csereId-jének lekérdezése
+ $q = "SELECT DISTINCT csereId
+ FROM csereAlapOra LEFT JOIN cserePluszOra USING (csereId)
+ WHERE csereAlapOra.oraId=%u OR cserePluszOra.oraId=%u";
+ $v = array($oraId, $oraId);
+ $r = db_query($q, array('fv' => 'csereVisszaallitas', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+ if (($num = count($r)) != 1) {
+ $_SESSION['alert'][] = 'message:wrong_data:csereVisszaallitas:Nincs csere?:'.$num;
+ if ($olr == '') db_close($lr);
+ return false; // Lehet ilyen?
+ }
+ $csereId = $r[0];
+
+ // A cserében résztvevő órák id-jének lekérdezése
+ $q = "SELECT csereAlapOra.oraId AS alap, cserePluszOra.oraId AS plusz
+ FROM cserePluszOra LEFT JOIN csereAlapOra USING (csereId)
+ WHERE csereId=%u";
+ $r = db_query($q, array('fv' => 'csereVisszaallitas', 'modul' => 'naplo', 'result' => 'indexed', 'values' => array($csereId)), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+ $Alap = $Plusz = array();
+ for ($i = 0; $i < count($r); $i++) {
+ $alap = $r[$i]['alap']; $plusz = $r[$i]['plusz'];
+ if (!in_array($alap, $Alap)) $Alap[] = $alap;
+ if (!in_array($plusz, $Plusz)) $Plusz[] = $plusz;
+ }
+
+ // az eredeti órák 'elmarad máskor'-ról 'elmarad'-ra állítása
+ $q = "UPDATE ora SET tipus='elmarad',modositasDt=NOW() WHERE oraId IN (".implode(',', array_fill(0, count($Alap), '%u')).")";
+ $r = db_query($q, array('fv' => 'csereVisszaallitas', 'modul' => 'naplo', 'values' => $Alap), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // a csere-bejegyzés törlése
+ $q = "DELETE FROM csere WHERE csereId=%u";
+ $r = db_query($q, array('fv' => 'csereVisszaallitas', 'modul' => 'naplo', 'values' => array($csereId)), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // Az órákhoz rendelt hiányzások és jegyhozzárendelések törlése (csak plusz lehet érintett!)
+ hianyzasEsJegyHozzarendelesTorles($Plusz, $lr);
+
+ // a plusz órák törlése
+ $q = "DELETE FROM ora WHERE oraId IN (".implode(',', array_fill(0, count($Plusz), '%u')).")";
+ $r = db_query($q, array('fv' => 'csereVisszaallitas', 'modul' => 'naplo', 'values' => $Plusz), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ if ($olr == '') db_close($lr);
+ return true;
+
+ }
+
+
+ function cmp($a,$b) {
+ if ($a['súly'] == $b['súly']) return 0;
+ return ($a['súly'] > $b['súly']) ? -1 : 1;
+ }
+
+
+ function ujOra($ORA, $olr = null) {
+ // alapértelmezésben munkaido='lekötött'
+ if ($ORA['ki'] == '') $ORA['ki'] = 'NULL';
+ if ($ORA['kit'] == '') $ORA['kit'] = 'NULL';
+ if ($ORA['teremId'] == '') $ORA['teremId'] = 'NULL';
+ $q = "INSERT INTO ora (ki,kit,dt,ora,tankorId,teremId,leiras,tipus,eredet,modositasDt) VALUES (%s, %s, '%s', %u, %u, %s, '%s', '%s', '%s',NOW())";
+ $v = array($ORA['ki'], $ORA['kit'], $ORA['dt'], $ORA['ora'], $ORA['tankorId'], $ORA['teremId'], $ORA['leiras'], $ORA['tipus'], $ORA['eredet']);
+ return db_query($q, array('fv' => 'ujOra', 'modul' => 'naplo', 'result' => 'insert', 'values' => $v), $olr);
+ }
+
+ function oraMozgatas($oraId, $dt, $ora, $olr = '') {
+
+
+ if ($olr == '') $lr = db_connect('naplo', array('fv' => 'oraMozgatas'));
+ else $lr = $olr;
+
+ $oraAdat = getOraAdatById($oraId, __TANEV, $lr);
+
+ if ($oraAdat['tipus'] == 'elmarad máskor') {
+ $_SESSION['alert'][] = 'message:wrong_data:oraMozgatas:már mozgatott óra:'.$oraId;
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ if (isset($oraAdat['kit']) && $oraAdat['kit'] != '') $tanarId = $oraAdat['kit'];
+ else $tanarId = $oraAdat['ki'];
+ $tankorId = $oraAdat['tankorId'];
+ $teremId = $oraAdat['teremId'];
+
+ checkNaplo($dt);
+
+ // A tanár nem foglalt-e az adott időpontban
+ if (!tanarLukasOrajaE($tanarId, $dt, $ora, $lr)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:'."mozgat/tanár ütközés/$dt:$ora";
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // diák ütközés
+ if (!tankorTagokLukasOrajaE($tankorId, $dt, $ora)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:'."mozgat/diák ütközés/$dt:$ora";
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // terem ellenőrzés
+ $Termek = getSzabadTermek(array('dt' => $dt, 'ora' => $ora), $lr);
+ for ($i = 0;($i < count($Termek) && $Termek[$i]['teremId'] != $teremId); $i++);
+ if ($i >= count($Termek)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:Foglalt terem:'.$teremId;
+ $teremUtkozes = true;
+ }
+
+ // érintett hiányzások, késések, felszerelés hiányok, egyenruha hiányok, jegyHozzárendelések törlése!
+ if (strtotime($dt) < time()) hianyzasEsJegyHozzarendelesTorles($oraId, $lr);
+
+ if ($oraAdat['eredet'] == 'órarend') {
+
+ // ha órarendi óra, akkor elmarad máskor - plusz óra felvétel
+ if (isset($oraAdat['kit']) && $oraAdat['kit'] != '') {
+ // kit nem üres, ki törölhető
+ $q = "UPDATE ora SET tipus='elmarad máskor',ki=NULL,modositasDt=NOW() WHERE oraId=%u";
+ $oraAdat['ki'] = $tanarId;
+ $oraAdat['kit'] = '';
+ } else {
+ // normál óra, akkor a ki --> kit...
+ $q = "UPDATE ora SET tipus='elmarad máskor',kit=ki,ki=NULL,modositasDt=NOW() WHERE oraId=%u";
+ }
+ $r = db_query($q, array('fv' => 'oraMozgatas', 'modul' => 'naplo', 'values' => array($oraAdat['oraId'])), $lr);
+ if (!$r) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // A felveendő plusz óra
+ $oraAdat['tipus']='normál máskor';
+ $oraAdat['eredet']='plusz';
+ $oraAdat['dt'] = $dt;
+ $oraAdat['ora'] = $ora;
+ if ($teremUtkozes) $oraAdat['teremId'] = 'NULL';
+
+ if ($pluszId = ujOra($oraAdat, $lr)) {
+
+ // órarendi óra mozgatásánál a csere táblába is fel kell venni...
+ $error = '';
+ db_start_trans($lr);
+
+ $q = "INSERT INTO csere VALUES ('')";
+ $csereId = db_query($q, array('fv' => 'oraMozgatas', 'modul' => 'naplo', 'result' => 'insert', 'rollback' => true), $lr);
+ if (!$csereId) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO csereAlapOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraMozgatas', 'modul' => 'naplo', 'values' => array($csereId, $oraId), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO cserePluszOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraMozgatas', 'modul' => 'naplo', 'values' => array($csereId, $pluszId), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ db_commit($lr);
+
+ }
+ } else {
+
+ // plusz óra egyszerűen módosítandó...
+ if ($teremUtkozes) $q = "UPDATE ora SET tipus='normál máskor',ki=%u, kit=NULL, dt='%s', ora='%u', teremId=NULL, modositasDt=NOW() WHERE oraId=%u";
+ else $q = "UPDATE ora SET tipus='normál máskor',ki=%u, kit=NULL, dt='%s', ora='%u', modositasDt=NOW() WHERE oraId=%u";
+ $v = array($tanarId, $dt, $ora, $oraId);
+ $r = db_query($q, array('fv' => 'oraMozgatas', 'modul' => 'naplo', 'values' => $v), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ } // órarendi vagy plusz óra
+
+ if ($olr == '') db_close($lr);
+ return true;
+
+ }
+
+ function getCsereOraiByOraId($oraId) {
+
+
+ $lr = db_connect('naplo', array('fv' => 'getCsereOraiByOraId'));
+
+ $q = "SELECT DISTINCT csereId FROM csereAlapOra LEFT JOIN cserePluszOra USING (csereId)
+ WHERE csereAlapOra.oraId=%u OR cserePluszOra.oraId=%u";
+ $v = array($oraId, $oraId);
+ $arrayCsereId = db_query($q , array('fv' => 'getCsereOraiByOraId', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v), $lr);
+ if (!is_array($arrayCsereId) || ($num = count($arrayCsereId)) != 1) {
+ $_SESSION['alert'][] = 'message:wrong_data:getCsereOraiByOraId:Nincs csere?:'.$num.'/'.$oraId;
+ db_close($lr); return false;
+ }
+ $csereId = $arrayCsereId[0];
+
+ $q = "SELECT DISTINCT oraId, dt, ora, ki, kit, tankorId, tipus, eredet, tankorNev
+ FROM csereAlapOra LEFT JOIN ora USING (oraId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId)
+ WHERE csereId=%u AND tanev=".__TANEV." ORDER BY dt, ora";
+ $ret['alap'] = db_query($q, array(
+ 'fv' => 'getCsereOraiByOraId', 'modul' => 'naplo', 'result' => 'multiassoc', 'keyfield' => 'tankorId', 'values' => array($csereId)
+ ), $lr);
+
+ $q = "SELECT DISTINCT oraId, dt, ora, ki, kit, tankorId, tipus, eredet, tankorNev
+ FROM cserePluszOra LEFT JOIN ora USING (oraId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId)
+ WHERE csereId=%u AND tanev=".__TANEV." ORDER BY dt, ora";
+ $ret['plusz'] = db_query($q, array(
+ 'fv' => 'getCsereOraiByOraId', 'modul' => 'naplo', 'result' => 'multiassoc', 'keyfield' => 'tankorId', 'values' => array($csereId)
+ ), $lr);
+
+ db_close($lr);
+ return $ret;
+
+ }
+
+ function oraCsere($oraId1, $oraId2, $olr = '') {
+
+
+ if ($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ $csereOraAdat1 = $oraAdat1 = getOraAdatById($oraId1, __TANEV, $lr);
+ $csereOraAdat2 = $oraAdat2 = getOraAdatById($oraId2, __TANEV, $lr);
+
+ if ($oraAdat1['tipus'] == 'elmarad máskor' || $oraAdat2['tipus'] == 'elmarad máskor') {
+ $_SESSION['alert'][] = 'message:wrong_data:oraCsere:már mozgatott óra:'.$oraId1.'/'.$oraId2;
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ if (isset($oraAdat1['kit']) && $oraAdat1['kit'] != '') $tanarId1 = $oraAdat1['kit'];
+ else $tanarId1 = $oraAdat1['ki'];
+
+ if (isset($oraAdat2['kit']) && $oraAdat2['kit'] != '') $tanarId2 = $oraAdat2['kit'];
+ else $tanarId2 = $oraAdat2['ki'];
+
+ if ($tanarId1 != $tanarId2) {
+ // Ha nem saját magával cserél, akkor a tanár nem foglalt-e az adott időpontban
+ if (!tanarLukasOrajaE($tanarId1, $oraAdat2['dt'], $oraAdat2['ora'], $lr)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:'."oraCsere/tanár ütközés #1 (".$oraId1.'):'.$oraAdat2['dt'].':'.$oraAdat2['ora'];
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+ if (!tanarLukasOrajaE($tanarId2, $oraAdat1['dt'], $oraAdat1['ora'], $lr)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:'."oraCsere/tanár ütközés #2 (".$oraId2.'):'.$oraAdat1['dt'].':'.$oraAdat1['ora'];
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+ }
+
+ // diák ütközés
+ if (!tankorTagokLukasOrajaE($oraAdat1['tankorId'], $oraAdat2['dt'], $oraAdat2['ora'], $oraAdat2['tankorId'])) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+ if (!tankorTagokLukasOrajaE($oraAdat2['tankorId'], $oraAdat1['dt'], $oraAdat1['ora'], $oraAdat1['tankorId'])) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // terem ellenőrzés nincs: Termeket nem cserélünk!!
+
+ // érintett hiányzások, késések, felszerelés hiányok, egyenruha hiányok, jegyHozzárendelések törlése!
+ if (strtotime($oraAdat1['dt']) < time()) hianyzasEsJegyHozzarendelesTorles($oraId1, $lr);
+ if (strtotime($oraAdat2['dt']) < time()) hianyzasEsJegyHozzarendelesTorles($oraId2, $lr);
+
+ // 1. óra mozgatása
+ if ($oraAdat1['eredet'] == 'órarend') {
+
+ $q = "UPDATE ora SET tipus='elmarad máskor', kit=%u, ki=NULL, modositasDt=NOW() WHERE oraId=%u";
+ if (!db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($tanarId1, $oraAdat1['oraId'])), $lr)) {
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // A felveendő plusz óra
+ $csereOraAdat1['ki'] = $tanarId1;
+ $csereOraAdat1['kit'] = 'NULL';
+ $csereOraAdat1['tipus']='normál máskor';
+ $csereOraAdat1['eredet']='plusz';
+ $csereOraAdat1['dt'] = $oraAdat2['dt'];
+ $csereOraAdat1['ora'] = $oraAdat2['ora'];
+ $csereOraAdat1['teremId'] = $oraAdat2['teremId'];
+
+ $pluszId1 = ujOra($csereOraAdat1, $lr);
+
+ // A csere táblába bejegyezzük a mozgatást
+ if ($pluszId1) {
+
+ db_start_trans($lr);
+
+ $q = "INSERT INTO csere VALUES ('')";
+ $csereId1 = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'result' => 'insert', 'rollback' => true), $lr);
+ if (!$csereId1) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO csereAlapOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId1, $oraId1), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO cserePluszOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId1, $pluszId1), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ db_commit($lr);
+ }
+
+ } else {
+
+ // plusz óra egyszerűen módosítandó...
+ $q = "UPDATE ora SET tipus='normál máskor', ki=%u, kit=NULL, dt='%s', ora=%u, teremId=%u, modositasDt=NOW() WHERE oraId=%u";
+ $r = db_query($q, array(
+ 'fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($tanarId1, $oraAdat2['dt'], $oraAdat2['ora'], $oraAdat2['teremId'], $oraId1)
+ ), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ // A plusz óra beletartozik-e valamelyik cserébe (elvileg csak egybe tartozhat)
+ $q = "SELECT csereId FROM cserePluszOra WHERE oraId=%u";
+ $csereId1 = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'result' => 'value', 'values' => array($oraId1)), $lr);
+
+ } // 1. óra: órarendi vagy plusz óra
+
+ // 2. óra mozgatsa
+ if ($oraAdat2['eredet'] == 'órarend') {
+
+ // ha órarendi óra, akkor elmarad máskor - plusz óra felvétel
+ $q = "UPDATE ora SET tipus='elmarad máskor', kit=%u, ki=NULL, modositasDt=NOW() WHERE oraId=%u";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($tanarId2, $oraAdat2['oraId'])), $lr);
+ if (!r) { if ($olr == '') db_close($lr); return false; }
+
+ // A felveendő plusz óra
+ $csereOraAdat2['ki'] = $tanarId2;
+ $csereOraAdat2['kit'] = 'NULL';
+ $csereOraAdat2['tipus']='normál máskor';
+ $csereOraAdat2['eredet']='plusz';
+ $csereOraAdat2['dt'] = $oraAdat1['dt'];
+ $csereOraAdat2['ora'] = $oraAdat1['ora'];
+ $csereOraAdat2['teremId'] = $oraAdat1['teremId'];
+
+ $pluszId2 = ujOra($csereOraAdat2, $lr);
+ // A csere táblába bejegyezzük a mozgatást
+ if ($pluszId2) {
+
+ db_start_trans($lr);
+
+ $q = "INSERT INTO csere VALUES ('')";
+ $csereId2 = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'result' => 'insert', 'rollback' => true), $lr);
+ if (!$csereId2) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO csereAlapOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId2, $oraId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "INSERT INTO cserePluszOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId2, $pluszId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ db_commit($lr);
+ }
+
+ } else {
+
+ // plusz óra egyszerűen módosítandó...
+ $q = "UPDATE ora SET tipus='normál máskor', ki=%u , kit=NULL, dt='%s', ora=%u, teremId=%u, modositasDt=NOW() WHERE oraId=%u";
+ $r = db_query($q, array(
+ 'fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($tanarId2, $oraAdat1['dt'], $oraAdat1['ora'], $oraAdat1['teremId'], $oraId2)
+ ), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ // A plusz óra beletartozik-e valamelyik cserébe
+ $q = "SELECT csereId FROM cserePluszOra WHERE oraId=%u";
+ $csereId2 = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'result' => 'value', 'values' => array($oraId2)), $lr);
+
+ } // 2. óra: órarendi vagy plusz óra
+
+ // Egy cserévé tesszük...
+
+ if (isset($csereId1) && isset($csereId2) && $csereId1 != $csereId2) {
+
+ db_start_trans($lr);
+
+ // A cserélt órák két különböző cserébe tartoznak --> egyesítjük a két cserét
+ $q = "UPDATE csereAlapOra SET csereId=%u WHERE csereId=%u";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId1, $csereId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "UPDATE cserePluszOra SET csereId=%u WHERE csereId=%u";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId1, $csereId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ $q = "DELETE FROM csere WHERE csereId=%u";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ db_commit($lr);
+
+ } elseif (isset($csereId1) && !isset($csereId2)) {
+
+ // Csak az első óra van cserében --> a másodikat is (ami plusz óra) bele kell rakni
+ $q = "INSERT INTO cserePluszOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId1, $oraId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ } elseif (!isset($csereId1) && isset($csereId2)) {
+ // Csak a második óra van cserében --> az elsőt is (ami plusz óra) bele kell rakni
+ $q = "INSERT INTO cserePluszOra (csereId, oraId) VALUES (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($csereId2, $oraId1), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ } elseif (!isset($csereId1) && !isset($csereId2)) {
+ // Egyik sincs cserében --> Azaz két plusz óra --> nem vesszük fel őket cserének
+ // Ezért ez nem is csere --> a típusok nem normál máskor, hanem normál
+ $q = "UPDATE ora SET tipus='normál', modositasDt=NOW() WHERE oraId IN (%u, %u)";
+ $r = db_query($q, array('fv' => 'oraCsere', 'modul' => 'naplo', 'values' => array($oraId1, $oraId2), 'rollback' => true), $lr);
+ if (!$r) { if ($olr == '') db_close($lr); return false; }
+
+ }
+
+ if ($olr == '') db_close($lr);
+ return true;
+
+ }
+
+ function tanarTankortTanithatE($tanarId, $tankorId, $olr = '') {
+
+
+ if ($olr != '') $lr = $olr;
+ else $lr = db_connect('naplo');
+
+ // Beletartozik-e a megadott tanár a tankör munkaközösségébe?
+ $q = "SELECT COUNT(tanarId)
+ FROM ".__INTEZMENYDBNEV.".tankor
+ LEFT JOIN ".__INTEZMENYDBNEV.".targy USING (targyId)
+ LEFT JOIN ".__INTEZMENYDBNEV.".mkTanar USING (mkId)
+ WHERE tankorId=%u AND tanarId=%u";
+ $num = db_query($q, array(
+ 'fv' => 'tanarTankortTanithatE', 'modul' => 'naplo_intezmeny', 'result' => 'value', 'values' => array($tankorId, $tanarId)
+ ));
+ if ($num != 1) $_SESSION['alert'][] = 'message:wrong_data:keziBeallitas/tanarTankortTanithatE:Nem szakos:(tanarId/tankorId) - '.$tanarId.'/'.$tankorId;
+
+ if ($olr == '') db_close($lr);
+ return ($num == 1);
+
+ }
+
+
+ function keziBeallitas($oraId, $ki, $tipus, $teremId) {
+
+ global $dt;
+
+ $lr = db_connect('naplo', array('fv' => 'keziBeallitas'));
+
+ $oraAdat = getOraAdatById($oraId, __TANEV, $lr);
+ $dt = $oraAdat['dt'];
+ if ($ki != $oraAdat['ki'] || $tipus != $oraAdat['tipus'] || $teremId != $oraAdat['teremId']) {
+ $ok = true;
+ // új tanár, vagy típus - ütközés ellenőrzése
+ if ($ki != $oraAdat['ki'] || $tipus != $oraAdat['tipus']) {
+ $q = "SELECT COUNT(*) FROM ora
+ WHERE dt='%s' AND ora=%u AND oraId!=%u AND ki=%u AND tipus NOT LIKE 'elmarad%%'";
+ $_db = db_query($q, array(
+ 'fv' => 'keziBeallitas', 'modul' => 'naplo', 'result' => 'value', 'values' => array($oraAdat['dt'], $oraAdat['ora'], $oraId, $ki)
+ ), $lr);
+ if ($_db == 0) {
+ if ($tipus == 'összevonás') {
+ $_SESSION['alert'][] = 'message:wrong_data:keziBeallitas:Egy órát nem lehet összevonni';
+ $ok = false;
+ } elseif ($tipus == 'helyettesítés') {
+ // Beletartozik-e a megadott tanár a tankör munkaközösségébe?
+ $ok = tanarTankortTanithatE($ki, $oraAdat['tankorId'], $lr);
+ }
+ } else {
+ if ($tipus != 'összevonás') {
+ $_SESSION['alert'][] = "message:haladasi_utkozes:keziBeallitas:Már van órája!:$ki";
+ $ok = false;
+ } else {
+ // Beletartozik-e a megadott tanár a tankör munkaközösségébe?
+ $ok = tanarTankortTanithatE($ki, $oraAdat['tankorId'], $lr);
+ }
+ }
+ }
+ // Terem változtatás - szabad-e a terem? vagy nincs megadva
+ if ($teremId != $oraAdat['teremId'] && $teremId!='NULL') {
+ // Szabad-e a terem? - a saját maga által használt terem nem foglalt! (összevonáshoz így kell)
+ $Termek = getSzabadTermek(array('dt' => $OraAdat['dt'], 'ora' => $oraAdat['ora'], 'ki' => $ki), $lr);
+ for ($i = 0;($i < count($Termek) && $Termek[$i]['teremId'] != $teremId); $i++);
+ if ($i >= count($Termek)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:keziBeallitas:Foglalt terem:'.$teremId;
+ $ok = false;
+ }
+ }
+ // Módosítás
+ if ($ok && $tipus != 'elmarad') {
+ if (substr($oraAdat['tipus'], 0, 7) == 'normál') {
+ if ($tipus == $oraAdat['tipus'] || $ki == $oraAdat['ki']) {
+ // Vagy mindkettő változik, vagy egyik se
+ $q = "UPDATE ora SET teremId=%u, modositasDt=NOW() WHERE oraId=%u";
+ $v = array($teremId, $oraId);
+ } else { // ki --> kit (csak helyettesítés, felügyelet, vagy összevonás lehet az új típus!!
+ $q = "UPDATE ora SET kit=ki, ki=%u, tipus='%s', teremId=%u, modositasDt=NOW() WHERE oraId=%u";
+ $v = array($ki, $tipus, $teremId, $oraId);
+ }
+ } else { // kit nem változik
+ $q = "UPDATE ora SET ki=%u, tipus='%s', teremId=%u, modositasDt=NOW() WHERE oraId=%u";
+ $v = array($ki, $tipus, $teremId, $oraId);
+ }
+ $r = db_query($q, array('fv' => 'keziBeallitas', 'modul' => 'naplo', 'values' => $v), $lr);
+ if ($r) $_SESSION['alert'][] = 'info:change_success:keziBeallitas';
+ } else {
+ $_SESSION['alert'][] = 'info:do_nothing:keziBeallitas:Nem történt módosítás';
+ }
+ }
+
+ db_close($lr);
+
+ }
+
+ function ujHelyettes2($oraAdat, $ki, $tipus, $olr = null) {
+ $oraId = $oraAdat['oraId'];
+ $dt = $oraAdat['dt'];
+ if (is_null($ki) || $ki!=0) {
+
+ // a helyettesített óra milyen munkaidőbe számolódik vajon?
+ // 1. összevonás = ??? (ezt nem vesszük figyelembe, ezért tökmindegy)
+ // 2. felügyelet = ez bizony egyértelműen a fennmaradó
+ // 3. helyettesítés = lekötött HA (26-on belül van az elmúlt 5 napos lekötött VAGY még a 28-on belül van, de érvényesek a feltételek 2-6-30)
+ // fennmaradó EGYÉBKÉNT.
+
+ // ez már le van kérdezve, de a tranzakció miatt sajnos újra kell:
+ $TERHELES = getOraTerhelesStatByTanarId(array('tanarId'=>array($ki),'dt'=>$dt), $olr);
+
+ if ($tipus=='összevonás') $_munkaido = 'lekötött';
+ elseif ($tipus=='felügyelet') $_munkaido = 'fennmaradó';
+ elseif ($tipus=='helyettesítés') {
+ if ($TERHELES[$ki]['munkaido']['lekotott']>$TERHELES[$ki]['lekotott']['heti']) {
+ $_lekotheto = true;
+ } elseif ($TERHELES[$ki]['over']['napi']<2 && $TERHELES[$ki]['over']['heti']<6) {
+ $_lekotheto =false;
+ } else {
+ $_lekotheto=false;
+ $_SESSION['alert'][] = 'info:OVERTIME'; // időközben túllépte valahogy
+ }
+ if ($_lekotheto===true) $_munkaido = 'lekötött'; else $_munkaido='fennmaradó';
+ } else {
+ $_munkaido='lekötött'; //tipus???
+ }
+
+ if ($_munkaido=='')
+ $q = "UPDATE ora SET ki=%u,tipus='%s', modositasDt=NOW() WHERE oraId=%u";
+ else
+ $q = "UPDATE ora SET ki=%u,tipus='%s',munkaido='".$_munkaido."', modositasDt=NOW() WHERE oraId=%u";
+
+ return db_query($q, array('fv' => 'ujHelyettes', 'modul' => 'naplo', 'values' => array($ki, $tipus, $oraId)), $olr);
+ } else {
+ $_SESSION['alert'][] = '::Nem sikerült beállítani az új helyettest!:oraId-'.$oraId.':ki-'.$ki.':tipus-'.$tipus;
+ return false;
+ }
+
+ }
+
+ function eredetiOraVissza($oraId, $eredet, $olr = null) {
+
+
+ if ($olr == '') $lr = db_connect('naplo', array('fv' => 'eredetiOraVissza'));
+ else $lr = $olr;
+
+ if ($eredet == 'plusz') {
+ $q_csere = "SELECT COUNT(csereId) FROM cserePluszOra WHERE oraId=%u";
+ $num = db_query($q_csere, array('fv' => 'eredetiOraVissza', 'modul' => 'naplo', 'result' => 'value', 'values' => array($oraId)), $lr);
+ }
+ if (($eredet == 'órarend') || ($num == 0))
+ $q = "UPDATE ora SET ki=kit,kit=NULL,tipus='normál',munkaido='lekötött',modositasDt=NOW() WHERE oraId=%u";
+ else
+ $q = "UPDATE ora SET ki=kit,kit=NULL,tipus='normál máskor',munkaido='lekötött',modositasDt=NOW() WHERE oraId=%u";
+ $r = db_query($q, array('fv' => 'eredetiOraVissza', 'modul' => 'naplo', 'values' => array($oraId)), $lr);
+
+ if ($olr == '') db_close($lr);
+ }
+
+ function helyettesitesRogzites($T) {
+
+
+ $lr = db_connect('naplo');
+
+ for ($i = 0; $i < count($T); $i++) {
+
+ if ($T[$i] == '') continue; // ha eredeti maradt, ne módosítson!
+ $teremUtkozes = false;
+ list($ki, $oraId, $tipus) = explode('/',$T[$i]);
+ $oraAdat = getOraAdatById($oraId);
+ if ($tipus == 'normál') {
+ if ($oraAdat['kit'] != '') $ki = $oraAdat['kit'];
+ else $ki = $oraAdat['ki'];
+ }
+ $regi_tipus = $oraAdat['tipus'];
+
+ // A csere miatt elmaradt óra változásakor, illetve
+ // a csere miatt felvett óra visszaállításakor a cserét meg kell szüntetni
+ if (($regi_tipus == 'normál máskor' && $tipus == '') || ($regi_tipus == 'elmarad máskor')) {
+ csereVisszaallitas($oraId, $lr);
+ if (
+ $tipus == '' // csere/mozgatás visszaállítás
+ || ($regi_tipus == 'elmarad máskor' && $tipus == 'elmarad') // mozgatott óra elmarad
+ ) continue;
+ }
+
+ // Elmaradó óra esetén a hiányzások, késések, felszerelés hiányok, egyenruha hiányok, jegy hozzárendelések törlendők!
+ // Ezek bekerült az oraElmarad függvénybe
+ if ($tipus=='töröl' && $oraAdat['tipus']=='egyéb') { // az egyéb típusú óra gond nélkül törölhető, nincs hozzá semmi
+ oraElmarad($oraId, $lr); // használjuk ugyanazt a függvényt
+ } elseif (substr($tipus,0,7) == 'elmarad') {
+ oraElmarad($oraId, $lr);
+ } else {
+ // Ha egy órát "mégis" megtartunk, akkor ellenőrizni kell, hogy nem ütközik-e valamivel!! (esetleg felvett plusz órával, mozgatott órával)
+ // Tanár ellenőrzése
+ if (tanarLukasOrajaE($ki, $oraAdat['dt'], $oraAdat['ora'], $lr)) {
+ if ($tipus == 'összevonás') {
+ $_SESSION['alert'][] = 'message:wrong_data:helyettesitesRogzites:nincs mivel összevonni:'.$oraId;
+ continue;
+ }
+ } else {
+ if ($tipus != 'összevonás') {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:helyettesitesRogzites:'.$oraId;
+ continue;
+ }
+ }
+ if (substr($regi_tipus,0,7) == 'elmarad') {
+ // Tankör tagok ellenőrzése
+ if (getTankorJelenletKotelezoE($oraAdat['tankorId']) && !tankorTagokLukasOrajaE($oraAdat['tankorId'], $oraAdat['dt'], $oraAdat['ora'])) {
+ $_SESSION['alert'][] = 'message:wrong_data:A mégis megtartott óra ütközne!:oraId='.$oraId.', dt='.$oraAdat['dt'].', ora='.$oraAdat['ora'];
+ continue;
+ }
+ }
+
+ // A helyettesítés rögzítése
+ if (mb_substr($tipus,0,6,'UTF-8') == 'normál') {
+ if (mb_substr($regi_tipus,0,6,'UTF-8') != 'normál') eredetiOraVissza($oraId, $oraAdat['eredet'], $lr);
+ } else {
+ if (mb_substr($regi_tipus,0,6,'UTF-8') == 'normál') {
+ // óraelmaradás itt már nem lehet!
+ masTartja($oraId, $ki, $tipus, $lr);
+ } else {
+ // Ebbe NEM értjük bele a helyettesítés --> elmarad váltást
+ // de beleértjük az elmarad --> helyettesítés váltást
+ //ujHelyettes($oraId, $ki, $tipus, $lr);
+ ujHelyettes2($oraAdat, $ki, $tipus, $lr);
+ }
+ }
+
+ } // elmarad / nem marad el
+
+
+ // Ha összevonásról nem összevonásra állítunk, akkor kialakulhatott terem ütközés!
+ if (
+ $oraAdat['teremId'] != ''
+ && substr($tipus,0,7) != 'elmarad'
+ && ($regi_tipus == 'összevonás' || substr($regi_tipus,0,7) == 'elmarad')
+ ) {
+ $Termek = getSzabadTermek(array('dt' => $oraAdat['dt'], 'ora' => $oraAdat['ora'], 'ki' => $ki), $lr);
+ for ($j = 0; ($j < count($Termek) && $Termek[$j]['teremId'] != $oraAdat['teremId']); $j++);
+ if ($j >= count($Termek)) {
+ $_SESSION['alert'][] = 'message:haladasi_utkozes:hianyzasRogzites:a terem foglalt:'.$oraAdat['teremId'];
+ $q = "UPDATE ".__TANEVDBNEV.".ora SET teremId=NULL WHERE oraId=%u";
+ db_query($q, array('fv' => 'hianyzasRogzites', 'modul' => 'naplo', 'values' => array($oraId)), $lr);
+ }
+ }
+ } // for
+
+ db_close($lr);
+
+ }
+
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/oralatogatas.php b/mayor-orig/www/include/modules/naplo/haladasi/oralatogatas.php
new file mode 100644
index 00000000..4364fc36
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/oralatogatas.php
@@ -0,0 +1,30 @@
+<?php
+
+ function oralatogatasBeiras($ADAT) {
+
+ // óralátogatás felvétele/cseréje
+ $q = "REPLACE INTO oraLatogatas (oraId, megjegyzes) VALUES (%u, '%s')";
+ $v = array($ADAT['oraId'], $ADAT['megjegyzes']);
+ $oralatogatasId = db_query($q, array('fv' => 'oralatogatasBeiras', 'modul' => 'naplo', 'result' => 'insert', 'values' => $v));
+
+ if ($oralatogatasId === false) return false;
+
+ // régi tanárhozzárendelések törlése
+ $q = "DELETE FROM oraLatogatasTanar WHERE oraLatogatasId=%u";
+ db_query($q, array('fv' => 'oralatogatasBeiras', 'modul' => 'naplo', 'values' => array($oralatogatasId)));
+
+ // új tanárhozzárendelések felvétele - ha van tanárhozzárendelés
+ if (is_array($ADAT['tanarIds']) && count($ADAT['tanarIds']) > 0) {
+ $q = "INSERT INTO oraLatogatasTanar (oraLatogatasId,tanarId) VALUES ".implode(',', array_fill(0, count($ADAT['tanarIds']), "($oralatogatasId, %u)"));
+ return db_query($q, array('fv' => 'oralatogatasBeiras', 'modul' => 'naplo', 'values' => $ADAT['tanarIds']));
+ }
+ return true;
+ }
+
+ function oralatogatasTorles($oraId) {
+ $q = "DELETE FROM oraLatogatas WHERE oraId=%u";
+ $v = array($oraId);
+ return db_query($q, array('fv' => 'oralatogatasTorles', 'modul' => 'naplo', 'result' => '', 'values' => $v));
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/osszevonas.php b/mayor-orig/www/include/modules/naplo/haladasi/osszevonas.php
new file mode 100644
index 00000000..af80ce98
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/osszevonas.php
@@ -0,0 +1,38 @@
+<?php
+
+ function getOrakByDiakIdk($DIAKIDK, $SET = array('dt' => null, 'ora' => null)) {
+
+ if (!is_array($DIAKIDK) || count($DIAKIDK) == 0) return false;
+
+ $dt = readVariable($SET['dt'], 'datetime', date('Y-m-d'));
+ $ora = readVariable($SET['ora'], 'numeric unsigned', 1);
+
+ $q = "SELECT DISTINCT a.tankorId, a.oraId FROM ora AS a LEFT JOIN ".__INTEZMENYDBNEV.".tankorDiak AS b
+ ON (a.tankorId = b.tankorId AND b.beDt<='%s' AND ('%s'<=b.kiDt OR b.kiDt IS NULL))
+ WHERE b.diakId IN (".implode(',', array_fill(0, count($DIAKIDK), '%u')).") AND a.dt='%s' AND a.ora=%u
+ GROUP BY b.diakId HAVING COUNT(a.oraId)>0";
+ $v = mayor_array_join(array($dt, $dt), $DIAKIDK, array($dt, $ora));
+ return db_query($q, array('fv' => 'getOrakByDiakIdk', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v));
+
+ }
+
+ function oraFelvetele($dt, $ora, $tanarId, $tankorId, $teremId = 'NULL', $tipus = 'normál', $eredet = 'plusz') {
+
+ // ------------------------------------
+ // ITT NEM ellenőrizzük a tanár terhelését!
+ // ------------------------------------
+
+ if (!isset($teremId) || $teremId == '' || intval($teremId) == 0) {
+ $q = "INSERT INTO ora (dt,ora,ki,tankorId,teremId,tipus,eredet)
+ VALUES ('%s', %u, %u, %u, NULL, '%s', '%s')";
+ $v = array($dt, $ora, $tanarId, $tankorId, $tipus, $eredet);
+ } else {
+ $q = "INSERT INTO ora (dt,ora,ki,tankorId,teremId,tipus,eredet)
+ VALUES ('%s', %u, %u, %u, %u, '%s', '%s')";
+ $v = array($dt, $ora, $tanarId, $tankorId, $teremId, $tipus, $eredet);
+ }
+ return db_query($q, array('fv' => 'oraFelvetele', 'modul' => 'naplo', 'values' => $v));
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/pluszora.php b/mayor-orig/www/include/modules/naplo/haladasi/pluszora.php
new file mode 100644
index 00000000..0112181a
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/pluszora.php
@@ -0,0 +1,55 @@
+<?php
+
+ function oraFelvetele($dt, $ora, $tanarId, $tankorId, $teremId = 'NULL', $tipus = 'normál', $eredet = 'plusz', $kit = 'NULL') {
+
+ if (!isset($teremId) || $teremId == '') { $teremId = 'NULL'; $tStr = '%s'; }
+ else { $tStr = '%u'; }
+ if (!isset($kit) || $kit == '') { $kit = 'NULL'; $kStr = '%s'; }
+ else { $kStr = '%u'; }
+
+ // ------------------------------------
+ // ITT NEM ellenőrizzük a tanár terhelését!
+ // ------------------------------------
+ $q = "INSERT INTO ora (dt,ora,ki,kit,tankorId,teremId,tipus,eredet,modositasDt)
+ VALUES ('%s', %u, %u, $kStr, %u, $tStr, '%s', '%s', NOW())";
+ $v = array($dt, $ora, $tanarId, $kit, $tankorId, $teremId, $tipus, $eredet);
+ return db_query($q, array('fv' => 'oraFelvetele', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ }
+
+ function getSzabadTankorok($dt, $ora) {
+
+ // Összes tankör
+ $ret = $osszesTankorIds = getTankorByTanev($tanev = __TANEV, array('result' => 'idonly'));
+ // Az adott időpontban foglalt tankörök
+ $q = "SELECT tankorId FROM ora WHERE dt='%s' AND ora=%u AND tipus IN ('normál','normál máskor','helyettesítés','felügyelet','összevonás')";
+ $v = array($dt, $ora);
+ $tankorIds = db_query($q, array('fv' => 'getSzabadTankorok', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v));
+ if (is_array($tankorIds) && count($tankorIds) > 0) {
+ // A tankörök tagjai
+ $q = "SELECT DISTINCT diakId FROM ".__INTEZMENYDBNEV.".tankorDiak
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND (kiDt>='%s' OR kiDt is null) AND beDt<='%s' ORDER BY diakId";
+ $v = mayor_array_join($tankorIds, array($dt, $dt));
+ $diakIds = db_query($q, array('fv' => 'getSzabadTankorok', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v));
+ // A foglalt diákok tankörei
+ $foglaltTankorIds = getTankorIdsByDiakIds($diakIds, array('tanev'=>__TANEV,'tolDt'=>$dt,'igDt'=>$dt, 'felmentettekkel'=>false));
+ if (!is_array($foglaltTankorIds)) $foglaltTankorIds = $tankorIds;
+ $ret = array_diff($osszesTankorIds, $foglaltTankorIds);
+ }
+
+ /* és vegyük hozzá a szabadon felvehető tanköröket, hm? */
+ $pluszNemKotelezoTankorok = getTankorByTanev($tanev, array('result'=>'idonly','jelenlet'=>'nem kötelező' ));
+ $ret = mayor_array_join($ret,$pluszNemKotelezoTankorok);
+ if (is_array($ret) && count($ret)>0) {
+ $q = "SELECT DISTINCT tankor.tankorId,tankorNev
+ FROM ".__INTEZMENYDBNEV.".tankor LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId)
+ WHERE tanev=".__TANEV." AND tankorId IN (".implode(',', array_fill(0, count($ret), '%u')).") ORDER BY tankorNev";
+ return db_query($q, array('fv' => 'getSzabadTankorok', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $ret));
+ } else {
+ return $ret;
+ }
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/specialis.php b/mayor-orig/www/include/modules/naplo/haladasi/specialis.php
new file mode 100644
index 00000000..8c78d49d
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/specialis.php
@@ -0,0 +1,167 @@
+<?php
+/*
+ module: naplo
+*/
+
+ function napiOrakTorlese($dt, $tipus) {
+
+
+ $lr = db_connect('naplo', array('fv' => 'napiOrakTorlese'));
+
+ $q = "DELETE FROM ora WHERE dt='%s'";
+ $r = db_query($q, array('fv' => 'napiOrakTorlese', 'modul' => 'naplo', 'values' => array($dt)), $lr);
+ if (!$r) {
+ db_close($lr);
+ return false;
+ }
+
+ if ($tipus !== '') {
+ $q = "UPDATE nap SET tipus='%s' WHERE dt='%s'";
+ $r = db_query($q, array('fv' => 'napiOrakTorlese', 'modul' => 'naplo', 'values' => array($tipus, $dt)), $lr);
+ // ?? Mi van, ha szünetről tanítási nap-ra állítjuk? Marad a 0. órarendi hét? ??
+ }
+ db_close($lr);
+ return $r;
+
+ }
+
+ function orakBetoltese($dt, $orarendiHet) {
+
+
+ $lr = db_connect('naplo', array('fv' => 'orakBetoltese'));
+
+ // Ellenőrizzük, hogy van-e már betöltve óra az adott napra
+ $q = "SELECT COUNT(oraId) FROM ora WHERE dt='%s'";
+ $num = db_query($q, array('fv' => 'orakBetoltese', 'modul' => 'naplo', 'values' => array($dt), 'result'=>'value'), $lr);
+ if ($num === false) {
+ db_close($lr);
+ return false;
+ }
+ if ($num > 0) {
+ $_SESSION['alert'][] = 'message:wrong_data:orakBetoltese:van már betöltve óra az adott napon:'.$dt;
+ db_close($lr);
+ return false;
+ }
+
+ // Ha az órarendi órákat töltjük be, akkor a nap csak tanítási nap típusú lehet
+ $q = "UPDATE nap SET tipus='tanítási nap',orarendiHet=%u WHERE dt='%s'";
+ $r = db_query($q, array('fv' => 'orakBetoltese', 'modul' => 'naplo', 'values' => array($orarendiHet, $dt)), $lr);
+ if (!$r) {
+ db_close($lr);
+ return false;
+ }
+
+ // Órák betöltése
+ checkNaplo($dt, $lr);
+ db_close($lr);
+ return true;
+
+ }
+
+ function specialisNap($dt, $celOra, $het, $nap, $ora, $olr = null) {
+
+ if ($olr == '') $lr = db_connect('naplo', array('fv' => 'specialisNap'));
+ else $lr = $olr;
+ db_start_trans($lr);
+
+ // A (speciális) tanítási napokhoz rendelt osztályok
+ $q = "SELECT osztalyId FROM nap LEFT JOIN munkatervOsztaly USING (munkatervId) WHERE dt='%s'
+ AND tipus IN ('tanítási nap','speciális tanítási nap') AND osztalyId IS NOT NULL"; // null akkor lehet, ha nincs hozzárendelve egyetlen osztály sem egy munkatervhez...
+ $v = array($dt);
+ $osztalyIds = db_query($q, array('fv' => 'specialisNap/osztalyIds', 'modul' => 'naplo', 'result' => 'idonly', 'values' => $v), $lr);
+ if (!is_array($osztalyIds) || count($osztalyIds) == 0) {
+ db_rollback($lr, 'specialisNap/#1');
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // Érintett tankörök
+ $q = "SELECT DISTINCT tankorId FROM ".__INTEZMENYDBNEV.".tankorOsztaly WHERE osztalyId IN (".implode(',',$osztalyIds).")";
+ $tankorIds = db_query($q, array('fv'=>'specialisNap/tankorIds', 'modul'=>'naplo', 'result'=>'idonly'), $lr);
+ if (!is_array($tankorIds) || count($tankorIds) == 0) {
+ db_rollback($lr, 'specialisNap/#2');
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // Órák betöltése sávonként
+ $ok = true;
+ for ($i = 0; $i < count($celOra); $i++) {
+ if ($het[$i] != '' and $nap[$i] != '' and $ora[$i] != '') {
+
+ $napszam = date('w',strtotime($nap[$i]));
+ if ($napszam == 0) $napszam = 7;
+
+ $q = "INSERT INTO ora (dt,ora,ki,tankorId,teremId,tipus,eredet)
+ SELECT '%s', %u, orarendiOra.tanarId,orarendiOraTankor.tankorId,teremId,'normál','órarend'
+ FROM orarendiOra LEFT JOIN orarendiOraTankor USING (tanarId, osztalyJel, targyJel)
+ WHERE orarendiOraTankor.tankorId IS NOT NULL
+ AND tankorId IN (".implode(',', $tankorIds).")
+ AND het=%u
+ AND nap=%u
+ AND ora=%u
+ AND tolDt<='%s'
+ AND (igDt IS NULL OR igDt>='%s')";
+ $v = array($dt, $celOra[$i], $het[$i], $nap[$i], $ora[$i], $dt, $dt);
+ $r = db_query($q, array('fv' => 'specialisNap', 'modul' => 'naplo', 'values' => $v), $lr);
+ if (!$r) $ok = false;
+
+ } // minden adat megvan
+ } // end for
+ if (!$ok) {
+ db_rollback($lr, 'specialisNap/#3');
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ // speciális tanítási nap-ra állítjuk a tanítási napokat
+ $q = "UPDATE nap SET tipus='speciális tanítási nap',orarendiHet=0 WHERE dt='%s' AND tipus='tanítási nap'";
+ $r = db_query($q, array('fv' => 'specialisNap', 'modul' => 'naplo', 'values' => array($dt)), $lr);
+ if (!$r) {
+ db_rollback($lr, 'specialisNap/#4');
+ if ($olr == '') db_close($lr);
+ return false;
+ }
+
+ db_commit($lr);
+ if ($olr == '') db_close($lr);
+ return true;
+ }
+
+ function getSzabadOrak($dt) {
+
+ $q = "SELECT DISTINCT ora FROM ora
+ WHERE dt='%s' AND tipus NOT LIKE 'elmarad%%'";
+ $foglaltOrak = db_query($q, array('fv' => 'getSzabadOrak', 'modul' => 'naplo', 'result' => 'idonly', 'values' => array($dt)));
+ if (is_array($foglaltOrak)) {
+ $szabadOrak = array();
+ for ($i = getMinOra(); $i <= getMaxOra(); $i++) {
+ if (!in_array($i, $foglaltOrak)) $szabadOrak[] = $i;
+ }
+ }
+
+ return $szabadOrak;
+
+ }
+
+ function orakTorlese($dt, $Orak) {
+
+
+ $lr = db_connect('naplo', array('fv' => 'orakTorlese'));
+
+ $q = "DELETE FROM ora WHERE dt='%s' AND ora IN (".implode(',', array_fill(0, count($Orak), '%u')).")";
+ array_unshift($Orak, $dt);
+ $r = db_query($q, array('fv' => 'orakTorlese', 'modul' => 'naplo', 'values' => $Orak), $lr);
+ if (!$r) {
+ db_close($lr);
+ return false;
+ }
+
+ $q = "UPDATE nap SET tipus='speciális tanítási nap', orarendiHet=0 WHERE dt='%s'";
+ $r = db_query($q, array('fv' => 'orakTorlese', 'modul' => 'naplo', 'values' => array($dt)), $lr);
+ db_close($lr);
+ return $r;
+ }
+
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/stat.php b/mayor-orig/www/include/modules/naplo/haladasi/stat.php
new file mode 100644
index 00000000..45d1d9de
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/stat.php
@@ -0,0 +1,103 @@
+<?php
+
+/*
+ function munkatervTankor($tankorIds) {
+
+ $q = "SELECT DISTINCT munkatervId, tankorId FROM munkatervOsztaly LEFT JOIN ".__INTEZMENYDBNEV.".tankorOsztaly USING (osztalyId)
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")";
+ return db_query($q, array('fv' => 'munkatervTankor', 'modul'=>'naplo', 'result'=>'keyvalues','values'=>$tankorIds));
+ }
+
+ function tankorMunkaterv($tankorIds) {
+
+ $q = "SELECT DISTINCT tankorId, munkatervId FROM munkatervOsztaly LEFT JOIN ".__INTEZMENYDBNEV.".tankorOsztaly USING (osztalyId)
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).") ORDER BY tankorId, munkatervId";
+ return db_query($q, array('fv' => 'tankorMunkaterv', 'modul'=>'naplo', 'result'=>'keyvalues','values'=>$tankorIds));
+ }
+*/
+ function getTankorStat($tankorIds, $dt = '') {
+
+ global $_TANEV;
+
+ if ($dt == '') $dt = date('Y-m-d');
+ $szDb = count($_TANEV['szemeszter']);
+ $ret = array();
+
+ // Van-e nem végzős tanuló az adott tankörökben --> a tankör végzős-e
+ $ret['vegzos'] = tankorokVegzosekE($tankorIds, __TANEV, array('tagokAlapjan' => true, 'tolDt' => null, 'igDt' => null));
+
+ // tervezett óraszámok lekérdezése
+ $q = "SELECT szemeszter, tankorId, tankorNev, oraszam FROM ".__INTEZMENYDBNEV.".tankorSzemeszter
+ WHERE tanev=".__TANEV." AND tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ ORDER BY tankorId, szemeszter";
+ $ret['tervezett'] = db_query($q, array(
+ 'fv' => 'getTankorStat', 'modul' => 'naplo_intezmeny', 'result' => 'multiassoc', 'keyfield' => 'tankorId', 'values' => $tankorIds
+ ));
+ foreach ($ret['tervezett'] as $tankorId => $tankorAdat) {
+ $ret['tanitasiHetekSzama'][$tankorId] = getTanitasiHetekSzama(array('tankorId'=>$tankorId,'vegzos'=>$ret['vegzos'][$tankorId]));
+ $oraszam = 0;
+ for ($i = 0; $i < count($tankorAdat); $i++) {
+ $oraszam += $tankorAdat[$i]['oraszam'];
+ }
+ $ret['tervezett'][$tankorId]['hetiOraszam'] = $oraszam / $szDb;
+ $ret['tervezett'][$tankorId]['evesOraszam'] = $oraszam / $szDb * $ret['tanitasiHetekSzama'][$tankorId];
+ }
+
+ // megtartott órák száma
+ if (defined('__ORASZAMOT_NOVELO_TIPUSOK')) {
+ $oraszamNoveloTipus = explode(',', __ORASZAMOT_NOVELO_TIPUSOK);
+ } else {
+ $_SESSION['alert'][] = 'info:missing_constant:__ORASZAMOT_NOVELO_TIPUSOK';
+ $oraszamNoveloTipus = array('normál', 'normál máskor', 'helyettesítés', 'összevonás');
+ }
+ $q = "SELECT tankorId, COUNT(oraId) AS oraSzam FROM ora
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND tipus IN ('".implode("','", array_fill(0, count($oraszamNoveloTipus), '%s'))."')
+ AND dt <= '%s' GROUP BY tankorId";
+ $v = mayor_array_join($tankorIds, $oraszamNoveloTipus, array($dt));
+ $ret['megtartott'] = db_query($q, array(
+ 'fv' => 'getTankorStat', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tankorId', 'values' => $v
+ ));
+
+ if (is_array($tankorIds) && count($tankorIds)>0) {
+
+ $q = "SELECT tankorId,COUNT(DISTINCT dt, ora) AS oraSzam
+ FROM (nap LEFT JOIN munkatervOsztaly USING (munkatervId))
+ LEFT JOIN (
+ orarendiOra
+ LEFT JOIN orarendiOraTankor USING (tanarId,osztalyJel,targyJel)
+ LEFT JOIN ".__INTEZMENYDBNEV.".tankorOsztaly USING (tankorId)
+ )
+ ON (((DAYOFWEEK(dt)+5) MOD 7)+1 = orarendiOra.nap)
+ AND orarendiOra.het=nap.orarendiHet
+ AND orarendiOra.tolDt<=dt AND orarendiOra.igDt>=dt
+ AND munkatervOsztaly.osztalyId = tankorOsztaly.osztalyId
+ WHERE tanarId IS NOT NULL
+ AND tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND dt > '%s'
+ GROUP BY tankorId";
+ $v = mayor_array_join($tankorIds, array($dt));
+ $ret['becsult'] = db_query($q, array(
+ 'fv' => 'getTankorStat/becsült', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tankorId', 'values' => $v
+ ));
+
+ // beírt érdemjegyek száma
+ $q = "SELECT tankorId, COUNT(jegy) AS jegyDb FROM jegy WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND dt <= '%s' GROUP BY tankorId";
+ $v = $tankorIds; array_push($v, $dt);
+ $ret['jegyekSzama'] = db_query($q, array(
+ 'fv' => 'getTankorStat/jegyekSzama', 'modul' => 'naplo', 'result' => 'keyvaluepair', 'values' => $v
+ ));
+ // tankörlétszámok...
+ array_push($v, $dt);
+ $q = "SELECT tankorId, COUNT(*) AS db FROM tankorDiak WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR '%s' <= kiDt) GROUP BY tankorId";
+ $ret['letszam'] = db_query($q, array(
+ 'fv' => 'getTankorStat/letszam', 'modul' => 'naplo_intezmeny', 'result' => 'keyvaluepair', 'values' => $v
+ ));
+ }
+
+ return $ret;
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/haladasi/teremModositas.php b/mayor-orig/www/include/modules/naplo/haladasi/teremModositas.php
new file mode 100644
index 00000000..1f104649
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/haladasi/teremModositas.php
@@ -0,0 +1,30 @@
+<?php
+
+ /* 2010 GPL */
+ function getOraIdByPattern($P) {
+
+ $v = array($P['dt'], $P['ora'], $P['ki'], $P['kit'], $P['tankorId'], $P['teremId']);
+ $q = "SELECT oraId FROM ora WHERE dt='%s' AND ora=%u and (ki=%u or kit=%u or tankorId=%u or teremId=%u) AND tipus!='elmarad' AND tipus!='elmarad máskor'";
+ $r = db_query($q, array( 'fv' => 'getOraIdByPattern', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v, 'debug'=>false ));
+ if (count($r)!==1)
+ return false;
+ else
+ return $r[0]['oraId'];
+ return false;
+ }
+
+ function checkHaladasiSzabadTerem($dt,$ora,$teremId,$lr) {
+ $v = array($dt,$ora,$teremId);
+ $q = "SELECT count(*) as db FROM `ora` WHERE `dt`='%s' AND `ora`=%u AND `teremId`=%u AND tipus!='elmarad' AND tipus!='elmarad máskor'";
+ return (db_query($q, array( 'fv' => 'checkHaladasiSzabadTerem', 'modul' => 'naplo', 'result'=>'value','values' => $v), $lr) === "0");
+ }
+
+ function haladasiTeremModositas($oraId,$teremId,$lr) {
+ if (!is_numeric($oraId) || !is_numeric($teremId)) return false;
+ $v = array($teremId,$oraId);
+ $q = "UPDATE ora SET teremId=%u WHERE oraId=%u";
+ return db_query($q, array( 'fv' => 'haladasiTeremModositas',
+ 'modul' => 'naplo', 'values' => $v), $lr);
+ }
+
+?>