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 --- .../modules/naplo/osztalyozo/bizonyitvany.php | 134 +++++++++++ .../www/include/modules/naplo/osztalyozo/diak.php | 106 +++++++++ .../include/modules/naplo/osztalyozo/dolgozat.php | 123 ++++++++++ .../www/include/modules/naplo/osztalyozo/stat.php | 249 +++++++++++++++++++++ .../modules/naplo/osztalyozo/szempontRendszer.php | 56 +++++ .../modules/naplo/osztalyozo/szovegesErtekeles.php | 67 ++++++ .../include/modules/naplo/osztalyozo/tankor.php | 205 +++++++++++++++++ .../modules/naplo/osztalyozo/targySorrend.php | 55 +++++ .../include/modules/naplo/osztalyozo/vizsga.php | 136 +++++++++++ 9 files changed, 1131 insertions(+) create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/bizonyitvany.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/diak.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/dolgozat.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/stat.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/szempontRendszer.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/szovegesErtekeles.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/tankor.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/targySorrend.php create mode 100644 mayor-orig/www/include/modules/naplo/osztalyozo/vizsga.php (limited to 'mayor-orig/www/include/modules/naplo/osztalyozo') diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/bizonyitvany.php b/mayor-orig/www/include/modules/naplo/osztalyozo/bizonyitvany.php new file mode 100644 index 00000000..1df529a4 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/bizonyitvany.php @@ -0,0 +1,134 @@ + 'getDiakBizonyitvany', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => array($diakId))); + $ret = array('tanevek' => array(), 'szemeszterek' => array(), 'tanevSzemeszterei' => array(), 'jegyek' => array()); + if (is_array($ret)) foreach ($r as $i => $jegy) { + $ret['jegyek'][$jegy['targyId']][$jegy['tanev']][$jegy['szemeszter']][] = $jegy; + $ret['jegyekEvfolyamonkent'][$jegy['evfolyam']][$jegy['szemeszter']][] = $jegy; + if (!in_array($jegy['tanev'], $ret['tanevek'])) { + $ret['tanevek'][] = $jegy['tanev']; + $ret['tanevSzemeszterei'][$jegy['tanev']] = array(); + } + if (!in_array($jegy['szemeszter'], $ret['tanevSzemeszterei'][$jegy['tanev']])) { + $ret['szemeszterek'][] = array('tanev' => $jegy['tanev'], 'szemeszter' => $jegy['szemeszter']); + $ret['tanevSzemeszterei'][$jegy['tanev']][] = $jegy['szemeszter']; + } + } + } else { + // Adott szemeszter tárgyainak + $ret['targyak'] = getTargyakByDiakIds(array($diakId), $ADAT['szemeszterAdat'], $osztalyId, $sorrendNev, array('result' => 'assoc', 'keyfield' => 'targyId')); + // Adott szemeszter zárójegyeinek lekérdezése + if (isset($sorrendNev) && $sorrendNev != '') { + $q = "SELECT *,zaroJegy.targyId FROM zaroJegy + LEFT JOIN targy USING (targyId) + LEFT JOIN ".__TANEVDBNEV.".targySorszam + ON zaroJegy.targyId = targySorszam.targyId AND osztalyId=%u AND sorrendNev='%s' + LEFT JOIN szemeszter ON kezdesDt=(SELECT MAX(kezdesDt) FROM szemeszter WHERE kezdesDt<=hivatalosDt) + WHERE diakId=%u AND tanev=%u AND szemeszter=%u ORDER BY sorszam,targyNev"; + $v = array($osztalyId, $sorrendNev, $diakId, $tanev, $szemeszter); + } else { + $q = "SELECT *,zaroJegy.targyId FROM zaroJegy LEFT JOIN targy USING (targyId) + WHERE diakId=%u AND tanev=%u AND szemeszter=%u ORDER BY targyNev"; + $v = array($diakId, $tanev, $szemeszter); + } + $r = db_query($q, array( + 'fv' => 'getDiakBizonyitvany', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v + )); + + if (is_array($r)) foreach ($r as $i => $jegy) { + $ret['jegyek'][$jegy['targyId']][] = $jegy; +// $ret['jegyekEvfolyamonkent'][$jegy['evfolyam']][$jegy['szemeszter']][] = $jegy; + } + + $utolsoTanitasiNap = getOsztalyUtolsoTanitasiNap($osztalyId); + // éves óraszámok lekérdezése - tárgyanként + $q = "SELECT targyId,oraszam FROM tankorDiak LEFT JOIN tankorSzemeszter USING (tankorId) LEFT JOIN tankor USING (tankorId) + WHERE diakId=%u AND tanev=%u AND beDt<='%s' AND (kiDt IS NULL OR '%s'<=kiDt)"; + //$v = array($diakId, $tanev, $ADAT['szemeszterAdat']['zarasDt'], $ADAT['szemeszterAdat']['zarasDt']); + $v = array($diakId, $tanev, $utolsoTanitasiNap, $utolsoTanitasiNap); + $jres = db_query($q, array( + 'fv' => 'getDiakBizonyitvany/óraszám', 'modul' => 'naplo_intezmeny', 'result' => 'multiassoc', 'keyfield' => 'targyId', 'values' => $v + )); + + $szDb = $ADAT['szemeszterAdat']['tanevAdat']['maxSzemeszter']; // Feltételezzük, hogy a szemeszterek számozása 1-től indul és folyamatos + foreach ($jres as $targyId => $tAdat) { + $oraszam = 0; + for ($i = 0; $i < count($tAdat); $i++) { + $oraszam += $tAdat[$i]['oraszam']; + } + $ret['targyOraszam'][$targyId]['hetiOraszam'] = $oraszam / $szDb; + /* + A TANITASI_HETEK_SZAMA a diák (egyik) osztályához rendelt munkaterv alapján van meghatározva - így + csak az aktuális tanévben (__TANEV) van értelme. Ha több osztálya is van a tanulónak, akkor problémás... + */ + if (defined('TANITASI_HETEK_SZAMA')) $ret['targyOraszam'][$targyId]['evesOraszam'] = $oraszam / $szDb * TANITASI_HETEK_SZAMA; + } + } + return $ret; + } + + function getHianyzasOsszesitesByDiakId($diakId, $szemeszterAdat = '') { // DEPRECATED. a függvény helyett a share/hianyzas.php getDiakHianyzasOsszesites() - t használd! + + $ret = array(); + if (is_array($szemeszterAdat)) { + // Egy szemeszter hiányzási adatainak lekérdezése + if ($szemeszterAdat['statusz'] == 'aktív') { + // Folyó tanév - a tanév adatbázisból kérdezünk le + $Wnemszamit = defWnemszamit(); + $q = "SELECT tankorTipus.jelleg, + COUNT(IF(tipus='hianyzas' AND statusz='igazolt',1,NULL)) AS igazolt, + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan',1,NULL)) AS igazolatlan, + SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)) AS kesesPercOsszeg + FROM `%s`.hianyzas " . + $Wnemszamit['join'] . + "WHERE ( + tipus = 'hiányzás' OR (tipus='késés' AND statusz='igazolatlan' AND perc IS NOT NULL) + ) AND dt<='%s' AND diakId=%u". + $Wnemszamit['nemszamit'] + ." GROUP BY tankorTipus.jelleg" + ; + $v = array(tanevDbNev(__INTEZMENY, $szemeszterAdat['tanev']), $szemeszterAdat['zarasDt'], $diakId); + $ret = db_query($q, array('fv' => 'getDiakHianyzasOsszesitesByDiakId', 'modul' => 'naplo_intezmeny', 'result' => 'assoc', 'keyfield'=>'jelleg', 'values' => $v)); + if (is_array($ret)) + foreach ($ret as $_key=>$_val) { + $ret['igazolt'] += intval($ret[$_key]['igazolt']); + $ret['igazolatlan'] += intval($ret[$_key]['igazolatlan']); + } + + $hozottHianyzas = getDiakHozottHianyzas($diakId, array('tanev'=> $szemeszterAdat['tanev'], 'igDt'=>$szemeszterAdat['zarasDt'] )); + $ret['igazolt'] += intval($hozottHianyzas['igazolt']['db']); + $ret['igazolatlan'] += intval($hozottHianyzas['igazolatlan']['db']); + + } else { + // lezárt tanév - az intézmény adatbázisból kérdezünk le +// Tudtommal az összesítésbe már csak a "beszámítandó" hiányzások kerülnek, így nem kell plusz feltétel... [bb - 2010-11-24] +// $q = "SELECT * FROM hianyzasOsszesites WHERE diakId=%u AND tanev=%u AND szemeszter=%u $Wnemszamit"; + $q = "SELECT * FROM hianyzasOsszesites WHERE diakId=%u AND tanev=%u AND szemeszter=%u"; + $v = array($diakId, $szemeszterAdat['tanev'], $szemeszterAdat['szemeszter']); + $ret = db_query($q, array('fv' => 'getDiakHianyzasOsszesitesByDiakId', 'modul' => 'naplo_intezmeny', 'result' => 'record', 'values' => $v)); + } + + } else { + // A diák összes hiányzási adata ?????????????? + // ??????????????????????????? // ??????????????????????????? + $q = "SELECT * FROM hianyzasOsszesites WHERE diakId=%u ORDER BY tanev,szemeszter"; + $r = db_query($q, array('fv' => 'getDiakHianyzasOsszesitesByDiakId', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => array($diakId))); + for ($i = 0; $i < count($r); $i++) $ret[$r[$i]['tanev']][$r[$i]['szemeszter']] = $r[$i]; + } + return $ret; + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/diak.php b/mayor-orig/www/include/modules/naplo/osztalyozo/diak.php new file mode 100644 index 00000000..be285f8b --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/diak.php @@ -0,0 +1,106 @@ +'1:1:1:1:1:1'), $olr = '') { + + global $_TANEV, $KOVETELMENY; + + if ($olr == '') $lr = db_connect('naplo'); + else $lr = $olr; + + if (isset($SET['sulyozas']) && $SET['sulyozas']!='') { + $suly = explode(':',':'.$SET['sulyozas']); + } else { + if (defined('__DEFAULT_SULYOZAS')) $suly = explode(':',':'.__DEFAULT_SULYOZAS); + else $suly = array(1,1,1,1,1,1); + } + $q = "SELECT DISTINCT jegyId, tankorId, tankorNev, dt, jegy, jegyTipus, tipus, oraId, dolgozatId, megjegyzes, IF (modositasDt='0000-00-00 00:00:00',dt,modositasDt) AS modositasDt + FROM jegy LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId) + WHERE tipus <> 0 AND tanev=".__TANEV." AND diakId=%u + ORDER BY dt, jegyId"; + $v = array($diakId); + $jegyAdatok = db_query($q, array('fv' => 'getDiakJegyek', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'jegyId', 'values' => $v), $lr); + + $tankorIds = getTankorByDiakId($diakId, __TANEV, array('csakId' => true, 'tolDt' => '', 'igDt' => ''), $lr); + + if (is_array($jegyAdatok)) + foreach ($jegyAdatok as $jegyId => $jegyAdat) { + if (!in_array($jegyAdat['tankorId'], $tankorIds)) $tankorIds[] = $jegyAdat['tankorId']; + } + if (is_array($tankorIds) && count($tankorIds) > 0) { + $q = "SELECT tankorId, targyId, targyNev FROM ".__INTEZMENYDBNEV.".tankor + LEFT JOIN ".__INTEZMENYDBNEV.".targy USING (targyId) + WHERE tankorId IN (".implode(',', array_fill(0, count($tankorIds), '%u')).") + ORDER BY targyNev"; + $tankorTargyak = db_query($q, array( + 'fv' => 'getDiakJegyek', 'modul' => 'naplo', 'result' => 'assoc', 'keyfield' => 'tankorId', 'values' => $tankorIds + ), $lr); + if (!is_array($tankorTargyak)) $tankorTargyak = array(); + } else { $tankorTargyak = array(); } + $targyJegyei = array(); + foreach ($tankorTargyak as $tankorId => $tAdat) { + $targyId = $tAdat['targyId']; $targyNev = $tAdat['targyNev']; + if (!is_array($targyJegyei[$targyId])) $targyJegyei[$targyId] = array('targyNev' => $targyNev); + } + foreach ($jegyAdatok as $jegyId => $jegyAdat) { + $tankorId = $jegyAdat['tankorId']; + $targyId = $tankorTargyak[$tankorId]['targyId']; + //$targyNev = $tankorTargyak[$tankorId]['targyNev']; + list($ev,$ho,$nap) = explode('-',$jegyAdat['dt']); + $targyJegyei[$targyId][$ev][$ho][] = $jegyId; + if ( + in_array($jegyAdat['jegyTipus'],array('jegy','féljegy')) + || $KOVETELMENY[ $jegyAdat['jegyTipus'] ]['átlagolható'] === true + ) { + $targyJegyei[$targyId]['osszeg'] += $jegyAdat['jegy']*$suly[$jegyAdat['tipus']]; + $targyJegyei[$targyId]['db'] += $suly[$jegyAdat['tipus']]; + } + } + foreach ($targyJegyei as $targyId => $targyAdat) + if ($targyJegyei[$targyId]['db'] != 0) + $targyJegyei[$targyId]['atlag'] = number_format($targyJegyei[$targyId]['osszeg'] / $targyJegyei[$targyId]['db'],2,',',''); + + // Bizonyítvány + // kikerült innen... + + // Dolgozatok lekérdezése + $dolgozatAdat = getTankorDolgozatok($tankorIds, ($csakTervezett = false)); + // Nem megírt dolgozatok lekérdezése + if (is_array($dolgozatAdat['dolgozatIds']) && count($dolgozatAdat['dolgozatIds']) > 0) { + $q = "SELECT dolgozat.dolgozatId, bejelentesDt, dolgozatNev FROM dolgozat LEFT JOIN jegy ON dolgozat.dolgozatId=jegy.dolgozatId AND diakId=%u + WHERE dolgozat.dolgozatId IN (".implode(',', array_fill(0, count($dolgozatAdat['dolgozatIds']), '%u')).") + AND diakId IS NULL ORDER BY bejelentesDt"; + $v = mayor_array_join(array($diakId), $dolgozatAdat['dolgozatIds']); + $nemMegirtDolgozat = db_query($q, array('fv' => 'getDiakJegyek/nem megírt dolgozat', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v)); + } else { + $nemMegirtDolgozat = array(); + } + $targyHianyzoDolgozatai = array(); + for ($i = 0; $i < count($nemMegirtDolgozat); $i++) { + $dolgozatId = $nemMegirtDolgozat[$i]['dolgozatId']; + $tankorId = $dolgozatAdat[$dolgozatId]['tankor'][0]['tankorId']; + $targyId = $tankorTargyak[$tankorId]['targyId']; + //$targyNev = $tankorTargyak[$tankorId]['targyNev']; + list($ev,$ho,$nap) = explode('-',$nemMegirtDolgozat[$i]['bejelentesDt']); + $targyHianyzoDolgozatai[$targyId][$ev][$ho][] = $dolgozatId; + } + /* -------------- */ + + if ($olr == '') db_close($lr); + $ret = array( + 'jegyek' => $jegyAdatok, 'targyak' => $targyJegyei, + 'dolgozat' => $dolgozatAdat, 'hianyzoDolgozatok' => $targyHianyzoDolgozatai + ); + + return $ret; + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/dolgozat.php b/mayor-orig/www/include/modules/naplo/osztalyozo/dolgozat.php new file mode 100644 index 00000000..f38bb1b1 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/dolgozat.php @@ -0,0 +1,123 @@ + 'getDolgozat')); + else $lr = $olr; + + $v = array($dolgozatId); + // A dolgozat alapadatai + $q = "SELECT * FROM dolgozat WHERE dolgozatId=%u"; + $Dolgozat = db_query($q, array('fv' => 'getDolgozat', 'modul' => 'naplo', 'values' => $v, 'result' => 'record'), $lr); + $Dolgozat['diakIds'] = array(); + + // A dolgozat jegyei + $q = "SELECT * FROM jegy WHERE dolgozatId=%u AND tipus != 0"; + $ret = db_query($q, array('fv' => 'getDolgozat', 'modul' => 'naplo', 'keyfield' => 'tankorId', 'result' => 'multiassoc', 'values' => $v), $lr); + $Dolgozat['ertekelt'] = (is_array($ret) && count($ret) > 0); + if (is_array($ret)) foreach ($ret as $tankorId => $tankorJegyek) { + for ($j = 0; $j < count($tankorJegyek); $j++) { + $diakId = $tankorJegyek[$j]['diakId']; + $tankorDiakJegyek[$tankorId][$diakId][] = $tankorJegyek[$j]; + } + } + + // A dolgozat tankörei + $q = "SELECT DISTINCT tankorId, targyId, tankorNev + FROM tankorDolgozat LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId) + LEFT JOIN ".__INTEZMENYDBNEV.".tankor USING (tankorId) + WHERE tanev=".__TANEV." AND dolgozatId=%u"; + $Dolgozat['tankor'] = db_query($q, array('fv' => 'getDolgozat', 'modul' => 'naplo', 'values' => $v, 'result' => 'indexed'), $lr); + $Dolgozat['tankorIds'] = array(); + for ($d = 0; $d < count($Dolgozat['tankor']); $d++) $Dolgozat['tankorIds'][] = $Dolgozat['tankor'][$d]['tankorId']; + $Dolgozat['tanarIds'] = getTankorTanaraiByInterval($Dolgozat['tankorIds'], array('tanev' => __TANEV, 'result' => 'csakId')); + $Dolgozat['targyId'] = $Dolgozat['tankor'][0]['targyId']; + for ($i = 0; $i < count($Dolgozat['tankor']); $i++) { + $tankorId = $Dolgozat['tankor'][$i]['tankorId']; + $Dolgozat['tankor'][$i]['diakok'] = getTankorDiakjaiByInterval($tankorId, __TANEV); + foreach ($Dolgozat['tankor'][$i]['diakok']['idk'] as $index => $diakId) + if (!in_array($diakId, $Dolgozat['diakIds'])) $Dolgozat['diakIds'][] = $diakId; + $Dolgozat['tankor'][$i]['jegyek'] = $tankorDiakJegyek[$tankorId]; + } + //$diakTankorIds = getTankorIdsByDiakIds($Dolgozat['diakIds'],array('kovetelmeny'=>array('jegy'))); // miért csak jegy??? + $diakTankorIds = getTankorIdsByDiakIds($Dolgozat['diakIds']); + $Dolgozat['utkozoDolgozatok'] = getTankorDolgozatok($diakTankorIds, true, date('Y-m-d'), $_TANEV['zarasDt']); + if ($olr == '') db_close($lr); + + return $Dolgozat; + + } + + function dolgozatTankorHozzarendeles($dolgozatId, $torlendoTankorIds, $ujTankorIds) { + + + $lr = db_connect('naplo'); + if (count($torlendoTankorIds) > 0) { + // ellenőrizzük, hogy van-e jegy hozzá! + $q = "SELECT COUNT(jegyId) FROM jegy WHERE dolgozatId=%u + AND tankorId IN (".implode(',', array_fill(0, count($torlendoTankorIds), '%u')).")"; + $v = $torlendoTankorIds; array_unshift($v, $dolgozatId); + $num = db_query($q, array('fv' => 'dolgozatTankorHozzarendeles', 'modul' => 'naplo', 'result' => 'value', 'values' => $v), $lr); + if ($num > 0) { + $_SESSION['alert'][] = 'message:wrong_data:dolgozatTankorHozzarendeles:Tankör hozzárendelés megszüntetése előtt a jegyeket törölni kell!:jegyek száma '.$num; + db_close($lr); + return false; + } + $q = "DELETE FROM tankorDolgozat WHERE dolgozatId=%u + AND tankorId IN (".implode(',', array_fill(0, count($torlendoTankorIds), '%u')).")"; + db_query($q, array('fv' => 'dolgozatTankorHozzarendeles', 'modul' => 'naplo', 'values' => $v), $lr); + } + if (($count = count($ujTankorIds)) > 0) { + foreach ($ujTankorIds as $key => $tankorId) $Val[] = "(%".($key+1)."\$u, %".($count+1)."\$u)"; + array_push($ujTankorIds, $dolgozatId); + $q = "INSERT INTO tankorDolgozat (tankorId, dolgozatId) VALUES ".implode(',',$Val); + db_query($q, array('fv' => 'dolgozatTankorHozzarendeles', 'values' => $ujTankorIds, 'modul' => 'naplo'), $lr); + } + db_close($lr); + return true; + + } + + function dolgozatJegyekTorlese($dolgozatId, $tankorId) { + + // Törlendő jegyek lekérdezése - logolás céljából + $q = "SELECT diakId, jegy, dt FROM jegy WHERE dolgozatId=%u AND tankorId=%u"; + $ret = db_query($q, array('fv' => 'dolgozatJegyekTorlese', 'modul' => 'naplo', 'result' => 'indexed', 'values' => array($dolgozatId, $tankorId))); + if (!$ret) return false; + + for ($i = 0; $i < count($ret); $i++) { + if (__NAPLOADMIN || (strtotime(_OSZTALYOZO_HATARIDO) <= strtotime($ret[$i]['dt']))) { + logAction( + array( + 'szoveg'=>'Dolgozat jegy törlése: diakId: '.$ret[$i]['diakId'].', tankorId: '.$ret[$i]['tankorId'].', jegy: '.$ret[$i]['jegy'], + 'table'=>'jegy' + ) + ); + } else { + $_SESSION['alert'][] = 'message:deadline_expired:'.$ret[$i]['dt']; + } + } + $q = "DELETE FROM jegy WHERE dolgozatId=%u AND tankorId=%u"; + return db_query($q, array('fv' => 'dolgozatJegyekTorlese', 'modul' => 'naplo', 'values' => array($dolgozatId, $tankorId))); + } + + function dolgozatTorles($dolgozatId) { + + $q = "DELETE FROM dolgozat WHERE dolgozatId=%u"; + return db_query($q, array('fv' => 'dolgozatTorles', 'modul' => 'naplo', 'values' => array($dolgozatId))); + + } + + function dolgozatModositas($dolgozatId, $dolgozatNev, $tervezettDt) { + + $q = "UPDATE dolgozat SET dolgozatNev='%s', tervezettDt='%s', modositasDt=now() WHERE dolgozatId=%u"; + return db_query($q, array('fv' => 'dolgozatModositas', 'modul' => 'naplo', 'values' => array($dolgozatNev, $tervezettDt, $dolgozatId))); + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/stat.php b/mayor-orig/www/include/modules/naplo/osztalyozo/stat.php new file mode 100644 index 00000000..c6be21fb --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/stat.php @@ -0,0 +1,249 @@ + SHARED! (bizonyítvány nyomtatás/értesítő) + * getDiakZarojegyAtlagok($diakIds, $tanev, $szemeszter) + * getTargyZarojegyAtlagok($diakIds, $tanev, $szemeszter) + * getTanarokByDiakIds($diakIds, $szemeszterAdat) --> SHARED! + * getTargyakBySzemeszter($szemeszterAdat) --> SHARED! + * getTargyAtlagokBySzemeszter($szemeszterAdat) + * getOsztalyHianyzasOsszesites($szemeszterAdat) + * getZarojegyStatBySzemeszter($SZA) + +*/ + + function getDiakZarojegyAtlagok($diakIds, $tanev, $szemeszter) { + + if (count($diakIds)<1) return false; + $mIdk = getMagatartas(); + $szIdk = getSzorgalom(); + $q = "SELECT diakId,FLOOR(100*AVG(jegy))/100 AS atlag FROM zaroJegy LEFT JOIN targy USING (targyId) + LEFT JOIN szemeszter ON kezdesDt<=hivatalosDt AND hivatalosDt<=zarasDt + WHERE diakId IN (".implode(',', array_fill(0, count($diakIds), '%u')).") AND tanev=%u AND szemeszter=%u + AND jegy != 0 AND zaroJegy.jegyTipus ='jegy' AND targy.targyId NOT IN (".implode(',',array_merge($mIdk,$szIdk)).") + AND felev = %u + GROUP BY diakId WITH ROLLUP"; + array_push($diakIds, $tanev, $szemeszter, $szemeszter); + $r = db_query($q, array('fv' => 'getDiakZarojegyAtlagok', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $diakIds)); + $ret = array(); + $sum = $db = 0; + for ($i = 0; $i < count($r); $i++) { + if ($r[$i]['diakId'] == '') { + $r[$i]['diakId'] = 'osztaly'; + $ret['osztaly'] = floor(100*$r[$i]['atlag'])/100; + } else { + //$ret[ $r[$i]['diakId'] ] = floor(100*$r[$i]['atlag'])/100; - elvileg nem lenne baj, de php hiba: pl. 4.64, 4.14, 4.35 hibásan "kerekedik"... + $ret[ $r[$i]['diakId'] ] = $r[$i]['atlag']; // a lekérdezésben már csonkoltunk... + $sum += $ret[ $r[$i]['diakId'] ]; + $db++; + } + } + $ret['osztaly'] = ($db==0) ? 0 : floor(100*$sum/$db)/100; // felülírjuk, mert a jegyek átlaga a tárgy átlagoknál már megvan + return $ret; + } + + function getTargyZarojegyAtlagok($diakIds, $tanev, $szemeszter) { + /* + * Az adott szemeszterben szerzett zárójegyek átlaga, de csak szemeszter=felev megfeleltetéssel + */ + if (count($diakIds)<1) return false; + + $q = "SELECT targyId, floor(100*avg(jegy))/100 AS atlag FROM zaroJegy + LEFT JOIN szemeszter ON kezdesDt<=hivatalosDt AND hivatalosDt<=zarasDt AND felev=szemeszter + WHERE diakId IN (".implode(',', array_fill(0, count($diakIds), '%u')).") AND tanev=%u AND szemeszter=%u + AND jegy != 0 AND jegyTipus='jegy' GROUP BY targyId WITH ROLLUP"; + array_push($diakIds, $tanev, $szemeszter); + $r = db_query($q, array('fv' => 'getTargyZarojegyAtlagok', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $diakIds)); + $ret = array(); + for ($i = 0; $i < count($r); $i++) { + if ($r[$i]['targyId'] == '') $r[$i]['targyId'] = 'osztaly'; + //$ret[ $r[$i]['targyId'] ] = floor(100*$r[$i]['atlag'])/100; // sql-ben megbízhatóbb a csonkolás működése - sajnos... + $ret[ $r[$i]['targyId'] ] = $r[$i]['atlag']; + } + return $ret; + } + + function getTanarokByDiakIds($diakIds, $szemeszterAdat) { + //??? 2009. shared lib ? + + if (count($diakIds)<1) return false; + + // A tárgyak lekérdezése a szemeszterben felvett tankörök alapján (miből lehet zárójegyet kapni) + $q = "SELECT DISTINCT targyId, TRIM(CONCAT_WS(' ',viseltNevElotag,viseltCsaladinev,viseltUtonev)) AS tanarNev + FROM tankor LEFT JOIN tankorDiak USING (tankorId) LEFT JOIN tankorTanar USING (tankorId) LEFT JOIN tanar USING (tanarId) + WHERE diakId IN (".implode(',', array_fill(0, count($diakIds), '%u')).") + AND (tankorDiak.kiDt IS NULL OR tankorDiak.kiDt>='%s') AND tankorDiak.beDt<='%s' + AND (tankorTanar.kiDt IS NULL OR tankorTanar.kiDt>='%s') AND tankorTanar.beDt<='%s'"; + array_push($diakIds, $szemeszterAdat['kezdesDt'], $szemeszterAdat['zarasDt'], $szemeszterAdat['kezdesDt'], $szemeszterAdat['zarasDt']); + return db_query($q, array('debug'=>false,'fv' => 'getTanarokByDiakIds', 'modul' => 'naplo_intezmeny', 'result' => 'multiassoc', 'keyfield' => 'targyId', 'values' => $diakIds)); + + } + + function getTargyakBySzemeszter($szemeszterAdat) { + //??? 2009. shared lib ? + + // A tárgyak lekérdezése a beírt jegyek alapján (lehet hozott jegy) + $q = "SELECT DISTINCT targyId,targyNev + FROM targy LEFT JOIN zaroJegy USING (targyId) + LEFT JOIN szemeszter ON kezdesDt<=hivatalosDt AND hivatalosDt<=zarasDt + WHERE tanev=%u AND szemeszter=%u ORDER BY targyNev"; + $v = array($szemeszterAdat['tanev'], $szemeszterAdat['szemeszter']); + return db_query($q, array('fv' => 'getTargyakBySzemeszter', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v)); + } + + + function getTargyAtlagokBySzemeszter($szemeszterAdat) { + $q = "SELECT targyId,osztalyId,FLOOR(100*AVG(jegy))/100 AS atlag FROM zaroJegy LEFT JOIN osztalyDiak + ON (zaroJegy.diakId=osztalyDiak.diakId AND beDt<='%s' AND (kiDt IS NULL OR '%s'<=kiDt)) + LEFT JOIN szemeszter ON kezdesDt<=hivatalosDt AND hivatalosDt<=zarasDt + AND felev=szemeszter + WHERE tanev=%u AND szemeszter=%u AND jegy != 0 + AND jegyTipus in ('jegy','magatartas','szorgalom') + GROUP BY targyId,osztalyId WITH ROLLUP"; + $v = array($szemeszterAdat['zarasDt'], $szemeszterAdat['zarasDt'], $szemeszterAdat['tanev'], $szemeszterAdat['szemeszter']); + $r = db_query($q, array('fv' => 'getTargyAtlagokBySzemeszter', 'modul' => 'naplo_intezmeny', 'result' => 'indexed', 'values' => $v)); + $ret = array(); + for ($i = 0; $i < count($r); $i++) + if ($r[$i]['targyId'] != '') { + if ($r[$i]['osztalyId'] == '') $r[$i]['osztalyId'] = 'iskola'; // tárgyanként az összes jegy átlagát írjuk ki + $ret[ $r[$i]['targyId'] ][ $r[$i]['osztalyId'] ] = $r[$i]['atlag']; + } else { + $ret['iskola'] = $r[$i]['atlag']; // nem használjuk - ez az összes jegyek átlaga + } + return $ret; + + } + + function getOsztalyHianyzasOsszesites($szemeszterAdat, $SET = array('telephelyId'=>null)) { + $ret = array(); + if (is_array($szemeszterAdat)) { + // Egy szemeszter hiányzási adatainak lekérdezése + if ($szemeszterAdat['statusz'] == 'aktív') { + // Mindenféle típus kell? + $Wnemszamit = defWnemszamit(); + // Folyó tanév - a tanév adatbázisból kérdezünk le +/* $q = "SELECT osztalyId, + COUNT(IF(tipus='hianyzas' AND statusz='igazolt',1,NULL)) AS igazolt, + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan',1,NULL)) AS igazolatlan, + SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)) AS kesesPercOsszeg + FROM `%s`.hianyzas + ".$Wnemszamit['join']." + LEFT JOIN osztalyDiak ON (hianyzas.diakId=osztalyDiak.diakId AND beDt<='%s' + AND (kiDt IS NULL OR '%s'<=kiDt)) + WHERE (tipus = 'hiányzás' OR (tipus='késés' AND statusz='igazolatlan' AND perc IS NOT NULL)) + AND dt<='%s' + ".$Wnemszamit['nemszamit']." + GROUP BY osztalyId WITH ROLLUP"; +*/ + $tanevDbNev = tanevDbNev(__INTEZMENY, $szemeszterAdat['tanev']); + + $q = "SELECT osztalyId, SUM(igazolt) AS igazolt, SUM(igazolatlan) AS igazolatlan, SUM(kesesPercOsszeg) AS kesesPercOsszeg, + SUM(igazolatlanKesesbol) AS igazolatlanKesesbol, SUM(osszesIgazolatlan) AS osszesIgazolatlan FROM + (SELECT osztalyId,hianyzas.diakId, + (COUNT(IF(tipus='hianyzas' AND statusz='igazolt',1,NULL)) + IFNULL((SELECT SUM(dbHianyzas) FROM `".$tanevDbNev."`.hianyzasHozott WHERE hianyzasHozott.diakId=hianyzas.diakId AND statusz='igazolt'),0)) AS igazolt, + (COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan',1,NULL)) + IFNULL((SELECT SUM(dbHianyzas) FROM `".$tanevDbNev."`.hianyzasHozott WHERE hianyzasHozott.diakId=hianyzas.diakId AND statusz='igazolatlan'),0)) AS igazolatlan, + IFNULL(SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)),0) AS kesesPercOsszeg, + SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)) DIV 45 as igazolatlanKesesbol, + ( + COUNT(IF(tipus='hianyzas' AND statusz='igazolatlan',1,NULL))+IFNULL((SUM(IF(tipus='késés' AND statusz='igazolatlan',perc,NULL)) DIV 45),0) + + IFNULL((SELECT SUM(dbHianyzas) FROM `".$tanevDbNev."`.hianyzasHozott WHERE hianyzasHozott.diakId=hianyzas.diakId AND statusz='igazolatlan'),0) + ) + AS osszesIgazolatlan + FROM `".$tanevDbNev."`.hianyzas + LEFT JOIN tankorTipus USING (tankorTipusId) + LEFT JOIN osztalyDiak ON (hianyzas.diakId=osztalyDiak.diakId AND beDt<='%s' AND (kiDt IS NULL OR '%s'<=kiDt)) + WHERE (tipus = 'hiányzás' OR (tipus='késés' AND statusz='igazolatlan' AND perc IS NOT NULL)) AND dt<='%s' AND hianyzasBeleszamit='igen' + GROUP BY osztalyId,hianyzas.diakId + ) AS diakHianyzas GROUP BY osztalyId WITH ROLLUP"; +// $v = array(tanevDbNev(__INTEZMENY, $szemeszterAdat['tanev']), $szemeszterAdat['zarasDt'], $szemeszterAdat['kezdesDt'], $szemeszterAdat['zarasDt']); +// Csak az záráskori tagokat vegyük figyelembe + $v = array($szemeszterAdat['zarasDt'], $szemeszterAdat['zarasDt'], $szemeszterAdat['zarasDt']); + } else { + // lezárt tanév - az intézmény adatbázisból kérdezünk le - nincs $Wnemszamit !!! + $q = "SELECT osztalyId, SUM(igazolt) AS igazolt, SUM(igazolatlan) AS igazolatlan, SUM(kesesPercOsszeg) AS kesesPercOsszeg, + SUM(kesesPercOsszeg DIV 45) AS igazolatlanKesebol, SUM(igazolatlan + (kesesPercOsszeg DIV 45)) AS osszesIgazolatlan + FROM hianyzasOsszesites + LEFT JOIN osztalyDiak ON (hianyzasOsszesites.diakId=osztalyDiak.diakId AND beDt<='%s' + AND (kiDt IS NULL OR '%s'<=kiDt)) + WHERE tanev=%u AND szemeszter=%u + GROUP BY osztalyId WITH ROLLUP"; +// $v = array($szemeszterAdat['zarasDt'], $szemeszterAdat['kezdesDt'], $szemeszterAdat['tanev'], $szemeszterAdat['szemeszter']); +// Csak az záráskori tagokat vegyük figyelembe + $v = array($szemeszterAdat['zarasDt'], $szemeszterAdat['zarasDt'], $szemeszterAdat['tanev'], $szemeszterAdat['szemeszter']); + } + $ret = db_query($q, array('fv' => 'getOsztalyHianyzasOsszesites', 'modul' => 'naplo_intezmeny', 'result' => 'assoc', 'keyfield' => 'osztalyId', 'values' => $v)); + } + return $ret; + } + + function getZarojegyStatBySzemeszter($SZA, $SET = array('telephelyId'=>null)) { + + // Le kell kérdezni minden zárójegyet osztályonként + $tanev = $SZA['tanev']; + $telephelyId = readVariable($SET['telephelyId'],'id'); + + $OSZTALYOK = getOsztalyok($tanev,array('result'=>'indexed','telephelyId'=>$telephelyId)); + for ($i=0; $i 'multiassoc', 'tanev' => $tanev, 'tolDt' => $SZA['zarasDt'], 'igDt' => $SZA['zarasDt'], + 'statusz' => array('jogviszonyban van','magántanuló','jogviszonya felfüggesztve','jogviszonya lezárva')) + ); + $ret['intezmeny'] = array('kituno' => 0, 'jeles' => 0, 'bukott' => 0, 'bukas' => 0, 'atlag' => 0, 'osztalyDb' => 0); + foreach($DIAKIDS as $osztalyId => $DIAKOK) { + $diakIds = array(); + $dbDiaknakVanJegye = 0; + for ($i=0; $iarray('diakId'))); + $O = array('letszam' => count($diakIds), 'kituno' => 0, 'jeles' => 0, 'bukott' => 0, 'bukas' => 0, 'atlag' => 0); + foreach ($D as $diakId => $dJegyek) { + $lehetJeles = true; $bukas = 0; $sum = 0; $db = 0; + for ($i = 0; $i < count($dJegyek); $i++) { + if (in_array($dJegyek[$i]['jegyTipus'], array('jegy','magatartás','szorgalom'))) { // A statisztika csak a jegy típusra értelmes! + if ($dJegyek[$i]['jegyTipus'] == 'jegy') { + $sum += $dJegyek[$i]['jegy']; + $db++; + if ($dJegyek[$i]['jegy'] < _JELES_LEGGYENGEBB_JEGY) $lehetJeles = false; + } + if ($dJegyek[$i]['jegy'] == 1) { + $bukas++; + $ret['intezmeny']['targy'][ $dJegyek[$i]['targyId'] ]++; + } + } + } + if ($db != 0) { // volt legalább 1 jegy típusú jegye + $dbDiaknakVanJegye++; + $atlag = @floor(100 * $sum / $db) / 100; + $O['atlag'] += $atlag; + if ($atlag >= _KITUNO_ATLAG) $O['kituno']++; + elseif ($atlag >= _JELES_ATLAG && $lehetJeles) $O['jeles']++; + if ($bukas > 0) { + $O['bukas'] += $bukas; + $O['bukott']++; + } + } + } + //if (count($diakIds) > 0) $O['atlag'] = $O['atlag'] / count($diakIds); + if($dbDiaknakVanJegye>0) $O['atlag'] = floor(100 * $O['atlag'] / $dbDiaknakVanJegye) / 100; + $ret[$osztalyId] = $O; + $ret['intezmeny']['kituno'] += $O['kituno']; + $ret['intezmeny']['jeles'] += $O['jeles']; + $ret['intezmeny']['bukott'] += $O['bukott']; + $ret['intezmeny']['bukas'] += $O['bukas']; + $ret['intezmeny']['atlag'] += $O['atlag']; + if ($O['atlag'] > 0) $ret['intezmeny']['osztalyDb']++; + } + if ($ret['intezmeny']['osztalyDb'] > 0) $ret['intezmeny']['atlag'] = $ret['intezmeny']['atlag'] / $ret['intezmeny']['osztalyDb']; + return $ret; + + } + + function getDiakKonferenciaZaradekok($diakIds, $utolsoTanitasiNap) { + + return getZaradekokByDiakIds($diakIds, array('tipus' => 'konferencia, konferencia bukás', 'tolDt' => $utolsoTanitasiNap, 'igDt' => $utolsoTanitasiNap)); + + } + +?> \ No newline at end of file diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/szempontRendszer.php b/mayor-orig/www/include/modules/naplo/osztalyozo/szempontRendszer.php new file mode 100644 index 00000000..e2b750f9 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/szempontRendszer.php @@ -0,0 +1,56 @@ + 'ujSzempontRendszer', 'modul' => 'naplo_intezmeny', 'result' => 'insert', 'values' => $v)); + if (!$szrId) return false; + + // A szempontok és minősítések rögzítése + $Szempont = $aktSz = array(); + for ($i = 0; $i < count($ADAT['txt']); $i++) { + $txt = trim($ADAT['txt'][$i]); + if ($txt != '') { + if (!isset($aktSz['szempont'])) { + $aktSz['szempont'] = $txt; + $q = "INSERT INTO szrSzempont (szrId, szempont) VALUES (%u, '%s')"; + $v = array($szrId, $txt); + $szempontId = db_query($q, array('fv' => 'ujSzempontRendszer/szempont', 'modul' => 'naplo_intezmeny', 'result' => 'insert', 'values' => $v)); + } else { + $aktSz['minosites'][] = $txt; + $q = "INSERT INTO szrMinosites (szempontId, minosites) VALUES (%u,'%s')"; + $v = array($szempontId, $txt); + db_query($q, array('fv' => 'ujSzempontRendszer/minősítés', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + } else { + if (isset($aktSz['szempont'])) { + $Szempont[] = $aktSz; + $aktSz = array(); + } + } + } + + return true; + + } + + function szempontRendszerTorles($ADAT) { + + // cascade-olás miatt törli a hozzá tartozó értékeléseket is! + $q = "DELETE FROM szempontRendszer WHERE szrId=%u"; + return db_query($q, array('fv' => 'szempontRendszerTorles', 'modul' => 'naplo_intezmeny', 'values' => array($ADAT['szrId']))); + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/szovegesErtekeles.php b/mayor-orig/www/include/modules/naplo/osztalyozo/szovegesErtekeles.php new file mode 100644 index 00000000..803056a7 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/szovegesErtekeles.php @@ -0,0 +1,67 @@ + 'ujErtekeles', 'modul' => 'naplo', 'values' => $v)); + + // Szoveges értékelés felvétele + $q = "INSERT INTO szovegesErtekeles (diakId, szrId, targyId, dt) VALUES (%u, %u, %u, '%s')"; + $v = array($diakId, $szrId, $targyId, $dt); + $szeId = db_query($q, array('fv' => 'ujErtekeles', 'modul' => 'naplo', 'result' => 'insert', 'values' => $v)); + if (!$szeId) return false; + + // Minősítések felvétele + if (count($minosites) > 0) { + $q = "INSERT INTO szeMinosites (szeId,minositesId) VALUES ($szeId,".implode("),($szeId,", array_fill(0, count($minosites), '%u')).")"; + db_query($q, array('fv' => 'ujErtekeles', 'modul' => 'naplo', 'values' => $minosites)); + } + // Egyedi minősítések felvétele + if (count($egyediMinosites) > 0) { + $v = $V = array(); + foreach ($egyediMinosites as $szempontId => $egyediMinosites) { + $V[] = "(%u, %u, '%s')"; + array_push($v, $szeId, $szempontId, $egyediMinosites); + } + $q = "INSERT INTO szeEgyediMinosites (szeId,szempontId,egyediMinosites) VALUES ".implode(',', $V); + db_query($q, array('fv' => 'ujErtekeles', 'modul' => 'naplo', 'values' => $v)); + } + + return true; + } + + function ujZaroErtekeles($diakId, $szrId, $targyId, $tanev, $szemeszter, $minosites, $egyediMinosites) { + + // A korábbi értékelés törlése + $q = "DELETE FROM szovegesErtekeles WHERE diakId=%u AND szrId=%u AND targyId=%u AND tanev=%u AND szemeszter=%u"; + $v = array($diakId, $szrId, $targyId, $tanev, $szemeszter); + db_query($q, array('fv' => 'ujZaroErtekeles', 'modul' => 'naplo_intezmeny', 'values' => $v)); + + // Szoveges értékelés felvétele + $q = "INSERT INTO szovegesErtekeles (diakId, szrId, targyId, dt, tanev, szemeszter) VALUES (%u, %u, %u, CURDATE(), %u, %u)"; + $v = array($diakId, $szrId, $targyId, $tanev, $szemeszter); + $szeId = db_query($q, array('fv' => 'ujZaroErtekeles', 'modul' => 'naplo_intezmeny', 'result' => 'insert', 'values' => $v)); + if (!$szeId) return false; + + // Minősítések felvétele + if (count($minosites) > 0) { + $q = "INSERT INTO szeMinosites (szeId,minositesId) VALUES ($szeId,".implode("),($szeId,", array_fill(0, count($minosites), '%u')).")"; + db_query($q, array('fv' => 'ujZaroErtekeles', 'modul' => 'naplo_intezmeny', 'values' => $minosites)); + } + // Egyedi minősítések felvétele + if (count($egyediMinosites) > 0) { + $v = $V = array(); + foreach ($egyediMinosites as $szempontId => $egyediMinosites) { + $V[] = "(%u, %u, '%s')"; + array_push($v, $szeId, $szempontId, $egyediMinosites); + } + $q = "INSERT INTO szeEgyediMinosites (szeId,szempontId,egyediMinosites) VALUES ".implode(',', $V); + db_query($q, array('fv' => 'ujZaroErtekeles', 'modul' => 'naplo_intezmeny', 'values' => $v)); + } + + return true; + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/tankor.php b/mayor-orig/www/include/modules/naplo/osztalyozo/tankor.php new file mode 100644 index 00000000..8cc06915 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/tankor.php @@ -0,0 +1,205 @@ + array('lista' => array()), 'tankörök' => array(), 'tanárok' => array('tanarIds' => array())); + // A tankör adatainak lekérdezése + list($tankorAdat) = getTankorById($tankorId, __TANEV); + // Ha nincsenek diákok + if (!is_array($Diakok['idk']) || count($Diakok['idk']) == 0) { + $Tanarok = $Jegyek['tankörök'][$tankorId]['tanárok'] = getTankorTanaraiByInterval($tankorId, array('tanev' => __TANEV, 'tolDt' => $tolDt, 'igDt' => $igDt, 'result' => 'nevsor')); + for ($t = 0; $t < count($Tanarok); $t++) { + if (!in_array($Tanarok[$t]['tanarId'], $Jegyek['tanárok']['tanarIds'])) { + $Jegyek['tanárok'][$Tanarok[$t]['tankorId']] = $Tanarok[$t]; + $Jegyek['tanárok']['tanarIds'][] = $Tanarok[$t]['tanarId']; + $Jegyek['tanárok']['tanarNevek'][] = $Tanarok[$t]['tanarNev']; + } + } + $Jegyek['tankörök'][$tankorId] = $tankorAdat; + return $Jegyek; + } + + + if ($sulyozas == '') $suly = array(0,1,1,1,1,1,1); + else $suly = explode(':', '0:'.$sulyozas); + + + // A diákok tárgyhoz tartozó tankörei + $q = "SELECT DISTINCT tankorDiak.tankorId, tankorNev, tankor.targyId, felveheto + FROM ".__INTEZMENYDBNEV.".tankorDiak LEFT JOIN ".__INTEZMENYDBNEV.".tankor USING (tankorId) + LEFT JOIN ".__INTEZMENYDBNEV.".tankorSzemeszter USING (tankorId) + WHERE tankor.targyId=%u AND tanev=".__TANEV." + AND diakId IN ('".implode("','", array_fill(0, count($Diakok['idk']), '%u'))."') + AND beDt<='%s' AND (kiDt IS NULL OR kiDt>='%s')"; + $v = mayor_array_join(array($tankorAdat['targyId']), $Diakok['idk'], array($igDt, $tolDt)); + $Jegyek['tankörök'] = db_query($q, array('fv' => 'getJegyek (Tankör)', 'modul' => 'naplo_intezmeny', 'result' => 'assoc', 'keyfield' => 'tankorId', 'values' => $v)); + $Jegyek['tanárok']['tanarIds'] = $Jegyek['tanárok']['tanarNevek'] = array(); + if (is_array($Jegyek['tankörök'])) + foreach ($Jegyek['tankörök'] as $_tankorId => $a) { + $Jegyek['tankörök']['tankorId'][] = $_tankorId; + $Tanarok = $Jegyek['tankörök'][$_tankorId]['tanárok'] = getTankorTanaraiByInterval($_tankorId, array('tanev' => __TANEV, 'tolDt' => $tolDt, 'igDt' => $igDt, 'result' => 'nevsor')); + for ($t = 0; $t < count($Tanarok); $t++) { + if (!in_array($Tanarok[$t]['tanarId'], $Jegyek['tanárok']['tanarIds'])) { + $Jegyek['tanárok'][$Tanarok[$t]['tankorId']] = $Tanarok[$t]; + $Jegyek['tanárok']['tanarIds'][] = $Tanarok[$t]['tanarId']; + $Jegyek['tanárok']['tanarNevek'][] = $Tanarok[$t]['tanarNev']; + } + } + } + + // --- + if (count($Diakok['idk']) > 0 && count($Jegyek['tankörök']['tankorId']) > 0) { // Vannak diákok és a diákoknak adott tárgyhoz tankörei - olyankor lehet gond, ha a tankör csak egy korábbi időszakban volt, most már nem aktív + $q = "SELECT * FROM jegy + WHERE tankorId IN ('".implode("','", array_fill(0, count($Jegyek['tankörök']['tankorId']), '%u'))."') + AND tipus <> 0 + AND diakId IN ('".implode("','", array_fill(0, count($Diakok['idk']), '%u'))."') + ORDER BY jegy.dt, jegy.jegyId"; + $v = mayor_array_join($Jegyek['tankörök']['tankorId'], $Diakok['idk']); + $ret = db_query($q, array('fv' => 'getJegyek (Tankör)', 'modul' => 'naplo', 'result' => 'indexed', 'values' => $v)); + reset($_TANEV['szemeszter']); + $szAdat = current($_TANEV['szemeszter']); $szemeszter = $szAdat['szemeszter']; + foreach ($ret as $i => $a) { + if (strtotime($a['dt']) > strtotime($szAdat['zarasDt'])) { $szAdat = next($_TANEV['szemeszter']); $szemeszter = $szAdat['szemeszter']; } + $tipus = $a['tipus']; + if ($tipus > 2) { + if (!in_array($a['dolgozatId'], $Jegyek['dolgozatok']['lista'])) { + list($ev,$ho,$napEsIdo) = explode('-', $a['dt']); + $Jegyek['dolgozatok']['lista'][] = $a['dolgozatId']; + $Jegyek['dolgozatok']['dátum szerint'][$ev][$ho][] = $a['dolgozatId']; + $Jegyek['dolgozatok']['dátum szerint'][$szemeszter][$ev][$ho][] = $a['dolgozatId']; + $Jegyek['dolgozatok'][$a['dolgozatId']] = array('év' => $ev, 'hó' => $ho, 'szemeszter' => $szemeszter); + $Jegyek['dolgozatok'][$a['dolgozatId']]['tankorIds'] = array($a['tankorId']); + $dSzemeszter = $szemeszter; // A dolozat első jegyének szemesztere + } else { + $ev = $Jegyek['dolgozatok'][$a['dolgozatId']]['év']; + $ho = $Jegyek['dolgozatok'][$a['dolgozatId']]['hó']; + $dSzemeszter = $Jegyek['dolgozatok'][$a['dolgozatId']]['szemeszter']; + if (!in_array($a['tankorId'], $Jegyek['dolgozatok'][$a['dolgozatId']]['tankorIds'])) $Jegyek['dolgozatok'][$a['dolgozatId']]['tankorIds'][] = $a['tankorId']; + } +// $Jegyek[$a['diakId']][$ev][$ho]['dolgozat'][$a['dolgozatId']][] = $a; + $Jegyek[$a['diakId']][$dSzemeszter][$ev][$ho]['dolgozat'][$a['dolgozatId']][] = $a; + + $Jegyek['dolgozatok'][$a['dolgozatId']]['jegyTipus'] = $a['jegyTipus']; + $Jegyek['dolgozatok'][$a['dolgozatId']]['átlag'] = $Jegyek['dolgozatok'][$a['dolgozatId']]['átlag'] * $Jegyek['dolgozatok'][$a['dolgozatId']]['sulyösszeg'] + $a['jegy']*$suly[$tipus]; + $Jegyek['dolgozatok'][$a['dolgozatId']]['db']++; + $Jegyek['dolgozatok'][$a['dolgozatId']]['sulyösszeg'] += $suly[$tipus]; + if ($Jegyek['dolgozatok'][$a['dolgozatId']]['sulyösszeg'] != 0) + $Jegyek['dolgozatok'][$a['dolgozatId']]['átlag'] = $Jegyek['dolgozatok'][$a['dolgozatId']]['átlag'] / $Jegyek['dolgozatok'][$a['dolgozatId']]['sulyösszeg']; + else + $Jegyek['dolgozatok'][$a['dolgozatId']]['átlag'] = 0; + } else { + list($ev,$ho,$nap) = explode('-',$a['dt']); + $Jegyek[$a['diakId']][$ev][$ho]['jegyek'][] = $a; + $Jegyek[$a['diakId']][$szemeszter][$ev][$ho]['jegyek'][] = $a; + } + if ( + in_array($a['jegyTipus'],array('jegy','féljegy')) + || $KOVETELMENY[ $a['jegyTipus'] ]['átlagolható'] === true + ) { + $Jegyek[$a['diakId']]['átlag'] = $Jegyek[$a['diakId']]['átlag'] * $Jegyek[$a['diakId']]['sulyösszeg'] + $a['jegy']*$suly[$tipus]; + $Jegyek[$a['diakId']]['db']++; + $Jegyek[$a['diakId']]['sulyösszeg'] += $suly[$tipus]; + + if ($Jegyek[$a['diakId']]['sulyösszeg'] != 0) + $Jegyek[$a['diakId']]['átlag'] = $Jegyek[$a['diakId']]['átlag'] / $Jegyek[$a['diakId']]['sulyösszeg']; + else + $Jegyek[$a['diakId']]['átlag'] = 0; + } + } + // Osztályátlag + $sum = $db = 0; + foreach ($Jegyek as $diakId => $dAdat) + if (isset($dAdat['átlag'])) { $sum += $dAdat['átlag']; $db++; } + if ($db > 0) $Jegyek['átlag'] = $sum / $db; + } // vannak diákok + + // ------------------------------------ + // A tárgycsoporthoz tartozó zárójegyek + // EZ NEM IDE TARTOZIK! --> share lib + return $Jegyek; + + } + + /* + Ez kerüljön át a share/jegyModifier-be + */ + function jegyBeiras($tankorId, $tipus, $oraId, $dolgozatId, $tanarId, $megjegyzes, $Beirando, $actionId, $lr) { + + + // ha kell, van megadva dolgozat, ami tényleg a tankörhöz tartozik, vagy 'uj'... + if ($tipus < 3 || checkTankorDolgozata($tankorId, $dolgozatId)) { + // Új dolgozat felvétele - ha kell + if (($tipus > 2) and ($dolgozatId == 'uj')) $dolgozatId = ujDolgozat($tanarId, $tankorId); + // Jegyek beírása + $v = $Values = array(); + for ($i = 0; $i < count($Beirando); $i++) { + /* oraId, dolgozatId 'NULL' stringet is kaphat a hívó függvénytől */ + if ($oraId == 'NULL') { + if ($dolgozatId == 'NULL') $Values[] = "(%u, '%s', %f, %u, %u, NOW(), %s, %s, '%s',NOW())"; + else $Values[] = "(%u, '%s', %f, %u, %u, NOW(), %s, %u, '%s',NOW())"; + } else { + if ($dolgozatId == 'NULL') $Values[] = "(%u, '%s', %f, %u, %u, NOW(), %u, %s, '%s',NOW())"; + else $Values[] = "(%u, '%s', %f, %u, %u, NOW(), %u, %u, '%s',NOW())"; + } + array_push($v, $Beirando[$i]['diakId'], $Beirando[$i]['jegyTipus'], $Beirando[$i]['jegy'], $tipus, $tankorId, $oraId, $dolgozatId, $megjegyzes); + } + $q = "INSERT INTO jegy (diakId, jegyTipus, jegy, tipus, tankorId, dt, oraId, dolgozatId, megjegyzes, modositasDt) + VALUES ".implode(',',$Values); + $r = db_query($q, array('fv' => 'jegyBeiras', 'modul' => 'naplo', 'values' => $v), $lr); + if (!$r) return false; + logAction( + array( + 'actionId'=>$actionId, + 'szoveg'=>"Jegybeírás: $tankorId, $tipus, $oraId, $dolgozatId", + 'table'=>'jegy' + ) + ); + } else { + // dolgozat jegy lenne, de nincs dolgozat megadva, legalábbis nem a tankörhöz tartozó... + $_SESSION['alert'][] = 'message:wrong_data:jegyBeiras:tipus '.$tipus.':dolgozatId '.$did; + return false; + } + + return true; + + } + + + + + // -- 2009 + /* $jegyek[index] = assoc array, melyben a módosuló jegy adatai szerepelnek + tankorId, targyId, actionId csak a loghoz kell!!! --> (???) + */ + function jegyLezaras($jegyek, $tankorId, $targyId, $actionId) { + + zaroJegyBeiras($jegyek); + logAction( + array( + 'actionId'=>$actionId, + 'szoveg'=>"Bizonyítvány: $tankorId, $targyId", + 'table'=>'bizonyitvany' + ) + ); + return true; + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/targySorrend.php b/mayor-orig/www/include/modules/naplo/osztalyozo/targySorrend.php new file mode 100644 index 00000000..c634641a --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/targySorrend.php @@ -0,0 +1,55 @@ + 'targySorrendValtas', 'modul' => 'naplo', 'result' => 'value', 'values' => $v)); + + $q = "UPDATE targySorszam SET sorszam=%u-sorszam WHERE osztalyId=%u AND sorrendNev='%s' AND sorszam IN (%u, %u)"; + if ($irany == 'fel' && $s > 0) $v = array((2*$s-1), $osztalyId, $sorrendNev, $s, ($s-1)); + elseif ($irany == 'le') $v = array((2*$s+1), $osztalyId, $sorrendNev, $s, ($s+1)); + else return false; + + return db_query($q, array('fv' => 'targySorrendValtas', 'modul' => 'naplo', 'values' => $v)); + + } + + function checkTargySor($osztalyId, $sorrendNev, $Targyak) { + + $q = "SELECT COUNT(sorszam) AS db FROM targySorszam WHERE osztalyId=%u AND sorrendNev='%s'"; + $v = array($osztalyId, $sorrendNev); + $db = db_query($q, array('fv' => 'checkTargySor', 'modul' => 'naplo', 'result' => 'value', 'values' => $v)); + if ($db == 0 && count($Targyak) > 0) { + // feltöltjük + $v = $V = array(); + for ($i = 0; $i < count($Targyak); $i++) { + $V[] = "(%u, %u, '%s', %u)"; + array_push($v, $osztalyId, $Targyak[$i]['targyId'], $sorrendNev, $i); + } + $q = "INSERT INTO targySorszam (osztalyId, targyId, sorrendNev, sorszam) VALUES ".implode(',', $V); + db_query($q, array('fv' => 'checkTargySor', 'modul' => 'naplo', 'values' => $v)); + } + + } + + function ujTargySorrend($osztalyId, $sorrendNev, $targyIds) { + + $q = "DELETE FROM targySorszam WHERE osztalyId=%u AND sorrendNev='%s'"; + db_query($q, array('fv' => 'usTargySorrend', 'modul' => 'naplo', 'values' => array($osztalyId, $sorrendNev))); + + if (count($targyIds) > 0) { + $v = $V = array(); + for ($i = 0; $i < count($targyIds); $i++) { + $V[] = "(%u, %u, '%s', %u)"; + array_push($v, $osztalyId, $targyIds[$i], $sorrendNev, $i); + } + $q = "INSERT INTO targySorszam (osztalyId, targyId, sorrendNev, sorszam) VALUES ".implode(',', $V); + db_query($q, array('fv' => 'usTargySorrend', 'modul' => 'naplo', 'values' => $v)); + } + + return true; + + } + +?> diff --git a/mayor-orig/www/include/modules/naplo/osztalyozo/vizsga.php b/mayor-orig/www/include/modules/naplo/osztalyozo/vizsga.php new file mode 100644 index 00000000..96dfa210 --- /dev/null +++ b/mayor-orig/www/include/modules/naplo/osztalyozo/vizsga.php @@ -0,0 +1,136 @@ + 'naplo_intezmeny', 'fv' => 'vizsgajelentkezes', 'result' => 'insert', 'values' => $v)); + + } + + function vizsgaIdopontRogzites($VD) { + + + foreach ($VD as $vizsgaId => $vizsgaDt) { + $vizsgaAdat = getVizsgaAdatById($vizsgaId); + if ($vizsgaAdat['vizsgaDt'] == '') { + $q = "UPDATE vizsga SET vizsgaDt='%s' WHERE vizsgaId=%u"; + $v = array($vizsgaDt, $vizsgaId); + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaIdopontRogzites', 'values' => $v)); + } else { + $_SESSION['alert'][] = 'message:wrong_data:már van vizsgaDt:vizsgaId='.$vizsgaId; + } + } + + } + + function vizsgaHalasztas($HD) { + + global $ZaradekIndex; + + foreach ($HD as $vizsgaId => $halasztasDt) { + $vizsgaAdat = getVizsgaAdatById($vizsgaId); + if ($vizsgaAdat['vizsgaDt'] != '' && strtotime($vizsgaAdat['vizsgaDt']) < strtotime($halasztasDt) && !isset($vizsgaAdat['zaradekId'])) { + // vizsgahalasztás záradékai + $zaradekIndex = $ZaradekIndex['vizsga halasztás'][ $vizsgaAdat['tipus'] ]; + $Z = array( + 'zaradekIndex' => $zaradekIndex, + 'diakId' => $vizsgaAdat['diakId'], + 'dt' => date('Y-m-d'), + 'csere' => array('%igDt%' => $halasztasDt) + ); + $zaradekId = zaradekRogzites($Z); + // eredeti vizsga záradékolása + $q = "UPDATE vizsga SET zaradekId=%u WHERE vizsgaId=%u"; + $v = array($zaradekId, $vizsgaId); + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaHalasztas/záradékolás', 'values' => $v)); + // új vizsga felvétele +// $q = "INSERT INTO vizsga (diakId, targyId, evfolyam, felev, tipus, jelentkezesDt, vizsgaDt) VALUES (%u, %u, %u, %u, '%s', '%s', '%s')"; +// $v = array($vizsgaAdat['diakId'], $vizsgaAdat['targyId'], $vizsgaAdat['evfolyam'], $vizsgaAdat['felev'], $vizsgaAdat['tipus'], $vizsgaAdat['jelentkezesDt'], $halasztasDt); +// A halasztáskor megadott dátum nem a vizsga dátuma, hanem egy határidő, amíg le kell tenni a vizsgát. + $q = "INSERT INTO vizsga (diakId, targyId, evfolyam, evfolyamJel, felev, tipus, jelentkezesDt) VALUES (%u, %u, %u, '%s', %u, '%s', '%s')"; + $v = array($vizsgaAdat['diakId'], $vizsgaAdat['targyId'], $vizsgaAdat['evfolyam'], $ADAT['evfolyamJel'], $vizsgaAdat['felev'], $vizsgaAdat['tipus'], $vizsgaAdat['jelentkezesDt']); + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgajelentkezes', 'result' => 'insert', 'values' => $v)); + + } else { + $_SESSION['alert'][] = 'message:wrong_data:még nincs vizsgaDt, vagy korábbi, mint a halasztás dátuma:vizsgaId='.$vizsgaId; + } + } + + } + + function vizsgaErtekeles($jegyek) { + + global $KOVETELMENY, $ZaradekIndex; + + if (is_array($jegyek)) foreach ($jegyek as $vizsgaId => $jegyAdat) { + $vizsgaAdat = getVizsgaAdatById($vizsgaId); +// dump($vizsgaAdat); + // A beírandó jegy adatai szinkronban kell legyenek a vizsga adataival + $jegyAdat['felev'] = $vizsgaAdat['felev']; + $jegyAdat['diakId'] = $vizsgaAdat['diakId']; + $jegyAdat['targyId'] = $vizsgaAdat['targyId']; + $jegyAdat['evfolyamJel'] = $vizsgaAdat['evfolyamJel']; + $jegyAdat['evfolyam'] = $vizsgaAdat['evfolyam']; + + $targyAdat = getTargyById($vizsgaAdat['targyId']); + $bukas = (in_array($jegyAdat['jegy'], $KOVETELMENY[ $jegyAdat['jegyTipus'] ]['sikertelen'])); + if ($vizsgaAdat['vizsgaDt'] != '' && !isset($vizsgaAdat['zaroJegyId']) && !isset($vizsgaAdat['zaradekId'])) { + // vizsga értékelés záradékai + if ($bukas) { + if ( + $jegyAdat['jegyTipus'] != 'jegy' + && $jegyAdat['jegyTipus'] != 'féljegy' + && $vizsgaAdat['tipus'] == 'javítóvizsga' + ) $zaradekIndex = $ZaradekIndex['vizsga'][$vizsgaAdat['tipus'].' nem teljesített']; + else $zaradekIndex = $ZaradekIndex['vizsga'][$vizsgaAdat['tipus'].' bukás']; + } else { $zaradekIndex = $ZaradekIndex['vizsga'][ $vizsgaAdat['tipus'] ]; } + $Z = array( + 'zaradekIndex' => $zaradekIndex, + 'diakId' => $vizsgaAdat['diakId'], + 'dt' => $vizsgaAdat['vizsgaDt'], // date('Y-m-d'), + 'csere' => array( + '%tantárgy%' => $targyAdat['targyNev'], + '%dátum%' => str_replace('-','.',$vizsgaAdat['vizsgaDt']), + '%osztályzat%' => $KOVETELMENY[ $jegyAdat['jegyTipus'] ][ $jegyAdat['jegy'] ]['rovid'].' ('.$KOVETELMENY[ $jegyAdat['jegyTipus'] ][ $jegyAdat['jegy'] ]['hivatalos'].')', + '%évfolyam%' => $vizsgaAdat['evfolyamJel'] . (($jegyAdat['felev'] == 2) ? '.':'. ('.$jegyAdat['felev'].'. félév)') // +1 - vajon miért volt? + ) + ); + // Ez hibás így! + // - lehet, hogy több tárgyból is bukott! Akkor egy sikeres javítóvizsga nem jelenti azt, hogy tovább léphet + if ($vizsgaAdat['tipus'] == 'javítóvizsga' && !$bukas) $Z['csere']['%évfolyam%'] = getKovetkezoEvfolyamJel($vizsgaAdat['evfolyamJel']).'.'; // következő évfolyamba léphet + $zaradekId = zaradekRogzites($Z); + // vizsga zárójegyének beírása + $jegyAdat['dt'] = $vizsgaAdat['vizsgaDt']; // -- ez elavult + $jegyAdat['hivatalosDt'] = $vizsgaAdat['vizsgaDt']; + if ($jegyAdat['evfolyamJel'] != '') $jegyAdat['evfolyam'] = evfolyamJel2evfolyam($jegyAdat['evfolyamJel']); + $zaroJegyId = zaroJegyBeiras(array($jegyAdat)); + // eredeti vizsga záradékolása és zárójegyhez kötése + $q = "UPDATE vizsga SET zaradekId=%u, zaroJegyId=%u WHERE vizsgaId=%u"; + $v = array($zaradekId, $zaroJegyId, $vizsgaId); + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaHalasztas/záradékolás', 'values' => $v)); + } + } + + } + + function vizsgaTorlese($vizsgaId) { + + $v = array($vizsgaId); + + // Elároljuk a vizsgához tartozó zárójegyId-t + $q = "SELECT zaroJegyId FROM vizsga WHERE vizsgaId=%u"; + $zaroJegyId = db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaTorlese/zárójegy törlése', 'result' => 'value', 'values' => $v)); + // Töröljük a vizsgához tartozó zárasékot - és ezzel a vizsgát is + $q = "DELETE FROM zaradek WHERE zaradekId=(SELECT zaradekId FROM vizsga WHERE vizsgaId=%u)"; + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaTorlese/zárójegy törlése', 'values' => $v)); + // Töröljük az eltárolt vizsgajegyet + $q = "DELETE FROM zaroJegy WHERE zaroJegyId=%u"; + db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaTorlese/zárójegy törlése', 'values' => array($zaroJegyId))); + // Ha netán még nem törlődött volna a függőségek miatt, akkor most töröljük a vizsgát + $q = "DELETE FROM vizsga WHERE vizsgaId=%u"; + return db_query($q, array('modul' => 'naplo_intezmeny', 'fv' => 'vizsgaTorlese', 'values' => $v)); + + } + +?> -- cgit v1.2.3