first commit

This commit is contained in:
salam committed 2026-10-06 19:40:28 +02:00
commit e81864e683
2984 files changed
+267797

No files matched your search

@@ -0,0 +1,67 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use HermannTelser\Zuladungsliste\Utilities\Message;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Database\Query\Restriction\DeletedRestriction;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Architekten
{
/**
* @param mixed $uid
*
* @return void
*/
public static function load($uid = 0)
{
// _Berechnung::$debug = 1;
if (_Berechnung::$debug) {
Message::debug(__FILE__, __LINE__, 'Load Architekten');
}
// 2 usergroup => Ordentliche Registrierung zur Zuladungsliste
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('fe_users');
$queryBuilder->getRestrictions()->removeAll()->add(GeneralUtility::makeInstance(DeletedRestriction::class));
$queryBuilder
->select('uid', 'disable', 'email', 'name', 'last_name', 'company', 'vereidigung', 'frauenfoerderpunkt', 'solidaritaetserklaerung', 'extrasperrung', 'kontoaufloesung', 'kontoaufloesung_active', 'wettbewerbe', 'kammernid', 'kammermitgliedsnummer', 'gender', 'date_of_birth')
->from('fe_users')
->where(
$queryBuilder->expr()->eq('kammernid', (int) _Berechnung::$_config['kammernid']),
$queryBuilder->expr()->eq('pid', (int) _Berechnung::$_config['pid']),
$queryBuilder->expr()->eq('usergroup', (int) _Berechnung::$_config['usergroup'])
);
if (0 != $uid) {
$queryBuilder->andWhere($queryBuilder->expr()->eq('uid', (int) $uid));
}
if (0 != _Berechnung::$_config['berechne_bis']) {
$date = date('Y-m-d', _Berechnung::$_config['berechne_bis']);
$queryBuilder->andWhere("vereidigung < '".$date."'");
}
$statement = $queryBuilder->execute()->fetchAll();
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
// print_r($statement);
// exit;
_Berechnung::$_data['architekten'] = $statement;
}
}
@@ -0,0 +1,106 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use HermannTelser\Zuladungsliste\Utilities\Message;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class AufloesungPunkteVerteilung
{
/**
* @return void
*/
public static function manage()
{
if (_Berechnung::$debug) {
Message::debug(__FILE__, __LINE__, 'Manage Auflösung Punkte Verteilung');
}
// 2 usergroup => Ordentliche Registrierung zur Zuladungsliste
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_konto_aufloesung_mm');
$statement = $queryBuilder
->select('uid_geber', ' uid_empfaenger', ' prozente')
->from('tx_zuladungsliste_konto_aufloesung_mm')
->where(
$queryBuilder->expr()->gt('prozente', (int) 0)
)->execute()->fetchAll();
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
$verteiler_arr = [];
foreach ($statement as $key => $value) {
$uid = $value['uid_geber'];
$verteiler_arr[$uid][] = $value;
}
foreach ($verteiler_arr as $uid_geber => $empfaener_arr) {
$frauenpunkt_abgezogen = '';
foreach (_Berechnung::$_data['liste'] as $key => $_value_liste) {
if ($_value_liste['user_id'] == $uid_geber) {
$geber_punkte = $_value_liste['punkte'];
if ($geber_punkte > 0) {
$geber_company = $_value_liste['company'];
_Berechnung::$_data['liste'][$key]['company'] .= ' ( Kontoauflösung '._Berechnung::$_data['liste'][$key]['kontoaufloesung_active'].')';
_Berechnung::$_data['liste'][$key]['punkte'] = 0;
_Berechnung::$_data['liste'][$key]['nominiert'] = 0;
_Berechnung::$_data['liste'][$key]['auswertung']['wettbewerbe']['punkte'] = 0;
_Berechnung::$_data['liste'][$key]['auswertung']['neueinsteigerpunkt']['punkte'] = 0;
if (1 == _Berechnung::$_data['liste'][$key]['auswertung']['frauenfoerderpunkt']['punkte']) {
$frauenpunkt_abgezogen = ', Frauenförderpunkt wurde abgezogen';
--$geber_punkte;
}
_Berechnung::$_data['liste'][$key]['auswertung']['frauenfoerderpunkt']['punkte'] = 0;
foreach ($empfaener_arr as $key => $_empfaenger) {
$uid_empfaenger = $_empfaenger['uid_empfaenger'];
$prozente = $_empfaenger['prozente'];
// SET EMPFÄNGER
foreach (_Berechnung::$_data['liste'] as $key => $value) {
if ($value['user_id'] == $uid_empfaenger) {
$punkte_empf_anteil = round($geber_punkte * ($prozente / 100), 2);
_Berechnung::$_data['liste'][$key]['punkte'] = _Berechnung::$_data['liste'][$key]['punkte'] + $punkte_empf_anteil;
_Berechnung::$_data['liste'][$key]['istempfaenger'] = '1';
_Berechnung::$_data['liste'][$key]['auswertung']['wettbewerbe']['punkte'] += $punkte_empf_anteil;
_Berechnung::$_data['liste'][$key]['auswertung']['wettbewerbe'][] = [
'wettbewerb' => "$prozente% von Kontoauflösung".$frauenpunkt_abgezogen,
'verfahrensid' => '',
'verfahrensort' => '',
'entscheidungstermin' => '',
'mit_sperrung' => '',
'punkte' => $punkte_empf_anteil,
'bezeichnung' => '',
'bezeichnung_punkte' => '',
'regelwerk' => '',
'monate_seit_entscheidungstermin' => '',
'punkte_aktive' => '',
'gueltig_bis' => '',
'von_transfer' => $geber_company,
];
}
}
}
}
}
}
}
}
}
@@ -0,0 +1,194 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Frontend\Utility\EidUtility;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Erfolgspunkte
{
/**
* @return string
*/
public static function load_user($_liste, $user_objekt)
{
// _Berechnung::$debug = 1;
if (_Berechnung::$debug) {
Message::debug(
__FILE__,
__LINE__,
"Erfolgspunkte"
);
}
if (!isset(_Berechnung::$_data['sektionstage'])) {
Sektionstage::load();
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_domain_model_wettbewerbe');
$queryBuilder
->select(
'tx_zuladungsliste_domain_model_wettbewerbe.wettbewerb',
'tx_zuladungsliste_domain_model_wettbewerbe.verfahrensid',
'tx_zuladungsliste_domain_model_wettbewerbe.verfahrensort',
'tx_zuladungsliste_domain_model_wettbewerbe.entscheidungstermin',
'tx_zuladungsliste_domain_model_wettbewerbe.abgabetermin',
'tx_zuladungsliste_domain_model_wettbewerbe.sperre_deaktiviert',
'b.ladung_durch_auslober',
'c.punkte',
'd.sperrung AS mit_sperrung',
'd.bezeichnung',
'e.bezeichnung AS bezeichnung_punkte'
)
->from('tx_zuladungsliste_domain_model_wettbewerbe')
->leftJoin(
'tx_zuladungsliste_domain_model_wettbewerbe',
'tx_zuladungsliste_wettbewerbe_architekten_mm',
'b',
$queryBuilder->expr()->eq(
'b.uid_wettbewerbe',
$queryBuilder->quoteIdentifier('tx_zuladungsliste_domain_model_wettbewerbe.uid')
)
)
->leftJoin(
'b',
'tx_zuladungsliste_punkte_kriterien_mm',
'c',
$queryBuilder->expr()->eq(
'c.uid_punkte',
$queryBuilder->quoteIdentifier('b.uid_punkte')
)
)->leftJoin(
'tx_zuladungsliste_domain_model_wettbewerbe',
'tx_zuladungsliste_domain_model_kriterien',
'd',
$queryBuilder->expr()->eq(
'd.uid',
$queryBuilder->quoteIdentifier('tx_zuladungsliste_domain_model_wettbewerbe.kriteriumid')
)
)->leftJoin(
'c',
'tx_zuladungsliste_domain_model_punkte',
'e',
$queryBuilder->expr()->eq(
'e.uid',
$queryBuilder->quoteIdentifier('c.uid_punkte')
)
)
->where(
$queryBuilder->expr()->eq('c.uid_kriterien', 'tx_zuladungsliste_domain_model_wettbewerbe.kriteriumid'),
$queryBuilder->expr()->eq('b.tstamp_ablehnen', 0),
$queryBuilder->expr()->gt('b.tstamp_aktivierung', 0),
$queryBuilder->expr()->eq('b.uid_user', (int)$user_objekt['uid'])
)
->groupBy('tx_zuladungsliste_domain_model_wettbewerbe.verfahrensid')
->orderBy('tx_zuladungsliste_domain_model_wettbewerbe.entscheidungstermin');
if (_Berechnung::$_config['berechne_bis'] != 0) {
$date = date("Y-m-d", _Berechnung::$_config['berechne_bis']);
$queryBuilder->andWhere("b.tstamp_aktivierung <= ". _Berechnung::$_config['berechne_bis']);
$queryBuilder->andWhere("tx_zuladungsliste_domain_model_wettbewerbe.entscheidungstermin < '". $date ."'");
}
$statement = $queryBuilder->execute()->fetchAll();
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
$_liste["gesperrt_bis"] = 0;
$_liste["kommentar"] = 0;
$_liste["gesperrt"] = 0;
$_liste["nominiert"] = 1;
$_return_sort = [];
foreach ($statement as $key => $row) {
if ((int)$row["entscheidungstermin"]>0) {
$entscheidungstermin = strtotime($row["entscheidungstermin"]);
$datetime2 = new \DateTime($row["entscheidungstermin"]);
} else {
$entscheidungstermin = strtotime($row["abgabetermin"]);
$datetime2 = new \DateTime($row["abgabetermin"]);
}
$_sektionstag = Sektionstage::filter($entscheidungstermin);
$datetime1 = new \DateTime();
if (_Berechnung::$_config['berechne_bis'] != 0) {
$datetime1->setTimestamp(_Berechnung::$_config['berechne_bis']);
}
$interval = $datetime1->diff($datetime2);
$monate_seit_entscheidungstermin = $interval->m + ($interval->y * 12);
$row["regelwerk"] = $_sektionstag["bezeichnung"];
$row["monate_seit_entscheidungstermin"] = $monate_seit_entscheidungstermin;
// PUNKTE GÜLTIGKEIT
$row["punkte_aktive"] = $monate_seit_entscheidungstermin<=$_sektionstag["punktezeit"] ? 1 : 0;
if ($row["punkte_aktive"] == 1) {
$_liste["punkte"] = $_liste["punkte"] + $row["punkte"];
}
$datetime3 = clone $datetime2;
$datetime3->modify("+".$_sektionstag["punktezeit"]." months");
$row["gueltig_bis"] = date("d.m.Y", $datetime3->format("U"));
$row["wettbewerb_sort"] = $datetime3->format("U");
// SPERRZEIT
if ($row["mit_sperrung"] and $row["sperre_deaktiviert"]==0) {
if ($row['ladung_durch_auslober'] == 1) {
// Active Sperrzeit wird auf 9 Monate verkürzt
$_sektionstag["sperrzeit"] = 9;
}
$row["sperrung_aktive"] = $monate_seit_entscheidungstermin<=$_sektionstag["sperrzeit"] ? 1 : 0;
$datetime2->modify("+".$_sektionstag["sperrzeit"]." months");
$row["gesperrt_bis"] = date("d.m.Y", $datetime2->format("U"));
$_liste['controll']['gesperrt_bis'] = $row["gesperrt_bis"];
$_liste['controll']['sperrung_aktive'] = $datetime2->format("U");
$_liste['controll']['berechne_bis'] = _Berechnung::$_config['berechne_bis'];
// salam 28.0.42022
$sperreZeitLimit = (_Berechnung::$_config['berechne_bis']!= 0) ? _Berechnung::$_config['berechne_bis'] : time();
if ($row["sperrung_aktive"] and $datetime2->format("U") > $sperreZeitLimit) {
$_liste["gesperrt_bis"] = $row["gesperrt_bis"];
if ($row['ladung_durch_auslober'] == 1) {
$_liste["kommentar"] = $row["wettbewerb"]. ' (Ladung durch Auslober/in, Sperrzeit wird auf 9 Monate verkürzt)';
} else {
$_liste["kommentar"] = $row["wettbewerb"];
}
$_liste["gesperrt"] = 1;
$_liste["nominiert"] = 0;
}
}
$_return_sort[] = $row;
}
if ($_return_sort) {
$wettbewerb_sort = array_column($_return_sort, 'wettbewerb_sort');
array_multisort($wettbewerb_sort, SORT_ASC, $_return_sort);
}
// WETTBEWERBE ERFOLGSPUNKTE
$_liste["auswertung"]["wettbewerbe"] = $_return_sort;
return $_liste;
}
}
@@ -0,0 +1,78 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Frauen
{
/**
* @return void
*/
public static function load($_liste, $user_objekt)
{
if (_Berechnung::$debug) {
Message::debug(__file__, __line__, "Load Frauen Förderungs Punkt");
}
// FRAUEN FÖRDERUNGS PUNKT
// $_liste["auswertung"]["frauenfoerderpunkt"] = Frauen::load($_liste, $user_objekt, $_liste["punkte"]);
// $_liste["punkte"] += $_liste["auswertung"]["frauenfoerderpunkt"]["punkte"];
if ($user_objekt["frauenfoerderpunkt"]==0) {
$_liste["auswertung"]["frauenfoerderpunkt"]['punkte'] = 0;
$_liste["auswertung"]["frauenfoerderpunkt"]['kommentar'] = "Kein Anspruch";
return $_liste;
} else {
// Frauenförderung ohne Punkte immer Gültig
if ($_liste["punkte"] > 0) {
$_liste["auswertung"]["frauenfoerderpunkt"]['punkte'] = 1;
$_liste["auswertung"]["frauenfoerderpunkt"]['kommentar'] = "Punktestand > 0; Punkt gültig";
$_liste["punkte"]++;
return $_liste;
}
$vereidigung = strtotime($user_objekt["vereidigung"]);
$sektionstag = Sektionstage::filter("pruefePunkteverfallFrauenFoerderungsPunkt", $vereidigung);
$frauenfoerderung_monate = $sektionstag["frauenfoerderung"];
$datetime1 = new \DateTime();
if (_Berechnung::$_config['berechne_bis'] != 0) {
$datetime1->setTimestamp(_Berechnung::$_config['berechne_bis']);
}
$datetime2 = new \DateTime($user_objekt["vereidigung"]);
$interval = $datetime1->diff($datetime2);
$monate_seit_vereidigung = $interval->m + ($interval->y * 12);
if ($monate_seit_vereidigung < $frauenfoerderung_monate) {
$monate = $frauenfoerderung_monate-$monate_seit_vereidigung;
$_liste["auswertung"]["frauenfoerderpunkt"]['punkte'] = 1;
$_liste["auswertung"]["frauenfoerderpunkt"]['kommentar'] = "Frauenförderung ohne Punkte noch $monate Monate gültig";
$_liste["punkte"]++;
} else {
$_liste["auswertung"]["frauenfoerderpunkt"]['punkte'] = 0;
$_liste["auswertung"]["frauenfoerderpunkt"]['kommentar'] = "Keine Einreichungen, Zeitspanne seit Vereidigung größer als 5 Jahre, Punkt ist verfallen";
}
return $_liste;
}
}
}
@@ -0,0 +1,75 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Neueinsteiger
{
/**
* @param mixed $_liste
* @param mixed $user_objekt
*
* @return void
*/
public static function load($_liste, $user_objekt)
{
if (_Berechnung::$debug) {
Message::debug(__FILE__, __LINE__, 'Load NeueinsteigerPunkt');
}
if ('0000-00-00' == $user_objekt['vereidigung']) {
$_liste['auswertung']['neueinsteigerpunkt']['punkte'] = 0;
$_liste['auswertung']['neueinsteigerpunkt']['kommentar'] = 'Kein Vereidigungsdatum verfügbar';
return $_liste;
}
$vereidigung = strtotime($user_objekt['vereidigung']);
$_sektionstag = Sektionstage::filter($vereidigung);
$datetime1 = new \DateTime();
if (0 != _Berechnung::$_config['berechne_bis']) {
$datetime1->setTimestamp(_Berechnung::$_config['berechne_bis']);
}
$datetime2 = new \DateTime($user_objekt['vereidigung']);
$interval = $datetime1->diff($datetime2);
$monate_seit_vereidigung = $interval->m + ($interval->y * 12);
if ($monate_seit_vereidigung > $_sektionstag['neueinsteiger']) {
$_liste['auswertung']['neueinsteigerpunkt']['punkte'] = 0;
$_liste['auswertung']['neueinsteigerpunkt']['kommentar'] = 'Neueinsteigerpunkt ist verfallen. Vereidigung '.$user_objekt['vereidigung'];
return $_liste;
}
$jahre_seit_vereidigung = $interval->y;
if ($jahre_seit_vereidigung < 5) {
$neueinsteigerpunkt = 5 - $jahre_seit_vereidigung;
$datetime2->modify('+5 year');
$_liste['auswertung']['neueinsteigerpunkt']['punkte'] = $neueinsteigerpunkt;
$_liste['punkte'] = $_liste['punkte'] + $neueinsteigerpunkt;
$_liste['auswertung']['neueinsteigerpunkt']['kommentar'] = 'Neueinsteigerpunkt Vereidigung '.$user_objekt['vereidigung'];
$_liste['auswertung']['neueinsteigerpunkt']['gueltig_bis'] = $datetime2->format('Y-m-d');
} else {
$_liste['auswertung']['neueinsteigerpunkt']['punkte'] = 0;
$_liste['auswertung']['neueinsteigerpunkt']['kommentar'] = 'Neueinsteigerpunkt ist verfallen. Vereidigung '.$user_objekt['vereidigung'];
}
return $_liste;
}
}
@@ -0,0 +1,65 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use HermannTelser\Zuladungsliste\Utilities\Message;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class PunkteKriterien
{
/**
* @return void
*/
public static function load()
{
if (_Berechnung::$debug) {
Message::debug(__FILE__, __LINE__, 'Load Punkte Kriterien');
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_punkte_kriterien_mm');
$queryBuilder
->select(
'tx_zuladungsliste_punkte_kriterien_mm.uid',
'tx_zuladungsliste_punkte_kriterien_mm.uid_punkte',
'tx_zuladungsliste_punkte_kriterien_mm.uid_kriterien',
'tx_zuladungsliste_punkte_kriterien_mm.punkte',
'a.bezeichnung AS bezeichnung_punkte',
'b.bezeichnung AS bezeichnung_kritierien'
)->from('tx_zuladungsliste_punkte_kriterien_mm')
->join(
'tx_zuladungsliste_punkte_kriterien_mm',
'tx_zuladungsliste_domain_model_punkte',
'a',
$queryBuilder->expr()->eq('a.uid', $queryBuilder->quoteIdentifier('tx_zuladungsliste_punkte_kriterien_mm.uid_punkte'))
)
->join(
'tx_zuladungsliste_punkte_kriterien_mm',
'tx_zuladungsliste_domain_model_kriterien',
'b',
$queryBuilder->expr()->eq('b.uid', $queryBuilder->quoteIdentifier('tx_zuladungsliste_punkte_kriterien_mm.uid_kriterien'))
);
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
$tmp = $queryBuilder->execute()->fetchAll();
$return = [];
foreach ($tmp as $key => $value)
{
$return[$value['uid_punkte']] = $value;
}
return $return;
}
}
@@ -0,0 +1,74 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Sektionstage
{
/**
* @return void
*/
public static function load()
{
if (_Berechnung::$debug) {
Message::debug(__file__, __line__, "Lade Sektionstage");
}
// 2 usergroup => Ordentliche Registrierung zur Zuladungsliste
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_domain_model_sektionstage');
$statement = $queryBuilder
->select("bezeichnung", "stichtag", "sperrzeit", "sperrzeitstart", "punktezeit", "punktezeitstart", "neueinsteiger", "neueinsteigerstart", "frauenfoerderung", "frauenfoerderungstart", "frauenfoerderungsonderstart", "kammernid")
->from('tx_zuladungsliste_domain_model_sektionstage')
->where(
$queryBuilder->expr()->eq('kammernid', (int)_Berechnung::$_config['kammernid'])
);
if (_Berechnung::$_config['berechne_bis'] != 0) {
$date = date("Y-m-d", _Berechnung::$_config['berechne_bis']);
$queryBuilder->andWhere("stichtag < '". $date ."'");
}
$statement = $queryBuilder->execute()->fetchAll();
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
$_arr = [];
foreach ($statement as $key => $value) {
$stichtag= strtotime(trim($value['stichtag']));
$_arr[$stichtag] = $value;
}
ksort($_arr);
_Berechnung::$_data['sektionstage'] = $_arr;
}
/**
* @return array
*/
public static function filter($stichtag)
{
$_stichtagdetails = [];
$entscheidungstermin = 0;
foreach (_Berechnung::$_data['sektionstage'] as $stichtag => $_stichtagdetails) {
if ($entscheidungstermin >= $stichtag) {
return $_stichtagdetails;
}
}
return array_shift(array_slice(_Berechnung::$_data['sektionstage'], 0, 1));
}
}
@@ -0,0 +1,43 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Solidaritaetserklaerung
{
/**
* @return void
*/
public static function filter($_liste, $user_objekt)
{
if (_Berechnung::$debug) {
Message::debug(__file__, __line__, "Filter Solidaritaetserklaerung");
}
// Datum Start SOLIDARITÄTSERKLÄRUNG ab 15. Juni "2021"
if (_Berechnung::$_config['berechne_bis'] == 0 or _Berechnung::$_config['berechne_bis'] > mktime(0, 0, 0, 6, 15, 2021)) {
if ($user_objekt["solidaritaetserklaerung"]==0) {
$_liste["auswertung"]["solidaritaetserklaerung"]["kommentar"] = "Solidaritätserklärung nicht zugestimmt";
$_liste["auswertung"]["solidaritaetserklaerung"]["punkte"] = 0;
} else {
$_liste["auswertung"]["solidaritaetserklaerung"]["kommentar"] = "Solidaritätserklärung zugestimmt";
$_liste["auswertung"]["solidaritaetserklaerung"]["punkte"] = 1;
$_liste["punkte"]++;
}
}
return $_liste;
}
}
@@ -0,0 +1,95 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use HermannTelser\Zuladungsliste\Utilities\Message;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class Sondersperrungen
{
/**
* @return void
*/
public static function load()
{
// _Berechnung::$debug = 1;
if (_Berechnung::$debug) {
Message::debug(
__FILE__,
__LINE__,
"Load ListeBerechnung"
);
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_domain_model_extrasperrung');
$statement = $queryBuilder
->select('tx_zuladungsliste_domain_model_extrasperrung.begruendung', 'tx_zuladungsliste_domain_model_extrasperrung.sperrzeitbis', 'b.uid_user', 'c.company')
->from('tx_zuladungsliste_domain_model_extrasperrung')
->join(
'tx_zuladungsliste_domain_model_extrasperrung',
'tx_zuladungsliste_extrasperrung_user_mm',
'b',
$queryBuilder->expr()->eq('b.uid_extrasperrung', $queryBuilder->quoteIdentifier('tx_zuladungsliste_domain_model_extrasperrung.uid'))
)
->join(
'b',
'fe_users',
'c',
$queryBuilder->expr()->eq('c.uid', $queryBuilder->quoteIdentifier('b.uid_user'))
)
->where(
$queryBuilder->expr()->eq('c.kammernid', _Berechnung::$_config['kammernid'])
)->execute()->fetchAll();
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
$_sondersperrungen = [];
foreach ($statement as $key => $value) {
$uid_user = $value['uid_user'];
$value['sperrzeitbis_timestamp'] = strtotime($value['sperrzeitbis']);
$_sondersperrungen[$uid_user][] = $value;
}
_Berechnung::$_data['sondersperrungen'] = $_sondersperrungen;
}
/**
* @return void
*/
public static function filter($_liste, $user_objekt)
{
$_liste["auswertung"]["sondersperrungen"]["gesperrt"]=0;
$_liste["auswertung"]["sondersperrungen"]["gesperrt_bis"]=0;
$user_id = $user_objekt["uid"];
if (isset(_Berechnung::$_data['sondersperrungen'][$user_id])) {
foreach (_Berechnung::$_data['sondersperrungen'][$user_id] as $key => $value_sperrung) {
if (_Berechnung::$_config['berechne_bis'] < $value_sperrung["sperrzeitbis_timestamp"]) {
$return["gesperrt_bis"] = $value_sperrung["sperrzeitbis_timestamp"];
}
$_liste["auswertung"]["sondersperrungen"]["gesperrt"] = 1;
$_liste["auswertung"]["sondersperrungen"]["gesperrt_bis"] = $value_sperrung["sperrzeitbis"];
$_liste["auswertung"]["sondersperrungen"]["kommentar"] = $value_sperrung["begruendung"];
$_liste["gesperrt_bis"] = $value_sperrung["sperrzeitbis"];
$_liste["nominiert"] = 0;
}
}
return $_liste;
}
}
@@ -0,0 +1,61 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
use HermannTelser\Zuladungsliste\Utilities\Message;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class WettbewerbeArchitekten
{
/**
* @return void
*/
public static function load()
{
if (_Berechnung::$debug) {
Message::debug(__FILE__, __LINE__, 'Load Wettbewerbe Architekten');
}
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_zuladungsliste_wettbewerbe_architekten_mm');
$queryBuilder
->select(
'tx_zuladungsliste_wettbewerbe_architekten_mm.uid AS uid_wettarch',
'tx_zuladungsliste_wettbewerbe_architekten_mm.uid_wettbewerbe',
'tx_zuladungsliste_wettbewerbe_architekten_mm.uid_user',
'tx_zuladungsliste_wettbewerbe_architekten_mm.uid_punkte',
'tx_zuladungsliste_wettbewerbe_architekten_mm.tstamp_zuordnung',
'tx_zuladungsliste_wettbewerbe_architekten_mm.tstamp_aktivierung',
'tx_zuladungsliste_wettbewerbe_architekten_mm.tstamp_ablehnen',
'a.wettbewerb',
'a.bundesland',
'a.entscheidungstermin',
'a.abgabetermin'
)
->from('tx_zuladungsliste_wettbewerbe_architekten_mm')
->join(
'tx_zuladungsliste_wettbewerbe_architekten_mm',
'tx_zuladungsliste_domain_model_wettbewerbe',
'a',
$queryBuilder->expr()->eq('a.uid', $queryBuilder->quoteIdentifier('tx_zuladungsliste_wettbewerbe_architekten_mm.uid_wettbewerbe'))
)->where(
$queryBuilder->expr()->gt('tx_zuladungsliste_wettbewerbe_architekten_mm.uid_punkte', 0)
);
if (_Berechnung::$debug) {
Message::note($queryBuilder->getSQL());
}
return $queryBuilder->execute()->fetchAll();
}
}
@@ -0,0 +1,277 @@
<?php
namespace HermannTelser\Zuladungsliste\Berechnung;
set_time_limit(0);
ini_set('max_execution_time', '600'); //600 seconds = 10 minutes
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\Utility\EidUtility;
use HermannTelser\Zuladungsliste\Utilities\Message;
use HermannTelser\Zuladungsliste\Kammer\KammerById;
/***
*
* This file is part of the "Zuladungsliste Steiermark" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* (c) 2019 Hermann Telser <hermann.telser@gmail.com>, NUH-Odds GmbH
*
***/
class _Berechnung
{
public static $_return = [];
public static $_data = [];
public static $_config = [];
public static $debug = 0;
/**
* @return string
*/
public function __construct($berechne_bis = 0)
{
self::$debug = 0;
self::$_data = [];
$user = $GLOBALS['TSFE']->fe_user->user;
self::$_config['pid'] = 41; // Ordner ID der gültigen Architeken
self::$_config['kammernid'] = 1; // Kammer ID is fixed to Steiermarkfor now
self::$_config['userid'] = $user['uid'];
self::$_config['usergroup'] = 2; // 2 => Ordentliche Registrierung zur Zuladungsliste
self::$_config['liste_start'] = mktime(0, 0, 0, 7, 15, 2017); // 15 July 2017 12:00:00 AM CEST
if ($berechne_bis) {
self::$_config['berechne_bis'] = $berechne_bis;
} else {
self::$_config['berechne_bis'] = 0;
}
}
/**
* @return string
*/
public static function berechnen()
{
self::$_data = [];
Sondersperrungen::load();
// controllo = 0 => all
$architekt_uid = 0;
Architekten::load($architekt_uid);
// print_r(self::$_data['architekten']);
// exit;
Sektionstage::load();
foreach (self::$_data['architekten'] as $key => $user_objekt) {
$_liste = [];
$_liste["id"] = $user_objekt["uid"];
$_liste["disable"] = $user_objekt["disable"];
$_liste["user_id"] = $user_objekt["uid"];
$_liste["company"] = $user_objekt["company"];
$_liste["name"] = $user_objekt["name"];
// $_liste["last_name"] = $user_objekt["last_name"];
// $_liste["vereidigung"] = $user_objekt["vereidigung"];
$_liste["kontoaufloesung"] = $user_objekt["kontoaufloesung"];
$_liste["kontoaufloesung_active"] = $user_objekt["kontoaufloesung_active"];
// $_liste["nameorder"] = $_liste["last_name"]!="" ? $_liste["last_name"] : $_liste["company"];
$_liste["punkte"] = 0;
$_liste["auswertung"] = [];
// WETTBEWERBE ERFOLGSPUNKTE
$_liste = Erfolgspunkte::load_user($_liste, $user_objekt);
// SONDER SPERRUNGEN
$_liste = Sondersperrungen::filter($_liste, $user_objekt);
// NEUEINSTEIGERPUNKT
$_liste = Neueinsteiger::load($_liste, $user_objekt);
// FRAUEN FÖRDERUNGS PUNKT
$_liste = Frauen::load($_liste, $user_objekt);
// SOLIDARITÄTSERKLÄRUNG
$_liste = Solidaritaetserklaerung::filter($_liste, $user_objekt);
$_liste["aeltestes_entscheidungs_datum"] = isset($_liste["auswertung"]["wettbewerbe"][0]) ? $_liste["auswertung"]["wettbewerbe"][0]["entscheidungstermin"] : 0;
if ($user_objekt["vereidigung"]!="0000-00-00") {
$vereidigung = strtotime($user_objekt["vereidigung"]);
}
if ($_liste["aeltestes_entscheidungs_datum"]!=0) {
$aeltestes_entscheidungs_datum = strtotime($_liste["aeltestes_entscheidungs_datum"]);
}
if ($_liste["punkte"]==0) {
$_liste["nominiert"] = 0;
}
if ($_liste["punkte"]==0) {
$_liste["sortdatum"] = 100000000;
} elseif (isset($vereidigung) and isset($aeltestes_entscheidungs_datum)) {
$_liste["sortdatum"] = $aeltestes_entscheidungs_datum<$vereidigung ? $aeltestes_entscheidungs_datum : $vereidigung;
} elseif (isset($vereidigung)) {
$_liste["sortdatum"] = $vereidigung;
} elseif (isset($aeltestes_entscheidungs_datum)) {
$_liste["sortdatum"] = $aeltestes_entscheidungs_datum;
} else {
$_liste["sortdatum"] = 100000000;
}
// if($user_objekt["uid"]==$architekt_uid){
// print_r($_liste['punkte']);
// exit;
// }
self::$_data['liste'][] = $_liste;
}
// $tmp = self::$_data['liste'];
// print_r($tmp);
// exit;
AufloesungPunkteVerteilung::manage();
// print_r(self::$_data['liste']);
// exit;
/***
Reihung der Liste absolut
a) Punktezahl
b) bei Gleichstand: Ältestes in der Wertung befindliche Zuerkennungs-, Entscheidungs- oder Vereidigungsdatum geht vor
c) falls immer noch Gleichstand: Reihung alphabetisch nach Nach- bzw. Firmennamen
*/
$punkte = array_column(self::$_data['liste'], 'punkte');
$sortdatum = array_column(self::$_data['liste'], 'sortdatum');
$nameorder = array_column(self::$_data['liste'], 'company');
foreach ($nameorder as $key => $value)
{
$nameorder[$key] = strtolower($value);
}
array_multisort($punkte, SORT_NUMERIC, SORT_DESC, $sortdatum, SORT_NUMERIC, SORT_DESC, $nameorder, SORT_ASC, SORT_STRING, self::$_data['liste']);
// print_r(self::$_data['liste']);
// exit;
/***
Reihung für Nominierung Wie Reihung absolut, aber ohne Zählung von gesperrten Teilnehmern (Sperre bei WB-Teilnahme an geladenen WB, aber nicht nur durch Nominierung aus der Liste(!), dzt. 18 Monate)
Nominierung Herangezogen wird die Nominierungsreihung.
1 Nominierung: Nr. 1 der Nominierungsreihung
2 Nominierungen: Nr. 1 und die Nr. des Absolutwerts der Hälfte des Maximalwerts der Nominierungsreihung (z.B. 35 in der Nominierungswertung, gezogen wird Nr. 1 und Nr. 17)
3 Nominierungen: Nr. 1, die Nr. des Absolutwerts von 2/3 des Maximalwerts der Nominierungsreihung, die Nr. des Absolutwerts von 1/3 des Maximalwerts der Nominierungsreihung (z.B. 35 in der Nominierungswertung, gezogen wird Nr. 1, Nr. 11, Nr. 23)
ab 4 Nominierungen: Die ersten 3 Nominierungen wie oben, nächste ist die Nr. 2, nächste die dem Absolutwert von 2/3 des Maximalwerts der Nominierungreihung folgende Zahl (z.B. bei obigem Beispiel, aber 5 aus 35: Nr. 1,2,11,12,23)
*/
//print_r($data);
//exit;
$arr = [];
$pos=1;
$rang=1;
foreach (self::$_data['liste'] as $key => $value) {
if ($value["disable"] == 0) {
$value["rang"] = $rang;
$rang++;
$sperre_wettbewerbe = $value["auswertung"]["wettbewerbe"]["gesperrt_bis"];
$sperre_sondersperrungen = $value["auswertung"]["sondersperrungen"]["gesperrt_bis"];
$sperre_wettbewerbe = str_replace(". ", "-", $sperre_wettbewerbe);
if (strtotime($sperre_wettbewerbe) > self::$_config['berechne_bis']) {
$value["gesperrt_bis"] = $sperre_wettbewerbe;
}
if (strtotime($sperre_sondersperrungen) > self::$_config['berechne_bis']) {
$value["gesperrt_bis"] = $sperre_sondersperrungen;
}
$value["punkte"] = (float)$value["punkte"];
if ($value["nominiert"] == 1 and $value["punkte"] > 0) {
$value["pos"] = $pos;
$pos++;
} else {
$value["pos"] = 0;
}
// unset($value["auswertung"]);
unset($value["nameorder"]);
unset($value["aeltestes_entscheidungs_datum"]);
unset($value["last_name"]);
unset($value["vereidigung"]);
$arr[] = $value;
}
}
$eins = $pos;
$zwei = floor($pos/2);
$drei = floor($pos/3);
$vier = floor($pos/4);
$fuenf = floor($pos/5);
$sechs = floor($pos/6);
// echo "\neins: " . $eins;
// echo "\nzwei: " . $zwei;
// echo "\ndrei: " . $drei;
// echo "\nvier: " . $vier;
// echo "\nfünf: " . $fuenf;
// echo "\nsechs: " . $sechs;
self::$_data['liste']=[];
foreach ($arr as $key => $value) {
$pos = $value["pos"];
if ($pos==1) {
$value["n1"] = 1;
$value["n2"] = 1;
$value["n3"] = 1;
$value["n4"] = 1;
$value["n5"] = 1;
$value["n6"] = 1;
} elseif ($pos>1) {
$value["n2"] = ($pos==$zwei) ? 1 : 0;
$value["n3"] = ($pos==$drei || $pos==$drei*2) ? 1 : 0;
$value["n4"] = ($pos==2 || $pos==$drei || $pos==$drei*2) ? 1 : 0;
$value["n5"] = ($pos==2 || $pos==$drei || $pos==$drei+1 || $pos==$drei*2) ? 1 : 0;
$value["n6"] = ($pos==2 || $pos==$drei || $pos==$drei+1 || $pos==$drei*2 || $pos==$drei*2+1) ? 1 : 0;
// $value["n4"] = $pos==$vier || $pos==$vier*2 || $pos==$vier*3?1:0;
// $value["n5"] = $pos==$fuenf || $pos==$fuenf*2 || $pos==$fuenf*3 || $pos==$fuenf*4?1:0;
}
if ($pos==2) {
$value["e1"] = 1;
$value["e2"] = 1;
$value["e3"] = 1;
}
if ($pos==3) {
$value["e4"] = 1;
$value["e5"] = 1;
$value["e6"] = 1;
} elseif ($pos>3) {
$value["e2"] = ($pos==$zwei+1) ? 1 : 0;
$value["e3"] = ($pos==$drei+1 || $pos==$drei*2+1) ? 1 : 0;
$value["e4"] = ($pos==4 || $pos==$drei+1 || $pos==$drei*2+1) ? 1 : 0;
$value["e5"] = ($pos==4 || $pos==$drei+2 || $pos==$drei+3 || $pos==$drei*2+1) ? 1 : 0;
$value["e6"] = ($pos==4 || $pos==$drei+2 || $pos==$drei+3 || $pos==$drei*2+2 || $pos==$drei*2+3) ? 1 : 0;
// e6 condition needs controll todo
}
self::$_data['liste'][] = $value;
}
// print_r(self::$_data['liste']);
// exit;
}
}