aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-orig/www/include/modules/naplo/tanev
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/tanev
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/tanev')
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/checkStatus.php33
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/fogadoOra.php142
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/munkaterv.php145
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/tankorBlokk.php277
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/tankorCsoport.php164
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/targyBontas.php240
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/targyOraszam.php28
-rw-r--r--mayor-orig/www/include/modules/naplo/tanev/vegzosOrarendLezaras.php33
8 files changed, 1062 insertions, 0 deletions
diff --git a/mayor-orig/www/include/modules/naplo/tanev/checkStatus.php b/mayor-orig/www/include/modules/naplo/tanev/checkStatus.php
new file mode 100644
index 00000000..a2d97afb
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/checkStatus.php
@@ -0,0 +1,33 @@
+<?php
+
+ function checkStatus() {
+ if ($olr == '') $lr = db_connect('naplo');
+ else $lr = $olr;
+
+ // A munkaterv meglétének ellenőrzése
+ $q = "SELECT COUNT(*) AS db FROM `nap`";
+ $R['napokSzama'] = db_query($q, array('fv' => 'checkStatus/1', 'modul' => 'naplo', 'result' => 'value'), $lr);
+
+ $q = "SELECT COUNT(*) AS db FROM orarendiOra WHERE tolDt <= curdate() AND igDt >= curdate()";
+ $R['orakSzama'] = db_query($q, array('fv' => 'checkStatus/2', 'modul' => 'naplo', 'result' => 'value'), $lr);
+
+ $q = "SELECT DISTINCT orarendiOra.tanarId, orarendiOra.targyJel, orarendiOra.osztalyJel
+ FROM orarendiOra LEFT JOIN orarendiOraTankor USING(tanarId, targyJel, osztalyJel)
+ WHERE tankorId IS NULL";
+
+ $R['hianyzoTankor'] = db_query($q, array('fv' => 'checkStatus/3', 'modul' => 'naplo', 'result' => 'indexed'),$lr);
+
+ $q = "SELECT DISTINCT orarendiOra.tanarId, orarendiOra.targyJel, orarendiOra.osztalyJel
+ FROM orarendiOraTankor LEFT JOIN orarendiOra USING(tanarId, targyJel, osztalyJel)
+ WHERE tanarId IS NULL";
+
+ $R['hianyzoOra'] = db_query($q, array('fv' => 'checkStatus/3', 'modul' => 'naplo', 'result' => 'indexed'),$lr);
+
+ $R['vizsgaltDt'] = date('Y-m-d');
+
+ if ($olr == '') db_close($lr);
+
+ return $R;
+
+ }
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/fogadoOra.php b/mayor-orig/www/include/modules/naplo/tanev/fogadoOra.php
new file mode 100644
index 00000000..4aaf4016
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/fogadoOra.php
@@ -0,0 +1,142 @@
+<?php
+
+ function getKovetkezoFogadoDtk() {
+ $q = "SELECT DISTINCT tol, ig FROM ".__TANEVDBNEV.".fogadoOra WHERE ig>NOW() ORDER BY tol";
+ $dts = db_query($q, array('fv' => 'getKovetkezoFogadoDt', 'modul' => 'naplo', 'result' => 'indexed'));
+ $ret = array('dates' => array(), 'tol' => array(), 'ig' => array());
+ if (is_array($dts)) for ($i = 0; $i < count($dts); $i++) {
+ $dt = substr($dts[$i]['tol'],0,10);
+ if (!in_array($dt, $ret['dates'])) $ret['dates'][] = $dt;
+ $ret['tol'][] = $dts[$i]['tol'];
+ $ret['ig'][] = $dts[$i]['ig'];
+ }
+ return $ret;
+ }
+
+ function getTanarFogadoOra($tanarId) {
+ $v = array($tanarId);
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOra WHERE tanarId=%u AND ig>=NOW()";
+ $ret['adatok'] = db_query($q, array('fv' => 'getTanarFogadoOra', 'modul' => 'naplo', 'result' => 'record', 'values' => $v));
+ if (!is_array($ret['adatok']) || count($ret['adatok']) == 0) $ret['adatok'] = array('tanarId' => $tanarId);
+
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOraJelentkezes WHERE tanarId=%u AND tol>=CURDATE()";
+ $ret['jelentkezesek'] = db_query($q, array('fv' => 'getTanarFogadoOra', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tol', 'values' => $v));
+
+ return $ret;
+ }
+
+ function getFogadoOsszes() {
+ // Hogy ABC szerint legyen inkább...
+ $q = "SELECT fogadoOra.* FROM ".__TANEVDBNEV.".fogadoOra LEFT JOIN ".__INTEZMENYDBNEV.".tanar USING (tanarId) WHERE ig>=NOW()
+ ORDER BY CONCAT_WS(' ',viseltCsaladinev,viseltUtonev),tol,ig,teremId";
+ $ret = db_query($q, array('fv' => 'getFogadoOsszes', 'modul' => 'naplo', 'result' => 'indexed'));
+ return $ret;
+ }
+
+ function kovetkezoFogadoOraInit($tol, $ig) {
+ // Egyszerre mindig csak egy következő fogadó óra lehet - törlés
+ $q = "DELETE FROM fogadoOra WHERE tol>=NOW() OR tol>='$tol'";
+ $r = db_query($q, array('fv' => 'kovetkezoFogadoFelvetele', 'modul' => 'naplo'));
+ // A szülői jelentkezések is törlődnek ekkor
+ $q = "DELETE FROM fogadoOraJelentkezes WHERE tol>=NOW() OR tol>='$tol'";
+ $r = db_query($q, array('fv' => 'kovetkezoFogadoFelvetele', 'modul' => 'naplo'));
+ // minden tanárra beállítjuk a megadott tol-ig értéket
+ $q = "INSERT INTO fogadoOra (tanarId,tol,ig)
+ SELECT tanarId, '%s','%s' FROM ".__INTEZMENYDBNEV.".tanar
+ WHERE beDt<='%s' and (kiDt is null or kiDt >= '%s');";
+ $r = db_query($q, array('fv' => 'kovetkezoFogadoFelvetele', 'modul' => 'naplo', 'values' => array($tol, $ig, $ig, $tol)));
+ }
+
+ function tanarFogadoOra($tanarId, $tol, $ig, $teremId) {
+ if ($teremId == '') $teremId = 'NULL';
+ // Ha van bejegyzett fogadóóra, akkor töröljük
+ $q = "DELETE FROM fogadoOra WHERE ig>NOW() AND tanarId=%u";
+ db_query($q, array('fv' => 'tanarFogadoOra', 'modul' => 'naplo', 'values' => array($tanarId)));
+ // Új fogadóóra felvétele
+ if (isset($teremId) && $teremId > 0) {
+ $q = "INSERT INTO fogadoOra VALUES (%u, '%s', '%s', %u)";
+ } else {
+ $q = "INSERT INTO fogadoOra VALUES (%u, '%s', '%s', NULL)";
+ }
+ $v = array($tanarId, $tol, $ig, $teremId);
+ db_query($q, array('fv' => 'tanarFogadoOra', 'modul' => 'naplo', 'values' => $v));
+
+ // A szülői jelentkezések is törlődnek ekkor
+ $q = "DELETE FROM fogadoOraJelentkezes WHERE tanarId=%u AND (tol<'%s' OR tol>='%s')";
+ $v = array($tanarId, $tol, $ig);
+ return db_query($q, array('fv' => 'tanarFogadoOra', 'modul' => 'naplo', 'values' => $v));
+
+ }
+
+ function getSzuloJelentkezes($szuloId) {
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOraJelentkezes WHERE szuloId=%u AND tol>=NOW() ORDER BY tol";
+ return db_query($q, array('fv' => 'getSzuloJelentkezes', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tanarId', 'values' => array($szuloId)));
+ }
+
+ function fogadoOraJelentkezes($szuloId, $M) {
+
+ $lr = db_connect('naplo');
+
+ for ($i = 0; $i < count($M); $i++) {
+ $tanarId = $M[$i]['tanarId'];
+ $datetime = $M[$i]['datetime'];
+ if (isset($datetime)) {
+ // Egy már felvett jelentkezésről van-e szó
+ $q = "SELECT COUNT(*) FROM ".__TANEVDBNEV.".fogadoOraJelentkezes WHERE tol='%s' AND tanarId=%u AND szuloId=%u";
+ $v = array($datetime, $tanarId, $szuloId);
+ $db = db_query($q, array('fv' => 'fogadoOraJelentkezes', 'modul' => 'naplo', 'result' => 'value', 'values' => $v), $lr);
+ if ($db > 0) continue;
+
+ // Van-e már a szülőnek, vagy a tanárnak bejegyzése az adott időpontra
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOraJelentkezes WHERE tol='%s' AND (tanarId=%u OR szuloId=%u) LIMIT 1";
+ $v = array($datetime, $tanarId, $szuloId);
+ $r = db_query($q, array('fv' => 'fogadoOraJelentkezes', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if (!is_array($r) || count($r) == 1) {
+ //$_SESSION['alert'][] = 'message:wrong_data:fogadoOraJelentkezes:foglalt:'."$szuloId/$tanarId/$datetime";
+ $_SESSION['alert'][] = 'message:fogadoora_foglalt:'.str_replace(':','.',$datetime).':foglalt:'."$szuloId/$tanarId/$datetime";
+ continue;
+ }
+ // Van-e a tanárnak az adtott időpontban fogadóórája
+ $q = "SELECT * FROM fogadoOra WHERE tanarId=%u AND tol<='%s' AND '%s'<ig";
+ $v = array($tanarId, $datetime, $datetime);
+ $r = db_query($q, array('fv' => 'fogadoOraJelentkezes', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if (!is_array($r) || count($r) == 0) {
+ //$_SESSION['alert'][] = 'message:wrong_data:fogadoOraJelentkezes:nincs fogadóórája:'."szuloId/$tanarId/$datetime";
+ $_SESSION['alert'][] = 'message:fogadoora_nincs:'.$datetime.":szuloId/$tanarId/$datetime";
+ continue;
+ }
+ }
+
+ db_start_trans($lr);
+ // Töröljük a korrábbi jelentkezést és felvesszük az újat
+ $q = "DELETE FROM fogadoOraJelentkezes WHERE szuloId=%u AND tanarId=%u AND tol>=NOW()";
+ $v = array($szuloId, $tanarId);
+ $r = db_query($q, array('rollback' => true, 'fv' => 'fogadoOraJelentkezes', 'modul' => 'naplo', 'values' => $v), $lr);
+ // Ha csak törlés volt, akkor tovább
+ if (!isset($datetime)) { db_commit($lr); continue; }
+
+ // Felvesszük az új jelentkezést
+ $q = "INSERT INTO fogadoOraJelentkezes (szuloId, tanarId, tol) VALUES (%u, %u, '%s')";
+ $v = array($szuloId, $tanarId, $datetime);
+ $r = db_query($q, array('rollback' => true, 'fv' => 'fogadoOraJelentkezes', 'modul' => 'naplo', 'values' => $v), $lr);
+ db_commit($lr);
+ }
+
+ db_close($lr);
+
+ }
+
+
+ function getFogadoOraLista() {
+
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOra LEFT JOIN ".__INTEZMENYDBNEV.".terem USING (teremId) WHERE ig>=NOW()";
+ $ret['adatok'] = db_query($q, array('fv' => 'getFogadoOraLista', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tanarId'));
+
+ $q = "SELECT * FROM ".__TANEVDBNEV.".fogadoOraJelentkezes WHERE tol>=CURDATE() ORDER BY tanarId,tol";
+ $ret['jelentkezesek'] = db_query($q, array('fv' => 'getFogadoOraLista', 'modul' => 'naplo', 'result' => 'multiassoc', 'keyfield' => 'tanarId'));
+
+ return $ret;
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/munkaterv.php b/mayor-orig/www/include/modules/naplo/tanev/munkaterv.php
new file mode 100644
index 00000000..ab52242f
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/munkaterv.php
@@ -0,0 +1,145 @@
+<?php
+/*
+ Module: naplo
+*/
+
+ function initNapok($ADAT) {
+
+ global $_TANEV, $UNNEPNAPOK;
+
+ logAction(array('szoveg'=>'initNapok','table'=>'nap'));
+
+ $Hetek = $ADAT['Hetek'];
+ $lr = db_connect('naplo', array('fv' => 'initNapok'));
+
+ db_start_trans($lr);
+
+ $q = "DELETE FROM munkaterv";
+ $r[] = db_query($q, array('fv' => 'initNapok', 'modul' => 'naplo'), $lr);
+
+ /* Munkaterv */
+ $q = "INSERT INTO munkaterv (munkatervId,munkatervNev,tanitasiNap,tanitasNelkuliMunkanap,vegzosZarasDt) VALUES (1,'alapértelmezett',%u,%u,'%s')";
+ $v = array($ADAT['tanitasiNap'], $ADAT['tanitasNelkuliMunkanap'], $ADAT['vegzosZarasDt']);
+ $r[] = db_query($q, array('fv' => 'initNapok1', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ $q = "INSERT INTO munkatervOsztaly (munkatervId,osztalyId) SELECT 1 AS `munkatervId`,`osztalyId` FROM `".__INTEZMENYDBNEV."`.`osztaly` WHERE vegzoTanev>=%u AND kezdoTanev<=%u";
+ $v = array(__TANEV,__TANEV);
+ $r[] = db_query($q, array('fv' => 'initNapok2', 'modul' => 'naplo', 'values' => $v), $lr);
+ /* --- */
+
+ $kovetkezoTanevAdat = getTanevAdat(__TANEV+1); $tanevVege = date('Y-m-d',strtotime('-1 days',strtotime($kovetkezoTanevAdat['kezdesDt'])));
+ $r[] = napokHozzaadasa(__TANEV, $_TANEV['kezdesDt'], $tanevVege, $_TANEV, $lr);
+
+ orarendiHetekHozzarendelese($_TANEV['kezdesDt'], $_TANEV['zarasDt'], $Hetek, $lr);
+
+ if (in_array(false,$r)) {
+ db_rollback($lr);
+ db_close($lr);
+ return false;
+ } else {
+ db_commit($lr);
+ db_close($lr);
+ $_SESSION['alert'][] = 'info:success';
+ return true;
+ }
+
+ }
+
+ function ujMunkaterv($ADAT) {
+
+ $q = "INSERT INTO munkaterv (munkatervNev,tanitasiNap,tanitasNelkuliMunkanap,vegzosZarasDt) VALUES
+ ('%s',%u,%u,'%s')";
+ $v = array($ADAT['munkatervNev'], $ADAT['tanitasiNap'], $ADAT['tanitasNelkuliMunkanap'], $ADAT['vegzosZarasDt']);
+ $munkatervId = db_query($q, array('fv' => 'ujMunkaterv/munkaterv', 'modul' => 'naplo', 'values' => $v, 'result' => 'insert'), $lr);
+
+ if (!$munkatervId) { return false; }
+
+ $q = "INSERT INTO nap SELECT dt, tipus, megjegyzes, orarendiHet, %u AS munkatervId, csengetesiRendTipus FROM nap WHERE munkatervId=%u";
+ $v = array($munkatervId, $ADAT['munkatervId']);
+ $r = db_query($q, array('fv' => 'ujMunkaterv/nap', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ if (!$r) { return false; }
+
+ return $munkatervId;
+
+ }
+
+ function munkatervModositas($Dt, $Tipus, $Megjegyzes, $OrarendiHet, $Hetek, $munkatervId = 1, $csengetesiRendTipus) {
+
+ global $_TANEV;
+
+ logAction(
+ array(
+ 'szoveg'=>'munkaterv módosítás',
+ 'table'=>'nap'
+ )
+ );
+ $lr = db_connect('naplo', array('fv' => 'munkatervModositas'));
+ db_start_trans($lr);
+ for ($i = 0; $i < count($Dt); $i++) {
+ $dt = $Dt[$i];
+ $time = strtotime($dt);
+ $tipus = $Tipus[$i];
+ $megjegyzes = $Megjegyzes[$i];
+ $_csengetesiRendTipus = $csengetesiRendTipus[$i];
+ if ($tipus == 'tanítási nap') {
+ $orarendiHet = $OrarendiHet[$i];
+ if ($orarendiHet == 0) { // most állítjuk be tanítási napnak, és nem rendelkeztek az órarendi hétről...
+ // kérdezzük le, hogy van-e másik munkatervben már megadott órarendi hét erre a napra
+ $q = "SELECT orarendiHet FROM nap WHERE dt='%s' AND orarendiHet<>0";
+ $v = array($dt);
+ $orarendiHet = db_query($q, array('fv' => 'munkatervModositas/hianyzoOrarendiHet','modul'=>'naplo', 'values'=>$v, 'result'=>'value'), $lr);
+ if ($orarendiHet === false) { db_rollback($lr); db_close($lr); return false; }
+ if (is_null($orarendiHet)) { // nincs beállítva órarendi hét --> legyen a $Hetek első eleme...
+ $orarendiHet = $Hetek[0];
+ }
+ }
+ } else {
+ // Ha nem tanítási nap, akkor nincs értelme órarendi hetet beállítani --> 0
+ $orarendiHet = 0;
+ }
+ if (
+ ($time >= strtotime($_TANEV['kezdesDt']) && $time <= strtotime($_TANEV['zarasDt']))
+ && ($tipus != 'tanítási nap' || count($Hetek) == 0 || in_array($orarendiHet, $Hetek))
+ ) {
+ $q = "UPDATE nap SET csengetesiRendTipus='%s',tipus='%s', megjegyzes='%s' WHERE dt='%s' AND munkatervId=%u";
+ $v = array($_csengetesiRendTipus, $tipus, $megjegyzes, $dt, $munkatervId);
+ $r = db_query($q, array('fv' => 'munkatervModositas/típus, megjegyzés', 'modul' => 'naplo', 'values' => $v), $lr);
+ if (!$r) { db_rollback($lr); db_close($lr); return(false); }
+ // Az órarendi hét módosítás mindig az összes munkatervet érinti!!
+ if ($orarendiHet != 0) {
+ $q = "UPDATE nap SET orarendiHet=%u WHERE dt='%s' AND tipus='tanítási nap'";
+ $v = array($orarendiHet, $dt);
+ } else {
+ $q = "UPDATE nap SET orarendiHet=%u WHERE dt='%s' AND munkatervId=%u";
+ $v = array($orarendiHet, $dt, $munkatervId);
+ }
+ $r = db_query($q, array('fv' => 'munkatervModositas/órarendiHét', 'modul' => 'naplo', 'values' => $v), $lr);
+ if (!$r) { db_rollback($lr); db_close($lr); return(false); }
+ } else {
+ $_SESSION['alert'][] = 'message:wrong_data:munkatervModositas:'.$dt.':'.$tipus.'/'.$orarendiHet;
+ }
+ }
+ db_commit($lr);
+ db_close($lr);
+ return true;
+
+ }
+
+ function munkatervOsztaly($ADAT) {
+
+ $r = array();
+ for ($i = 0; $i < count($ADAT['osztalyIds']); $i++) {
+
+ $osztalyId = $ADAT['osztalyIds'][$i];
+ $munkatervId = $ADAT['ujMunkatervIds'][$i];
+ $q = "UPDATE munkatervOsztaly SET munkatervId='%u' WHERE osztalyId=%u";
+ $v = array($munkatervId, $osztalyId);
+ $r[] = db_query($q, array('fv' => 'munkatervOsztaly', 'modul' => 'naplo', 'values' => $v));
+
+ }
+ return !in_array(false, $r);
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/tankorBlokk.php b/mayor-orig/www/include/modules/naplo/tanev/tankorBlokk.php
new file mode 100644
index 00000000..6b15bdeb
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/tankorBlokk.php
@@ -0,0 +1,277 @@
+<?php
+/*
+ Jó az, hogy egész évre nézzük a tankorBlokk ellenőrzéseket?
+ A tankorTanarFelvesz függvényben csak az érintett tol-ig határok kozott ellenőriztem... [bb]
+*/
+
+
+ function getTankorExportOraszamByTanev($tanev, $tankorIds = array(), $blokkId = '') {
+
+ $tanevDbNev = tanevDbNev(__INTEZMENY, $tanev);
+
+ $v = $WHERE = array(); $whereStr = '';
+ if (is_array($tankorIds) && count($tankorIds) > 0) {
+ $WHERE[] = 'tankorId IN ('.implode(',', array_fill(0, count($tankorIds), '%u')).')';
+ $v = $tankorIds;
+ }
+ if (isset($blokkId) && intval($blokkId) > 0) {
+ $WHERE[] = "blokkId != %u";
+ $v[] = intval($blokkId);
+ }
+ if (count($WHERE) > 0) $whereStr = "WHERE ".implode(' AND ', $WHERE);
+
+ $return = array();
+ // tankörök export óraszáma (az aktuális blokk kivételével)
+ $q = "SELECT tankorId, SUM(exportOraszam) AS exportOraszam FROM `%s`.tankorBlokk
+ LEFT JOIN `%s`.blokk USING (blokkId)
+ $whereStr GROUP BY tankorId";
+ array_unshift($v, $tanevDbNev, $tanevDbNev);
+ return db_query($q, array('fv' => 'getTankorExportOraszamByTanev', 'modul' => 'naplo', 'result' => 'keyvaluepair', 'keyfield' => 'tankorId', 'values' => $v), $lr);
+
+ }
+
+ function ujTankorBlokk($blokkNev, $exportOraszam, $tankorIds, $tanev='') {
+
+ global $_TANEV;
+
+ if (!is_array($tankorIds) || count($tankorIds)==0 || $blokkNev=='') {
+ $_SESSION['alert'][] = '::egy kötelező paraméter hiányzik!';
+ return false;
+ }
+
+ if ($tanev=='') {
+ $tanev = __TANEV;
+ $tanevAdat = $_TANEV;
+ } else {
+ $tanevAdat = getTanevAdat($tanev);
+ }
+
+ $tanevDbNev = tanevDbNev(__INTEZMENY, $tanev);
+
+ if (strtotime($tanevAdat['zarasDt']) < time()) {
+ $_SESSION['alert'][] = 'message:Elmúlt tanévre ne hozzunk létre tankörblokkot!';
+ return false;
+ }
+ if (time() < strtotime($tanevAdat['kezdesDt'])) {
+ $kezdesDt = $tanevAdat['kezdesDt'];
+ $kezdesDtPattern = "'%s'";
+ } else {
+ $kezdesDt = 'CURDATE()';
+ $kezdesDtPattern = '%s';
+ }
+ $zarasDt = $tanevAdat['zarasDt'];
+
+ /* Vizsgáljuk meg, hogy létrehozható-e a tankorBlokk
+ kizáró feltétel, ha egy diák beletartozik több csoportba HAVING count>2
+ */
+
+ $lr = db_connect('naplo', array('fv' => 'ujTankorBlokk'));
+
+ // Ellenőrzés - tankör - diákok
+ $q = "SELECT diakId,COUNT(DISTINCT tankorId) AS c FROM ".__INTEZMENYDBNEV.".tankorDiak
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= $kezdesDtPattern)
+ GROUP BY diakId HAVING c>1
+ ORDER BY tankorId,diakId";
+// AND jelenlet='kötelező'
+ /* Ez a függvény nem veszi figyelembe a felmentéseket! */
+
+ $_SESSION['alert'][] = 'info:!!!:ujTankorBlokk() felmentések';
+
+ $v = mayor_array_join($tankorIds, array($zarasDt, $kezdesDt));
+ $ret=db_query($q, array('fv' => 'ujTankorBlokk', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v));
+ if (count( $ret ) > 0) {
+ $_SESSION['alert'][] = 'message:wrong_data:ujTankorBlokk:Sikertelen. '.count($ret).' db ütköző diákot találtam!: diakId='.$ret[0]['diakId'].'...';
+ db_close($lr);
+ return false;
+ }
+
+ // Ellenőrzés - tankör - tanárok
+ $q = "SELECT tanarId,COUNT(DISTINCT tankorId) AS c FROM ".__INTEZMENYDBNEV.".tankorTanar
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= $kezdesDtPattern)
+ GROUP BY tanarId HAVING c>1
+ ORDER BY tankorId,tanarId";
+ $v = mayor_array_join($tankorIds, array($zarasDt, $kezdesDt));
+ $ret = db_query($q, array('fv' => 'ujTankorBlokk', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v));
+ if (count( $ret ) > 0) {
+ $_SESSION['alert'][] = 'message:wrong_data:ujTankorBlokk:Sikertelen. '.count($ret).' db ütköző tanárt találtam!:tanarId='.$ret[0]['tanarId'].'...';
+ db_close($lr);
+ return false;
+ }
+
+ // Ellenőrzés - óraszám
+ // tankörök export óraszáma (az aktuális blokk kivételével)
+ $tankorExportOraszam = getTankorExportOraszamByTanev($tanev, $tankorIds);
+ // tankörök óraszáma
+ $tankorOraszam = getTankorOraszamByTanev($tanev, $tankorIds);
+ foreach ($tankorIds as $index => $tankorId) {
+ if ($tankorOraszam[$tankorId] - $tankorExportOraszam[$tankorId] < $exportOraszam)
+ $exportOraszam = $tankorOraszam[$tankorId] - $tankorExportOraszam[$tankorId];
+ }
+ if ($exportOraszam < 0) $exportOraszam = 0;
+ db_start_trans($lr);
+
+ // Új felvétele
+ $q = "INSERT INTO `%s`.`blokk` (`blokkNev`, `exportOraszam`) VALUES ('%s', %f)";
+ $v = array($tanevDbNev, $blokkNev, $exportOraszam);
+
+ $blokkId = db_query($q, array('fv' => 'ujTankorBlokk', 'modul' => 'naplo_intezmeny', 'result' => 'insert', 'values' => $v, 'rollback' => true), $lr);
+ if ($blokkId === false) { db_close($lr); return false; }
+
+ // Tankörök hozzárendelése
+ $Val = array(); $v = array($tanevDbNev);
+ for ($i = 0; $i < count($tankorIds); $i++) {
+ $Val[] = "(%u, %u)";
+ array_push($v, $blokkId, $tankorIds[$i]);
+ }
+ $q = "INSERT INTO `%s`.tankorBlokk (blokkId,tankorId) VALUES ".implode(',', $Val);
+ $r = db_query($q, array('fv' => 'ujTankorBlokk', 'modul' => 'naplo_intezmeny', 'values' => $v, 'rollback' => true), $lr);
+ if (!$r) { db_close($lr); return false; }
+
+ db_commit($lr);
+ db_close($lr);
+ return true;
+
+ }
+
+ function tankorBlokkModositas($ADAT) {
+
+
+ if (!is_array($ADAT['tankorIds']) || count($ADAT['tankorIds'])==0 || $ADAT['blokkNev']=='') {
+ $_SESSION['alert'][] = '::egy kötelező paraméter hiányzik!(tbmod)';
+ return false;
+ }
+
+ if ($ADAT['tanev']=='') {
+ $tanev = __TANEV;
+ $tanevAdat = $_TANEV;
+ } else {
+ $tanev = $ADAT['tanev'];
+ $tanevAdat = getTanevAdat($tanev);
+ }
+
+ $tanevDbNev = tanevDbNev(__INTEZMENY, $tanev);
+
+ if (strtotime($tanevAdat['zarasDt']) < time()) {
+ $_SESSION['alert'][] = 'message:Elmúlt tanévre ne hozzunk létre tankörblokkot!';
+ return false;
+ }
+ $blokkId = $ADAT['blokkId'];
+ $tankorIds = $ADAT['tankorIds'];
+
+ $zarasDt = $tanevAdat['zarasDt'];
+ if (time() < strtotime($tanevAdat['kezdesDt'])) {
+ $kezdesDt = $tanevAdat['kezdesDt'];
+ $kezdesDtPattern = "'%s'";
+ } else {
+ $kezdesDt = 'CURDATE()';
+ $kezdesDtPattern = "%s";
+ }
+
+ $lr = db_connect('naplo');
+
+ // Ellenőrizzük a tankör tagokat - azonosak-e tankörönként
+ $q = "SELECT diakId,COUNT(DISTINCT tankorId) AS c FROM ".__INTEZMENYDBNEV.".tankorDiak
+ WHERE tankorId IN (".implode(',', array_fill(0, count($ADAT['tankorIds']), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= $kezdesDtPattern)
+ GROUP BY diakId HAVING c>1
+ ORDER BY tankorId,diakId";
+
+ $v = mayor_array_join($ADAT['tankorIds'], array($zarasDt, $kezdesDt));
+ $ret = db_query($q, array('fv' => 'tankorBlokkModositas', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v), $lr);
+ if (count( $ret ) > 0) {
+ $_SESSION['alert'][] = 'message:wrong_data:tankorBlokkModositas:Sikertelen. '.count($ret).' db ütköző diákot találtam!:diakId='.$ret[0]['diakId'].'...';
+ db_close($lr);
+ return false;
+ }
+
+ // Ellenőrizzük a tankör tanárokat - azonosak-e tankörönként
+ $q = "SELECT tanarId,COUNT(DISTINCT tankorId) AS c FROM ".__INTEZMENYDBNEV.".tankorTanar
+ WHERE tankorId IN (".implode(',', array_fill(0, count($ADAT['tankorIds']), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= $kezdesDtPattern)
+ GROUP BY tanarId HAVING c>1
+ ORDER BY tankorId,tanarId";
+ $v = mayor_array_join($ADAT['tankorIds'], array($zarasDt, $kezdesDt));
+ $ret = db_query($q, array('fv' => 'tankorBlokkModositas', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v), $lr);
+ if (count( $ret )>0) {
+ $_SESSION['alert'][] = 'message:wrong_data:tankorBlokkModositas:Sikertelen. '.count($ret).' db ütköző tanárt találtam!:blokkId='.$blokkId.':tanarId='.$ret[0]['tanarId'].'...';
+ db_close($lr);
+ return false;
+ }
+
+ // tankörök export óraszáma (az aktuális blokk kivételével)
+ $tankorExportOraszam = getTankorExportOraszamByTanev($tanev, $ADAT['tankorIds'], $blokkId);
+ // tankörök óraszáma
+ $tankorOraszam = getTankorOraszamByTanev($tanev, $ADAT['tankorIds']);
+ foreach ($ADAT['tankorIds'] as $index => $tankorId) {
+ if ($tankorOraszam[$tankorId] - $tankorExportOraszam[$tankorId] < $ADAT['exportOraszam']) {
+ $_SESSION['alert'][] = 'message:wrong_data:tankorId='.$tankorId.', óraszám='.$tankorOraszam[$tankorId].', export óraszám='.
+ intval($tankorExportOraszam[$tankorId]).', blokk óraszám='.$ADAT['exportOraszam'];
+ return false;
+ }
+ }
+
+ // Csoportnév és export óraszám módosítása
+ $q = "UPDATE `%s`.blokk SET blokkNev='%s',exportOraszam=%f WHERE blokkId=%u";
+ $v = array($tanevDbNev, $ADAT['blokkNev'], $ADAT['exportOraszam'], $ADAT['blokkId']);
+ db_query($q, array('fv' => 'tankorBlokkModositas', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ // SAFE:
+ db_start_trans($lr);
+
+ // Törlés
+ $q = "DELETE FROM `%s`.tankorBlokk WHERE blokkId=%u";
+ $v = array($tanevDbNev, $blokkId);
+ $r = db_query($q, array('fv' => 'tankorBlokkModositas/Delete', 'modul' => 'naplo_intezmeny', 'values' => $v, 'rollback' => true), $lr);
+ if ($r === false) { db_close($lr); return false; }
+ // Itt nem jó a commit, hisz még félben van a dolog - nem? // else db_commit($lr);
+
+ // Tankörök hozzárendelése
+ $v = array($tanevDbNev); $Val = array();
+ for ($i = 0; $i < count($tankorIds); $i++) {
+ $Val[] = "(%u, %u)";
+ array_push($v, $blokkId, $tankorIds[$i]);
+ }
+ if (count($Val) > 0) {
+ $q = "INSERT INTO `%s`.tankorBlokk (blokkId,tankorId) VALUES ".implode(',', $Val);
+ $r = db_query($q, array('fv' => 'tankorBlokkModositas/Insert', 'modul' => 'naplo_intezmeny', 'values' => $v, 'rollback' => true), $lr);
+ }
+
+ if ($r===false) { db_close($lr); return false; }
+
+ db_commit($lr);
+
+ db_close($lr);
+ return true;
+
+ }
+
+ function tankorBlokkTorles($ADAT) {
+
+ if ($ADAT['blokkId']=='') {
+ $_SESSION['alert'][] = '::egy kötelező paraméter hiányzik!';
+ return false;
+ }
+
+ if ($ADAT['tanev']=='') {
+ $tanev = __TANEV;
+ $tanevAdat = $_TANEV;
+ } else {
+ $tanev = $ADAT['tanev'];
+ $tanevAdat = getTanevAdat($tanev);
+ }
+
+ $tanevDbNev = tanevDbNev(__INTEZMENY, $tanev);
+
+ $blokkId=intval($ADAT['blokkId']);
+
+ $q = "DELETE FROM `%s`.blokk WHERE blokkId=%u";
+ $v = array($tanevDbNev, $blokkId);
+ $r = db_query($q, array('fv' => 'TankorBlokk|Delete', 'modul' => 'naplo_intezmeny', 'values' => $v, 'rollback'=>true), $lr);
+
+ return true;
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/tankorCsoport.php b/mayor-orig/www/include/modules/naplo/tanev/tankorCsoport.php
new file mode 100644
index 00000000..984726db
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/tankorCsoport.php
@@ -0,0 +1,164 @@
+<?php
+
+ function getTankorCsoportByTankorIds($tankorIds) {
+
+ $q = "SELECT csoportId,csoportNev,tankorId FROM csoport LEFT JOIN tankorCsoport USING (csoportId)
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")";
+ return db_query($q, array(
+ 'fv' => 'tankorCsoport', 'modul' => 'naplo', 'result' => 'multiassoc', 'keyfield' => 'csoportId', 'values' => $tankorIds
+ ));
+
+ }
+
+ function ujTankorCsoport($csoportNev, $tankorIds) {
+
+ global $_TANEV;
+ $dt = (time() <= strtotime($_TANEV['kezdesDt'])) ? "'".$_TANEV['kezdesDt']."'" : 'CURDATE()';
+
+ $lr = db_connect('naplo', array('fv' => 'ujTankorCsoport'));
+
+ // Ellenőrizzük, hogy a megadott tankörök még nem foglaltak
+ $q = "SELECT tankorId FROM ".__TANEVDBNEV.".tankorCsoport
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).") LIMIT 1";
+ $ret = db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $tankorIds), $lr);
+ if (count($ret) > 0) {
+ $_SESSION['alert'][] = 'message:utkozes:ujTankorCsoport:tankör ütközés';
+ db_close($lr);
+ return false;
+ }
+
+ // Ellenőrizzük a tankör tagokat - azonosak-e tankörönként
+ $q = "SELECT DISTINCT tankorId,diakId FROM ".__INTEZMENYDBNEV.".tankorDiak
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= '%s')
+ ORDER BY tankorId,diakId";
+ $v = mayor_array_join($tankorIds, array($dt, $dt));
+ $ret = db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ $tDiakok = array();
+ foreach ($tankorIds as $tankorId) $tDiakok[$tankorId] = array(); // különben az üres tankör nem jelennemeg az ellenőrzéskor!
+ for ($i = 0; $i < count($ret); $i++) {
+ $tDiakok[$ret[$i]['tankorId']][] = $ret[$i]['diakId'];
+ }
+ foreach ($tDiakok as $tankorId => $diakIds) {
+ if (is_array($elsoDiakIds)) {
+ if ($elsoDiakIds != $diakIds) {
+ $_SESSION['alert'][] = 'message:wrong_data:ujTankorCsoport:tankör tagok nem azonosak:(tankorId='.$tankorId.')';
+ db_close($lr);
+ return false;
+ }
+ } else {
+ $elsoDiakIds = $diakIds;
+ }
+ }
+
+ // Új csoport felvétele
+ $q = "INSERT INTO ".__TANEVDBNEV.".csoport (csoportNev) VALUES ('%s')";
+ $csoportId = db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'result' => 'insert', 'values' => array($csoportNev)), $lr);
+ if ($csoportId === false) { db_close($lr); return false; }
+
+ // Tankörök hozzárendelése
+ $v = $Val = array();
+ for ($i = 0; $i < count($tankorIds); $i++) {
+ $Val[] = "(%u, %u)";
+ array_push($v, $csoportId, $tankorIds[$i]);
+ }
+ $q = "INSERT INTO ".__TANEVDBNEV.".tankorCsoport (csoportId,tankorId) VALUES ".implode(',', $Val);
+ db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ _setMinMax($csoportId,$lr);
+
+ db_close($lr);
+ return true;
+
+ }
+
+ function tankorCsoportModositas($csoportId, $csoportNev, $tankorIds) {
+
+ global $_TANEV;
+ $dt = (time() <= strtotime($_TANEV['kezdesDt'])) ? "'".$_TANEV['kezdesDt']."'" : 'CURDATE()';
+
+ if (count($tankorIds) == 0) {
+ $_SESSION['alert'][] = 'message:wrong_data:tankorCsoportModositas/#0:nincs tankör';
+ return false;
+ }
+
+ $lr = db_connect('naplo');
+
+ // Ellenőrizzük, hogy a megadott tankörök még nem foglaltak
+ $q = "SELECT tankorId FROM ".__TANEVDBNEV.".tankorCsoport
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).") AND csoportId != %u LIMIT 1";
+ $v = mayor_array_join($tankorIds, array($csoportId));
+ $ret = db_query($q, array('fv' => 'tankorCsoportModositas/#1', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v), $lr);
+ if (count($ret) > 0) {
+ $_SESSION['alert'][] = 'message:utkozes:tankorCsoportModositas/#2:tankör ütközés';
+ db_close($lr);
+ return false;
+ }
+
+ // Ellenőrizzük a tankör tagokat - azonosak-e tankörönként
+ $q = "SELECT tankorId,diakId FROM ".__INTEZMENYDBNEV.".tankorDiak
+ WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).")
+ AND beDt <= '%s' AND (kiDt IS NULL OR kiDt >= '%s' )
+ ORDER BY tankorId,diakId";
+ $v = mayor_array_join($tankorIds, array($dt, $dt));
+ $ret = db_query($q, array('fv' => 'tankorCsoportModositas/#3', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v), $lr);
+ $tDiakok = array();
+ for ($i = 0; $i < count($ret); $i++) $tDiakok[$ret[$i]['tankorId']][] = $ret[$i]['diakId'];
+ foreach ($tankorIds as $index => $tankorId) {
+ $diakIds = $tDiakok[$tankorId];
+ if (is_array($elsoDiakIds)) {
+ if ($elsoDiakIds != $diakIds) {
+ $_SESSION['alert'][] = 'message:wrong_data:tankorCsoportModositas/#4:tankör tagok nem azonosak:(tankorId='.$tankorId.')';
+ db_close($lr);
+ return false;
+ }
+ } else {
+ $elsoDiakIds = $diakIds;
+ }
+ }
+
+ // Csoportnév módosítása
+ $q = "UPDATE ".__TANEVDBNEV.".csoport SET csoportNev = '%s' WHERE csoportId = %u";
+ $v = array($csoportNev, $csoportId);
+ db_query($q, array('fv' => 'tankorCsoportModositas', 'modul' => 'naplo', 'values' => $v));
+ // Régi csoporthozzárendelések törlése
+ $q = "DELETE FROM ".__TANEVDBNEV.".tankorCsoport WHERE csoportId = %u";
+ $v = array($csoportId);
+ db_query($q, array('fv' => 'tankorCsoportModositas', 'modul' => 'naplo', 'values' => $v));
+ // Tankörök hozzárendelése
+ $v = $Val = array();
+ for ($i = 0; $i < count($tankorIds); $i++) {
+ $Val[] = "(%u, %u)";
+ array_push($v, $csoportId, $tankorIds[$i]);
+ }
+ $q = "INSERT INTO ".__TANEVDBNEV.".tankorCsoport (csoportId,tankorId) VALUES ".implode(',', $Val);
+ db_query($q, array('fv' => 'tankorCsoportModositas/#5', 'modul' => 'naplo', 'values' => $v));
+
+ _setMinMax($csoportId,$lr);
+
+ db_close($lr);
+ return true;
+
+ }
+
+ function tankorCsoportTorles($csoportId, $tanev = __TANEV) {
+ $tanevDb = tanevDbNev(__INTEZMENY, $tanev);
+ $q = "DELETE FROM `%s`.csoport WHERE csoportId=%u";
+ $v = array($tanevDb, $csoportId);
+ db_query($q, array('fv' => 'tankorCsoportTorles', 'modul' => 'naplo', 'values' => $v));
+ }
+
+ function _setMinMax($csoportId,$lr) {
+
+ // Tankörcsoport minimum, maximum beállítás - legbővebb halmaz
+ $v = array($csoportId);
+ $q = ("SET @min= (SELECT MIN(min) FROM ".__INTEZMENYDBNEV.".tankor WHERE tankorId IN (SELECT DISTINCT tankorId FROM tankorCsoport WHERE csoportId=%u))");
+ db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'values' => $v), $lr);
+ $q = ("SET @max= (SELECT MAX(max) FROM ".__INTEZMENYDBNEV.".tankor WHERE tankorId IN (SELECT DISTINCT tankorId FROM tankorCsoport WHERE csoportId=%u))");
+ db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'values' => $v), $lr);
+ $q = "UPDATE ".__INTEZMENYDBNEV.".tankor SET min=@min, max=@max WHERE tankorId IN (SELECT DISTINCT tankorId FROM tankorCsoport WHERE csoportId=%u)";
+ db_query($q, array('fv' => 'ujTankorCsoport', 'modul' => 'naplo', 'values' => $v), $lr);
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/targyBontas.php b/mayor-orig/www/include/modules/naplo/tanev/targyBontas.php
new file mode 100644
index 00000000..5b31bdec
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/targyBontas.php
@@ -0,0 +1,240 @@
+<?php
+
+ function checkTargyBontas() {
+ // $q = "SELECT count(*) as db FROM bontasTankor"; ???
+ $q = "SELECT count(*) as db FROM kepzesTargyBontas";
+ $darab = db_query($q, array('fv'=>'checkTargyBontas','modul'=>'naplo','result'=>'value'));
+ return ($darab>0?TRUE:FALSE);
+ }
+
+ function getKepzesTargyBontasByOsztalyIds($osztalyIds) {
+
+ if (!is_array($osztalyIds) || count($osztalyIds)==0) return false;
+
+ // tankör- és óraszám adatok
+ $q = "SELECT bontasId, tankorId, hetiOraszam
+ FROM kepzesTargyBontas LEFT JOIN bontasTankor USING (bontasId)
+ WHERE osztalyId IN (".implode(',', array_fill(0, count($osztalyIds), '%u')).") AND tankorId IS NOT NULL
+ ORDER BY bontasId";
+ $r = db_query($q, array('fv'=>'getKepzesTargyBontasByOsztalyIds/2','modul'=>'naplo','result'=>'indexed','values'=>$osztalyIds));
+ foreach ($r as $a) $TO[$a['bontasId']][] = array('tankorId'=>$a['tankorId'], 'hetiOraszam'=>$a['hetiOraszam']);
+
+ // kepzesTargyBontas adatok
+ $q = "SELECT kepzesTargyBontas.*,sum(hetiOraszam) as hetiOraszam
+ FROM kepzesTargyBontas LEFT JOIN bontasTankor USING (bontasId)
+ WHERE osztalyId IN (".implode(',', array_fill(0, count($osztalyIds), '%u')).")
+ GROUP BY bontasId ORDER BY bontasId";
+ $r = db_query($q, array('fv'=>'getKepzesTargyBontasByOsztalyIds','modul'=>'naplo','result'=>'indexed','values'=>$osztalyIds));
+ if (!is_array($r)) return $r;
+ $return = array();
+ foreach ($r as $a) $return[$a['osztalyId']][$a['kepzesOratervId']][] = array(
+ 'bontasId' => $a['bontasId'],
+ 'targyId' => $a['targyId'],
+ 'hetiOraszam' => $a['hetiOraszam'],
+ 'tankor-oraszam'=>$TO[ $a['bontasId'] ]
+ );
+
+ return $return;
+
+ }
+
+ function kepzesOratervSorrend($evfolyamJel, $osztalyIds, $kepzesIds) {
+ // ez volt // group_concat(kepzesTargyBontas.targyId order by kepzesTargyBontas.targyId separator '-') as btStr
+
+ $q = "select
+ kepzesOratervId, tipus, targyNev, kepzesOraterv.targyId as targyId, kepzesOraterv.hetiOraszam as hetiOraszam, osztalyId, kepzesId, szemeszter,
+ group_concat(concat_ws('-',kepzesTargyBontas.targyId,tankorId,bontasTankor.hetiOraszam) order by kepzesTargyBontas.targyId,tankorId separator '_') as btStr
+ from kepzesOraterv
+ left join targy using (targyId)
+ left join kepzesOsztaly using (kepzesId)
+ left join ".__TANEVDBNEV.".kepzesTargyBontas using (kepzesOratervId, osztalyId)
+ left join ".__TANEVDBNEV.".bontasTankor using (bontasId)
+ where evfolyamJel='%s' and osztalyId in (".implode(',', array_fill(0, count($osztalyIds), '%u')).")
+ and kepzesId in (".implode(',', array_fill(0, count($kepzesIds), '%u')).")
+ group by kepzesOratervId, tipus, kepzesOraterv.targyId, kepzesOraterv.hetiOraszam, osztalyId, kepzesId, szemeszter
+ order by tipus, targyNev, kepzesOraterv.targyId, kepzesOraterv.hetiOraszam, btStr, osztalyId, szemeszter";
+ $v = mayor_array_join(array($evfolyamJel), $osztalyIds, $kepzesIds);
+ $ret = db_query($q, array('fv'=>'kepzesOratervSorrend','modul'=>'naplo_intezmeny','result'=>'indexed','values'=>$v));
+ return reindex($ret, array('tipus','targyId','hetiOraszam','btStr'));
+ }
+
+ function addBontas($osztalyId, $kepzesOratervId, $targyId=null, $olr=null) {
+
+ // is_resource mysqli esetén nem jó (object)
+ if (!$olr) $lr = db_connect('naplo_intezmeny', array('fv'=>'addBontas'));
+ else $lr = $olr;
+
+ if ($targyId == '') {
+ $q = "SELECT targyId FROM kepzesOraterv WHERE kepzesOratervId=%u";
+ $targyId = db_query($q, array('fv'=>'addBontas','modul'=>'naplo_intezmeny','result'=>'value','values'=>array($kepzesOratervId)), $lr);
+ }
+ if ($targyId == '') return false;
+
+ $q = "INSERT INTO ".__TANEVDBNEV.".kepzesTargyBontas (osztalyId, kepzesOratervId, targyId) VALUES (%u, %u, %u)";
+ $bontasId = db_query($q, array('fv'=>'addBontas/insert','modul'=>'naplo','result'=>'insert','values'=>array($osztalyId,$kepzesOratervId,$targyId)), $lr);
+
+ // is_resource mysqli esetán nem jó (object)
+ if (!$olr) db_close();
+
+ return array(
+ 'targyId' => $targyId,
+ 'osztalyId' => $osztalyId,
+ 'kepzesOratervId' => $kepzesOratervId,
+ 'bontasId' => $bontasId
+ );
+
+ }
+
+ function delBontas($bontasIds) {
+ if (!is_array($bontasIds) || count($bontasIds) == 0) return false;
+ $q = "DELETE FROM kepzesTargyBontas WHERE bontasId IN (".implode(',', array_fill(0, count($bontasIds), '%u')).")";
+ $r = db_query($q, array('fv'=>'delBontas','modul'=>'naplo','values'=>$bontasIds));
+ if ($r) return $bontasIds;
+ else return $r;
+ }
+
+ function initFromLastYear() {
+ // Csak akkor lehet init, ha még nincs bent egyetlen bontás sem az adott kepzes-osztály párokhoz
+ $q = "select count(*) from kepzesTargyBontas";
+ $db = db_query($q, array('fv'=>'kepzesTargyBontasInit/0','modul'=>'naplo','result'=>'value','values'=>$v));
+ if ($db > 0) return true;
+
+ $lr = db_connect('naplo_intezmeny', array('fv'=>'initFromLastYear'));
+ // is_resource mysqli esetén nem jó (object)
+ if (!$lr) return false;
+
+ $elozoTanevDb = tanevDbNev(__INTEZMENY,__TANEV-1);
+ // ha nincs előző tanév, akkor kész az init
+ $q = "SELECT COUNT(SCHEMA_NAME) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '%s'";
+ $v = array($elozoTanevDb);
+ $db = db_query($q, array('fv'=>'kepzesTargyBontasInit/0.5','modul'=>'naplo','result'=>'value','values'=>$v));
+ if ($db == 0) return true;
+
+ set_time_limit(300);
+
+ // Az előző év bontásai alapján
+ /*
+ Lekérdezzük az előző év bontásainak adatait, melyek az adott kepzes-osztály párhoz tartoztak.
+ bontasId szerint rendezünk, hogy egy bontást csak egyszer vegyünk fel.
+ */
+ $q = "select kepzesOratervId,osztalyId,kepzesOraterv.targyId as koTargyId,kepzesTargyBontas.targyId as bontasTargyId,
+ tankorId,bontasTankor.hetiOraszam as bontasOraszam, bontasId,
+ kepzesId,evfolyamJel,szemeszter,kepzesOraterv.hetiOraszam as koOraszam,tipus
+ from ".$elozoTanevDb.".kepzesTargyBontas
+ left join ".$elozoTanevDb.".bontasTankor using (bontasId)
+ left join kepzesOraterv using (kepzesOratervId)
+ order by bontasId";
+ $r1 = db_query($q, array('fv'=>'kepzesTargyBontasInit/1','modul'=>'naplo_intezmeny','result'=>'indexed'), $lr);
+
+ $elozoTavalyiBontasId = '';
+ foreach ($r1 as $r1Adat) {
+ // Ha van a tavalyinak megfelelő képzés-óraterv bejegyzés, akkor hozzunk létre neki bontást
+ if ($r1Adat['tipus'] == 'mintatantervi') {
+ $q = "select kepzesOraterv.*,oraszam from kepzesOraterv
+ left join tankorSzemeszter on tankorSzemeszter.szemeszter=kepzesOraterv.szemeszter and tanev=".__TANEV." and tankorId=%u
+ where kepzesId=%u and kepzesOraterv.szemeszter=%u
+ and tipus='%s' and kepzesOraterv.targyId=%u
+ and kepzesOraterv.evfolyamJel='".getKovetkezoEvfolyamJel($r1Adat['evfolyamJel'])."'
+ ";
+ $v = array($r1Adat['tankorId'], $r1Adat['kepzesId'], $r1Adat['szemeszter'], $r1Adat['tipus'], $r1Adat['koTargyId']);
+ } else {
+ $q = "select * from kepzesOraterv
+ left join tankorSzemeszter on tankorSzemeszter.szemeszter=kepzesOraterv.szemeszter and tanev=".__TANEV." and tankorId=%u
+ where kepzesId=%u and kepzesOraterv.szemeszter=%u
+ and tipus='%s' and kepzesOraterv.targyId is null
+ and kepzesOraterv.evfolyamJel='".getKovetkezoEvfolyamJel($r1Adat['evfolyamJel'])."'
+ ";
+ $v = array($r1Adat['tankorId'], $r1Adat['kepzesId'], $r1Adat['szemeszter'], $r1Adat['tipus'], );
+ }
+ $r2 = db_query($q, array('fv'=>'kepzesTargyBontasInit/2','modul'=>'naplo_intezmeny','result'=>'record','values'=>$v), $lr);
+ /*
+ - Lehet az eredmény üres, ha nincs a képzés óratervben idén folytatása a tárgynak/típusnak
+ */
+ if (!is_array($r2)) continue;
+ /*
+ - Amúgy csak egy rekord lehet... - ekkor a bontást létrehozhatjuk, ha az előző rekord nem ugyanehhez a bontáshoz tartozott...
+ (a hozzárendelt tankört csak akkor vesszük figyelembe, ha egy van belőle...)
+ */
+ if ($elozoTavalyiBontasId != $r1Adat['bontasId']) {
+ $r3 = addBontas($r1Adat['osztalyId'], $r2['kepzesOratervId'], $r1Adat['bontasTargyId'], $lr);
+ $bontasId = $r3['bontasId'];
+ $elozoTavalyiBontasId = $r1Adat['bontasId'];
+ }
+
+ if (($r1Adat['tankorId'] != '') && ($r1Adat['bontasOraszam'] == $r1Adat['koOraszam']) && ($r2['hetiOraszam'] == $r2['oraszam'])) {
+ /*
+ Ha a tavalyi tankör idei évhez is hozzá van rendelve...
+ és tavaly megegyezett a tankör óraszáma a bontás óraszámával...
+ a tankör idei óraszáma is megegyezik a bontás/képzés-oraterv óraszámával,
+ akkor a tankör is hozzárendelhető
+ */
+ $r4 = bontasTankor(array($bontasId), $r1Adat['tankorId'], $r2['hetiOraszam'], $lr);
+ if (!$r4) {} // hibakezelés??
+ }
+ }
+ db_close($lr);
+ return true;
+ }
+
+ function kepzesTargyBontasInit($osztalyIds, $kepzesIds) {
+
+ // A megadott osztaly megadott képzéseinek aktuális évfolyamának tantárgyhoz tartozó kepzesOraterv bejegyzéseihez felveszünk egy-egy bontást - ha még nincs
+ $q = "insert into ".__TANEVDBNEV.".kepzesTargyBontas (osztalyId, kepzesOratervId, targyId)
+ select osztalyId, kepzesOratervId, kepzesOraterv.targyId as targyId
+ from kepzesOraterv left join kepzesOsztaly using(kepzesId)
+ left join ".__TANEVDBNEV.".osztalyNaplo using (osztalyId)
+ left join ".__TANEVDBNEV.".kepzesTargyBontas using (osztalyId, kepzesOratervId)
+ where osztalyId in (".implode(',', array_fill(0, count($osztalyIds), '%u')).")
+ and kepzesId in (".implode(',', array_fill(0, count($kepzesIds), '%u')).")
+ and kepzesOraterv.evfolyamJel=osztalyNaplo.evfolyamJel
+ and bontasId is null and kepzesOraterv.targyId is not null";
+ $v = mayor_array_join($osztalyIds, $kepzesIds);
+ return db_query($q, array('fv'=>'kepzesTargyBontasInit','modul'=>'naplo_intezmeny','result'=>'affected rows','values'=>$v));
+
+ }
+
+ function bontasTankor($bontasIds, $tankorId, $hetiOraszam, $olr = null) {
+
+ if (!is_array($bontasIds) || count($bontasIds) == 0 || $tankorId == '' || $hetiOraszam <= 0) {
+ $_SESSION['alert'][] = 'message:empty_field:bontasTankor';
+ return false;
+ }
+ // is_resource mysqli esetén nem jó (object)
+ if (!$olr) $lr = db_connect('naplo_intezmeny', array('fv'=>'bontasTankor'));
+ else $lr = $olr;
+
+ db_start_trans($lr);
+ $ok=true;
+ /*
+ Óraszám ellenőrzés - kellene itt is?
+ - tankör óraszáma: tankorBontás óraszám <= tankorSzemeszer óraszám
+ - bontás óraszáma: bontás-óraszám <= kepzesOraterv óraszám
+ - tipus szerint a tankörnek csak egyféle óraszáma lehet
+ */
+
+ // Tankor-osztály hozzárendelés
+ $q = "insert into ".__INTEZMENYDBNEV.".tankorOsztaly (tankorId, osztalyId)
+ select distinct %u as tankorId, kepzesTargyBontas.osztalyId as osztalyId from ".__TANEVDBNEV.".kepzesTargyBontas
+ left join ".__INTEZMENYDBNEV.".tankorOsztaly on kepzesTargyBontas.osztalyId=tankorOsztaly.osztalyId and tankorId=%u
+ where bontasId in (".implode(',', array_fill(0, count($bontasIds), '%u')).") and tankorId is null";
+ $v = $bontasIds; array_unshift($v, $tankorId, $tankorId);
+ $r = db_query($q, array('fv'=>'bontasTankor/1','modul'=>'naplo','result'=>'affected rows','values'=>$v), $lr);
+ if ($r === false) { db_rollback($lr, 'tankör-osztály hozzárendelés'); if ($olr) db_close($lr); return false; } // is_resource mysqli esetén nem jó (object)
+ // bontasTankor rögzítése
+ foreach ($bontasIds as $bontasId) {
+ $q = "insert into ".__TANEVDBNEV.".bontasTankor (bontasId, tankorId, hetiOraszam) values (%u, %u, %f)";
+ $v = array($bontasId, $tankorId, $hetiOraszam);
+ $r = db_query($q, array('fv'=>'bontasTankor/bt','modul'=>'naplo','values'=>$v), $lr);
+ if ($r === false) { db_rollback($lr, 'tankörnév hozzárendelés'); if (!$olr) db_close($lr); return false; } // is_resource mysqli esetén nem jó (object)
+ }
+ db_commit($lr);
+
+ $r1 = setTankorNev($tankorId, $tankorNevExtra=null, $lr);
+ // is_resource mysqli esetén nem jó (object)
+ if (!$olr) db_close($lr);
+
+ return $r1;
+ }
+
+
+?> \ No newline at end of file
diff --git a/mayor-orig/www/include/modules/naplo/tanev/targyOraszam.php b/mayor-orig/www/include/modules/naplo/tanev/targyOraszam.php
new file mode 100644
index 00000000..d17958d0
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/targyOraszam.php
@@ -0,0 +1,28 @@
+<?php
+
+ function getTargyOraszam($tanev=__TANEV,$targyId='') {
+
+ $q = "SELECT SUM(oraszam)/(SELECT MAX(szemeszter) FROM szemeszter WHERE tanev=%u) AS db, targyNev FROM tankorSzemeszter LEFT JOIN tankor USING (tankorId)
+ LEFT JOIN targy USING (targyId)
+ WHERE tanev=%u GROUP BY targyid ORDER BY targyNev";
+ $v = array($tanev, $tanev);
+ $R = db_query($q, array('fv' => 'getTargyOraszam', 'modul' => 'naplo_intezmeny', 'result' => 'assoc', 'keyfield' => 'targyNev', 'values' => $v));
+
+ foreach($R as $_tankorId => $D) {
+ $R[$_tankorId]['tankorTanar'] = getTankorTanarai($tankorId);
+ }
+
+ return $R;
+
+ }
+
+ function getTargyOraszamEvfolyamonkent($tanev=__TANEV) {
+
+ $q = "SELECT SUM(oraszam)/(SELECT MAX(szemeszter) FROM szemeszter WHERE tanev=%u) AS db, targyNev FROM tankorSzemeszter
+ LEFT JOIN tankor USING (tankorId) LEFT JOIN targy USING (targyId) WHERE tanev=%u GROUP BY targyid ORDER BY targyNev";
+ $v = array($tanev, $tanev);
+ return db_query($q, array('fv' => 'getTargyOraszamEvfolyamonkent', 'modul' => 'naplo_intezmeny', 'result' => 'assoc', 'keyfield' => 'targyNev', 'values' => $v));
+
+ }
+
+?>
diff --git a/mayor-orig/www/include/modules/naplo/tanev/vegzosOrarendLezaras.php b/mayor-orig/www/include/modules/naplo/tanev/vegzosOrarendLezaras.php
new file mode 100644
index 00000000..b7f9acd0
--- /dev/null
+++ b/mayor-orig/www/include/modules/naplo/tanev/vegzosOrarendLezaras.php
@@ -0,0 +1,33 @@
+<?php
+
+ /*
+ A megadott osztályokhoz - és csak azokhoz - rendelt tankörök listája
+ */
+ //function getTankorByOsztalyIds($osztalyIds, $tanev = __TANEV) { //MOVED to SHARE libs
+
+ function vegzosOrarendLezaras($ADAT) {
+
+ // A lezárási dátum utáni bejegyzések törlése
+ $q = "DELETE FROM orarendiOra WHERE tolDt >= '%s' AND (tanarId,osztalyJel,targyJel) IN (
+ SELECT tanarId,osztalyJel,targyJel FROM orarendiOraTankor WHERE tankorId IN (".implode(',', array_fill(0, count($ADAT['vegzosTankor']), '%u')).")
+ )";
+ $v = mayor_array_join(array($ADAT['dt']), $ADAT['vegzosTankor']);
+ db_query($q, array('fv' => 'vegzosOrarendLezarads', 'modul' => 'naplo', 'values' => $v));
+
+ // A lezárás dátuma után végződő bejegyzáések igDt-inek beállítása
+ $q = "UPDATE orarendiOra LEFT JOIN orarendiOraTankor USING (tanarId,osztalyJel,targyJel) SET igDt=('%s' - INTERVAL 1 DAY)
+ WHERE tankorId IN (".implode(',', array_fill(0, count($ADAT['vegzosTankor']),'%u')).") AND igDt > '%s'";
+ $v = mayor_array_join(array($ADAT['dt']), $ADAT['vegzosTankor'], array($ADAT['dt']));
+ db_query($q, array('fv' => 'vegzosOrarendLezarads', 'modul' => 'naplo', 'values' => $v));
+
+ }
+
+ function vegzosHaladasiNaploLezaras($ADAT) {
+
+ $q = "DELETE FROM ora WHERE dt >= '%s' AND tankorId IN (".implode(',', array_fill(0, count($ADAT['vegzosTankor']), '%u')).")";
+ $v = mayor_array_join(array($ADAT['dt']), $ADAT['vegzosTankor']);
+ db_query($q, array('fv' => 'vegzosHaladasiNaploLezarads', 'modul' => 'naplo', 'values' => $v));
+
+ }
+
+?>