From 43de9af71f7f4ca5731b94a06d688ae8412ba427 Mon Sep 17 00:00:00 2001 From: M.Gergo Date: Fri, 6 Jul 2018 11:14:41 +0200 Subject: 2018/Feb/28 -i állapot hozzáadva, mint a módosítások kiindulási állapota --- .../include/modules/naplo/haladasi/elmaradas.php | 27 + .../include/modules/naplo/haladasi/elszamolas.php | 44 + .../include/modules/naplo/haladasi/haladasi.php | 274 ++++++ .../modules/naplo/haladasi/helyettesites.php | 945 +++++++++++++++++++++ .../modules/naplo/haladasi/oralatogatas.php | 30 + .../include/modules/naplo/haladasi/osszevonas.php | 38 + .../include/modules/naplo/haladasi/pluszora.php | 55 ++ .../include/modules/naplo/haladasi/specialis.php | 167 ++++ .../www/include/modules/naplo/haladasi/stat.php | 103 +++ .../modules/naplo/haladasi/teremModositas.php | 30 + 10 files changed, 1713 insertions(+) create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/elmaradas.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/elszamolas.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/haladasi.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/helyettesites.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/oralatogatas.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/osszevonas.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/pluszora.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/specialis.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/stat.php create mode 100644 mayor-orig/www/include/modules/naplo/haladasi/teremModositas.php (limited to 'mayor-orig/www/include/modules/naplo/haladasi') 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 @@ += 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 @@ + '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 @@ + '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 @@ + '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'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 @@ + '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 @@ + 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 @@ + '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 @@ + '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 @@ + '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 @@ + '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); + } + +?> -- cgit v1.2.3