mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
Compare commits
192 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68403c637c | |||
| 52b7226c3b | |||
| 805fd34d17 | |||
| 79b4625ed4 | |||
| 2076752f40 | |||
| d25d181d04 | |||
| cb7a0f7669 | |||
| 68d97a5e97 | |||
| d27071528f | |||
| 17772c3738 | |||
| bbb4f8a01c | |||
| fdbb93a5c5 | |||
| b7e48633ab | |||
| 04dc1eb07b | |||
| 50b229090b | |||
| 2d27a998c4 | |||
| 090e535466 | |||
| c4d35181db | |||
| 0ac6ef4599 | |||
| 7f13c128f1 | |||
| cb60ddcc94 | |||
| bd4ced9559 | |||
| a04d2acb86 | |||
| de2aabf00b | |||
| 40c3a13a0c | |||
| 685fc69e5d | |||
| 58a921b500 | |||
| 0c002b3969 | |||
| 552faefa51 | |||
| 954397f028 | |||
| 80faa61c91 | |||
| 961ede66a9 | |||
| 6fec8382b5 | |||
| 4eb076d115 | |||
| 7427aa87ea | |||
| 85043e57db | |||
| 5beddbccb4 | |||
| e2ae9b88c8 | |||
| ca3abf9154 | |||
| f863c6d728 | |||
| 92a2053b42 | |||
| 2307565696 | |||
| 70602be54e | |||
| dac71f597a | |||
| 3a646ffe77 | |||
| 26db4a5e7a | |||
| ace2057166 | |||
| 98a10a2f55 | |||
| e48b94b858 | |||
| 0ff29ba6af | |||
| ba543448ae | |||
| f121f9b5a2 | |||
| 2428589bca | |||
| 88b22f5490 | |||
| 4b7ee9abe1 | |||
| d499619cf3 | |||
| f489153ff3 | |||
| 9b79a07fa2 | |||
| 6ce14a25d7 | |||
| c701d92779 | |||
| 73e03ba901 | |||
| 95a7797ae9 | |||
| 3ce3eff022 | |||
| 21d80905a2 | |||
| 953a04f24a | |||
| 3a91b12f31 | |||
| ea0a249612 | |||
| 843894405e | |||
| 8fddbc3a32 | |||
| b2538075ee | |||
| 5c463c0866 | |||
| 423bbd95a6 | |||
| 82d640b1f4 | |||
| 386cc779bf | |||
| 08c6d58a50 | |||
| 3f53c5feba | |||
| 298dbbf400 | |||
| 2c057aad58 | |||
| c2ce831bca | |||
| 21c1f13b28 | |||
| e0079bb812 | |||
| 966d1d10f6 | |||
| 76936ad74f | |||
| 6fbb09eb6e | |||
| cfe1307018 | |||
| 5139c3e44e | |||
| 5b4e632526 | |||
| 627a52e3d1 | |||
| 1951cd6fa8 | |||
| e3093bdf3f | |||
| b11d8d056a | |||
| 3a4015eced | |||
| aeb5d40840 | |||
| 49c712a5b6 | |||
| 46817b846a | |||
| 8c75608eaf | |||
| 2720ed9ffb | |||
| 2fc392c084 | |||
| ca630e94ae | |||
| 9cff50fa3b | |||
| 3d7a6b1ad3 | |||
| f15fd40636 | |||
| 054cf2f258 | |||
| dc067a619b | |||
| 2a762fa4ab | |||
| ccade6ae0e | |||
| 6971aed030 | |||
| 60e556b2a8 | |||
| 42fbbc5257 | |||
| d01dedb79c | |||
| 1972b461e7 | |||
| e957926a4d | |||
| bac2c13da3 | |||
| b90c26412a | |||
| 65c7ad2aac | |||
| 126a2d3b7b | |||
| 5c2038fb79 | |||
| 60734f708e | |||
| 9e6c15a10d | |||
| 14a8e2f001 | |||
| 7603f8f12b | |||
| 059b13938e | |||
| a4f2502fe6 | |||
| 7c1762d467 | |||
| c3d20bb181 | |||
| 6b816def31 | |||
| 5fbcf588ed | |||
| fc4e79c1f5 | |||
| 41b2a6d1d4 | |||
| e054f1222b | |||
| c57eb1b8de | |||
| f1dbc6ab7d | |||
| d1015956d1 | |||
| 726fce9fac | |||
| 1b400f7d42 | |||
| 43811d5724 | |||
| 4c03668082 | |||
| 10d52caa98 | |||
| 2de6278603 | |||
| 85db467cff | |||
| 1c65d6e076 | |||
| f72ea1a655 | |||
| 413ccba64b | |||
| 27a91de5f6 | |||
| 7ccc26c878 | |||
| 9ebc847e8e | |||
| 511b04c1f8 | |||
| ec90d35e02 | |||
| 9ccbb7b9e2 | |||
| d6803a3947 | |||
| 545e2b0445 | |||
| 131ec86dee | |||
| cd03264ab4 | |||
| c6232f7959 | |||
| cf2cc796b3 | |||
| 475888d4ac | |||
| 4b8b3c90fb | |||
| b168ebb5f6 | |||
| 4f104523ff | |||
| a259db2e7b | |||
| 02153e469f | |||
| 3e77d80d26 | |||
| 2d71a436f6 | |||
| 026bd6e247 | |||
| 9c37215e62 | |||
| 733a6a8c15 | |||
| a24483188b | |||
| 38e8f91fdf | |||
| ba6224bc78 | |||
| d542cf7720 | |||
| ab99806335 | |||
| 2cbc169484 | |||
| 0acf604213 | |||
| 8ab96fd1c4 | |||
| 2db4e596cf | |||
| d58d386993 | |||
| 342afe9e82 | |||
| 2e0a4ef7a0 | |||
| 6369202f99 | |||
| 13a27d7e6f | |||
| c9db3bbc1f | |||
| 65f4fbd775 | |||
| a9653f79cf | |||
| de9bb454e4 | |||
| b2d2c3e2c3 | |||
| 98e3872b6b | |||
| 0fab316927 | |||
| 21170abd53 | |||
| dfc5a38d2e | |||
| 4152a7d969 | |||
| 6bf22cfef6 | |||
| 458db654c2 |
@@ -0,0 +1,514 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
$config['fehler'] = array(
|
||||
array(
|
||||
'fehlercode' => 'CORE_ZGV_0001',
|
||||
'fehler_kurzbz' => 'zgvDatumInZukunft',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'ZGV Datum in Zukunft',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => array('core'),
|
||||
'producerLibName' => 'ZgvDatumInZukunft',
|
||||
'resolverLibName' => 'CORE_ZGV_0001',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_ZGV_0002',
|
||||
'fehler_kurzbz' => 'zgvDatumVorGeburtsdatum',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'ZGV Datum vor Geburtsdatum',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'ZgvDatumVorGeburtsdatum',
|
||||
'resolverLibName' => 'CORE_ZGV_0002',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_ZGV_0003',
|
||||
'fehler_kurzbz' => 'zgvMasterDatumInZukunft',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'ZGV Masterdatum in Zukunft',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'ZgvMasterDatumInZukunft',
|
||||
'resolverLibName' => 'CORE_ZGV_0003',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_ZGV_0004',
|
||||
'fehler_kurzbz' => 'zgvMasterDatumVorZgvdatum',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'ZGV Masterdatum vor Zgvdatum',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'ZgvMasterDatumVorZgvdatum',
|
||||
'resolverLibName' => 'CORE_ZGV_0004',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_ZGV_0005',
|
||||
'fehler_kurzbz' => 'zgvMasterDatumVorGeburtsdatum',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'ZGV Masterdatum vor Geburtsdatum',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'ZgvMasterDatumVorGeburtsdatum',
|
||||
'resolverLibName' => 'CORE_ZGV_0005',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0001',
|
||||
'fehler_kurzbz' => 'keinAufenthaltszweckPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Kein Aufenthaltszweck gefunden',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'KeinAufenthaltszweckPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0001',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0002',
|
||||
'fehler_kurzbz' => 'zuVieleZweckeIncomingPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Es sind %s Aufenthaltszwecke eingetragen (max. 1 Zweck für Incomings)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'ZuVieleZweckeIncomingPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0002',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0003',
|
||||
'fehler_kurzbz' => 'falscherIncomingZweckPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Aufenthaltszweckcode ist %s (für Incomings ist nur Zweck 1, 2, 3 erlaubt)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'FalscherIncomingZweckPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0003',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0004',
|
||||
'fehler_kurzbz' => 'outgoingAufenthaltfoerderungfehltPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Keine Aufenthaltsfoerderung angegeben (bei Outgoings >= 29 Tage Monat im Ausland muss mind. 1 gemeldet werden)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'OutgoingAufenthaltfoerderungfehltPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0004',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0005',
|
||||
'fehler_kurzbz' => 'outgoingAngerechneteEctsFehlenPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Angerechnete ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'OutgoingAngerechneteEctsFehlenPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0005',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0006',
|
||||
'fehler_kurzbz' => 'outgoingErworbeneEctsFehlenPlausi',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Erworbene ECTS fehlen (Meldepflicht bei Outgoings >= 29 Tage Monat im Ausland)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'OutgoingErworbeneEctsFehlenPlausi',
|
||||
'resolverLibName' => 'CORE_INOUT_0006',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
|
||||
/** Plausichecks **/
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0007',
|
||||
'fehler_kurzbz' => 'IncomingHeimatNationOesterreich',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Heimatnation bei Incoming Österreich',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'IncomingHeimatNationOesterreich',
|
||||
'resolverLibName' => 'CORE_INOUT_0007',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0008',
|
||||
'fehler_kurzbz' => 'IncomingOhneIoDatensatz',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Incoming hat keinen IO Datensatz (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'IncomingOhneIoDatensatz',
|
||||
'resolverLibName' => 'CORE_INOUT_0008',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_INOUT_0009',
|
||||
'fehler_kurzbz' => 'IncomingOrGsFoerderrelevant',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Incoming oder gemeinsames Studium ist nicht als nicht förderrelevant markiert. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'IncomingOrGsFoerderrelevant',
|
||||
'resolverLibName' => 'CORE_INOUT_0009',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STG_0001',
|
||||
'fehler_kurzbz' => 'StgPrestudentUngleichStgStudent',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Studiengang des Prestudenten ist ungleich dem Studiengang des Studenten. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'StgPrestudentUngleichStgStudent',
|
||||
'resolverLibName' => 'CORE_STG_0001',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STG_0002',
|
||||
'fehler_kurzbz' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Es ist kein Studienplan mit Studiengang (%s) und Organisationsform (%s) des Studenten zugewiesen. (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'resolverLibName' => 'CORE_STG_0002',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STG_0003',
|
||||
'fehler_kurzbz' => 'PrestudentMischformOhneOrgform',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Organisationsform ist für Studierenden/BewerberIn in Mischformstudiengang nicht eingetragen. (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'PrestudentMischformOhneOrgform',
|
||||
'resolverLibName' => 'CORE_STG_0003',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STG_0004',
|
||||
'fehler_kurzbz' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Studiengang des Prestudenten passt nicht zu Studiengang des Studienplans. (prestudent_id %s, Studienplan %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'resolverLibName' => 'CORE_STG_0004',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0001',
|
||||
'fehler_kurzbz' => 'AbbrecherAktiv',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'AbbrecherIn hat aktiven Benutzer. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AbbrecherAktiv',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0002',
|
||||
'fehler_kurzbz' => 'StudentstatusNachAbbrecher',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Aktiver Status nach Abbrecher Status. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'StudentstatusNachAbbrecher',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0002',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0003',
|
||||
'fehler_kurzbz' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Ausbildungssemester %s des aktuellen Status stimmt nicht mit Ausbildungssemester %s bei StudentIn (Lehrverband) überein. (student_uid %s, prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'warning',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0003',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0004',
|
||||
'fehler_kurzbz' => 'InaktiverStudentAktiverStatus',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Inaktiver Benutzer hat aktiven Status. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'warning',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'InaktiverStudentAktiverStatus',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0004',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0005',
|
||||
'fehler_kurzbz' => 'InskriptionVorLetzerBismeldung',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Datum der Inskription liegt vor dem Datum der letzten BIS-Meldung %s. (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'InskriptionVorLetzerBismeldung',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0005',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0006',
|
||||
'fehler_kurzbz' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Datum und Studiensemester sind bei den Status in falscher Reihenfolge. (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0006',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0007',
|
||||
'fehler_kurzbz' => 'AktiverStudentOhneStatus',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Aktive/r StudentIn ohne aktuellen Status (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AktiverStudentOhneStatus',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0007',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
//~ array(
|
||||
//~ 'fehlercode' => 'CORE_STUDENTSTATUS_0008',
|
||||
//~ 'fehler_kurzbz' => 'StudienplanUngueltig',
|
||||
//~ 'fehlercode_extern' => null,
|
||||
//~ 'fehlertext' => 'Studienplan %s ist im Ausbildungssemester %s nicht gültig (prestudent_id %s)',
|
||||
//~ 'fehlertyp_kurzbz' => 'error',
|
||||
//~ 'app' => 'core',
|
||||
//~ 'producerLibName' => 'StudienplanUngueltig',
|
||||
//~ 'resolverLibName' => 'CORE_STUDENTSTATUS_0008',
|
||||
//~ 'producerIsResolver' => false
|
||||
//~ ),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0009',
|
||||
'fehler_kurzbz' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Mehrere oder keine bestandenen Abschlussprüfungen (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0009',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0010',
|
||||
'fehler_kurzbz' => 'DatumAbschlusspruefungFehlt',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Kein Abschlussprüfung Datum (prestudent_id %s, abschlusspruefung_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'DatumAbschlusspruefungFehlt',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0010',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0011',
|
||||
'fehler_kurzbz' => 'DatumSponsionFehlt',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Kein Sponsionsdatum (prestudent_id %s, abschlusspruefung_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'DatumSponsionFehlt',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0011',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
//~ array(
|
||||
//~ 'fehlercode' => 'CORE_STUDENTSTATUS_0012',
|
||||
//~ 'fehler_kurzbz' => 'BewerberNichtZumRtAngetreten',
|
||||
//~ 'fehlercode_extern' => null,
|
||||
//~ 'fehlertext' => 'Bewerber nicht zum Reihungstest angetreten (prestudent_id %s)',
|
||||
//~ 'fehlertyp_kurzbz' => 'warning',
|
||||
//~ 'app' => 'core',
|
||||
//~ 'producerLibName' => 'BewerberNichtZumRtAngetreten',
|
||||
//~ 'resolverLibName' => 'CORE_STUDENTSTATUS_0012',
|
||||
//~ 'producerIsResolver' => false
|
||||
//~ ),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0013',
|
||||
'fehler_kurzbz' => 'AktSemesterNull',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Aktuelles Ausbildungssemester ist 0 (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AktSemesterNull',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0013',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0014',
|
||||
'fehler_kurzbz' => 'AbschlussstatusFehlt',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Kein Abschlussstatus (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'warning',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AbschlussstatusFehlt',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0014',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0015',
|
||||
'fehler_kurzbz' => 'AktiverStudentstatusOhneKontobuchung',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Keine Kontobuchung bei aktivem Studentstatus (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AktiverStudentstatusOhneKontobuchung',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0015',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0016',
|
||||
'fehler_kurzbz' => 'DualesStudiumOhneMarkierung',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'StudentIn in dualem Studiengang nicht als dual markiert (prestudent_id %s, Studienplan %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'DualesStudiumOhneMarkierung',
|
||||
'resolverLibName' => 'CORE_STUDENTSTATUS_0016',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0017',
|
||||
'fehler_kurzbz' => 'BeginndatumVorBismeldung',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Statusdatum vor Bismeldedatum eingetragen, nachdem das Bismeldedatum erreicht wurde (prestudent_id %s, Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'BeginndatumVorBismeldung',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0018',
|
||||
'fehler_kurzbz' => 'StudentstatusNachDiplomand',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Studentstatus nach Diplomandenstatus (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'StudentstatusNachDiplomand',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0019',
|
||||
'fehler_kurzbz' => 'OrgformBewerberUngleichOrgformStudent',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Orgform des Bewerbers (Studienplan) stimmt nicht mit Orgform des ersten Studenten überein (prestudent_id %s, Student Studiensemester %s, Bewerber Studiensemester %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'OrgformBewerberUngleichOrgformStudent',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0020',
|
||||
'fehler_kurzbz' => 'StartsemesterUngleichPersonenkennzeichen',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Semester des ersten Studentstatus stimmt nicht mit Personenkennzeichen überein (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'StartsemesterUngleichPersonenkennzeichen',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0021',
|
||||
'fehler_kurzbz' => 'AbschlusspruefungOderAbsolventFehlt',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Keine Abschlussprüfung vor der Bismeldung oder kein Absolventenstatus vor der Bismeldung (prestudent_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'AbschlusspruefungOderAbsolventFehlt',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_STUDENTSTATUS_0022',
|
||||
'fehler_kurzbz' => 'FalscheStatusabfolgeVorStudentstatus',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Falsche Statusabfolge vor Studentstatus (prestudent_id %s, Studiensemester %s, richtige Abfolge: %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'FalscheStatusabfolgeVorStudentstatus',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0001',
|
||||
'fehler_kurzbz' => 'GbDatumWeitZurueck',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Geburtsdatum vor dem 01.01.1920',
|
||||
'fehlertyp_kurzbz' => 'warning',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'GbDatumWeitZurueck',
|
||||
'resolverLibName' => 'CORE_PERSON_0001',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0002',
|
||||
'fehler_kurzbz' => 'NationNichtOesterreichAberGemeinde',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Nation der Adresse ist ungleich Österreich, es ist aber eine österreichische Gemeinde (%s) angegeben (adresse_id %s)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'NationNichtOesterreichAberGemeinde',
|
||||
'resolverLibName' => 'CORE_PERSON_0002',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0003',
|
||||
'fehler_kurzbz' => 'FalscheAnzahlHeimatadressen',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Es sind mehrere oder keine Heimatadressen eingetragen',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'FalscheAnzahlHeimatadressen',
|
||||
'resolverLibName' => 'CORE_PERSON_0003',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0004',
|
||||
'fehler_kurzbz' => 'FalscheAnzahlZustelladressen',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Es sind mehrere oder keine Zustelladressen eingetragen',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'FalscheAnzahlZustelladressen',
|
||||
'resolverLibName' => 'CORE_PERSON_0004',
|
||||
'producerIsResolver' => false
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0005',
|
||||
'fehler_kurzbz' => 'geburtsnationFehlt',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Geburtsnation nicht vorhanden',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'GeburtsnationFehlt',
|
||||
'resolverLibName' => null,
|
||||
'producerIsResolver' => true
|
||||
),
|
||||
array(
|
||||
'fehlercode' => 'CORE_PERSON_0006',
|
||||
'fehler_kurzbz' => 'uhstatPersonkennungFehltCore',
|
||||
'fehlercode_extern' => null,
|
||||
'fehlertext' => 'Personkennung fehlt (vBpk AS, vBpk BF oder Ersatzkennzeichen fehlt)',
|
||||
'fehlertyp_kurzbz' => 'error',
|
||||
'app' => 'core',
|
||||
'producerLibName' => 'UhstatPersonkennungFehltCore',
|
||||
'resolverLibName' => 'CORE_PERSON_0006',
|
||||
'producerIsResolver' => false
|
||||
)
|
||||
);
|
||||
@@ -208,7 +208,14 @@ $config['navigation_header'] = array(
|
||||
'expand' => true,
|
||||
'sort' => 30,
|
||||
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
|
||||
)
|
||||
),
|
||||
'dashboardadmin' => array(
|
||||
'link' => site_url('dashboard/Admin'),
|
||||
'description' => 'Dashboard Admin',
|
||||
'expand' => true,
|
||||
'sort' => 40,
|
||||
'requiredPermissions' => 'dashboard/admin:r'
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -220,7 +220,7 @@ class Documents extends FHCAPI_Controller
|
||||
'gedruckt' => true,
|
||||
'insertamum' => date('c'),
|
||||
'insertvon' => getAuthUID(),
|
||||
'uid' => $this->input->post_get('uid') ?: '',
|
||||
'uid' => $this->input->post_get('uid') ?: null,
|
||||
'archiv' => true,
|
||||
'signiert' => !!$sign_user,
|
||||
'stud_selfservice' => $vorlage->stud_selfservice
|
||||
@@ -334,6 +334,7 @@ class Documents extends FHCAPI_Controller
|
||||
if ($prestudent_id) {
|
||||
$this->load->model('crm/prestudent_model', 'PrestudentModel');
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||
$this->PrestudentModel->addSelect('tbl_prestudent.*, UPPER(typ || kurzbz) AS kuerzel');
|
||||
$result = $this->PrestudentModel->load($prestudent_id);
|
||||
$prestudent = current($this->getDataOrTerminateWithError($result));
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about addresses
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class Board extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'list' => 'dashboard/admin:r',
|
||||
'create' => 'dashboard/admin:rw',
|
||||
'update' => 'dashboard/admin:rw',
|
||||
'delete' => 'dashboard/admin:rw'
|
||||
]);
|
||||
|
||||
// Models
|
||||
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
$result = $this->DashboardModel->load();
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||
|
||||
$result = $this->DashboardModel->insert([
|
||||
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$dashboard_id = $this->input->post('dashboard_id');
|
||||
$dashboard_kurzbz = $this->input->post('dashboard_kurzbz');
|
||||
$beschreibung = $this->input->post('beschreibung');
|
||||
|
||||
$result = $this->DashboardModel->update([
|
||||
'dashboard_id' => $dashboard_id
|
||||
], [
|
||||
'dashboard_kurzbz' => $dashboard_kurzbz,
|
||||
'beschreibung' => $beschreibung
|
||||
]);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard_id', 'Dashboard ID', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$dashboard_id = $this->input->post('dashboard_id');
|
||||
|
||||
//delete all presets
|
||||
$this->load->model('dashboard/Dashboard_Preset_model', 'DashboardPresetModel');
|
||||
|
||||
$result = $this->DashboardPresetModel->delete([
|
||||
'dashboard_id' => $dashboard_id
|
||||
]);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
//delete all widgets
|
||||
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||
|
||||
$result = $this->DashboardWidgetModel->delete([
|
||||
'dashboard_id' => $dashboard_id
|
||||
]);
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$result = $this->DashboardModel->delete($dashboard_id);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about addresses
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class Preset extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'list' => 'dashboard/admin:r',
|
||||
'getBatch' => 'dashboard/admin:r',
|
||||
'addWidget' => 'dashboard/admin:rw',
|
||||
'removeWidget' => 'dashboard/admin:rw'
|
||||
]);
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'ui'
|
||||
]);
|
||||
|
||||
// Libraries
|
||||
$this->load->library('dashboard/DashboardLib');
|
||||
|
||||
// Models
|
||||
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||
}
|
||||
|
||||
public function list($dashboard_kurzbz)
|
||||
{
|
||||
$sql = "
|
||||
WITH
|
||||
dashboard_presets AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
dashboard.tbl_dashboard_preset dp
|
||||
JOIN
|
||||
dashboard.tbl_dashboard d ON d.dashboard_id = dp.dashboard_id
|
||||
WHERE
|
||||
d.dashboard_kurzbz = {$this->db->escape($dashboard_kurzbz)}
|
||||
),
|
||||
general AS (
|
||||
SELECT
|
||||
'general' AS funktion_kurzbz,
|
||||
'Allgemein' AS beschreibung
|
||||
)
|
||||
|
||||
(
|
||||
SELECT
|
||||
f.funktion_kurzbz,
|
||||
f.beschreibung,
|
||||
COUNT(p.preset_id) AS has_preset
|
||||
FROM
|
||||
general f
|
||||
LEFT JOIN
|
||||
dashboard_presets p ON p.funktion_kurzbz IS NULL
|
||||
GROUP BY
|
||||
f.funktion_kurzbz, f.beschreibung
|
||||
)
|
||||
UNION ALL
|
||||
(
|
||||
SELECT
|
||||
f.funktion_kurzbz,
|
||||
f.beschreibung,
|
||||
COUNT(p.preset_id) AS has_preset
|
||||
FROM
|
||||
public.tbl_funktion f
|
||||
LEFT JOIN
|
||||
dashboard_presets p ON p.funktion_kurzbz = f.funktion_kurzbz
|
||||
GROUP BY
|
||||
f.funktion_kurzbz, f.beschreibung
|
||||
ORDER BY
|
||||
f.beschreibung ASC
|
||||
)
|
||||
";
|
||||
|
||||
$result = $this->FunktionModel->execReadOnlyQuery($sql);
|
||||
|
||||
$funktionen = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($funktionen);
|
||||
}
|
||||
|
||||
public function getBatch()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$db = $this->input->post('db');
|
||||
$funktionen = $this->input->post('funktionen') ?: [];
|
||||
|
||||
$result = [];
|
||||
|
||||
foreach ($funktionen as $funktion) {
|
||||
$conf = $this->dashboardlib->getPreset($db, $funktion);
|
||||
if ($conf) {
|
||||
$preset = json_decode($conf->preset, true);
|
||||
if (!isset($preset[$funktion]) || !isset($preset[$funktion]['widgets']))
|
||||
$result[$funktion] = [];
|
||||
else
|
||||
$result[$funktion] = $preset[$funktion]['widgets'];
|
||||
} else {
|
||||
$result[$funktion] = [];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->terminateWithSuccess($result);
|
||||
}
|
||||
|
||||
public function addWidget()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||
$widget = $this->input->post('widget');
|
||||
|
||||
if (!isset($widget['widgetid']))
|
||||
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||
|
||||
$preset = $this->dashboardlib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||
|
||||
$preset_decoded = json_decode($preset->preset, true);
|
||||
|
||||
$this->dashboardlib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, [$widget]);
|
||||
|
||||
$preset->preset = json_encode($preset_decoded);
|
||||
|
||||
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($widget['widgetid']);
|
||||
}
|
||||
|
||||
public function removeWidget()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('db', 'Dashboard', 'required');
|
||||
$this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required');
|
||||
$this->form_validation->set_rules('widgetid', 'Widget', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$dashboard_kurzbz = $this->input->post('db');
|
||||
$funktion_kurzbz = $this->input->post('funktion_kurzbz');
|
||||
$widgetid = $this->input->post('widgetid');
|
||||
|
||||
$preset = $this->dashboardlib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||
if (!$preset)
|
||||
show_404();
|
||||
|
||||
$preset_decoded = json_decode($preset->preset, true);
|
||||
|
||||
if (!$this->dashboardlib->removeWidgetFromWidgets($preset_decoded, $funktion_kurzbz, $widgetid))
|
||||
show_404();
|
||||
|
||||
$preset->preset = json_encode($preset_decoded);
|
||||
|
||||
$result = $this->dashboardlib->insertOrUpdatePreset($preset);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess(array('msg' => $this->p->t('dashboard', 'success_savePreset')));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about the users dashboard
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class User extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'get' => 'dashboard/benutzer:r',
|
||||
'addWidget' => 'dashboard/benutzer:rw',
|
||||
'removeWidget' => 'dashboard/benutzer:rw'
|
||||
]);
|
||||
|
||||
// Libraries
|
||||
$this->load->library('dashboard/DashboardLib');
|
||||
|
||||
// Models
|
||||
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||
}
|
||||
|
||||
public function get($dashboard_kurzbz)
|
||||
{
|
||||
$dashboard = $this->dashboardlib->getDashboardByKurzbz($dashboard_kurzbz);
|
||||
if (!$dashboard)
|
||||
show_404();
|
||||
|
||||
$uid = $this->authlib->getAuthObj()->username;
|
||||
|
||||
/*$mergedconfig = $this->dashboardlib->getMergedConfig($dashboard->dashboard_id, $uid);
|
||||
|
||||
$this->terminateWithSuccess([
|
||||
'general' => call_user_func_array(
|
||||
'array_merge_recursive',
|
||||
$mergedconfig
|
||||
)
|
||||
]);*/
|
||||
$defaultconfig = $this->dashboardlib->getDefaultConfig($dashboard->dashboard_id);
|
||||
$userconfig = $this->dashboardlib->getUserConfig($dashboard->dashboard_id, $uid);
|
||||
|
||||
$defaultconfig_squashed = $defaultconfig ? call_user_func_array('array_replace_recursive', $defaultconfig) : [];
|
||||
$userconfig_squashed = $userconfig ? call_user_func_array('array_replace_recursive', $userconfig) : [];
|
||||
|
||||
$mergedconfig = array_replace_recursive($defaultconfig_squashed, $userconfig_squashed);
|
||||
|
||||
$this->terminateWithSuccess([
|
||||
DashboardLib::SECTION_IF_FUNKTION_KURZBZ_IS_NULL => $mergedconfig
|
||||
]);
|
||||
}
|
||||
|
||||
public function addWidget()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||
$this->form_validation->set_rules('widget[widget]', 'Widget', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$widget = $this->input->post('widget');
|
||||
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||
$uid = $this->authlib->getAuthObj()->username;
|
||||
|
||||
if (!isset($widget['widgetid']))
|
||||
$widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz);
|
||||
|
||||
$override = $this->dashboardlib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
||||
|
||||
$override_decoded = json_decode($override->override, true);
|
||||
|
||||
if (!isset($override_decoded['general']) || !is_array($override_decoded['general']))
|
||||
$override_decoded['general'] = [];
|
||||
|
||||
if (!isset($override_decoded['general']['widgets']))
|
||||
$override_decoded['general']['widgets'] = [];
|
||||
|
||||
$override_decoded['general']['widgets'][$widget['widgetid']] = $widget;
|
||||
|
||||
// NOTE(chris): remove doubles in other funktionen
|
||||
foreach ($override_decoded as $funktion => $array) {
|
||||
if ($funktion == 'general')
|
||||
continue;
|
||||
if (isset($array['widgets']) && isset($array['widgets'][$widget['widgetid']]))
|
||||
unset($override_decoded[$funktion]['widgets'][$widget['widgetid']]);
|
||||
}
|
||||
|
||||
$override->override = json_encode($override_decoded);
|
||||
|
||||
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($widget['widgetid']);
|
||||
}
|
||||
|
||||
public function removeWidget()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard', 'Dashboard', 'required');
|
||||
$this->form_validation->set_rules('widget', 'Widget', 'required');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$widget_id = $this->input->post('widget');
|
||||
$dashboard_kurzbz = $this->input->post('dashboard');
|
||||
$uid = $this->authlib->getAuthObj()->username;
|
||||
|
||||
$override = $this->dashboardlib->getOverride($dashboard_kurzbz, $uid);
|
||||
if (!$override)
|
||||
show_404();
|
||||
|
||||
$override_decoded = json_decode($override->override, true);
|
||||
|
||||
foreach (array_keys($override_decoded) as $k) {
|
||||
if (!isset($override_decoded[$k]["widgets"])) {
|
||||
unset($override_decoded[$k]);
|
||||
continue;
|
||||
}
|
||||
if (isset($override_decoded[$k]["widgets"][$widget_id])) {
|
||||
unset($override_decoded[$k]["widgets"][$widget_id]);
|
||||
}
|
||||
if (!$override_decoded[$k]["widgets"]) {
|
||||
unset($override_decoded[$k]);
|
||||
}
|
||||
}
|
||||
|
||||
$override->override = json_encode($override_decoded);
|
||||
|
||||
$result = $this->dashboardlib->insertOrUpdateOverride($override);
|
||||
|
||||
$this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* This controller operates between (interface) the JS (GUI) and the back-end
|
||||
* Provides data to the ajax get calls about the users dashboard
|
||||
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
|
||||
*/
|
||||
class Widget extends FHCAPI_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct([
|
||||
'get' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
||||
'list' => 'dashboard/admin:r',
|
||||
'listAllowed' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
||||
'setAllowed' => 'dashboard/admin:rw'
|
||||
]);
|
||||
|
||||
// Libraries
|
||||
$this->load->library('dashboard/DashboardLib');
|
||||
|
||||
// Models
|
||||
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
||||
}
|
||||
|
||||
public function get($id)
|
||||
{
|
||||
$result = $this->WidgetModel->load($id);
|
||||
|
||||
$widget = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
if (!$widget)
|
||||
return $this->terminateWithSuccess([
|
||||
"widget_id" => 0,
|
||||
"widget_kurzbz" => "notfound",
|
||||
"arguments" => [
|
||||
"className" => 'alert-danger',
|
||||
"title" => 'Widget Not Found',
|
||||
"msg" => 'The widget with the id ' . $id . ' could not be found'
|
||||
],
|
||||
"setup" => [
|
||||
"name" => 'Widget Not Found',
|
||||
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
||||
"width" => 1,
|
||||
"height" => 1
|
||||
]
|
||||
]);
|
||||
|
||||
$widget = current($widget);
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
|
||||
$this->terminateWithSuccess($widget);
|
||||
}
|
||||
|
||||
public function list($dashboard)
|
||||
{
|
||||
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard);
|
||||
|
||||
$widgets = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$widgets = array_map(function ($widget) {
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
return $widget;
|
||||
}, $widgets);
|
||||
|
||||
$this->terminateWithSuccess($widgets);
|
||||
}
|
||||
|
||||
public function listAllowed($dashboard)
|
||||
{
|
||||
$result = $this->WidgetModel->getForDashboard($dashboard);
|
||||
|
||||
$widgets = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$widgets = array_map(function ($widget) {
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
return $widget;
|
||||
}, $widgets);
|
||||
|
||||
$this->terminateWithSuccess($widgets);
|
||||
}
|
||||
|
||||
public function setAllowed()
|
||||
{
|
||||
$this->load->library('form_validation');
|
||||
|
||||
$this->form_validation->set_rules('dashboard_id', 'Dashboard', 'required');
|
||||
$this->form_validation->set_rules('widget_id', 'Widget', 'required');
|
||||
$this->form_validation->set_rules('allowed', 'Allowed', 'is_bool');
|
||||
|
||||
if (!$this->form_validation->run())
|
||||
$this->terminateWithValidationErrors($this->form_validation->error_array());
|
||||
|
||||
$data = [
|
||||
'dashboard_id' => $this->input->post('dashboard_id'),
|
||||
'widget_id' => $this->input->post('widget_id')
|
||||
];
|
||||
|
||||
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||
|
||||
if ($this->input->post('allowed'))
|
||||
$result = $this->DashboardWidgetModel->insert($data);
|
||||
else
|
||||
$result = $this->DashboardWidgetModel->delete($data);
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
|
||||
class IssueChecker extends FHCAPI_Controller
|
||||
{
|
||||
const DEFAULT_PERMISSION = 'system/issues_verwalten:r';
|
||||
|
||||
protected $person_id;
|
||||
protected $_extensionName = null;
|
||||
protected $_fehlercodes = [];
|
||||
protected $_apps = [];
|
||||
|
||||
protected $errors = [];
|
||||
protected $infos = [];
|
||||
|
||||
public function __construct($permissions = [])
|
||||
{
|
||||
$default_permissions = [
|
||||
'checkPerson' => self::DEFAULT_PERMISSION,
|
||||
'countPersonOpenIssues' => self::DEFAULT_PERMISSION
|
||||
];
|
||||
|
||||
if(!is_array($permissions))
|
||||
{
|
||||
$this->terminateWithError("Issue Checker: permissions must be an array");
|
||||
}
|
||||
|
||||
$merged_permissions = array_merge($default_permissions, $permissions);
|
||||
|
||||
parent::__construct($merged_permissions);
|
||||
|
||||
$this->load->model('system/Issue_model', 'IssueModel');
|
||||
$this->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->load->model('person/Person_model', 'PersonModel');
|
||||
|
||||
$producerArgs = [];
|
||||
$resolverArgs = [];
|
||||
|
||||
// get fehler kurzbz from fehlercodes, if fehlercodes provided
|
||||
if (!isEmptyArray($this->_fehlercodes))
|
||||
{
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz');
|
||||
$this->FehlerModel->db->where_in('tbl_fehler.fehlercode', $this->_fehlercodes);
|
||||
$fehlerKurzbzRes = $this->FehlerModel->load();
|
||||
|
||||
if (isError($fehlerKurzbzRes)) $this->terminateWithError(getError($fehlerKurzbzRes), self::ERROR_TYPE_GENERAL);
|
||||
if (hasData($fehlerKurzbzRes))
|
||||
{
|
||||
$producerArgs['fehlerKurzbz'] = array_column(getData($fehlerKurzbzRes), 'fehler_kurzbz');
|
||||
$resolverArgs['fehlercode'] = array_column(getData($fehlerKurzbzRes), 'fehlercode');
|
||||
}
|
||||
}
|
||||
elseif (!isEmptyArray($this->_apps)) // if apps are provided
|
||||
{
|
||||
// get fehlercodes for the apps
|
||||
$fehlerRes = $this->FehlerModel->getByApps($this->_apps);
|
||||
if (hasData($fehlerRes)) $this->_fehlercodes = array_column(getData($fehlerRes), 'fehlercode');
|
||||
|
||||
$producerArgs['apps'] = $this->_apps;
|
||||
$resolverArgs['apps'] = $this->_apps;
|
||||
}
|
||||
|
||||
// load producer and checker libraries with fehler kurbz and fehlercode list
|
||||
$this->load->library(
|
||||
'issues/PlausicheckProducerLib',
|
||||
$producerArgs,
|
||||
'PlausicheckProducerLib'
|
||||
);
|
||||
|
||||
$this->load->library(
|
||||
'issues/PlausicheckResolverLib',
|
||||
$resolverArgs,
|
||||
'PlausicheckResolverLib'
|
||||
);
|
||||
|
||||
$this->load->library('PhrasesLib');
|
||||
|
||||
$this->loadPhrases(
|
||||
array(
|
||||
'ui'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function checkPerson()
|
||||
{
|
||||
$person_id = $this->input->post('person_id', true);
|
||||
$hauptzustaendig = filter_var($this->input->post('hauptzustaendig', true), FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
if (!is_numeric($person_id)) $this->terminateWithError($this->p->t('ui', 'error_invalidId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$this->person_id = intval($person_id);
|
||||
$this->hauptzustaendig = $hauptzustaendig;
|
||||
|
||||
$persRes = $this->PersonModel->load($this->person_id);
|
||||
if (!hasData($persRes)) $this->terminateWithError('Person with id ' . $this->person_id . ' not found.', self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$this->_produceIssues();
|
||||
$this->_resolveIssues();
|
||||
$this->_produceIssues();
|
||||
|
||||
$openIssueCountRes = $this->_countOpenIssues();
|
||||
if (isError($openIssueCountRes)) $this->terminateWithError(getError($openIssueCountRes), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$data = array(
|
||||
'person_id' => $this->person_id,
|
||||
'openissues' => hasData($openIssueCountRes) ? getData($openIssueCountRes) : 0
|
||||
);
|
||||
|
||||
$this->addMeta('errors', $this->errors);
|
||||
$this->addMeta('infos', $this->infos);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
public function countPersonOpenIssues()
|
||||
{
|
||||
$person_id = $this->input->get('person_id', true);
|
||||
$hauptzustaendig = filter_var($this->input->get('hauptzustaendig', true), FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
if (!is_numeric($person_id)) $this->terminateWithError($this->p->t('ui', 'error_invalidId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$this->person_id = intval($person_id);
|
||||
$this->hauptzustaendig = $hauptzustaendig;
|
||||
|
||||
$persRes = $this->PersonModel->load($this->person_id);
|
||||
|
||||
if (!hasData($persRes)) $this->terminateWithError('Person with id ' . $this->person_id . ' not found.', self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$openIssueCountRes = $this->_countOpenIssues();
|
||||
if (isError($openIssueCountRes)) $this->terminateWithError(getError($openIssueCountRes), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$data = array(
|
||||
'person_id' => $this->person_id,
|
||||
'openissues' => hasData($openIssueCountRes) ? getData($openIssueCountRes) : 0
|
||||
);
|
||||
|
||||
$this->addMeta('errors', $this->errors);
|
||||
$this->addMeta('infos', $this->infos);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
protected function _countOpenIssues()
|
||||
{
|
||||
if (isEmptyArray($this->_fehlercodes)) return success([]);
|
||||
|
||||
// load open issues with given errorcodes
|
||||
$openIssuesRes = $this->IssueModel->getOpenIssues(
|
||||
$this->_fehlercodes,
|
||||
$this->person_id,
|
||||
$oe_kurzbz = null,
|
||||
$fehlercode_extern = null,
|
||||
$this->hauptzustaendig
|
||||
);
|
||||
|
||||
// log error if occured
|
||||
if (isError($openIssuesRes)) return $openIssuesRes;
|
||||
|
||||
$issues = hasData($openIssuesRes) ? getData($openIssuesRes) : [];
|
||||
$issuescount = is_array($issues) || $issues instanceof Countable ? count($issues) : 0;
|
||||
|
||||
return success($issuescount);
|
||||
}
|
||||
|
||||
protected function _produceIssues()
|
||||
{
|
||||
$result = $this->PlausicheckProducerLib->producePlausicheckIssues(
|
||||
array('person_id' => $this->person_id)
|
||||
);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isset($result->errors))
|
||||
$this->errors = array_merge($this->errors, $result->errors);
|
||||
if (isset($result->infos))
|
||||
$this->infos = array_merge($this->infos, $result->infos);
|
||||
}
|
||||
|
||||
protected function _resolveIssues()
|
||||
{
|
||||
// load open issues with given errorcodes
|
||||
$openIssuesRes = $this->IssueModel->getOpenIssues(
|
||||
$this->_fehlercodes,
|
||||
$this->person_id
|
||||
);
|
||||
|
||||
if (hasData($openIssuesRes))
|
||||
{
|
||||
$openIssues = getData($openIssuesRes);
|
||||
|
||||
$result = $this->PlausicheckResolverLib->resolvePlausicheckIssues($openIssues);
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
if (isset($result->errors))
|
||||
$this->errors = array_merge($this->errors, $result->errors);
|
||||
if (isset($result->infos))
|
||||
$this->infos = array_merge($this->infos, $result->infos);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
|
||||
|
||||
class Issues extends FHCAPI_Controller
|
||||
{
|
||||
const DEFAULT_PERMISSION = 'system/issues_verwalten:r';
|
||||
|
||||
public function __construct() {
|
||||
|
||||
parent::__construct(
|
||||
array(
|
||||
'getOpenIssuesByProperties' => Self::DEFAULT_PERMISSION,
|
||||
'getPersonenMitOffenenIssues' => Self::DEFAULT_PERMISSION
|
||||
)
|
||||
);
|
||||
|
||||
// Loads authentication library and starts authenticationfetc
|
||||
$this->load->library('AuthLib');
|
||||
|
||||
$this->load->model('extensions/FHC-Core-Personalverwaltung/Api_model','ApiModel');
|
||||
$this->load->model('person/Person_model','PersonModel');
|
||||
$this->load->model('system/Fehler_model','FehlerModel');
|
||||
$this->load->model('system/Issue_model', 'IssueModel');
|
||||
$this->load->model('person/Benutzer_model', 'BenutzerModel');
|
||||
}
|
||||
|
||||
public function getOpenIssuesByProperties()
|
||||
{
|
||||
$person_id = $this->input->get('person_id', true);
|
||||
$oe_kurzbz = $this->input->get('oe_kurzbz', true);
|
||||
$fehlertyp_kurzbz = $this->input->get('fehlertyp_kurzbz', true);
|
||||
$apps = $this->input->get('apps', true);
|
||||
$behebung_parameter = $this->input->get('behebung_parameter', true);
|
||||
$hauptzustaendig = filter_var($this->input->get('hauptzustaendig', true), FILTER_VALIDATE_BOOLEAN);
|
||||
|
||||
if (isset($person_id) && !is_numeric($person_id))
|
||||
$this->terminateWithError('person id is not numeric!');
|
||||
|
||||
if (isset($behebung_parameter) && !is_array($behebung_parameter))
|
||||
$this->terminateWithError('Behebung parameter invalid');
|
||||
|
||||
$issueRes = $this->IssueModel->getOpenIssuesByProperties(
|
||||
$person_id,
|
||||
$oe_kurzbz,
|
||||
$fehlertyp_kurzbz,
|
||||
$apps,
|
||||
$behebung_parameter,
|
||||
$hauptzustaendig
|
||||
);
|
||||
|
||||
if (isError($issueRes))
|
||||
{
|
||||
$this->terminateWithError(getError($issueRes));
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess(hasData($issueRes) ? getData($issueRes) : []);
|
||||
}
|
||||
|
||||
public function getPersonenMitOffenenIssues()
|
||||
{
|
||||
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
|
||||
person_id, uid, vorname, nachname, count(*) AS openissues ,
|
||||
(select count(*) anz_aktiv
|
||||
from hr.tbl_dienstverhaeltnis dv
|
||||
where dv.mitarbeiter_uid=uid and dv.von<=now() and
|
||||
(dv.bis is null OR dv.bis>=now())
|
||||
) aktiv
|
||||
FROM
|
||||
system.tbl_issue
|
||||
JOIN
|
||||
system.tbl_fehler USING (fehlercode)
|
||||
JOIN
|
||||
public.tbl_person USING (person_id)
|
||||
JOIN
|
||||
public.tbl_benutzer USING (person_id)
|
||||
JOIN
|
||||
public.tbl_mitarbeiter ON uid = mitarbeiter_uid
|
||||
WHERE
|
||||
app = 'personalverwaltung' AND verarbeitetamum IS NULL
|
||||
GROUP BY
|
||||
person_id, uid, vorname, nachname
|
||||
HAVING
|
||||
count(*) > 0
|
||||
ORDER BY
|
||||
count(*) DESC;
|
||||
|
||||
EOSQL;
|
||||
|
||||
$personenmitissues = $this->IssueModel->execReadOnlyQuery($sql);
|
||||
if( hasData($personenmitissues) )
|
||||
{
|
||||
$this->terminateWithSuccess(getData($personenmitissues));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->terminateWithSuccess(array());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
|
||||
require_once APPPATH.'/controllers/api/frontend/v1/issues/IssueChecker.php';
|
||||
|
||||
class StudentIssueChecker extends IssueChecker
|
||||
{
|
||||
protected $_apps = array(
|
||||
'core',
|
||||
'dvuh',
|
||||
'bis'
|
||||
);
|
||||
|
||||
//protected $_fehlercodes = array(
|
||||
//~ 'CORE_AA_0001'
|
||||
//);
|
||||
}
|
||||
@@ -42,14 +42,22 @@ class Messages extends FHCAPI_Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function getMessages($id, $type_id, $size, $page)
|
||||
public function getMessages($id, $type_id, $size=null, $page=null)
|
||||
{
|
||||
if($type_id != 'person_id'){
|
||||
$id = $this->_getPersonId($id, $type_id);
|
||||
}
|
||||
|
||||
$offset = $size * ($page - 1);
|
||||
$limit = $size;
|
||||
if(!(is_null($size) && is_null($page)))
|
||||
{
|
||||
$offset = $size * ($page - 1);
|
||||
$limit = $size;
|
||||
}
|
||||
else
|
||||
{
|
||||
$offset = null;
|
||||
$limit = null;
|
||||
}
|
||||
|
||||
$result = $this->MessageModel->getMessagesForTable($id, $offset, $limit);
|
||||
|
||||
|
||||
@@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller
|
||||
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
|
||||
|
||||
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
|
||||
|
||||
$arrayAccepted = [];
|
||||
$person_id = $this->_getPersonId($prestudent_id);
|
||||
|
||||
$docNames = array_map(function ($item) {
|
||||
return $item->dokument_kurzbz;
|
||||
}, $resultPreDoc);
|
||||
$mergedArray = [];
|
||||
|
||||
foreach($docNames as $doc)
|
||||
foreach ($resultPreDoc as $pre)
|
||||
{
|
||||
$result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
|
||||
$result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true);
|
||||
|
||||
if (isError($result))
|
||||
{
|
||||
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
|
||||
}
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$data = getData($result);
|
||||
foreach ($data as $value)
|
||||
foreach (getData($result) as $doc)
|
||||
{
|
||||
array_push($arrayAccepted, $value);
|
||||
$merged = clone $doc;
|
||||
$merged->docdatum = $pre->docdatum;
|
||||
$merged->insertvonma = $pre->insertvonma;
|
||||
$merged->bezeichnung = $pre->bezeichnung;
|
||||
$mergedArray[] = $merged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Mapping with document_kurzbz
|
||||
$preDocMap = [];
|
||||
foreach ($resultPreDoc as $pre) {
|
||||
$preDocMap[$pre->dokument_kurzbz] = $pre;
|
||||
}
|
||||
|
||||
$mergedArray = [];
|
||||
foreach ($arrayAccepted as $doc) {
|
||||
$merged = clone $doc;
|
||||
|
||||
if (isset($preDocMap[$doc->dokument_kurzbz])) {
|
||||
$merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum;
|
||||
$merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma;
|
||||
$merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung;
|
||||
} else {
|
||||
$merged->akzeptiertdatum = null;
|
||||
$merged->akzeptiertvon = null;
|
||||
else
|
||||
{
|
||||
$mergedArray[] = $pre;
|
||||
}
|
||||
|
||||
$mergedArray[] = $merged;
|
||||
}
|
||||
|
||||
$this->terminateWithSuccess($mergedArray);
|
||||
|
||||
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
|
||||
|
||||
// Load language phrases
|
||||
$this->loadPhrases([
|
||||
'konto'
|
||||
'konto',
|
||||
'lehre'
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getBuchungstypen()
|
||||
public function getBuchungstypen($studiensemester_kurzbz = null)
|
||||
{
|
||||
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
|
||||
|
||||
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->_getOEHBeitrag($data, $studiensemester_kurzbz);
|
||||
$this->terminateWithSuccess($data);
|
||||
}
|
||||
|
||||
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
|
||||
|
||||
$this->terminateWithSuccess();
|
||||
}
|
||||
|
||||
private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
|
||||
{
|
||||
if (is_null($studiensemester_kurzbz))
|
||||
{
|
||||
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
|
||||
$studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
|
||||
$studiensemester_akt = $studiensemester_kurzbz;
|
||||
else
|
||||
$this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
|
||||
}
|
||||
|
||||
$this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
|
||||
$oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
|
||||
|
||||
$oehStandardbetrag = null;
|
||||
if (hasData($oehBeitrag))
|
||||
{
|
||||
$oeh = getData($oehBeitrag)[0];
|
||||
$summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
|
||||
$oehStandardbetrag = number_format((float)$summe, 2, '.', '');
|
||||
}
|
||||
|
||||
if ($oehStandardbetrag !== null)
|
||||
{
|
||||
$data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
|
||||
if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
|
||||
{
|
||||
$buchungstyp->standardbetrag = $oehStandardbetrag;
|
||||
}
|
||||
return $buchungstyp;
|
||||
}, $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -626,7 +626,7 @@ class Students extends FHCAPI_Controller
|
||||
$this->addFilter($studiensemester_kurzbz);
|
||||
|
||||
$result = $this->PrestudentModel->loadWhere($where);
|
||||
|
||||
|
||||
$data = $this->getDataOrTerminateWithError($result);
|
||||
|
||||
$this->terminateWithSuccess($data);
|
||||
@@ -851,40 +851,44 @@ class Students extends FHCAPI_Controller
|
||||
$stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL';
|
||||
|
||||
$this->load->config('stv');
|
||||
$tags = $this->config->item('stv_prestudent_tags');
|
||||
|
||||
$whereTags = '';
|
||||
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||
$tags = array_keys($tags);
|
||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
||||
{
|
||||
$tags = $this->config->item('stv_prestudent_tags');
|
||||
|
||||
foreach ($tags as $key => $tag) {
|
||||
$tags[$key] = $this->db->escape($tag);
|
||||
$whereTags = '';
|
||||
if (is_array($tags) && !isEmptyArray($tags)) {
|
||||
$tags = array_keys($tags);
|
||||
|
||||
foreach ($tags as $key => $tag) {
|
||||
$tags[$key] = $this->db->escape($tag);
|
||||
}
|
||||
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||
}
|
||||
$whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||
$subQueryTag = "
|
||||
(
|
||||
SELECT
|
||||
tag.prestudent_id,
|
||||
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||
FROM (
|
||||
SELECT DISTINCT ON (n.notiz_id)
|
||||
n.notiz_id AS id,
|
||||
nt.typ_kurzbz,
|
||||
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||
n.text AS notiz,
|
||||
nt.style,
|
||||
n.erledigt AS done,
|
||||
nz.prestudent_id
|
||||
FROM public.tbl_notizzuordnung AS nz
|
||||
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
||||
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
||||
. $whereTags .
|
||||
"
|
||||
) AS tag
|
||||
GROUP BY tag.prestudent_id
|
||||
) AS tag_data_agg
|
||||
";
|
||||
}
|
||||
$subQueryTag = "
|
||||
(
|
||||
SELECT
|
||||
tag.prestudent_id,
|
||||
COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags
|
||||
FROM (
|
||||
SELECT DISTINCT ON (n.notiz_id)
|
||||
n.notiz_id AS id,
|
||||
nt.typ_kurzbz,
|
||||
array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung,
|
||||
n.text AS notiz,
|
||||
nt.style,
|
||||
n.erledigt AS done,
|
||||
nz.prestudent_id
|
||||
FROM public.tbl_notizzuordnung AS nz
|
||||
JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id
|
||||
JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz "
|
||||
. $whereTags .
|
||||
"
|
||||
) AS tag
|
||||
GROUP BY tag.prestudent_id
|
||||
) AS tag_data_agg
|
||||
";
|
||||
|
||||
$this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT');
|
||||
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
|
||||
@@ -907,11 +911,17 @@ class Students extends FHCAPI_Controller
|
||||
AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')
|
||||
AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
|
||||
|
||||
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
||||
{
|
||||
$this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT');
|
||||
}
|
||||
|
||||
|
||||
$this->PrestudentModel->addSelect("b.uid");
|
||||
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
||||
if(defined('STV_TAGS_ENABLED') && STV_TAGS_ENABLED)
|
||||
{
|
||||
$this->PrestudentModel->addSelect('tag_data_agg.tags');
|
||||
}
|
||||
$this->PrestudentModel->addSelect('titelpre');
|
||||
$this->PrestudentModel->addSelect('nachname');
|
||||
$this->PrestudentModel->addSelect('vorname');
|
||||
|
||||
@@ -81,7 +81,7 @@ class Bismeldestichtag extends Auth_Controller
|
||||
tbl_bismeldestichtag.insertamum, tbl_bismeldestichtag.insertvon, tbl_bismeldestichtag.updateamum, tbl_bismeldestichtag.updatevon'
|
||||
);
|
||||
$this->BismeldestichtagModel->addJoin('public.tbl_studiensemester sem', 'studiensemester_kurzbz', 'LEFT');
|
||||
$this->BismeldestichtagModel->addOrder('semester_start');
|
||||
$this->BismeldestichtagModel->addOrder('semester_start', 'DESC');
|
||||
$this->BismeldestichtagModel->addOrder('meldestichtag', 'DESC');
|
||||
$this->BismeldestichtagModel->addOrder('meldestichtag_id', 'DESC');
|
||||
$this->outputJson($this->BismeldestichtagModel->load());
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2026 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*/
|
||||
class Admin extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Set required permissions
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'dashboard/admin:rw',
|
||||
'preview' => 'dashboard/admin:r',
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('dashboard/admin.php', []);
|
||||
}
|
||||
|
||||
public function preview($dashboard_kurzbz = 'CIS')
|
||||
{
|
||||
$this->load->view('dashboard/preview.php', [
|
||||
'dashboard_kurzbz' => $dashboard_kurzbz
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
|
||||
class Api extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'dashboard/admin:rw',
|
||||
'getNews' => 'dashboard/benutzer:r',
|
||||
'getAmpeln' => 'dashboard/benutzer:r',
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->library('AuthLib', null, 'AuthLib');
|
||||
|
||||
$this->_setAuthUID();
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
echo 'Dashboard API Controller';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get News.
|
||||
*/
|
||||
public function getNews()
|
||||
{
|
||||
$limit = $this->input->get('limit');
|
||||
|
||||
$this->load->model('content/News_model', 'NewsModel');
|
||||
|
||||
$result = $this->NewsModel->getAll($limit);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->terminateWithJsonError('fehler entdeckt');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get Ampeln.
|
||||
*/
|
||||
public function getAmpeln()
|
||||
{
|
||||
|
||||
$this->load->model('content/Ampel_model', 'AmpelModel');
|
||||
$result = $this->AmpelModel->getByUser($this->_uid);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$this->outputJson(getData($result), REST_Controller::HTTP_OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->terminateWithJsonError('fehler entdeckt');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the UID of the logged user and checks if it is valid
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
/**
|
||||
* Description of Config
|
||||
*
|
||||
* @author bambi
|
||||
*/
|
||||
class Config extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'dashboard/benutzer:r',
|
||||
'dummy' => 'dashboard/benutzer:r',
|
||||
'genWidgetId' => 'dashboard/benutzer:rw',
|
||||
'addWidgetsToPreset' => 'dashboard/admin:rw',
|
||||
'removeWidgetFromPreset' => 'dashboard/admin:rw',
|
||||
'addWidgetsToUserOverride' => 'dashboard/benutzer:rw',
|
||||
'removeWidgetFromUserOverride' => 'dashboard/benutzer:rw',
|
||||
'funktionen' => 'dashboard/admin:r',
|
||||
'preset' => 'dashboard/admin:r',
|
||||
'presetBatch' => 'dashboard/admin:r'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
||||
$this->load->library('AuthLib', null, 'AuthLib');
|
||||
$this->load->model('ressource/Funktion_model', 'FunktionModel');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$dashboard_kurzbz = $this->input->get('db');
|
||||
$uid = $this->AuthLib->getAuthObj()->username;
|
||||
|
||||
$dashboard = $this->DashboardLib->getDashboardByKurzbz($dashboard_kurzbz);
|
||||
if(!$dashboard) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError(array(
|
||||
'error' => 'Dashboard ' . $dashboard_kurzbz . ' not found.'
|
||||
));
|
||||
}
|
||||
|
||||
$mergedconfig = $this->DashboardLib->getMergedConfig($dashboard->dashboard_id, $uid);
|
||||
$this->outputJsonSuccess($mergedconfig);
|
||||
}
|
||||
|
||||
public function genWidgetId()
|
||||
{
|
||||
$dashboard_kurzbz = $this->input->get('db');
|
||||
$widgetid = $this->DashboardLib->generateWidgetId($dashboard_kurzbz);
|
||||
$this->outputJsonSuccess(array(
|
||||
'widgetid' => $widgetid
|
||||
));
|
||||
}
|
||||
|
||||
public function addWidgetsToPreset()
|
||||
{
|
||||
$input = json_decode($this->input->raw_input_stream);
|
||||
$dashboard_kurzbz = $input->db;
|
||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
||||
|
||||
$preset = $this->DashboardLib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||
|
||||
$preset_decoded = json_decode($preset->preset, true);
|
||||
|
||||
$this->DashboardLib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
||||
|
||||
$preset->preset = json_encode($preset_decoded);
|
||||
|
||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
||||
if (isError($result)) {
|
||||
http_response_code(500);
|
||||
$this->terminateWithJsonError('preset could not be saved');
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess(array('msg' => 'preset successfully stored.', 'data' => $preset_decoded));
|
||||
}
|
||||
|
||||
public function removeWidgetFromPreset()
|
||||
{
|
||||
$input = json_decode($this->input->raw_input_stream);
|
||||
$dashboard_kurzbz = $input->db;
|
||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
||||
$widgetid = $input->widgetid;
|
||||
|
||||
$preset = $this->DashboardLib->getPreset($dashboard_kurzbz, $funktion_kurzbz);
|
||||
if ($preset === null) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError('preset for dashboard ' . $dashboard_kurzbz . ' and funktion ' . $funktion_kurzbz . ' not found.');
|
||||
}
|
||||
|
||||
$preset_decoded = json_decode($preset->preset, true);
|
||||
if (!$this->DashboardLib->removeWidgetFromWidgets($preset_decoded, $funktion_kurzbz, $widgetid))
|
||||
{
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
||||
}
|
||||
|
||||
$preset->preset = json_encode($preset_decoded);
|
||||
$result = $this->DashboardLib->insertOrUpdatePreset($preset);
|
||||
if (isError($result))
|
||||
{
|
||||
http_response_code(500);
|
||||
$this->terminateWithJsonError('failed to remove widget');
|
||||
}
|
||||
$this->outputJsonSuccess(array('msg' => 'preset successfully updated.'));
|
||||
}
|
||||
|
||||
public function addWidgetsToUserOverride()
|
||||
{
|
||||
$input = json_decode($this->input->raw_input_stream);
|
||||
$dashboard_kurzbz = $input->db;
|
||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
||||
$uid = $this->AuthLib->getAuthObj()->username;
|
||||
|
||||
$override = $this->DashboardLib->getOverrideOrCreateEmptyOverride($dashboard_kurzbz, $uid);
|
||||
|
||||
$override_decoded = json_decode($override->override, true);
|
||||
|
||||
$this->DashboardLib->addWidgetsToWidgets($override_decoded, $dashboard_kurzbz, $funktion_kurzbz, $input->widgets);
|
||||
|
||||
$override->override = json_encode($override_decoded);
|
||||
|
||||
$result = $this->DashboardLib->insertOrUpdateOverride($override);
|
||||
if (isError($result)) {
|
||||
http_response_code(500);
|
||||
$this->terminateWithJsonError('override could not be saved');
|
||||
}
|
||||
|
||||
$this->outputJsonSuccess(array('msg' => 'override successfully stored.', 'data' => $override_decoded));
|
||||
}
|
||||
|
||||
public function removeWidgetFromUserOverride()
|
||||
{
|
||||
$input = json_decode($this->input->raw_input_stream);
|
||||
$dashboard_kurzbz = $input->db;
|
||||
$funktion_kurzbz = $input->funktion_kurzbz;
|
||||
$uid = $this->AuthLib->getAuthObj()->username;
|
||||
$widgetid = $input->widgetid;
|
||||
|
||||
$override = $this->DashboardLib->getOverride($dashboard_kurzbz, $uid);
|
||||
if (empty($override)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError('userconfig for dashboard ' . $dashboard_kurzbz . ' not found.');
|
||||
}
|
||||
|
||||
$override_decoded = json_decode($override->override, true);
|
||||
|
||||
if (!$this->DashboardLib->removeWidgetFromWidgets($override_decoded, $funktion_kurzbz, $widgetid))
|
||||
{
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError('widgetid ' . $widgetid . ' not found');
|
||||
}
|
||||
|
||||
$override->override = json_encode($override_decoded);
|
||||
$result = $this->DashboardLib->insertOrUpdateOverride($override, $uid);
|
||||
if (isError($result))
|
||||
{
|
||||
http_response_code(500);
|
||||
$this->terminateWithJsonError('failed to remove widget');
|
||||
}
|
||||
$this->outputJsonSuccess(array('msg' => 'override successfully updated.'));
|
||||
}
|
||||
|
||||
public function funktionen()
|
||||
{
|
||||
$funktionen = $this->FunktionModel->load();
|
||||
|
||||
if (isError($funktionen)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($funktionen)
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(getData($funktionen) ?: []);
|
||||
}
|
||||
|
||||
public function preset()
|
||||
{
|
||||
$db = $this->input->get('db');
|
||||
$funktion = $this->input->get('funktion');
|
||||
|
||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
||||
|
||||
if (!$conf)
|
||||
return $this->outputJsonSuccess(['widgets' => [$funktion => []]]);
|
||||
|
||||
return $this->outputJsonSuccess(json_decode($conf->preset, true));
|
||||
}
|
||||
|
||||
public function presetBatch()
|
||||
{
|
||||
$db = $this->input->get('db');
|
||||
$funktionen = $this->input->get('funktionen');
|
||||
$result = [];
|
||||
|
||||
foreach ($funktionen as $funktion) {
|
||||
$conf = $this->DashboardLib->getPreset($db, $funktion);
|
||||
if ($conf)
|
||||
{
|
||||
$preset = json_decode($conf->preset, true);
|
||||
if (!isset($preset[$funktion]) || !isset($preset[$funktion]['widgets']))
|
||||
$result[$funktion] = [];
|
||||
else
|
||||
$result[$funktion] = $preset[$funktion]['widgets'];
|
||||
}
|
||||
else
|
||||
$result[$funktion] = [];
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess($result);
|
||||
}
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
/**
|
||||
* Description of Widget
|
||||
*
|
||||
* @author chris
|
||||
*/
|
||||
class Dashboard extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'dashboard/admin:r',
|
||||
'create' => 'dashboard/admin:rw',
|
||||
'update' => 'dashboard/admin:rw',
|
||||
'delete' => 'dashboard/admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
||||
$this->load->model('dashboard/Dashboard_model', 'DashboardModel');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$result = $this->DashboardModel->load();
|
||||
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$input = $this->getPostJSON();
|
||||
|
||||
$result = $this->DashboardModel->insert($input);
|
||||
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
$input = $this->getPostJSON();
|
||||
|
||||
$result = $this->DashboardModel->update($input->dashboard_id, $input);
|
||||
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$input = $this->getPostJSON();
|
||||
|
||||
$result = $this->DashboardModel->delete($input->dashboard_id);
|
||||
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->outputJsonSuccess(getData($result) ?: []);
|
||||
}
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
*/
|
||||
class DashboardDemo extends Auth_Controller
|
||||
{
|
||||
private $_uid; // uid of the logged user
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Set required permissions
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => 'dashboard/benutzer:r',
|
||||
'admin' => 'dashboard/admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->library('AuthLib');
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
$this->_setAuthUID(); // sets property uid
|
||||
|
||||
$this->setControllerId(); // sets the controller id
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
public function index()
|
||||
{
|
||||
$this->load->view('dashboard/dashboard_demo.php', []);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
public function admin()
|
||||
{
|
||||
$this->load->view('dashboard/dashboard_demo_admin.php', []);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Retrieve the UID of the logged user and checks if it is valid
|
||||
*/
|
||||
private function _setAuthUID()
|
||||
{
|
||||
$this->_uid = getAuthUID();
|
||||
|
||||
if (!$this->_uid) show_error('User authentification failed');
|
||||
}
|
||||
}
|
||||
@@ -1,134 +0,0 @@
|
||||
<?php
|
||||
defined('BASEPATH') || exit('No direct script access allowed');
|
||||
/**
|
||||
* Description of Widget
|
||||
*
|
||||
* @author chris
|
||||
*/
|
||||
class Widget extends Auth_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'index' => ['dashboard/benutzer:r', 'dashboard/admin:r'],
|
||||
'getAll' => 'dashboard/admin:r',
|
||||
'getWidgetsForDashboard' => ['dashboard/benutzer:rw', 'dashboard/admin:r'],
|
||||
'setAllowed' => 'dashboard/admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
$this->load->library('dashboard/DashboardLib', null, 'DashboardLib');
|
||||
$this->load->model('dashboard/Widget_model', 'WidgetModel');
|
||||
$this->load->model('dashboard/Dashboard_Widget_model', 'DashboardWidgetModel');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$widget_id = $this->input->get('id');
|
||||
|
||||
$widget = $this->WidgetModel->load($widget_id);
|
||||
|
||||
if (isError($widget) || !getData($widget))
|
||||
return $this->outputJsonSuccess([
|
||||
"widget_id" => 0,
|
||||
"widget_kurzbz" => "notfound",
|
||||
"arguments" => [
|
||||
"className" => 'alert-danger',
|
||||
"title" => 'Widget Not Found',
|
||||
"msg" => 'The widget with the id ' . $widget_id . ' could not be found'
|
||||
],
|
||||
"setup" => [
|
||||
"name" => 'Widget Not Found',
|
||||
"file" => absoluteJsImportUrl('public/js/components/DashboardWidget/Default.js'),
|
||||
"width" => 1,
|
||||
"height" => 1
|
||||
]
|
||||
]);
|
||||
|
||||
$widget = current(getData($widget));
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
|
||||
return $this->outputJsonSuccess($widget);
|
||||
}
|
||||
|
||||
public function getAll()
|
||||
{
|
||||
$dashboard_id = $this->input->get('dashboard_id');
|
||||
$result = $this->WidgetModel->getWithAllowedForDashboard($dashboard_id);
|
||||
|
||||
if (isError($result))
|
||||
return $this->outputJsonError(getError($result));
|
||||
|
||||
$tmpwidgets = getData($result) ?: [];
|
||||
$widgets = array_map(function($widget) {
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
return $widget;
|
||||
}, $tmpwidgets);
|
||||
|
||||
$this->outputJsonSuccess($widgets);
|
||||
}
|
||||
|
||||
public function getWidgetsForDashboard()
|
||||
{
|
||||
$db = $this->input->get('db');
|
||||
$result = $this->WidgetModel->getForDashboard($db);
|
||||
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
|
||||
$tmpwidgets = getData($result) ?: [];
|
||||
$widgets = array_map(function($widget) {
|
||||
$widget->arguments = json_decode($widget->arguments);
|
||||
$tmpsetup = json_decode($widget->setup);
|
||||
$tmpsetup->file = absoluteJsImportUrl($tmpsetup->file);
|
||||
$widget->setup = $tmpsetup;
|
||||
return $widget;
|
||||
}, $tmpwidgets);
|
||||
|
||||
$this->outputJsonSuccess($widgets);
|
||||
}
|
||||
|
||||
public function setAllowed()
|
||||
{
|
||||
$input = $this->getPostJSON();
|
||||
|
||||
$dashboard_id = $input->dashboard_id;
|
||||
$widget_id = $input->widget_id;
|
||||
$action = $input->action;
|
||||
|
||||
if ($action == 'add') {
|
||||
$result = $this->DashboardWidgetModel->insert([
|
||||
'dashboard_id' => $dashboard_id,
|
||||
'widget_id' => $widget_id
|
||||
]);
|
||||
} elseif ($action == 'delete') {
|
||||
$result = $this->DashboardWidgetModel->delete([
|
||||
'dashboard_id' => $dashboard_id,
|
||||
'widget_id' => $widget_id
|
||||
]);
|
||||
} else {
|
||||
http_response_code(404); // TODO(chris): 400?
|
||||
$this->terminateWithJsonError([
|
||||
'error' => 'action value invalid'
|
||||
]);
|
||||
}
|
||||
if (isError($result)) {
|
||||
http_response_code(404);
|
||||
$this->terminateWithJsonError([
|
||||
'error' => getError($result)
|
||||
]);
|
||||
}
|
||||
return $this->outputJsonSuccess(getData($result));
|
||||
}
|
||||
}
|
||||
@@ -5,58 +5,51 @@
|
||||
*/
|
||||
class IssueResolver extends IssueResolver_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// set fehler codes which can be resolved by the job, with own resolver defined
|
||||
// structure: fehlercode => class (library) name for resolving in "resolvers" folder
|
||||
$this->_codeLibMappings = array(
|
||||
'CORE_ZGV_0001' => 'CORE_ZGV_0001',
|
||||
'CORE_ZGV_0002' => 'CORE_ZGV_0002',
|
||||
'CORE_ZGV_0003' => 'CORE_ZGV_0003',
|
||||
'CORE_ZGV_0004' => 'CORE_ZGV_0004',
|
||||
'CORE_ZGV_0005' => 'CORE_ZGV_0005',
|
||||
'CORE_INOUT_0001' => 'CORE_INOUT_0001',
|
||||
'CORE_INOUT_0002' => 'CORE_INOUT_0002',
|
||||
'CORE_INOUT_0003' => 'CORE_INOUT_0003',
|
||||
'CORE_INOUT_0004' => 'CORE_INOUT_0004',
|
||||
'CORE_INOUT_0005' => 'CORE_INOUT_0005',
|
||||
'CORE_INOUT_0006' => 'CORE_INOUT_0006',
|
||||
'CORE_INOUT_0007' => 'CORE_INOUT_0007',
|
||||
'CORE_INOUT_0008' => 'CORE_INOUT_0008',
|
||||
'CORE_INOUT_0009' => 'CORE_INOUT_0009',
|
||||
'CORE_STG_0001' => 'CORE_STG_0001',
|
||||
'CORE_STG_0002' => 'CORE_STG_0002',
|
||||
'CORE_STG_0003' => 'CORE_STG_0003',
|
||||
'CORE_STG_0004' => 'CORE_STG_0004',
|
||||
'CORE_STUDENTSTATUS_0002' => 'CORE_STUDENTSTATUS_0002',
|
||||
'CORE_STUDENTSTATUS_0003' => 'CORE_STUDENTSTATUS_0003',
|
||||
'CORE_STUDENTSTATUS_0004' => 'CORE_STUDENTSTATUS_0004',
|
||||
'CORE_STUDENTSTATUS_0005' => 'CORE_STUDENTSTATUS_0005',
|
||||
'CORE_STUDENTSTATUS_0006' => 'CORE_STUDENTSTATUS_0006',
|
||||
'CORE_STUDENTSTATUS_0007' => 'CORE_STUDENTSTATUS_0007',
|
||||
'CORE_STUDENTSTATUS_0008' => 'CORE_STUDENTSTATUS_0008',
|
||||
'CORE_STUDENTSTATUS_0009' => 'CORE_STUDENTSTATUS_0009',
|
||||
'CORE_STUDENTSTATUS_0010' => 'CORE_STUDENTSTATUS_0010',
|
||||
'CORE_STUDENTSTATUS_0011' => 'CORE_STUDENTSTATUS_0011',
|
||||
'CORE_STUDENTSTATUS_0012' => 'CORE_STUDENTSTATUS_0012',
|
||||
'CORE_STUDENTSTATUS_0013' => 'CORE_STUDENTSTATUS_0013',
|
||||
'CORE_STUDENTSTATUS_0014' => 'CORE_STUDENTSTATUS_0014',
|
||||
'CORE_STUDENTSTATUS_0015' => 'CORE_STUDENTSTATUS_0015',
|
||||
'CORE_STUDENTSTATUS_0016' => 'CORE_STUDENTSTATUS_0016',
|
||||
'CORE_PERSON_0001' => 'CORE_PERSON_0001',
|
||||
'CORE_PERSON_0002' => 'CORE_PERSON_0002',
|
||||
'CORE_PERSON_0003' => 'CORE_PERSON_0003',
|
||||
'CORE_PERSON_0004' => 'CORE_PERSON_0004',
|
||||
'CORE_PERSON_0005' => 'CORE_PERSON_0005',
|
||||
'CORE_PERSON_0006' => 'CORE_PERSON_0006'
|
||||
);
|
||||
|
||||
// fehler which are resolved by the job the same way as they are produced
|
||||
// structure: fehlercode => class (library) name for resolving in "plausichecks" folder
|
||||
$this->_codeProducerLibMappings = array(
|
||||
'CORE_STUDENTSTATUS_0001' => 'AbbrecherAktiv',
|
||||
);
|
||||
}
|
||||
protected $_fehlercodes = array(
|
||||
'CORE_ZGV_0001',
|
||||
'CORE_ZGV_0002',
|
||||
'CORE_ZGV_0003',
|
||||
'CORE_ZGV_0004',
|
||||
'CORE_ZGV_0005',
|
||||
'CORE_INOUT_0001',
|
||||
'CORE_INOUT_0002',
|
||||
'CORE_INOUT_0003',
|
||||
'CORE_INOUT_0004',
|
||||
'CORE_INOUT_0005',
|
||||
'CORE_INOUT_0006',
|
||||
'CORE_INOUT_0007',
|
||||
'CORE_INOUT_0008',
|
||||
'CORE_INOUT_0009',
|
||||
'CORE_STG_0001',
|
||||
'CORE_STG_0002',
|
||||
'CORE_STG_0003',
|
||||
'CORE_STG_0004',
|
||||
'CORE_STUDENTSTATUS_0001',
|
||||
'CORE_STUDENTSTATUS_0002',
|
||||
'CORE_STUDENTSTATUS_0003',
|
||||
'CORE_STUDENTSTATUS_0004',
|
||||
'CORE_STUDENTSTATUS_0005',
|
||||
'CORE_STUDENTSTATUS_0006',
|
||||
'CORE_STUDENTSTATUS_0007',
|
||||
'CORE_STUDENTSTATUS_0008',
|
||||
'CORE_STUDENTSTATUS_0009',
|
||||
'CORE_STUDENTSTATUS_0010',
|
||||
'CORE_STUDENTSTATUS_0011',
|
||||
'CORE_STUDENTSTATUS_0012',
|
||||
'CORE_STUDENTSTATUS_0013',
|
||||
'CORE_STUDENTSTATUS_0014',
|
||||
'CORE_STUDENTSTATUS_0015',
|
||||
'CORE_STUDENTSTATUS_0016',
|
||||
'CORE_STUDENTSTATUS_0018',
|
||||
'CORE_STUDENTSTATUS_0019',
|
||||
'CORE_STUDENTSTATUS_0020',
|
||||
'CORE_STUDENTSTATUS_0021',
|
||||
'CORE_STUDENTSTATUS_0022',
|
||||
'CORE_PERSON_0001',
|
||||
'CORE_PERSON_0002',
|
||||
'CORE_PERSON_0003',
|
||||
'CORE_PERSON_0004',
|
||||
'CORE_PERSON_0005',
|
||||
'CORE_PERSON_0006'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
class PlausiIssueProducer extends PlausiIssueProducer_Controller
|
||||
{
|
||||
private $_currentStudiensemester;
|
||||
protected $_app = 'core';
|
||||
protected $_apps = 'core';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@@ -18,12 +18,12 @@ class PlausiIssueProducer extends PlausiIssueProducer_Controller
|
||||
$this->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
|
||||
// get current Studiensemester
|
||||
$studiensemesterRes = $this->StudiensemesterModel->getAkt();
|
||||
$studiensemesterRes = $this->StudiensemesterModel->getAktOrNextSemester(62);
|
||||
if (hasData($studiensemesterRes)) $this->_currentStudiensemester = getData($studiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
|
||||
// set fehler which can be produced by the job
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
$this->_fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
$this->_fehlerKurzbz = $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2024 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class CLI_Manager extends CLI_Controller
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('FehlerUpdateLib');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installAll()
|
||||
{
|
||||
$this->fehlerupdatelib->installAll();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFromCore()
|
||||
{
|
||||
$this->fehlerupdatelib->installFromCore();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFrom($extensionName)
|
||||
{
|
||||
$this->fehlerupdatelib->installFrom(urldecode($extensionName));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
if (!defined("BASEPATH")) exit("No direct script access allowed");
|
||||
|
||||
class Manager extends Auth_Controller
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
array(
|
||||
'installAll' => 'admin:rw',
|
||||
'installFromCore' => 'admin:rw'
|
||||
)
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('FehlerUpdateLib');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installAll()
|
||||
{
|
||||
$this->fehlerupdatelib->installAll();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFromCore()
|
||||
{
|
||||
$this->fehlerupdatelib->installFromCore();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public function installFrom($fehlerConfigDirectory)
|
||||
{
|
||||
$this->fehlerupdatelib->installFrom($fehlerConfigDirectory);
|
||||
}
|
||||
}
|
||||
@@ -88,9 +88,11 @@ class IssuesKonfiguration extends Auth_Controller
|
||||
|
||||
// get all Fehler, optionally filtered by app
|
||||
$params = array('fehlercode_extern' => null);
|
||||
$this->FehlerModel->addDistinct();
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertyp_kurzbz, fehlertext');
|
||||
$this->FehlerModel->addJoin('system.tbl_fehler_app', 'fehlercode');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
if (!isEmptyString($app)) $params['app'] = $app;
|
||||
if (!isEmptyString($app)) $params['tbl_fehler_app.app'] = $app;
|
||||
$fehlerRes = $this->FehlerModel->loadWhere($params);
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerLaden'));
|
||||
|
||||
@@ -69,10 +69,7 @@ class IssuesZustaendigkeiten extends Auth_Controller
|
||||
{
|
||||
$app = $this->input->get('app');
|
||||
|
||||
$this->FehlerModel->addSelect('fehlercode, fehler_kurzbz, fehlertext, fehlertyp_kurzbz, app');
|
||||
$this->FehlerModel->addOrder('fehlercode');
|
||||
|
||||
$fehlerRes = isset($app) ? $this->FehlerModel->loadWhere(array('app' => $app)) : $this->FehlerModel->load();
|
||||
$fehlerRes = $this->FehlerModel->getByApps($app);
|
||||
|
||||
$this->outputJson($fehlerRes);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
class Plausichecks extends Auth_Controller
|
||||
{
|
||||
const GENERIC_ISSUE_OCCURED_TEXT = 'Issue aufgetreten';
|
||||
const APPS = ['core', 'dvuh', 'bis'];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@@ -16,8 +17,7 @@ class Plausichecks extends Auth_Controller
|
||||
);
|
||||
|
||||
// Load libraries
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('app' => 'core'));
|
||||
$this->load->library('issues/PlausicheckDefinitionLib');
|
||||
$this->load->library('issues/PlausicheckProducerLib', array('apps' => self::APPS));
|
||||
$this->load->library('WidgetLib');
|
||||
|
||||
// Load models
|
||||
@@ -46,37 +46,31 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
// issues array for passing issue texts
|
||||
$allIssues = array();
|
||||
// all fehler kurzbz which are going to be checked
|
||||
$fehlerKurzbz = !isEmptyString($fehler_kurzbz) ? array($fehler_kurzbz) : $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
$fehlerLibMappings = $this->plausicheckdefinitionlib->getFehlerLibMappings();
|
||||
|
||||
$fehler_kurzbz_arr = isEmptyString($fehler_kurzbz) ? array_keys($this->plausicheckproducerlib->getFehlerMappings()) : [$fehler_kurzbz];
|
||||
|
||||
$this->FehlerModel->addOrder('fehler_kurzbz, fehlercode');
|
||||
$this->FehlerModel->db->where_in('fehler_kurzbz', $fehler_kurzbz_arr);
|
||||
$fehlerRes = $this->FehlerModel->load();
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError(getError($fehlerRes));
|
||||
if (!hasData($fehlerRes)) return $this->outputJsonSuccess([]);
|
||||
|
||||
// all fehler which are going to be checked
|
||||
$fehlerArr = getData($fehlerRes);
|
||||
|
||||
// set Studiengang to null if not passed
|
||||
if (isEmptyString($studiengang_kz)) $studiengang_kz = null;
|
||||
|
||||
// get the data returned by Plausicheck
|
||||
foreach ($fehlerKurzbz as $fehler_kurzbz)
|
||||
foreach ($fehlerArr as $fehler)
|
||||
{
|
||||
// get Text and fehlercode of the Fehler
|
||||
$this->FehlerModel->addSelect('fehlercode, fehlertext, fehlertyp_kurzbz');
|
||||
$fehlerRes = $this->FehlerModel->loadWhere(array('fehler_kurzbz' => $fehler_kurzbz));
|
||||
|
||||
if (isError($fehlerRes)) $this->terminateWithJsonError(getError($fehlerRes));
|
||||
|
||||
// do not check error if no data
|
||||
if (!hasData($fehlerRes)) continue;
|
||||
|
||||
// get the error data
|
||||
$fehler = getData($fehlerRes)[0];
|
||||
|
||||
// initialize issue array
|
||||
$allIssues[$fehler_kurzbz] = array('fehlercode' => $fehler->fehlercode, 'data' => array());
|
||||
|
||||
// get library name for producing issue
|
||||
$libName = $fehlerLibMappings[$fehler_kurzbz];
|
||||
$allIssues[$fehler->fehler_kurzbz] = array('fehlercode' => $fehler->fehlercode, 'data' => array());
|
||||
|
||||
// execute the check
|
||||
$plausicheckRes = $this->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
$fehler->fehler_kurzbz,
|
||||
array(
|
||||
'studiensemester_kurzbz' => $studiensemester_kurzbz,
|
||||
'studiengang_kz' => $studiengang_kz
|
||||
@@ -107,7 +101,7 @@ class Plausichecks extends Auth_Controller
|
||||
{
|
||||
// replace placeholder with params, if present
|
||||
if (count($fehlertext_params) != substr_count($fehlerText, '%s'))
|
||||
$this->terminateWithJsonError('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehler_kurzbz);
|
||||
$this->terminateWithJsonError('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehler->fehler_kurzbz);
|
||||
|
||||
$fehlerText = vsprintf($fehlerText, $fehlertext_params);
|
||||
}
|
||||
@@ -118,7 +112,7 @@ class Plausichecks extends Auth_Controller
|
||||
$issueObj = new StdClass();
|
||||
$issueObj->fehlertext = $fehlerText;
|
||||
$issueObj->type = $fehlerTyp;
|
||||
$allIssues[$fehler_kurzbz]['data'][] = $issueObj;
|
||||
$allIssues[$fehler->fehler_kurzbz]['data'][] = $issueObj;
|
||||
}
|
||||
else // if no issue text found, use generic text
|
||||
{
|
||||
@@ -157,7 +151,7 @@ class Plausichecks extends Auth_Controller
|
||||
|
||||
if (isError($studiengaengeRes)) show_error(getError($studiengaengeRes));
|
||||
|
||||
$fehlerKurzbz = $this->plausicheckdefinitionlib->getFehlerKurzbz();
|
||||
$fehlerKurzbz = array_keys($this->plausicheckproducerlib->getFehlerMappings());
|
||||
|
||||
$db = new DB_Model();
|
||||
|
||||
@@ -168,7 +162,9 @@ class Plausichecks extends Auth_Controller
|
||||
FROM
|
||||
system.tbl_fehler
|
||||
WHERE
|
||||
fehler_kurzbz IN ?',
|
||||
fehler_kurzbz IN ?
|
||||
ORDER BY
|
||||
fehler_kurzbz, fehlercode',
|
||||
array($fehlerKurzbz)
|
||||
);
|
||||
|
||||
@@ -184,6 +180,8 @@ class Plausichecks extends Auth_Controller
|
||||
}
|
||||
}
|
||||
|
||||
ksort($fehlerKurzbzCodeMappings);
|
||||
|
||||
return array(
|
||||
'semester' => hasData($studiensemesterRes) ? getData($studiensemesterRes) : array(),
|
||||
'currsemester' => hasData($currSemRes) ? getData($currSemRes) : array(),
|
||||
|
||||
@@ -5,11 +5,8 @@
|
||||
*/
|
||||
abstract class IssueResolver_Controller extends JOB_Controller
|
||||
{
|
||||
// mappings in form fehlercode -> resolverlibrary name, fehler which have explicit resolver class defined
|
||||
protected $_codeLibMappings = [];
|
||||
|
||||
// mappings in form fehlercode -> producer library name, fehler which are resolved the same way they are produced
|
||||
protected $_codeProducerLibMappings = [];
|
||||
// codes of fehler to be resolved
|
||||
protected $_fehlercodes = [];
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
@@ -24,25 +21,18 @@ abstract class IssueResolver_Controller extends JOB_Controller
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// initialize librariy with provided fehlercodes
|
||||
$this->load->library(
|
||||
'issues/PlausicheckResolverLib',
|
||||
[
|
||||
'extensionName' => $this->_extensionName ?? null,
|
||||
'codeLibMappings' => $this->_codeLibMappings,
|
||||
'codeProducerLibMappings' => $this->_codeProducerLibMappings
|
||||
'fehlercodes' => $this->_fehlercodes
|
||||
]
|
||||
);
|
||||
|
||||
$this->logInfo("Issue resolve job started");
|
||||
|
||||
// load open issues with given errorcodes
|
||||
$openIssuesRes = $this->IssueModel->getOpenIssues(
|
||||
array_merge(array_keys($this->_codeLibMappings), array_keys($this->_codeProducerLibMappings))
|
||||
);
|
||||
|
||||
$openIssues = hasData($openIssuesRes) ? getData($openIssuesRes) : [];
|
||||
|
||||
$result = $this->plausicheckresolverlib->resolvePlausicheckIssues($openIssues);
|
||||
// resolve the issues
|
||||
$result = $this->plausicheckresolverlib->resolvePlausicheckIssues();
|
||||
|
||||
// log if error, or log info if inserted new issue
|
||||
foreach ($result->errors as $error) $this->logError($error);
|
||||
|
||||
@@ -417,6 +417,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
|
||||
$notiz_id = $this->input->post('notiz_id');
|
||||
|
||||
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
|
||||
$this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || public.tbl_notiz_dokument.dms_id AS preview');
|
||||
|
||||
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
|
||||
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
|
||||
|
||||
@@ -5,14 +5,23 @@
|
||||
*/
|
||||
abstract class PlausiIssueProducer_Controller extends JOB_Controller
|
||||
{
|
||||
protected $_fehlerLibMappings = [];
|
||||
protected $_app;
|
||||
protected $_fehlerKurzbz = [];
|
||||
protected $_apps = [];
|
||||
|
||||
/**
|
||||
* Runs issue production job.
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
// producing issues
|
||||
$this->producePlausicheckIssues(array());
|
||||
}
|
||||
|
||||
protected function producePlausicheckIssues($params)
|
||||
{
|
||||
$this->load->library(
|
||||
'issues/PlausicheckProducerLib',
|
||||
['extensionName' => $this->_extensionName ?? null, 'app' => $this->_app, 'fehlerLibMappings' => $this->_fehlerLibMappings]
|
||||
['apps' => $this->_apps, 'fehlerKurzbz' => $this->_fehlerKurzbz]
|
||||
);
|
||||
|
||||
$this->logInfo("Plausicheck issue producer job started");
|
||||
|
||||
@@ -128,7 +128,7 @@ class AntragLib
|
||||
return $this->_ci->StudierendenantragstatusModel->resumeAntraegeForAbmeldungStgl($antrag_id);
|
||||
}
|
||||
// NOTE(chris): get last status that is not pause
|
||||
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum');
|
||||
$this->_ci->StudierendenantragstatusModel->addOrder('insertamum', 'DESC');
|
||||
$this->_ci->StudierendenantragstatusModel->addLimit(1);
|
||||
$result = $this->_ci->StudierendenantragstatusModel->loadWhere([
|
||||
'studierendenantrag_id' => $antrag_id,
|
||||
|
||||
@@ -0,0 +1,382 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2025 fhcomplete.org
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
class FehlerUpdateLib
|
||||
{
|
||||
// Who adds phrases into the database
|
||||
const UPSERT_BY = 'FehlerUpdate';
|
||||
|
||||
const CONFIG_DIRECTORY = 'config';
|
||||
const CONFIG_FEHLER_NAME = 'fehler';
|
||||
const CONFIG_FEHLER_INDEX = 'fehler';
|
||||
|
||||
const TYPE_STRING = 'string';
|
||||
const TYPE_ARRAY = 'array';
|
||||
|
||||
//~ // Array elements names
|
||||
const FEHLERCODE = 'fehlercode';
|
||||
const FEHLER_KURZBZ = 'fehler_kurzbz';
|
||||
const FEHLERTEXT = 'fehlertext';
|
||||
const FEHLERTYP_KURZBZ = 'fehlertyp_kurzbz';
|
||||
const APP = 'app';
|
||||
const FEHLERCODE_EXTERN = 'fehlercode_extern';
|
||||
|
||||
// structure of a fehler
|
||||
// type default: string
|
||||
const FEHLER_ATTRIBUTES = [
|
||||
self::FEHLERCODE => ['required' => true],
|
||||
self::FEHLER_KURZBZ => ['required' => false],
|
||||
self::FEHLERTEXT => ['required' => true, 'updateable' => false],
|
||||
self::FEHLERTYP_KURZBZ => ['required' => false, 'updateable' => true],
|
||||
self::APP => ['required' => true, 'types' => [self::TYPE_STRING, self::TYPE_ARRAY]],
|
||||
self::FEHLERCODE_EXTERN => ['required' => false]
|
||||
];
|
||||
|
||||
private $_ci; // Code igniter instance
|
||||
private $_updateHistory = [];
|
||||
|
||||
/**
|
||||
* Loads parser library
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
// Loads EPrintfLib
|
||||
$this->_ci->load->library('EPrintfLib');
|
||||
|
||||
// Loads the Models
|
||||
$this->_ci->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->_ci->load->model('system/App_model', 'AppModel');
|
||||
|
||||
// Loads extensions lib
|
||||
$this->_ci->load->library('ExtensionsLib');
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Public methods
|
||||
|
||||
|
||||
/**
|
||||
* Install all possible fehler, from core and extensions
|
||||
*/
|
||||
public function installAll()
|
||||
{
|
||||
$this->installFromCore();
|
||||
|
||||
// load fehler entries of extensions
|
||||
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
|
||||
|
||||
if (hasData($extensions))
|
||||
{
|
||||
$extensionArray = array();
|
||||
|
||||
$extensionsData = getData($extensions);
|
||||
|
||||
foreach ($extensionsData as $ext)
|
||||
{
|
||||
$this->installFrom($ext->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Install fehler from the core
|
||||
*/
|
||||
public function installFromCore()
|
||||
{
|
||||
$this->_installFehler();
|
||||
}
|
||||
|
||||
/**
|
||||
* Install fehler from the given path
|
||||
*/
|
||||
public function installFrom($extensionName)
|
||||
{
|
||||
if (!isset($extensionName))
|
||||
{
|
||||
$this->_ci->eprintflib->printError('Extension name missing!');
|
||||
return;
|
||||
}
|
||||
|
||||
$this->_installFehler(ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$extensionName.'/'.FehlerUpdateLib::CONFIG_FEHLER_NAME);
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Install fehler from the given directory
|
||||
*/
|
||||
private function _installFehler($fehlerConfigDirectory = null)
|
||||
{
|
||||
// check that fehler config file exists
|
||||
$configDir = isset($fehlerConfigDirectory) ? $fehlerConfigDirectory : self::CONFIG_FEHLER_NAME;
|
||||
|
||||
$configFilename = APPPATH.self::CONFIG_DIRECTORY.'/'.$configDir.'.php';
|
||||
|
||||
if (!file_exists($configFilename))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Load Fehler Entries
|
||||
$this->_ci->load->config($configDir);
|
||||
$configArray = $this->_ci->config->item(self::CONFIG_FEHLER_INDEX);
|
||||
|
||||
if (!isset($configArray) || !is_array($configArray)) // check if fehler config entries could be loaded
|
||||
{
|
||||
$this->_ci->eprintflib->printError(
|
||||
'Fehler config array could not be loaded, directory '.$configDir.' index '.self::CONFIG_FEHLER_INDEX
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->_ci->eprintflib->printInfo('------------------------------------------------------------------------------------------');
|
||||
$this->_ci->eprintflib->printInfo('Fehler installation started, directory '.$configDir);
|
||||
|
||||
foreach ($configArray as $idx => $configEntry)
|
||||
{
|
||||
// create fehler from config entry
|
||||
$createFehlerResult = $this->_createFehlerFromEntry($configEntry);
|
||||
|
||||
// write error if creation failed
|
||||
if (isError($createFehlerResult))
|
||||
{
|
||||
$this->_ci->eprintflib->printError(
|
||||
getError($createFehlerResult).', directory '.$configDir.', index '.$idx
|
||||
);
|
||||
}
|
||||
elseif (hasData($createFehlerResult))
|
||||
{
|
||||
// add fehler to db
|
||||
$addFehlerResult = $this->_updateFehler(getData($createFehlerResult));
|
||||
|
||||
if (isError($addFehlerResult))
|
||||
{
|
||||
$this->_ci->eprintflib->printError(
|
||||
getError($addFehlerResult).', directory'.$configDir.', index '.$idx
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->eprintflib->printInfo('Fehler installation ended');
|
||||
$this->_ci->eprintflib->printInfo('------------------------------------------------------------------------------------------');
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new fehler to the database
|
||||
*/
|
||||
private function _updateFehler($fehler)
|
||||
{
|
||||
$fehlerReferences = $fehler['references'];
|
||||
$fehler = $fehler['fehler'];
|
||||
|
||||
// Checks if the fehler already exists in the database
|
||||
$this->_ci->FehlerModel->db->where(self::FEHLERCODE.' = ', $fehler[self::FEHLERCODE]);
|
||||
if (isset($fehler[self::FEHLER_KURZBZ]) && !isEmptyString($fehler[self::FEHLER_KURZBZ]))
|
||||
$this->_ci->FehlerModel->db->or_where(self::FEHLER_KURZBZ.' = ', $fehler[self::FEHLER_KURZBZ]);
|
||||
$fehlerResult = $this->_ci->FehlerModel->load();
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($fehlerResult)) return $fehlerResult;
|
||||
|
||||
$updateRes = null;
|
||||
|
||||
// if fehler has been found
|
||||
if (hasData($fehlerResult))
|
||||
{
|
||||
$foundFehler = getData($fehlerResult)[0];
|
||||
|
||||
// check if fehlercode - fehler kurzbz combination is correct
|
||||
if ($foundFehler->{self::FEHLERCODE} != $fehler[self::FEHLERCODE]
|
||||
|| $foundFehler->{self::FEHLER_KURZBZ} != ($fehler[self::FEHLER_KURZBZ] ?? null)
|
||||
) {
|
||||
return error("Wrong fehlercode - fehler kurzbz combination: ".$fehler[self::FEHLERCODE].", ".$fehler[self::FEHLER_KURZBZ]);
|
||||
}
|
||||
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
"Fehler ".$fehler[self::FEHLERCODE]
|
||||
.(isset($fehler[self::FEHLER_KURZBZ]) ? " (".$fehler[self::FEHLER_KURZBZ].")" : "")
|
||||
." already exists in database"
|
||||
);
|
||||
|
||||
$updateArr = [];
|
||||
|
||||
// update fehler, if needed
|
||||
foreach (self::FEHLER_ATTRIBUTES as $attributeName => $attributeInfo)
|
||||
{
|
||||
// set attributes to be updated
|
||||
if (isset($attributeInfo['updateable']) && $attributeInfo['updateable'] && $foundFehler->{$attributeName} != $fehler[$attributeName])
|
||||
{
|
||||
$updateArr[$attributeName] = $fehler[$attributeName];
|
||||
|
||||
if (isset($this->_updateHistory[$foundFehler->{self::FEHLERCODE}][$attributeName])
|
||||
&& $this->_updateHistory[$foundFehler->{self::FEHLERCODE}][$attributeName] != $fehler[$attributeName]
|
||||
) {
|
||||
return error("Conflicting update values for attribute ".$attributeName.", fehler ".$foundFehler->{self::FEHLERCODE});
|
||||
}
|
||||
$this->_updateHistory[$foundFehler->{self::FEHLERCODE}][$attributeName] = $fehler[$attributeName];
|
||||
}
|
||||
}
|
||||
|
||||
if (!isEmptyArray($updateArr))
|
||||
{
|
||||
$updateRes = $this->_ci->FehlerModel->update(
|
||||
[self::FEHLERCODE => $foundFehler->{self::FEHLERCODE}],
|
||||
array_merge($updateArr, ['updateamum' => 'NOW()', 'updatevon' => self::UPSERT_BY])
|
||||
);
|
||||
if (isError($updateRes)) return $updateRes;
|
||||
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
"Fehler ".$fehler[self::FEHLERCODE].(isset($fehler[self::FEHLER_KURZBZ]) ? " (".$fehler[self::FEHLER_KURZBZ].")" : "")." updated"
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no fehler has been found
|
||||
|
||||
// then add the fehler to the database
|
||||
$updateRes = $this->_ci->FehlerModel->insert(
|
||||
array_merge($fehler, ['insertamum' => 'NOW()', 'insertvon' => self::UPSERT_BY])
|
||||
);
|
||||
|
||||
// If an error occurred then return the error itself
|
||||
if (isError($updateRes)) return $updateRes;
|
||||
|
||||
// Prints info about the new added fehler
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
sprintf(
|
||||
'A new fehler has been added into the database: '.
|
||||
'fehlercode => %s | fehler_kurzbz => %s | fehlertyp => %s',
|
||||
$fehler[self::FEHLERCODE],
|
||||
$fehler[self::FEHLER_KURZBZ],
|
||||
$fehler[self::FEHLERTYP_KURZBZ]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// handle references
|
||||
if (isset($fehlerReferences[self::APP]))
|
||||
{
|
||||
$this->_ci->load->model('system/FehlerApp_model', 'FehlerAppModel');
|
||||
$apps = $fehlerReferences[self::APP];
|
||||
|
||||
// load all assigned apps
|
||||
$this->_ci->FehlerAppModel->addSelect(self::APP);
|
||||
$fehlerAppRes = $this->_ci->FehlerAppModel->loadWhere([self::FEHLERCODE => $fehler[self::FEHLERCODE]]);
|
||||
|
||||
$fehlerApps = hasData($fehlerAppRes) ? array_column(getData($fehlerAppRes), self::APP) : [];
|
||||
|
||||
$appsToInsert = array_diff($apps, $fehlerApps);
|
||||
|
||||
foreach ($appsToInsert as $app)
|
||||
{
|
||||
// check if app exists in db
|
||||
$fehlerAppsInsertRes = $this->_ci->FehlerAppModel->insert(
|
||||
[self::FEHLERCODE => $fehler[self::FEHLERCODE], self::APP => $app, 'insertamum' => 'NOW()', 'insertvon' => self::UPSERT_BY]
|
||||
);
|
||||
|
||||
if (isError($fehlerAppsInsertRes)) return $fehlerAppsInsertRes;
|
||||
|
||||
$this->_ci->eprintflib->printMessage(
|
||||
"Added app ".$app." to fehler ".$fehler[self::FEHLERCODE]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// If here then no blocking errors occurred
|
||||
return success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an array with fehler data from config entry
|
||||
*/
|
||||
private function _createFehlerFromEntry($configEntry)
|
||||
{
|
||||
$fehler = ['fehler' => [], 'references' => []];
|
||||
foreach (self::FEHLER_ATTRIBUTES as $attributeName => $attributeInfo)
|
||||
{
|
||||
$required = isset($attributeInfo['required']) && $attributeInfo['required'];
|
||||
if (!isset($configEntry[$attributeName]))
|
||||
{
|
||||
if ($required) return error('attribute'.$attributeName.' is missing');
|
||||
continue;
|
||||
}
|
||||
|
||||
$attributeValue = $configEntry[$attributeName];
|
||||
$validType = false;
|
||||
if (isset($attributeInfo['types']) && is_array($attributeInfo['types']))
|
||||
{
|
||||
foreach ($attributeInfo['types'] as $type)
|
||||
{
|
||||
switch ($type)
|
||||
{
|
||||
case self::TYPE_STRING:
|
||||
if (is_string($attributeValue) || is_null($attributeValue)) $validType = true;
|
||||
break;
|
||||
case self::TYPE_ARRAY:
|
||||
if (is_array($attributeValue) && !($required && isEmptyArray($attributeValue))) $validType = true;
|
||||
break;
|
||||
//~ default:
|
||||
//~ if (is_string($configEntry[$attributeName]) || is_null($configEntry[$attributeName])) $validType = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$validType = is_string($attributeValue) || is_null($attributeValue);
|
||||
}
|
||||
|
||||
if (!$validType)
|
||||
{
|
||||
return error('attribute'.$attributeName.' has invalid type');
|
||||
}
|
||||
|
||||
if ($attributeName == self::APP)
|
||||
{
|
||||
if (is_string($attributeValue)) $attributeValue = [$attributeValue];
|
||||
|
||||
foreach ($attributeValue as $app)
|
||||
{
|
||||
// check if app exists in db
|
||||
$this->_ci->AppModel->addSelect('1');
|
||||
$appRes = $this->_ci->AppModel->loadWhere(['app' => $app]);
|
||||
|
||||
if (!hasData($appRes)) return error("App ".$app." does not exist");
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($attributeInfo['types']) && is_array($attributeInfo['types']) && in_array(self::TYPE_ARRAY, $attributeInfo['types']))
|
||||
{
|
||||
$fehler['references'][$attributeName] = $attributeValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
$fehler['fehler'][$attributeName] = $attributeValue;
|
||||
}
|
||||
|
||||
}
|
||||
return success($fehler);
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,10 @@ class IssuesLib
|
||||
const ERRORTYPE_CODE = 'error';
|
||||
const WARNINGTYPE_CODE = 'warning';
|
||||
|
||||
const STATUS_KURZBZ = 'status_kurzbz';
|
||||
const VERARBEITET_AMUM = 'verarbeitetamum';
|
||||
const VERARBEITET_VON = 'verarbeitetvon';
|
||||
|
||||
public function __construct($params = null)
|
||||
{
|
||||
$this->_ci =& get_instance();
|
||||
@@ -91,12 +95,16 @@ class IssuesLib
|
||||
return error("fehlercode_extern missing");
|
||||
|
||||
// get external fehlercode (unique for each app)
|
||||
$this->_ci->FehlerModel->addSelect('fehlercode');
|
||||
$fehlerRes = $this->_ci->FehlerModel->loadWhere(
|
||||
array(
|
||||
'fehlercode_extern' => $fehlercode_extern,
|
||||
'app' => $this->_app
|
||||
)
|
||||
$fehlerRes = $this->_ci->FehlerModel->execReadOnlyQuery(
|
||||
'
|
||||
SELECT
|
||||
fehlercode
|
||||
FROM
|
||||
system.tbl_fehler fe
|
||||
WHERE
|
||||
fehlercode_extern = ?
|
||||
AND EXISTS (SELECT 1 FROM system.tbl_fehler_app WHERE fehlercode = fe.fehlercode AND app = ?)',
|
||||
[$fehlercode_extern, $this->_app]
|
||||
);
|
||||
|
||||
if (isError($fehlerRes))
|
||||
@@ -105,8 +113,10 @@ class IssuesLib
|
||||
// check if there is a predefined custom error for the external issue
|
||||
if (hasData($fehlerRes))
|
||||
{
|
||||
$fehlerData = getData($fehlerRes)[0];
|
||||
// if found, use the code
|
||||
$fehlerData = getData($fehlerRes);
|
||||
if (count($fehlerData) > 1) return error("Multiple fehlercode_extern ".$fehlercode_extern. " for app ".$this->_app);
|
||||
$fehlerData = getData($fehlerRes)[0];
|
||||
$fehlercode = $fehlerData->fehlercode;
|
||||
}
|
||||
else
|
||||
@@ -128,9 +138,9 @@ class IssuesLib
|
||||
public function setBehoben($issue_id, $user)
|
||||
{
|
||||
$data = array(
|
||||
'status_kurzbz' => self::STATUS_BEHOBEN,
|
||||
'verarbeitetvon' => $user,
|
||||
'verarbeitetamum' => date('Y-m-d H:i:s')
|
||||
self::STATUS_KURZBZ => self::STATUS_BEHOBEN,
|
||||
self::VERARBEITET_VON => $user,
|
||||
self::VERARBEITET_AMUM => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
return $this->_changeIssueStatus($issue_id, $data, $user);
|
||||
@@ -145,8 +155,8 @@ class IssuesLib
|
||||
public function setInBearbeitung($issue_id, $user)
|
||||
{
|
||||
$data = array(
|
||||
'status_kurzbz' => self::STATUS_IN_BEARBEITUNG,
|
||||
'verarbeitetvon' => $user
|
||||
self::STATUS_KURZBZ => self::STATUS_IN_BEARBEITUNG,
|
||||
self::VERARBEITET_VON => $user
|
||||
);
|
||||
|
||||
return $this->_changeIssueStatus($issue_id, $data, $user);
|
||||
@@ -161,9 +171,9 @@ class IssuesLib
|
||||
public function setNeu($issue_id, $user)
|
||||
{
|
||||
$data = array(
|
||||
'status_kurzbz' => self::STATUS_NEU,
|
||||
'verarbeitetvon' => null,
|
||||
'verarbeitetamum' => null
|
||||
self::STATUS_KURZBZ => self::STATUS_NEU,
|
||||
self::VERARBEITET_VON => null,
|
||||
self::VERARBEITET_AMUM => null
|
||||
);
|
||||
|
||||
return $this->_changeIssueStatus($issue_id, $data, $user);
|
||||
@@ -185,13 +195,18 @@ class IssuesLib
|
||||
return error("Issue Id must be set correctly.");
|
||||
|
||||
// check if given status is same as existing
|
||||
$this->_ci->IssueModel->addSelect('status_kurzbz');
|
||||
$this->_ci->IssueModel->addSelect(self::STATUS_KURZBZ.', '.self::VERARBEITET_AMUM);
|
||||
$currStatus = $this->_ci->IssueModel->load($issue_id);
|
||||
|
||||
if (hasData($currStatus))
|
||||
{
|
||||
if (getData($currStatus)[0]->status_kurzbz == $data['status_kurzbz'])
|
||||
$currStatusData = getData($currStatus)[0];
|
||||
// if same status set, and verarbeitet amum is not being newly set
|
||||
if ($currStatusData->{self::STATUS_KURZBZ} == $data[self::STATUS_KURZBZ]
|
||||
&& !(isset($data[self::VERARBEITET_AMUM]) && !isset($currStatusData->{self::VERARBEITET_AMUM}))
|
||||
) {
|
||||
return success("Same status already set");
|
||||
}
|
||||
}
|
||||
else
|
||||
return error("Error when getting status");
|
||||
@@ -228,10 +243,10 @@ class IssuesLib
|
||||
$inhalt_extern = null
|
||||
) {
|
||||
if (isEmptyString($person_id) && isEmptyString($oe_kurzbz))
|
||||
return error("Person_id or oe_kurzbz must be set.");
|
||||
return error("Person_id or oe_kurzbz must be set, fehlercode: $fehlercode");
|
||||
|
||||
// get fehlertextVorlage and replace it with params
|
||||
$fehlerRes = $this->_ci->FehlerModel->load($fehlercode);
|
||||
$fehlerRes = $this->_ci->FehlerModel->loadWhere(['fehlercode' => $fehlercode]);
|
||||
|
||||
if (hasData($fehlerRes))
|
||||
{
|
||||
@@ -241,7 +256,7 @@ class IssuesLib
|
||||
if (!isEmptyArray($fehlertext_params))
|
||||
{
|
||||
if (count($fehlertext_params) != substr_count($fehlertextVorlage, '%s'))
|
||||
return error('Wrong number of parameters for Fehlertext, fehler_kurzbz ' . $fehlercode);
|
||||
return error('Wrong number of parameters for Fehlertext, fehlercode ' . $fehlercode);
|
||||
|
||||
$fehlertext = vsprintf($fehlertextVorlage, $fehlertext_params);
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ class PermissionLib
|
||||
const LOGINAS_PERSONIDS_BLACKLIST = 'permission_loginas_personids_blacklist';
|
||||
|
||||
private $_ci; // CI instance
|
||||
private $access_rights; // current users access rights
|
||||
private static $bb; // benutzerberechtigung
|
||||
|
||||
/**
|
||||
@@ -61,6 +62,8 @@ class PermissionLib
|
||||
// Loads CI instance
|
||||
$this->_ci =& get_instance();
|
||||
|
||||
$this->access_rights = null;
|
||||
|
||||
$this->_ci->config->load('permission'); // Loads permission configuration
|
||||
|
||||
// If it's NOT called from command line
|
||||
@@ -69,8 +72,10 @@ class PermissionLib
|
||||
// API Caller rights initialization
|
||||
$authObj = $this->_ci->authlib->getAuthObj();
|
||||
self::$bb = new benutzerberechtigung();
|
||||
if ($authObj)
|
||||
if ($authObj) {
|
||||
self::$bb->getBerechtigungen($authObj->{AuthLib::AO_USERNAME});
|
||||
$this->access_rights = self::$bb->berechtigungen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,6 +345,16 @@ class PermissionLib
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the access rights for the current user
|
||||
*
|
||||
* @return array|null
|
||||
*/
|
||||
public function getAccessRights()
|
||||
{
|
||||
return $this->access_rights;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ class DashboardLib
|
||||
|
||||
public function getMergedConfig($dashboard_id, $uid)
|
||||
{
|
||||
$defaultconfig = $this->getDefaultConfig($dashboard_id, $uid);
|
||||
$defaultconfig = $this->getDefaultConfig($dashboard_id);
|
||||
$userconfig = $this->getUserConfig($dashboard_id, $uid);
|
||||
|
||||
$mergedconfig = array_replace_recursive($defaultconfig, $userconfig);
|
||||
@@ -57,14 +57,31 @@ class DashboardLib
|
||||
return $mergedconfig;
|
||||
}
|
||||
|
||||
public function getDefaultConfig($dashboard_id, $uid)
|
||||
public function getDefaultConfig($dashboard_id)
|
||||
{
|
||||
$res_presets = $this->_ci->DashboardPresetModel->getPresets($dashboard_id, $uid);
|
||||
$funktion_kurzbzs = [];
|
||||
$rights = $this->_ci->permissionlib->getAccessRights();
|
||||
if ($rights)
|
||||
$funktion_kurzbzs = array_unique(array_map(function ($right) {
|
||||
return $right->funktion_kurzbz;
|
||||
}, $rights));
|
||||
|
||||
$this->_ci->DashboardPresetModel->db
|
||||
->group_start()
|
||||
->where_in('funktion_kurzbz', $funktion_kurzbzs)
|
||||
->or_where('funktion_kurzbz IS NULL')
|
||||
->group_end();
|
||||
|
||||
$this->_ci->DashboardPresetModel->addOrder('funktion_kurzbz', 'DESC');
|
||||
|
||||
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||
'dashboard_id' => $dashboard_id
|
||||
]);
|
||||
$defaultconfig = array();
|
||||
|
||||
if (hasData($res_presets))
|
||||
if (hasData($result))
|
||||
{
|
||||
$presets = getData($res_presets);
|
||||
$presets = getData($result);
|
||||
foreach ($presets as $presetobj)
|
||||
{
|
||||
$preset = json_decode($presetobj->preset, true);
|
||||
@@ -137,8 +154,10 @@ class DashboardLib
|
||||
$dashboard = $this->getDashboardByKurzbz($dashboard_kurzbz);
|
||||
|
||||
$funktion_kurzbz = ($section === self::SECTION_IF_FUNKTION_KURZBZ_IS_NULL) ? null : $section;
|
||||
$result = $this->_ci->DashboardPresetModel
|
||||
->getPresetByDashboardAndFunktion($dashboard->dashboard_id, $funktion_kurzbz);
|
||||
$result = $this->_ci->DashboardPresetModel->loadWhere([
|
||||
'dashboard_id' => $dashboard->dashboard_id,
|
||||
'funktion_kurzbz' => $funktion_kurzbz
|
||||
]);
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
@@ -195,11 +214,11 @@ class DashboardLib
|
||||
{
|
||||
foreach ($addwigets as $widget)
|
||||
{
|
||||
if(!isset($widget->widgetid))
|
||||
if(!isset($widget['widgetid']))
|
||||
{
|
||||
$widget->widgetid = $this->generateWidgetId($dashboard_kurzbz);
|
||||
$widget['widgetid'] = $this->generateWidgetId($dashboard_kurzbz);
|
||||
}
|
||||
$this->addWidgetToWidgets($widgets, $section, $widget, $widget->widgetid);
|
||||
$this->addWidgetToWidgets($widgets, $section, $widget, $widget['widgetid']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,48 +9,45 @@ class PlausicheckDefinitionLib
|
||||
{
|
||||
// set fehler for core plausichecks
|
||||
// structure: fehler_kurzbz => class (library) name for resolving
|
||||
private $_fehlerLibMappings = array(
|
||||
'AbbrecherAktiv' => 'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt' => 'AbschlussstatusFehlt',
|
||||
'AktSemesterNull' => 'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'DatumAbschlusspruefungFehlt' => 'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt' => 'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge' => 'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen' => 'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen' => 'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen' => 'FalscheAnzahlZustelladressen',
|
||||
'GbDatumWeitZurueck' => 'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus' => 'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich' => 'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz' => 'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform',
|
||||
'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher',
|
||||
'DualesStudiumOhneMarkierung' => 'DualesStudiumOhneMarkierung'
|
||||
//'StudienplanUngueltig' => 'StudienplanUngueltig'
|
||||
//'BewerberNichtZumRtAngetreten' => 'BewerberNichtZumRtAngetreten'
|
||||
private $_fehlerKurzbz = array(
|
||||
'AbbrecherAktiv',
|
||||
'AbschlussstatusFehlt',
|
||||
'AbschlusspruefungOderAbsolventFehlt',
|
||||
'AktSemesterNull',
|
||||
'AktiverStudentOhneStatus',
|
||||
'AusbildungssemPrestudentUngleichAusbildungssemStatus',
|
||||
'DatumAbschlusspruefungFehlt',
|
||||
'DatumSponsionFehlt',
|
||||
'DatumStudiensemesterFalscheReihenfolge',
|
||||
'FalscheAnzahlAbschlusspruefungen',
|
||||
'FalscheAnzahlHeimatadressen',
|
||||
'FalscheAnzahlZustelladressen',
|
||||
'FalscheStatusabfolgeVorStudentstatus',
|
||||
'GbDatumWeitZurueck',
|
||||
'InaktiverStudentAktiverStatus',
|
||||
'IncomingHeimatNationOesterreich',
|
||||
'IncomingOhneIoDatensatz',
|
||||
'IncomingOrGsFoerderrelevant',
|
||||
'InskriptionVorLetzerBismeldung',
|
||||
'NationNichtOesterreichAberGemeinde',
|
||||
'OrgformBewerberUngleichOrgformStudent',
|
||||
'OrgformStgUngleichOrgformPrestudent',
|
||||
'PrestudentMischformOhneOrgform',
|
||||
'StartsemesterUngleichPersonenkennzeichen',
|
||||
'StgPrestudentUngleichStgStudienplan',
|
||||
'StgPrestudentUngleichStgStudent',
|
||||
'StudentstatusNachDiplomand',
|
||||
'StudentstatusNachAbbrecher',
|
||||
'DualesStudiumOhneMarkierung'
|
||||
//'StudienplanUngueltig'
|
||||
//'BewerberNichtZumRtAngetreten'
|
||||
);
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz-library mappings for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerLibMappings()
|
||||
{
|
||||
return $this->_fehlerLibMappings;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all fehler_kurzbz for fehler which need to be checked.
|
||||
*/
|
||||
public function getFehlerKurzbz()
|
||||
{
|
||||
return array_keys($this->_fehlerLibMappings);
|
||||
return $this->_fehlerKurzbz;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,36 +6,43 @@ class PlausicheckProducerLib
|
||||
{
|
||||
const CI_PATH = 'application';
|
||||
const CI_LIBRARY_FOLDER = 'libraries';
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const PLAUSI_ISSUES_FOLDER = 'issues/plausichecks';
|
||||
const EXECUTE_PLAUSI_CHECK_METHOD_NAME = 'executePlausiCheck';
|
||||
const CONFIG_FEHLER_NAME = 'fehler';
|
||||
const CONFIG_FEHLER_INDEX = 'fehler';
|
||||
const FEHLER_KURZBZ_NAME = 'fehler_kurzbz';
|
||||
const PRODUCER_LIB_NAME = 'producerLibName';
|
||||
const EXTENSION_NAME = 'extensionName';
|
||||
|
||||
private $_ci; // ci instance
|
||||
private $_extensionName; // name of extension
|
||||
private $_konfiguration = []; // configuration parameters
|
||||
private $_fehlerKurzbz = []; // fehler to produce
|
||||
private $_fehlerLibMappings = []; // mappings of fehler and libraries for producing them
|
||||
private $_isForResolutionCheck = false; // mappings of fehler and libraries for producing them
|
||||
private $_apps = []; // apps of fehler to produce
|
||||
|
||||
public function __construct($params = null)
|
||||
{
|
||||
// set extension name if called from extension
|
||||
if (isset($params['extensionName'])) $this->_extensionName = $params['extensionName'];
|
||||
if (isset($params['fehlerLibMappings'])) $this->_fehlerLibMappings = $params['fehlerLibMappings'];
|
||||
if (isset($params['isForResolutionCheck'])) $this->_isForResolutionCheck = $params['isForResolutionCheck'];
|
||||
|
||||
// set application
|
||||
$app = isset($params['app']) ? $params['app'] : null;
|
||||
// set application(s))
|
||||
if (isset($params['apps']))
|
||||
{
|
||||
if (is_string($params['apps'])) $params['apps'] = [$params['apps']];
|
||||
if (is_array($params['apps'])) $this->_apps = $params['apps'];
|
||||
}
|
||||
|
||||
$this->_ci =& get_instance(); // get ci instance
|
||||
|
||||
// load libraries
|
||||
$this->_ci->load->library('IssuesLib');
|
||||
$this->_ci->load->library('ExtensionsLib');
|
||||
|
||||
// load models
|
||||
$this->_ci->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$this->_ci->load->model('system/Fehlerkonfiguration_model', 'FehlerkonfigurationModel');
|
||||
|
||||
// get all configuration parameters for the application
|
||||
$fehlerkonfigurationRes = $this->_ci->FehlerkonfigurationModel->getKonfiguration($app);
|
||||
$this->_ci->load->config(self::CONFIG_FEHLER_NAME);
|
||||
|
||||
// get all configuration parameters for the application(s))
|
||||
$fehlerkonfigurationRes = $this->_ci->FehlerkonfigurationModel->getKonfiguration($this->_apps);
|
||||
|
||||
if (hasData($fehlerkonfigurationRes))
|
||||
{
|
||||
@@ -46,10 +53,88 @@ class PlausicheckProducerLib
|
||||
$this->_konfiguration[$fk->fehler_kurzbz][$fk->konfigurationstyp_kurzbz] = $fk->konfiguration;
|
||||
}
|
||||
}
|
||||
|
||||
// get all fehler to be produced (by kurzbz array or app)
|
||||
if (isset($params['fehlerKurzbz']) && !isEmptyArray($params['fehlerKurzbz']))
|
||||
{
|
||||
$this->_fehlerKurzbz = $params['fehlerKurzbz'];
|
||||
}
|
||||
else
|
||||
{
|
||||
// get fehler by apps
|
||||
$fehlerRes = $this->_ci->FehlerModel->getByApps($this->_apps);
|
||||
|
||||
if (hasData($fehlerRes)) $this->_fehlerKurzbz = array_column(getData($fehlerRes), 'fehler_kurzbz');
|
||||
}
|
||||
|
||||
// get producer file paths for the fehler
|
||||
|
||||
// Load Fehler Entries of Core
|
||||
$configArray = $this->_ci->config->item(self::CONFIG_FEHLER_INDEX);
|
||||
|
||||
if (isset($configArray) && is_array($configArray))
|
||||
{
|
||||
foreach ($configArray as $coreEntry)
|
||||
{
|
||||
if (!isset($coreEntry[self::FEHLER_KURZBZ_NAME])
|
||||
|| !isset($coreEntry[self::PRODUCER_LIB_NAME])
|
||||
|| !in_array($coreEntry[self::FEHLER_KURZBZ_NAME], $this->_fehlerKurzbz)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->_fehlerLibMappings[$coreEntry[self::FEHLER_KURZBZ_NAME]][self::PRODUCER_LIB_NAME] = $coreEntry[self::PRODUCER_LIB_NAME];
|
||||
}
|
||||
}
|
||||
|
||||
// load fehler entries of extensions
|
||||
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
|
||||
|
||||
if (hasData($extensions))
|
||||
{
|
||||
$extensionArray = array();
|
||||
|
||||
$extensionsData = getData($extensions);
|
||||
|
||||
foreach ($extensionsData as $ext)
|
||||
{
|
||||
$configFilePath = ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_FEHLER_NAME.'.php';
|
||||
$configFilename = APPPATH.'config/'.$configFilePath;
|
||||
|
||||
// if fehler config file exists in extension
|
||||
if (file_exists($configFilename))
|
||||
{
|
||||
$config = array(); // default value
|
||||
|
||||
// include the config file
|
||||
include($configFilename);
|
||||
|
||||
if (isset($config[self::CONFIG_FEHLER_NAME]) && is_array($config[self::CONFIG_FEHLER_NAME]))
|
||||
{
|
||||
foreach ($config[self::CONFIG_FEHLER_NAME] as $extensionEntry)
|
||||
{
|
||||
if (
|
||||
!isset($extensionEntry[self::FEHLER_KURZBZ_NAME])
|
||||
|| !isset($extensionEntry[self::PRODUCER_LIB_NAME])
|
||||
|| !in_array($extensionEntry[self::FEHLER_KURZBZ_NAME], $this->_fehlerKurzbz)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// add extension config data to fehler lib mappings
|
||||
$fehler_kurzbz = $extensionEntry[self::FEHLER_KURZBZ_NAME];
|
||||
|
||||
$this->_fehlerLibMappings[$fehler_kurzbz][self::PRODUCER_LIB_NAME] = $extensionEntry[self::PRODUCER_LIB_NAME];
|
||||
$this->_fehlerLibMappings[$fehler_kurzbz][self::EXTENSION_NAME] = $ext->name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Produces multiple plausicheck issues at once and saved them to db.
|
||||
* Produces multiple plausicheck issues at once, and saves them in the database.
|
||||
* @param array $params passed to each plausicheck
|
||||
* @return result object with occured error and info
|
||||
*/
|
||||
@@ -59,10 +144,17 @@ class PlausicheckProducerLib
|
||||
$result->errors = [];
|
||||
$result->infos = [];
|
||||
|
||||
foreach ($this->_fehlerLibMappings as $fehler_kurzbz => $libName)
|
||||
$mappingFehlerKurbz = array_keys($this->_fehlerLibMappings);
|
||||
|
||||
// check if all issues to produce could be found in database
|
||||
//~ $notFoundFehlerKurzbz = array_diff($this->_fehlerKurzbz, $mappingFehlerKurbz);
|
||||
|
||||
//~ if (!isEmptyArray($notFoundFehlerKurzbz))
|
||||
//~ $result->errors[] = error('Fehler to produce not defined in config: '.implode(', ', $notFoundFehlerKurzbz));
|
||||
|
||||
foreach ($mappingFehlerKurbz as $fehler_kurzbz)
|
||||
{
|
||||
$plausicheckRes = $this->producePlausicheckIssue(
|
||||
$libName,
|
||||
$fehler_kurzbz,
|
||||
$params
|
||||
);
|
||||
@@ -96,14 +188,23 @@ class PlausicheckProducerLib
|
||||
|
||||
/**
|
||||
* Executes plausicheck using a given library, returns the result.
|
||||
* @param $libName string name of library producing the issue
|
||||
* @param $fehler_kurzbz string unique short name of fehler, for which issue is produced
|
||||
* @param $params parameters passed to issue production method
|
||||
*/
|
||||
public function producePlausicheckIssue($libName, $fehler_kurzbz, $params)
|
||||
public function producePlausicheckIssue($fehler_kurzbz, $params)
|
||||
{
|
||||
//if (!isset($this->_fehlerLibMappings[$fehler_kurzbz])) return error("Mapping for Fehler " . $fehler_kurzbz . " was not found");
|
||||
if (!isset($this->_fehlerLibMappings[$fehler_kurzbz])) return success(null);
|
||||
|
||||
$mapping = $this->_fehlerLibMappings[$fehler_kurzbz];
|
||||
|
||||
if (!isset($mapping[self::PRODUCER_LIB_NAME]) || isEmptyString($mapping[self::PRODUCER_LIB_NAME]))
|
||||
return error("No producer lib name set for Fehler " . $fehler_kurzbz);
|
||||
|
||||
$libName = $mapping[self::PRODUCER_LIB_NAME];
|
||||
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
$libRootPath = isset($mapping[self::EXTENSION_NAME]) ? ExtensionsLib::EXTENSIONS_DIR_NAME . '/' . $mapping[self::EXTENSION_NAME] . '/' : '';
|
||||
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::PLAUSI_ISSUES_FOLDER . '/';
|
||||
@@ -121,7 +222,7 @@ class PlausicheckProducerLib
|
||||
// load library connected to fehlercode
|
||||
$this->_ci->load->library(
|
||||
$issuesLibPath . $libName,
|
||||
['configurationParams' => $config, 'isForResolutionCheck' => $this->_isForResolutionCheck]
|
||||
['configurationParams' => $config]
|
||||
);
|
||||
|
||||
$lowercaseLibName = mb_strtolower($libName);
|
||||
@@ -133,4 +234,13 @@ class PlausicheckProducerLib
|
||||
// call the function for checking for issue production
|
||||
return $this->_ci->{$lowercaseLibName}->{self::EXECUTE_PLAUSI_CHECK_METHOD_NAME}($params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get fehler kurzbz -> library mappings.
|
||||
* @return array with fehler kurzbz as key and fehlerinfo as values
|
||||
*/
|
||||
public function getFehlerMappings()
|
||||
{
|
||||
return $this->_fehlerLibMappings;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,43 +9,177 @@ class PlausicheckResolverLib
|
||||
const EXTENSIONS_FOLDER = 'extensions';
|
||||
const ISSUE_RESOLVERS_FOLDER = 'issues/resolvers';
|
||||
const CHECK_ISSUE_RESOLVED_METHOD_NAME = 'checkIfIssueIsResolved';
|
||||
const CONFIG_FEHLER_NAME = 'fehler';
|
||||
const FEHLERCODE_NAME = 'fehlercode';
|
||||
const FEHLER_KURZBZ_NAME = 'fehler_kurzbz';
|
||||
const RESOLVER_LIB_NAME = 'resolverLibName';
|
||||
const PRODUCER_IS_RESOLVER_NAME = 'producerIsResolver';
|
||||
const EXTENSION_NAME = 'extensionName';
|
||||
|
||||
|
||||
private $_ci; // ci instance
|
||||
private $_extensionName; // name of extension
|
||||
private $_fehlercodes = []; // fehlercodes to resolve
|
||||
private $_apps = []; // apps for which issues should be resolved
|
||||
private $_codeLibMappings = []; // mappings for issues which explicitly defined resolver
|
||||
private $_codeProducerLibMappings = []; // mappings for issues which are resolved with the same check as they are produced
|
||||
private $_defaultIssueParams = ['issue_id' => 'issue_id', 'issue_person_id' => 'person_id', 'issue_oe_kurzbz' => 'oe_kurzbz'];
|
||||
|
||||
public function __construct($params = null)
|
||||
{
|
||||
// set extension name if called from extension
|
||||
if (isset($params['extensionName'])) $this->_extensionName = $params['extensionName'];
|
||||
if (isset($params['codeLibMappings'])) $this->_codeLibMappings = $params['codeLibMappings'];
|
||||
if (isset($params['codeProducerLibMappings'])) $this->_codeProducerLibMappings = $params['codeProducerLibMappings'];
|
||||
// set application(s))
|
||||
if (isset($params['apps']))
|
||||
{
|
||||
if (is_string($params['apps'])) $params['apps'] = [$params['apps']];
|
||||
if (is_array($params['apps'])) $this->_apps = $params['apps'];
|
||||
}
|
||||
|
||||
$this->_ci =& get_instance(); // get ci instance
|
||||
|
||||
// get all fehler to be produced (by kurzbz array or app)
|
||||
if (isset($params['fehlercodes']) && !isEmptyArray($params['fehlercodes']))
|
||||
{
|
||||
$this->_fehlercodes = $params['fehlercodes'];
|
||||
}
|
||||
elseif (isset($params['apps']) && !isEmptyArray($params['apps']))
|
||||
{
|
||||
$this->_ci->load->model('system/Fehler_model', 'FehlerModel');
|
||||
$fehlerRes = $this->_ci->FehlerModel->getByApps($this->_apps);
|
||||
|
||||
if (hasData($fehlerRes))
|
||||
{
|
||||
$this->_fehlercodes = array_column(getData($fehlerRes), 'fehlercode');
|
||||
}
|
||||
}
|
||||
|
||||
$this->_ci->load->library('IssuesLib');
|
||||
$this->_ci->load->library('issues/PlausicheckProducerLib', ['extensionName' => $this->_extensionName, 'isForResolutionCheck' => true]);
|
||||
$this->_ci->load->library('ExtensionsLib');
|
||||
|
||||
$this->_ci->load->config('fehler');
|
||||
|
||||
// Load Fehler Entries of Core
|
||||
$configArray = $this->_ci->config->item(self::CONFIG_FEHLER_NAME);
|
||||
|
||||
foreach ($configArray as $coreEntry)
|
||||
{
|
||||
// each entry must have fehlercode
|
||||
if (!isset($coreEntry[self::FEHLERCODE_NAME])
|
||||
|| !in_array($coreEntry[self::FEHLERCODE_NAME], $this->_fehlercodes)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// fill code lib mappings with needed values
|
||||
$fehlercode = $coreEntry[self::FEHLERCODE_NAME];
|
||||
|
||||
if (isset($coreEntry[self::FEHLER_KURZBZ_NAME]))
|
||||
$this->_codeLibMappings[$fehlercode][self::FEHLER_KURZBZ_NAME] = $coreEntry[self::FEHLER_KURZBZ_NAME];
|
||||
|
||||
$this->_codeLibMappings[$fehlercode][self::RESOLVER_LIB_NAME] = $coreEntry[self::RESOLVER_LIB_NAME] ?? null;
|
||||
$this->_codeLibMappings[$fehlercode][self::PRODUCER_IS_RESOLVER_NAME]
|
||||
= $coreEntry[self::PRODUCER_IS_RESOLVER_NAME] ?? false;
|
||||
}
|
||||
|
||||
// load fehler entries of extensions
|
||||
$extensions = $this->_ci->extensionslib->getInstalledExtensions();
|
||||
|
||||
if (hasData($extensions))
|
||||
{
|
||||
$extensionArray = array();
|
||||
|
||||
$extensionsData = getData($extensions);
|
||||
|
||||
foreach ($extensionsData as $ext)
|
||||
{
|
||||
$configFilename = APPPATH.'config/'.ExtensionsLib::EXTENSIONS_DIR_NAME.'/'.$ext->name.'/'.self::CONFIG_FEHLER_NAME.'.php';
|
||||
|
||||
// if fehler config file exists in teh extension
|
||||
if (file_exists($configFilename))
|
||||
{
|
||||
$config = array(); // default value
|
||||
|
||||
// include config data
|
||||
include($configFilename);
|
||||
|
||||
if (isset($config[self::CONFIG_FEHLER_NAME]) && is_array($config[self::CONFIG_FEHLER_NAME]))
|
||||
{
|
||||
foreach ($config[self::CONFIG_FEHLER_NAME] as $extensionEntry)
|
||||
{
|
||||
if (
|
||||
!isset($extensionEntry[self::FEHLERCODE_NAME])
|
||||
|| !in_array($extensionEntry[self::FEHLERCODE_NAME], $this->_fehlercodes)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// add extension config data to fehlercode lib mappings
|
||||
$fehlercode = $extensionEntry[self::FEHLERCODE_NAME];
|
||||
if (isset($extensionEntry[self::FEHLER_KURZBZ_NAME]))
|
||||
$this->_codeLibMappings[$fehlercode][self::FEHLER_KURZBZ_NAME] = $extensionEntry[self::FEHLER_KURZBZ_NAME];
|
||||
|
||||
$this->_codeLibMappings[$fehlercode][self::RESOLVER_LIB_NAME]
|
||||
= $extensionEntry[self::RESOLVER_LIB_NAME] ?? null;
|
||||
$this->_codeLibMappings[$fehlercode][self::EXTENSION_NAME] = $ext->name;
|
||||
$this->_codeLibMappings[$fehlercode][self::PRODUCER_IS_RESOLVER_NAME]
|
||||
= $extensionEntry[self::PRODUCER_IS_RESOLVER_NAME] ?? false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reseolves multiple plausicheck issues at once.
|
||||
* @param array $codeLibMappings contains fehler type to check and library responsible for check (fehlercode => libName)
|
||||
* @param array $openIssues passed issues to resolve
|
||||
* @param array $openIssues passed issues to resolve. If null, issues with fehlercodes in _fehlercodes property are loaded
|
||||
* @return result object with occured error and info
|
||||
*/
|
||||
public function resolvePlausicheckIssues($openIssues)
|
||||
public function resolvePlausicheckIssues($openIssues = null)
|
||||
{
|
||||
// loading producer lib with fehler kurzbz of provided code mappings, for "self resolving" issues
|
||||
$this->_ci->load->library(
|
||||
'issues/PlausicheckProducerLib',
|
||||
['fehlerKurzbz' => array_column($this->_codeLibMappings, self::FEHLER_KURZBZ_NAME)], 'PlausicheckResolverProducerLib'
|
||||
);
|
||||
|
||||
if (!isset($openIssues))
|
||||
{
|
||||
if (!isEmptyArray($this->_fehlercodes))
|
||||
{
|
||||
$this->_ci->load->model('system/Issue_model', 'IssueModel');
|
||||
|
||||
// load open issues with given errorcodes
|
||||
$openIssuesRes = $this->_ci->IssueModel->getOpenIssues(
|
||||
$this->_fehlercodes
|
||||
);
|
||||
|
||||
$openIssues = hasData($openIssuesRes) ? getData($openIssuesRes) : [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$result = new StdClass();
|
||||
$result->errors = [];
|
||||
$result->infos = [];
|
||||
|
||||
// check if all issues to resolve could be found in database
|
||||
//~ $mappingFehlerCodes = array_keys($this->_codeLibMappings);
|
||||
//~ $notFoundFehlerCodes = array_diff($this->_fehlercodes, $mappingFehlerCodes);
|
||||
|
||||
//~ if (!isEmptyArray($notFoundFehlerCodes))
|
||||
//~ $result->errors[] = error('Fehler to resolve not defined in config: '.implode(', ', $notFoundFehlerCodes));
|
||||
|
||||
foreach ($openIssues as $issue)
|
||||
{
|
||||
$params = [];
|
||||
foreach ($this->_defaultIssueParams as $index => $propertyName)
|
||||
{
|
||||
$params[$index] = $issue->{$propertyName};
|
||||
}
|
||||
|
||||
// add person id and oe kurzbz automatically as params, merge it with additional params
|
||||
// decode bewerbung_parameter into assoc array
|
||||
$params = array_merge(
|
||||
array('issue_id' => $issue->issue_id, 'issue_person_id' => $issue->person_id, 'issue_oe_kurzbz' => $issue->oe_kurzbz),
|
||||
$params,
|
||||
isset($issue->behebung_parameter) ? json_decode($issue->behebung_parameter, true) : array()
|
||||
);
|
||||
|
||||
@@ -54,69 +188,72 @@ class PlausicheckResolverLib
|
||||
// ignore if Fehlercode is not in libmappings (shouldn't be checked)
|
||||
if (isset($this->_codeLibMappings[$issue->fehlercode]))
|
||||
{
|
||||
$libName = $this->_codeLibMappings[$issue->fehlercode];
|
||||
$codeLibMapping = $this->_codeLibMappings[$issue->fehlercode];
|
||||
$libName = $codeLibMapping[self::RESOLVER_LIB_NAME] ?? null;
|
||||
$extensionName = $codeLibMapping[self::EXTENSION_NAME] ?? null;
|
||||
$producerIsResolver = $codeLibMapping[self::PRODUCER_IS_RESOLVER_NAME] ?? false;
|
||||
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($this->_extensionName) ? self::EXTENSIONS_FOLDER . '/' . $this->_extensionName . '/' : '';
|
||||
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::ISSUE_RESOLVERS_FOLDER . '/';
|
||||
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath))
|
||||
if ($producerIsResolver)
|
||||
{
|
||||
// log error and continue with next issue if not
|
||||
$result->errors[] = "Issue library file " . $issuesLibFilePath . " does not exist";
|
||||
continue;
|
||||
}
|
||||
// execute same check as used for issue production
|
||||
$issueResolvedRes = $this->_ci->PlausicheckResolverProducerLib->producePlausicheckIssue(
|
||||
$issue->fehler_kurzbz,
|
||||
$params
|
||||
);
|
||||
|
||||
// load library connected to fehlercode
|
||||
$this->_ci->load->library($issuesLibPath . $libName);
|
||||
|
||||
$lowercaseLibName = mb_strtolower($libName);
|
||||
|
||||
// check if method is defined in library class
|
||||
if (!is_callable(array($this->_ci->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME)))
|
||||
{
|
||||
// log error and continue with next issue if not
|
||||
$result->errors[] = "Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName";
|
||||
continue;
|
||||
}
|
||||
|
||||
// call the function for checking for issue resolution
|
||||
$issueResolvedRes = $this->_ci->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params);
|
||||
|
||||
if (isError($issueResolvedRes))
|
||||
{
|
||||
$result->errors[] = getError($issueResolvedRes);
|
||||
if (isError($issueResolvedRes))
|
||||
{
|
||||
$result->errors[] = getError($issueResolvedRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
$issueResolved = !hasData($issueResolvedRes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$issueResolved = getData($issueResolvedRes) === true;
|
||||
}
|
||||
}
|
||||
elseif (isset($this->_codeProducerLibMappings[$issue->fehlercode])) // check if it is an issue without explicit resolver, "self-resolving"
|
||||
{
|
||||
$libName = $this->_codeProducerLibMappings[$issue->fehlercode];
|
||||
// if called from extension (extension name set), path includes extension names
|
||||
$libRootPath = isset($extensionName) ? self::EXTENSIONS_FOLDER . '/' . $extensionName . '/' : '';
|
||||
|
||||
// execute same check as used for issue production
|
||||
$issueResolvedRes = $this->_ci->plausicheckproducerlib->producePlausicheckIssue(
|
||||
$libName,
|
||||
$issue->fehler_kurzbz,
|
||||
$params
|
||||
);
|
||||
// path for loading issue library
|
||||
$issuesLibPath = $libRootPath . self::ISSUE_RESOLVERS_FOLDER . '/';
|
||||
|
||||
if (isError($issueResolvedRes))
|
||||
{
|
||||
$result->errors[] = getError($issueResolvedRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
$issueResolved = !hasData($issueResolvedRes);
|
||||
// file path of library for check if file exists
|
||||
$issuesLibFilePath = DOC_ROOT . self::CI_PATH
|
||||
. '/' . $libRootPath . self::CI_LIBRARY_FOLDER . '/' . self::ISSUE_RESOLVERS_FOLDER . '/' . $libName . '.php';
|
||||
|
||||
// check if library file exists
|
||||
if (!file_exists($issuesLibFilePath))
|
||||
{
|
||||
// log error and continue with next issue if not
|
||||
$result->errors[] = "Issue library file " . $issuesLibFilePath . " does not exist";
|
||||
continue;
|
||||
}
|
||||
|
||||
// load library connected to fehlercode
|
||||
$this->_ci->load->library($issuesLibPath . $libName);
|
||||
|
||||
$lowercaseLibName = mb_strtolower($libName);
|
||||
|
||||
// check if method is defined in library class
|
||||
if (!is_callable(array($this->_ci->{$lowercaseLibName}, self::CHECK_ISSUE_RESOLVED_METHOD_NAME)))
|
||||
{
|
||||
// log error and continue with next issue if not
|
||||
$result->errors[] = "Method " . self::CHECK_ISSUE_RESOLVED_METHOD_NAME . " is not defined in library $lowercaseLibName";
|
||||
continue;
|
||||
}
|
||||
|
||||
// call the function for checking for issue resolution
|
||||
$issueResolvedRes = $this->_ci->{$lowercaseLibName}->{self::CHECK_ISSUE_RESOLVED_METHOD_NAME}($params);
|
||||
|
||||
if (isError($issueResolvedRes))
|
||||
{
|
||||
$result->errors[] = getError($issueResolvedRes);
|
||||
}
|
||||
else
|
||||
{
|
||||
$issueResolved = getData($issueResolvedRes) === true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,11 @@ class AbbrecherAktiv extends PlausiChecker
|
||||
AND benutzer.aktiv=true";
|
||||
|
||||
protected $_config_params = ['exkludierteStudiengaenge' => " AND stg.studiengang_kz NOT IN ?"];
|
||||
protected $_params_for_checking = ['studiengang_kz' => " AND stg.studiengang_kz = ?", 'prestudent_id' => " AND pre.prestudent_id = ?"];
|
||||
protected $_params_for_checking = [
|
||||
'studiengang_kz' => " AND stg.studiengang_kz = ?",
|
||||
'prestudent_id' => " AND pre.prestudent_id = ?",
|
||||
'person_id' => " AND pre.person_id = ?"
|
||||
];
|
||||
protected $_fehlertext_params = ['prestudent_id'];
|
||||
protected $_resolution_params = ['prestudent_id'];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class AbschlusspruefungOderAbsolventFehlt extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAbschlusspruefungOderAbsolventFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id, 'studiensemester_kurzbz' => $studiensemester_kurzbz)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* If there is a final exam, there should be an absolvent status (and vice versa).
|
||||
* @param studiensemester_kurzbz Status from this and previous semester is checked
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAbschlusspruefungOderAbsolventFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
|
||||
$qry = "
|
||||
SELECT DISTINCT ON (prestudent_id) person_id, prestudent_id, studiengang_kz, prestudent_stg_oe_kurzbz FROM (
|
||||
WITH meldestichtag AS (
|
||||
SELECT
|
||||
meldestichtag, studiensemester_kurzbz
|
||||
FROM
|
||||
bis.tbl_bismeldestichtag";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
$semesterArr = array($studiensemester_kurzbz);
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= " WHERE studiensemester_kurzbz IN ?";
|
||||
|
||||
$params[] = $semesterArr;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
)
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id,
|
||||
stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
lehre.tbl_abschlusspruefung pr
|
||||
WHERE
|
||||
student_uid = benutzer.uid
|
||||
AND abschlussbeurteilung_kurzbz <> 'nicht'
|
||||
AND pr.datum < meldestichtag.meldestichtag
|
||||
) AS hat_pruefung,
|
||||
(status.status_kurzbz IS NOT NULL) AS hat_absolvent,
|
||||
(status.ausbildungssemester = stg.max_semester) AS absolvent_in_letztem_semester
|
||||
FROM
|
||||
meldestichtag
|
||||
CROSS JOIN public.tbl_student student
|
||||
JOIN public.tbl_prestudent prestudent USING (prestudent_id)
|
||||
JOIN public.tbl_benutzer benutzer ON (benutzer.uid = student.student_uid)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
LEFT JOIN public.tbl_prestudentstatus status
|
||||
ON status.prestudent_id = prestudent.prestudent_id
|
||||
AND status.status_kurzbz = 'Absolvent'
|
||||
AND status.datum < meldestichtag.meldestichtag
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
public.tbl_prestudentstatus
|
||||
WHERE
|
||||
prestudent_id = prestudent.prestudent_id
|
||||
AND studiensemester_kurzbz = meldestichtag.studiensemester_kurzbz
|
||||
)";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
) prestudenten
|
||||
WHERE
|
||||
(hat_absolvent AND absolvent_in_letztem_semester AND hat_pruefung = FALSE)
|
||||
OR (hat_pruefung AND hat_absolvent = FALSE)";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,14 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAbschlussstatusFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -55,6 +57,7 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -62,6 +65,7 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -101,23 +105,26 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
$semesterArr = array($studiensemester_kurzbz);
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN (?, ?)
|
||||
AND ps.prestudent_id = pre.prestudent_id
|
||||
)";
|
||||
$params[] = $prevStudiensemester;
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
$semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = pre.prestudent_id
|
||||
)";
|
||||
$params[] = $semesterArr;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
@@ -132,6 +139,12 @@ class AbschlussstatusFehlt extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,9 +19,10 @@ class AktSemesterNull extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -56,11 +57,17 @@ class AktSemesterNull extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
public function getAktSemesterNull(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
$qry = "
|
||||
@@ -89,6 +96,12 @@ class AktSemesterNull extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -18,9 +18,10 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,10 +49,11 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
* Students with active Benutzer should have a status in the current semester.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
@@ -88,6 +90,12 @@ class AktiverStudentOhneStatus extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAktiverStudentstatusOhneKontobuchung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -61,6 +63,7 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -68,6 +71,7 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
@@ -109,6 +113,13 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
+10
@@ -19,12 +19,14 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getAusbildungssemPrestudentUngleichAusbildungssemStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -64,6 +66,7 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -71,6 +74,7 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz);
|
||||
@@ -105,6 +109,12 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class BeginndatumVorBismeldung extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getBeginndatumVorBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz,
|
||||
),
|
||||
'resolution_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Beginndatum shouldn't be before Bismeldedatum if the Bismeldedatum has already been reached.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getBeginndatumVorBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$this->_ci->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
|
||||
|
||||
$bismeldestichtagRes = $this->_ci->BismeldestichtagModel->getByStudiensemester($studiensemester_kurzbz);
|
||||
|
||||
if (isError($bismeldestichtagRes)) return $bismeldestichtagRes;
|
||||
|
||||
if (!hasData($bismeldestichtagRes)) return success(array());
|
||||
|
||||
$bismeldestichtag = getData($bismeldestichtagRes)[0]->meldestichtag;
|
||||
|
||||
$params = array($bismeldestichtag, $studiensemester_kurzbz, $bismeldestichtag);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.datum < ?::date
|
||||
AND status.studiensemester_kurzbz = ?
|
||||
AND status.insertamum > ?::date + interval '1' day
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,14 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getBewerberNichtZumRtAngetreten(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -58,6 +60,7 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -65,6 +68,7 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
@@ -112,6 +116,12 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getDatumAbschlusspruefungFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -58,6 +60,7 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -65,6 +68,7 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -112,6 +116,12 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getDatumSponsionFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -58,6 +60,7 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -65,6 +68,7 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$abschlusspruefung_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -112,6 +116,12 @@ class DatumSponsionFehlt extends PlausiChecker
|
||||
$params[] = $abschlusspruefung_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
+15
-3
@@ -18,9 +18,10 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -50,11 +51,16 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
* Status Dates and status studysemester dates should be in correct order.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
public function getDatumStudiensemesterFalscheReihenfolge(
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
// all active students with Status student in current semester
|
||||
@@ -97,6 +103,12 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class DualesStudiumOhneMarkierung extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getDualesStudiumOhneMarkierung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -61,6 +63,7 @@ class DualesStudiumOhneMarkierung extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -68,6 +71,7 @@ class DualesStudiumOhneMarkierung extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
@@ -132,6 +136,12 @@ class DualesStudiumOhneMarkierung extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getFalscheAnzahlAbschlusspruefungen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -55,6 +57,7 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
@@ -62,6 +65,7 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -111,6 +115,12 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,13 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->getFalscheAnzahlHeimatadressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
|
||||
@@ -19,12 +19,13 @@ class FalscheAnzahlZustelladressen extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->getFalscheAnzahlZustelladressen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker
|
||||
{
|
||||
private $_statusAbfolge = array('Interessent', 'Bewerber', 'Aufgenommener', 'Student');
|
||||
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getFalscheStatusabfolgeVorStudentstatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz,
|
||||
'status_abfolge' => implode(', ', $this->_statusAbfolge)
|
||||
),
|
||||
'resolution_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* There should be certain order of status before the student status.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getFalscheStatusabfolgeVorStudentstatus(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($this->_statusAbfolge);
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id, prestudent_id, prestudent_stg_oe_kurzbz, studiensemester_kurzbz
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id,
|
||||
stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz,
|
||||
status.status_kurzbz, status.datum, status.insertamum, status.ext_id,
|
||||
LAG(status.status_kurzbz, 1)
|
||||
OVER (
|
||||
PARTITION BY prestudent.prestudent_id
|
||||
ORDER BY status.datum, status.insertamum, status.ext_id
|
||||
) AS prev_status_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_prestudentstatus status ON (prestudent.prestudent_id=status.prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz)
|
||||
JOIN public.tbl_studiengang stg USING(studiengang_kz)
|
||||
WHERE
|
||||
status.status_kurzbz IN ?
|
||||
AND stg.melderelevant
|
||||
AND prestudent.bismelden
|
||||
-- there should be a student already
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
public.tbl_prestudentstatus
|
||||
WHERE
|
||||
prestudent_id = prestudent.prestudent_id
|
||||
AND status_kurzbz = 'Student'
|
||||
AND datum >= status.datum
|
||||
)
|
||||
) prestudents
|
||||
WHERE
|
||||
(";
|
||||
|
||||
foreach ($this->_statusAbfolge as $idx => $status_kurzbz)
|
||||
{
|
||||
// previous status should be either same status, or previous status, or null in case of first status
|
||||
if ($idx != 0)$qry .= " OR ";
|
||||
$qry .= " (status_kurzbz = ? AND prev_status_kurzbz NOT IN ?";
|
||||
$prev_status_kurzbz = array($status_kurzbz);
|
||||
|
||||
if ($idx == 0)
|
||||
$qry .= " AND prev_status_kurzbz IS NOT NULL";
|
||||
else
|
||||
$prev_status_kurzbz[] = $this->_statusAbfolge[$idx - 1];
|
||||
|
||||
$qry .= ')';
|
||||
|
||||
$params[] = $status_kurzbz;
|
||||
$params[] = $prev_status_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
)";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
$semesterArr = array($studiensemester_kurzbz);
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = prestudents.prestudent_id
|
||||
)";
|
||||
|
||||
$params[] = $semesterArr;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
$qry .= " ORDER BY person_id DESC, prestudent_id DESC, prestudent_stg_oe_kurzbz, studiensemester_kurzbz";
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class FalscherIncomingZweckPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getFalscherIncomingZweck(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('bisio_id' => $prestudent->bisio_id),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Incomings should have the correct Zweck.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getFalscherIncomingZweck(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
$studiensemester_clause = '';
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$studiensemester_clause = "AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry = "
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, zw.zweck_code, stg.studiengang_kz,
|
||||
bisio.bisio_id, COUNT(zw.zweck_code) OVER (PARTITION BY bisio_id) AS anzahl
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
JOIN bis.tbl_bisio_zweck zw USING (bisio_id)
|
||||
WHERE
|
||||
stg.melderelevant
|
||||
AND pre.bismelden
|
||||
AND status.status_kurzbz = 'Incoming'
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
{$studiensemester_clause}
|
||||
) zwecke
|
||||
WHERE anzahl = 1 AND zweck_code NOT IN ('1', '2', '3')";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND zwecke.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND zwecke.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND zwecke.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND zwecke.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,9 +19,10 @@ class GbDatumWeitZurueck extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class GeburtsnationFehlt extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->_getGeburtsnationFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
if (hasData($personRes))
|
||||
{
|
||||
$persons = getData($personRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($persons as $person)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $person->person_id,
|
||||
'fehlertext_params' => array(),
|
||||
'resolution_params' => array()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Geburtsnation is missing.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getGeburtsnationFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT person_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
(geburtsnation IS NULL OR geburtsnation = '')
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,14 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -58,21 +60,26 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getInaktiverStudentAktiverStatus(
|
||||
$studiensemester_kurzbz,
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
$aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
if (!isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/studiensemester_model', 'StudiensemesterModel');
|
||||
$aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt();
|
||||
|
||||
if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
|
||||
if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes;
|
||||
|
||||
$studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
|
||||
$studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : '';
|
||||
}
|
||||
|
||||
$params = array($studiensemester_kurzbz);
|
||||
|
||||
@@ -103,6 +110,12 @@ class InaktiverStudentAktiverStatus extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,13 @@ class IncomingHeimatNationOesterreich extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->getIncomingHeimatNationOesterreich(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
|
||||
@@ -18,9 +18,10 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -48,10 +49,11 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
* Incoming should have IN/OUT data.
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
@@ -85,6 +87,12 @@ class IncomingOhneIoDatensatz extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getIncomingOrGsFoerderrelevant(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -55,6 +57,7 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return object success or error
|
||||
*/
|
||||
@@ -62,6 +65,7 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -114,6 +118,12 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -19,12 +19,14 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getInskriptionVorLetzerBismeldung(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -59,7 +61,7 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
|
||||
/**
|
||||
* Students of a semester shouldn't start studies before the date of Bismeldung.
|
||||
* e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020
|
||||
* e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2022
|
||||
* e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
@@ -71,11 +73,14 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
// get Bismeldedatum
|
||||
$datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz);
|
||||
|
||||
if (!$datumBis) return success([]);
|
||||
|
||||
$params = array($datumBis, $studiensemester_kurzbz, $datumBis);
|
||||
|
||||
// get active students
|
||||
@@ -117,6 +122,12 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
@@ -132,17 +143,16 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker
|
||||
*/
|
||||
private function _getBisdateFromSemester($studiensemester_kurzbz)
|
||||
{
|
||||
$semesterYear = substr($studiensemester_kurzbz, 2, 6);
|
||||
$semesterType = substr($studiensemester_kurzbz, 0, 2);
|
||||
$bisdate = null;
|
||||
|
||||
if ($semesterType == 'SS')
|
||||
{
|
||||
return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d');
|
||||
}
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$prevSemester = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
if (!hasData($prevSemester)) return null;
|
||||
$prevSemester = getData($prevSemester)[0]->studiensemester_kurzbz;
|
||||
|
||||
if ($semesterType == 'WS')
|
||||
{
|
||||
return date_format(date_create($semesterYear."-04-15"), 'Y-m-d');
|
||||
}
|
||||
$this->_ci->load->model('codex/Bismeldestichtag_model', 'BismeldestichtagModel');
|
||||
$bisDate = $this->_ci->BismeldestichtagModel->getLastReachedMeldestichtag($prevSemester);
|
||||
if (!hasData($bisDate)) return null;
|
||||
return getData($bisDate)[0]->meldestichtag;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class KeinAufenthaltszweckPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getKeinAufenthaltszweck(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('bisio_id' => $prestudent->bisio_id),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Students with mobility should have Aufenthaltszweck.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getKeinAufenthaltszweck(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
zw.zweck_code, stg.studiengang_kz, bisio.bisio_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
LEFT JOIN bis.tbl_bisio_zweck zw USING (bisio_id)
|
||||
WHERE
|
||||
(zw.zweck_code IS NULL OR zw.zweck_code = '')
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND bisio.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -18,11 +18,12 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$personRes = $this->getNationNichtOesterreichAberGemeinde(
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,149 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class OrgformBewerberUngleichOrgformStudent extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getOrgformBewerberUngleichOrgformStudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz,
|
||||
'bewerber_studiensemester_kurzbz' => $prestudent->bewerber_studiensemester_kurzbz
|
||||
),
|
||||
'resolution_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id,
|
||||
'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Orgform of Bewerber should be same as of student (Orgform of Status AND Studienplan)
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getOrgformBewerberUngleichOrgformStudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent.prestudent_id) prestudent.person_id, prestudent.prestudent_id, students.studiensemester_kurzbz,
|
||||
bewerber_status.studiensemester_kurzbz AS bewerber_studiensemester_kurzbz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_prestudentstatus bewerber_status
|
||||
ON prestudent.prestudent_id = bewerber_status.prestudent_id AND bewerber_status.status_kurzbz = 'Bewerber'
|
||||
JOIN lehre.tbl_studienplan bewerber_studienplan ON bewerber_status.studienplan_id = bewerber_studienplan.studienplan_id
|
||||
JOIN (
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, st.studiensemester_kurzbz,
|
||||
pl.orgform_kurzbz AS studienplan_orgform_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudentstatus st
|
||||
JOIN lehre.tbl_studienplan pl USING (studienplan_id)
|
||||
WHERE
|
||||
status_kurzbz = 'Student'
|
||||
ORDER BY
|
||||
st.prestudent_id, st.datum, st.insertamum, st.ext_id
|
||||
) students ON prestudent.prestudent_id = students.prestudent_id
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
prestudent.bismelden
|
||||
AND stg.melderelevant
|
||||
AND bewerber_studienplan.orgform_kurzbz <> students.studienplan_orgform_kurzbz";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
$semesterArr = array($studiensemester_kurzbz);
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = prestudent.prestudent_id
|
||||
)";
|
||||
|
||||
$params[] = $semesterArr;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,14 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getOrgformStgUngleichOrgformPrestudent(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -70,6 +72,7 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
@@ -116,6 +119,12 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class OutgoingAngerechneteEctsFehlenPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getAngerechneteEctsFehlen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('bisio_id' => $prestudent->bisio_id),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outgoing should have angerechnete ECTS.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param person_id int if check is to be executed only for one person
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getAngerechneteEctsFehlen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
stg.studiengang_kz, bisio.bisio_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
WHERE
|
||||
bisio.bis IS NOT NULL
|
||||
AND bisio.bis::date <= NOW()
|
||||
AND bisio.bis::date - bisio.von::date >= 29
|
||||
AND bisio.ects_angerechnet IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz = 'Incoming' AND prestudent_id = pre.prestudent_id)
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND bisio.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class OutgoingAufenthaltfoerderungfehltPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getAufenthaltsfoerderungFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('bisio_id' => $prestudent->bisio_id),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Student with mobility should have Aufenthaltsfoerderung.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getAufenthaltsfoerderungFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
stg.studiengang_kz, bisio.bisio_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
LEFT JOIN bis.tbl_bisio_aufenthaltfoerderung foerd USING (bisio_id)
|
||||
WHERE
|
||||
bisio.bis IS NOT NULL
|
||||
AND bisio.bis::date - bisio.von::date >= 29
|
||||
AND foerd.aufenthaltfoerderung_code IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz = 'Incoming' AND prestudent_id = pre.prestudent_id)
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND bisio.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class OutgoingErworbeneEctsFehlenPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getAngerechneteEctsFehlen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('bisio_id' => $prestudent->bisio_id),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Outgoing should have erworbene ECTS.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getAngerechneteEctsFehlen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz,
|
||||
stg.studiengang_kz, bisio.bisio_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
WHERE
|
||||
bisio.bis IS NOT NULL
|
||||
AND bisio.bis::date <= NOW()
|
||||
AND bisio.bis::date - bisio.von::date >= 29
|
||||
AND bisio.ects_erworben IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE status_kurzbz = 'Incoming' AND prestudent_id = pre.prestudent_id)
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND bisio.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -5,11 +5,13 @@
|
||||
*/
|
||||
abstract class PlausiChecker
|
||||
{
|
||||
const ISSUE_ID_NAME = 'issue_id';
|
||||
|
||||
protected $_ci; // code igniter instance
|
||||
protected $_config; // all applicable configuration parameters for this plausicheck
|
||||
protected $_db; // database for queries
|
||||
|
||||
protected $_isForResolutionCheck; // if true, additional parameters only needed for resolution are checked
|
||||
protected $_base_sql = ''; // base sql string
|
||||
|
||||
protected $_config_params = []; // name of all config params which should be applied for this plausicheck, with sql [name] => [sql]
|
||||
protected $_params_for_checking = []; // name of all passed params for checking, with sql [name] => [sql]
|
||||
@@ -24,8 +26,6 @@ abstract class PlausiChecker
|
||||
// set configuration
|
||||
$this->_config = $params['configurationParams'] ?? [];
|
||||
|
||||
$this->_isForResolutionCheck = $params['isForResolutionCheck'] ?? false;
|
||||
|
||||
// get database for queries
|
||||
$this->_db = new DB_Model();
|
||||
}
|
||||
@@ -41,15 +41,20 @@ abstract class PlausiChecker
|
||||
$params = [];
|
||||
$qry = $this->_base_sql;
|
||||
|
||||
if ($this->_isForResolutionCheck == true)
|
||||
// if issue id is set, issue is resolving - check if behebung parameter are present
|
||||
if (isset($paramsForChecking[self::ISSUE_ID_NAME]))
|
||||
{
|
||||
foreach ($this->_resolution_params as $resParam)
|
||||
{
|
||||
if (!isset($paramsForChecking[$resParam]))
|
||||
return error("$resParam missing".(isset($paramsForChecking['issue_id']) ? ", issue ID: ".$paramsForChecking['issue_id'] : ""));
|
||||
return error("$resParam missing"
|
||||
.(isset($paramsForChecking[self::ISSUE_ID_NAME]) ? ", issue ID: ".$paramsForChecking[self::ISSUE_ID_NAME] : ""));
|
||||
}
|
||||
}
|
||||
|
||||
// get fehlertext and resolution params
|
||||
|
||||
|
||||
// add config params to query
|
||||
if (isset($this->_config_params) && !isEmptyArray($this->_config_params))
|
||||
{
|
||||
|
||||
@@ -19,12 +19,14 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getPrestudentMischformOhneOrgform(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -68,6 +70,7 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
@@ -98,6 +101,12 @@ class PrestudentMischformOhneOrgform extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
+152
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class StartsemesterUngleichPersonenkennzeichen extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStartsemesterUngleichPersonenkennzeichen(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id
|
||||
),
|
||||
'resolution_params' => array(
|
||||
'prestudent_id' => $prestudent->prestudent_id
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bewerber should have participated in Reihungstest.
|
||||
* @param studiensemester_kurzbz string check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStartsemesterUngleichPersonenkennzeichen(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
prestudent.person_id, prestudent.prestudent_id,
|
||||
stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent prestudent
|
||||
JOIN public.tbl_studiengang stg USING (studiengang_kz)
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
WHERE
|
||||
stg.melderelevant
|
||||
AND prestudent.bismelden
|
||||
AND
|
||||
(
|
||||
SELECT
|
||||
substring(studiensemester_kurzbz, 5, 2)::integer -
|
||||
(CASE
|
||||
WHEN
|
||||
substring(studiensemester_kurzbz, 1, 2) = 'SS'
|
||||
THEN
|
||||
1
|
||||
ELSE
|
||||
0
|
||||
END)::integer
|
||||
FROM
|
||||
public.tbl_prestudentstatus
|
||||
WHERE
|
||||
prestudent_id = prestudent.prestudent_id
|
||||
AND status_kurzbz = 'Student'
|
||||
ORDER BY
|
||||
datum, insertamum, ext_id
|
||||
LIMIT 1
|
||||
) <> substring(stud.matrikelnr, 1, 2)::integer";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
|
||||
$prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
$semesterArr = array($studiensemester_kurzbz);
|
||||
|
||||
if (hasData($prevStudiensemesterRes))
|
||||
{
|
||||
// if Studiensemester given, check only if has status in current or previous semester
|
||||
$semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = prestudent.prestudent_id
|
||||
)";
|
||||
|
||||
$params[] = $semesterArr;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -18,9 +18,10 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -51,7 +52,7 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
@@ -79,6 +80,12 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -18,9 +18,10 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $person_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -56,6 +57,7 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$studienordnung_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
@@ -93,6 +95,12 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker
|
||||
$params[] = $studienordnung_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -17,10 +17,18 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz);
|
||||
$prestudentRes = $this->getStudentstatusNachAbbrecher(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
@@ -46,12 +54,13 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
|
||||
/**
|
||||
* There shouldn't be any status after Abbrecher status.
|
||||
* @param studiensemester_kurzbz int if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
public function getStudentstatusNachAbbrecher($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null, $person_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
@@ -67,6 +76,18 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
prestatus.status_kurzbz = 'Abbrecher'
|
||||
AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = prestudent.prestudent_id
|
||||
)";
|
||||
|
||||
$params[] = [$studiensemester_kurzbz];
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
@@ -79,6 +100,12 @@ class StudentstatusNachAbbrecher extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND prestudent.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class StudentstatusNachDiplomand extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStudentstatusNachDiplomand($studiensemester_kurzbz, $studiengang_kz, $prestudent_id, $exkludierte_studiengang_kz);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* There shouldn't be any student status after Diplomand status.
|
||||
* @param studiensemester_kurzbz int if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
public function getStudentstatusNachDiplomand($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null)
|
||||
{
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_student student
|
||||
JOIN public.tbl_prestudent prestudent USING(prestudent_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
status.status_kurzbz = 'Diplomand'
|
||||
AND EXISTS (
|
||||
SELECT 1
|
||||
FROM
|
||||
public.tbl_prestudentstatus
|
||||
WHERE
|
||||
prestudent_id = prestudent.prestudent_id
|
||||
AND status_kurzbz = 'Student'
|
||||
AND datum::date > status.datum::date
|
||||
)";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND EXISTS (
|
||||
SELECT 1
|
||||
FROM public.tbl_prestudentstatus ps
|
||||
WHERE studiensemester_kurzbz IN ?
|
||||
AND ps.prestudent_id = prestudent.prestudent_id
|
||||
)";
|
||||
|
||||
$params[] = [$studiensemester_kurzbz];
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND prestudent.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,14 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->getStudienplanUngueltig(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
null,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
@@ -69,6 +71,7 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array($studiensemester_kurzbz);
|
||||
@@ -115,6 +118,12 @@ class StudienplanUngueltig extends PlausiChecker
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND tbl_person.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class UhstatPersonkennungFehltCore extends PlausiChecker
|
||||
{
|
||||
const PERSONKENNUNG_KENNZEICHEN_TYPEN = ['vbpkAs', 'vbpkBf'];
|
||||
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getUhstatPersonkennungFehlt(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id
|
||||
//'fehlertext_params' => array('person_id' => $prestudent->person_id),
|
||||
//'resolution_params' => array('person_id' => $prestudent->person_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Student should have Personenkennung for UHSTAT reporting.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getUhstatPersonkennungFehlt(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (person_id) prestudent_id, person_id
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
stg.melderelevant
|
||||
AND pre.bismelden
|
||||
AND EXISTS (SELECT 1 FROM bis.tbl_uhstat1daten WHERE person_id = pers.person_id)
|
||||
AND (SELECT COUNT (DISTINCT kennzeichentyp_kurzbz) FROM public.tbl_kennzeichen WHERE person_id = pers.person_id AND kennzeichentyp_kurzbz IN ('vbpkAs', 'vbpkBf')) < 2
|
||||
AND pers.ersatzkennzeichen IS NULL";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZgvDatumInZukunft extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getZgvDatumInZukunft(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* ZGV date should be in the past.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getZgvDatumInZukunft(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre.zgvdatum::date > NOW()
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
//~ $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz);
|
||||
|
||||
//~ if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes;
|
||||
|
||||
//~ if (hasData($prevStudiensemesterRes))
|
||||
//~ {
|
||||
//~ // if Studiensemester given, check only if has status in current or previous semester
|
||||
//~ $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz;
|
||||
//~ $qry .= " AND EXISTS (
|
||||
//~ SELECT 1
|
||||
//~ FROM public.tbl_prestudentstatus ps
|
||||
//~ WHERE studiensemester_kurzbz IN (?, ?)
|
||||
//~ AND ps.prestudent_id = pre.prestudent_id
|
||||
//~ )";
|
||||
//~ $params[] = $prevStudiensemester;
|
||||
//~ $params[] = $studiensemester_kurzbz;
|
||||
//~ }
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZgvDatumVorGeburtsdatum extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getZgvDatumVorGeburtsdatum(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* Zgv date should be after birthdate.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getZgvDatumVorGeburtsdatum(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre.zgvdatum::date < pers.gebdatum
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pers.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZgvMasterDatumInZukunft extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getZgvMasterDatumInZukunft(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* ZGV master date should be in the past.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getZgvMasterDatumInZukunft(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre.zgvmadatum::date > NOW()
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZgvMasterDatumVorGeburtsdatum extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getZgvMasterDatumVorGeburtsdatum(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* ZGV master date should be after birthdate.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getZgvMasterDatumVorGeburtsdatum(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person pers USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre.zgvmadatum::date < pers.gebdatum
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZgvMasterDatumVorZgvdatum extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$prestudent_id = isset($params['prestudent_id']) ? $params['prestudent_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getZgvMasterDatumVorZgvDatum(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$prestudent_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
//'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id),
|
||||
'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* ZGV master date should be before ZGV date.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param prestudent_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getZgvMasterDatumVorZgvDatum(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$prestudent_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
$params = array();
|
||||
|
||||
$qry = "
|
||||
SELECT
|
||||
DISTINCT ON (prestudent_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
WHERE
|
||||
pre.zgvmadatum::date < pre.zgvdatum::date
|
||||
AND stg.melderelevant
|
||||
AND pre.bismelden";
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$qry .= " AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($prestudent_id))
|
||||
{
|
||||
$qry .= " AND pre.prestudent_id = ?";
|
||||
$params[] = $prestudent_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND pre.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND stg.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once('PlausiChecker.php');
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ZuVieleZweckeIncomingPlausi extends PlausiChecker
|
||||
{
|
||||
public function executePlausiCheck($params)
|
||||
{
|
||||
$results = array();
|
||||
|
||||
// get parameters from config
|
||||
$exkludierte_studiengang_kz = isset($this->_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null;
|
||||
|
||||
// pass parameters needed for plausicheck
|
||||
$studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null;
|
||||
$studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null;
|
||||
$bisio_id = isset($params['bisio_id']) ? $params['bisio_id'] : null;
|
||||
$person_id = isset($params['person_id']) ? $params['person_id'] : null;
|
||||
|
||||
// get all students failing the plausicheck
|
||||
$prestudentRes = $this->_getFalscherIncomingZweck(
|
||||
$studiensemester_kurzbz,
|
||||
$studiengang_kz,
|
||||
$bisio_id,
|
||||
$person_id,
|
||||
$exkludierte_studiengang_kz
|
||||
);
|
||||
|
||||
if (isError($prestudentRes)) return $prestudentRes;
|
||||
|
||||
if (hasData($prestudentRes))
|
||||
{
|
||||
$prestudents = getData($prestudentRes);
|
||||
|
||||
// populate results with data necessary for writing issues
|
||||
foreach ($prestudents as $prestudent)
|
||||
{
|
||||
$results[] = array(
|
||||
'person_id' => $prestudent->person_id,
|
||||
'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz,
|
||||
'fehlertext_params' => array('anzahl' => $prestudent->anzahl),
|
||||
'resolution_params' => array('bisio_id' => $prestudent->bisio_id)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// return the results
|
||||
return success($results);
|
||||
}
|
||||
|
||||
/**
|
||||
* There should be exactly one Incoming Zweck.
|
||||
* @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester
|
||||
* @param studiengang_kz int if check is to be executed for certain Studiengang
|
||||
* @param bisio_id int if check is to be executed only for one prestudent
|
||||
* @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check
|
||||
* @return success with prestudents or error
|
||||
*/
|
||||
private function _getFalscherIncomingZweck(
|
||||
$studiensemester_kurzbz = null,
|
||||
$studiengang_kz = null,
|
||||
$bisio_id = null,
|
||||
$person_id = null,
|
||||
$exkludierte_studiengang_kz = null
|
||||
) {
|
||||
|
||||
$params = array();
|
||||
$studiensemester_clause = '';
|
||||
|
||||
if (isset($studiensemester_kurzbz))
|
||||
{
|
||||
$studiensemester_clause = "AND status.studiensemester_kurzbz = ?";
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
}
|
||||
|
||||
$qry = "
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
DISTINCT ON (bisio_id) prestudent_id, person_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, stg.studiengang_kz,
|
||||
bisio.bisio_id, (SELECT count(*) FROM bis.tbl_bisio_zweck WHERE bisio_id = bisio.bisio_id) AS anzahl
|
||||
FROM
|
||||
public.tbl_prestudent pre
|
||||
JOIN public.tbl_student stud USING (prestudent_id)
|
||||
JOIN public.tbl_person USING(person_id)
|
||||
JOIN public.tbl_prestudentstatus status USING(prestudent_id)
|
||||
JOIN public.tbl_studiensemester sem ON status.studiensemester_kurzbz = sem.studiensemester_kurzbz
|
||||
JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz
|
||||
JOIN bis.tbl_bisio bisio ON stud.student_uid = bisio.student_uid
|
||||
WHERE
|
||||
stg.melderelevant
|
||||
AND pre.bismelden
|
||||
AND status.status_kurzbz = 'Incoming'
|
||||
AND bisio.von::date < sem.ende AND bisio.bis::date > sem.start
|
||||
{$studiensemester_clause}
|
||||
) zwecke
|
||||
WHERE anzahl > 1";
|
||||
|
||||
if (isset($studiengang_kz))
|
||||
{
|
||||
$qry .= " AND zwecke.studiengang_kz = ?";
|
||||
$params[] = $studiengang_kz;
|
||||
}
|
||||
|
||||
if (isset($bisio_id))
|
||||
{
|
||||
$qry .= " AND zwecke.bisio_id = ?";
|
||||
$params[] = $bisio_id;
|
||||
}
|
||||
|
||||
if (isset($person_id))
|
||||
{
|
||||
$qry .= " AND zwecke.person_id = ?";
|
||||
$params[] = $person_id;
|
||||
}
|
||||
|
||||
if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz))
|
||||
{
|
||||
$qry .= " AND zwecke.studiengang_kz NOT IN ?";
|
||||
$params[] = $exkludierte_studiengang_kz;
|
||||
}
|
||||
|
||||
return $this->_db->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* More than one Zweck for incoming
|
||||
*/
|
||||
|
||||
@@ -16,7 +16,7 @@ class CORE_INOUT_0005 implements IIssueResolvedChecker
|
||||
|
||||
$this->_ci->load->model('codex/Bisio_model', 'BisioModel');
|
||||
|
||||
// get all Zwecke
|
||||
// get bisio
|
||||
$this->_ci->BisioModel->addSelect('ects_angerechnet');
|
||||
$bisioRes = $this->_ci->BisioModel->loadWhere(array('bisio_id' => $params['bisio_id']));
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
if (! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Geburtsnation missing
|
||||
*/
|
||||
class CORE_PERSON_0005 implements IIssueResolvedChecker
|
||||
{
|
||||
public function checkIfIssueIsResolved($params)
|
||||
{
|
||||
if (!isset($params['issue_person_id']) || !is_numeric($params['issue_person_id']))
|
||||
return error('Person Id missing, issue_id: '.$params['issue_id']);
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->model('person/Person_model', 'PersonModel');
|
||||
|
||||
// load geburtsnation for the given person
|
||||
$this->_ci->PersonModel->addSelect('geburtsnation');
|
||||
$personRes = $this->_ci->PersonModel->load($params['issue_person_id']);
|
||||
|
||||
if (isError($personRes)) return $personRes;
|
||||
|
||||
if (hasData($personRes))
|
||||
{
|
||||
// get person data
|
||||
$personData = getData($personRes)[0];
|
||||
|
||||
// if geburtsnation present, issue is resolved
|
||||
return success(!isEmptyString($personData->geburtsnation));
|
||||
}
|
||||
else
|
||||
return success(false); // if no person found, not resolved
|
||||
}
|
||||
}
|
||||
@@ -12,16 +12,13 @@ class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker
|
||||
if (!isset($params['prestudent_id']) || !is_numeric($params['prestudent_id']))
|
||||
return error('Prestudent Id missing, issue_id: '.$params['issue_id']);
|
||||
|
||||
if (!isset($params['studiensemester_kurzbz']) || isEmptyString($params['studiensemester_kurzbz']))
|
||||
return error('Studiensemester missing, issue_id: '.$params['issue_id']);
|
||||
|
||||
$this->_ci =& get_instance(); // get code igniter instance
|
||||
|
||||
$this->_ci->load->library('issues/plausichecks/InaktiverStudentAktiverStatus');
|
||||
|
||||
// check if issue persists
|
||||
$checkRes = $this->_ci->inaktiverstudentaktiverstatus->getInaktiverStudentAktiverStatus(
|
||||
$params['studiensemester_kurzbz'],
|
||||
null,
|
||||
null,
|
||||
$params['prestudent_id']
|
||||
);
|
||||
|
||||
@@ -40,7 +40,9 @@ abstract class AbstractBestandteil implements IValidation
|
||||
|
||||
if( is_bool($new_value) && ($old_value !== $new_value) ) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
} else if($old_value != $new_value) {
|
||||
} else if(is_null($old_value) xor is_null($new_value)) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
} else if($old_value != $new_value) {
|
||||
$this->modifiedcolumns[$columnname] = $columnname;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ namespace vertragsbestandteil;
|
||||
|
||||
use Exception;
|
||||
use vertragsbestandteil\VertragsbestandteilStunden;
|
||||
use vertragsbestandteil\VertragsbestandteilLohnguide;
|
||||
|
||||
/**
|
||||
* Description of VertragsbestandteilFactory
|
||||
@@ -22,6 +23,7 @@ class VertragsbestandteilFactory
|
||||
const VERTRAGSBESTANDTEIL_URLAUBSANSPRUCH = 'urlaubsanspruch';
|
||||
const VERTRAGSBESTANDTEIL_ZEITAUFZEICHNUNG = 'zeitaufzeichnung';
|
||||
const VERTRAGSBESTANDTEIL_LEHRE = 'lehre';
|
||||
const VERTRAGSBESTANDTEIL_LOHNGUIDE = 'lohnguide';
|
||||
|
||||
public static function getVertragsbestandteil($data, $fromdb=false)
|
||||
{
|
||||
@@ -69,6 +71,11 @@ class VertragsbestandteilFactory
|
||||
$vertragsbestandteil = new VertragsbestandteilZeitaufzeichnung();
|
||||
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||
break;
|
||||
|
||||
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||
$vertragsbestandteil = new VertragsbestandteilLohnguide();
|
||||
$vertragsbestandteil->hydrateByStdClass($data, $fromdb);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Exception('Unknown vertragsbestandteiltyp_kurzbz '
|
||||
@@ -127,6 +134,12 @@ class VertragsbestandteilFactory
|
||||
$vertragsbestandteildbmodel = $CI->VertragsbestandteilZeitaufzeichnung_model;
|
||||
break;
|
||||
|
||||
case self::VERTRAGSBESTANDTEIL_LOHNGUIDE:
|
||||
$CI->load->model('vertragsbestandteil/VertragsbestandteilLohnguide_model',
|
||||
'VertragsbestandteilLohnguide_model');
|
||||
$vertragsbestandteildbmodel = $CI->VertragsbestandteilLohnguide_model;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Exception('Unknown vertragsbestandteil_kurzbz '
|
||||
. $vertragsbestandteil_kurzbz);
|
||||
|
||||
@@ -10,6 +10,7 @@ require_once __DIR__ . '/VertragsbestandteilKuendigungsfrist.php';
|
||||
require_once __DIR__ . '/VertragsbestandteilUrlaubsanspruch.php';
|
||||
require_once __DIR__ . '/VertragsbestandteilFreitext.php';
|
||||
require_once __DIR__ . '/VertragsbestandteilKarenz.php';
|
||||
require_once __DIR__ . '/VertragsbestandteilLohnguide.php';
|
||||
require_once __DIR__ . '/VertragsbestandteilFactory.php';
|
||||
require_once __DIR__ . '/OverlapChecker.php';
|
||||
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
<?php
|
||||
namespace vertragsbestandteil;
|
||||
|
||||
use vertragsbestandteil\Vertragsbestandteil;
|
||||
use vertragsbestandteil\VertragsbestandteilFactory;
|
||||
|
||||
class VertragsbestandteilLohnguide extends Vertragsbestandteil
|
||||
{
|
||||
protected $stellenbezeichnung;
|
||||
protected $vordienstzeit;
|
||||
protected $fachrichtung_kurzbz;
|
||||
protected $modellstelle_kurzbz;
|
||||
protected $kommentar_person;
|
||||
protected $kommentar_modellstelle;
|
||||
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setVertragsbestandteiltyp_kurzbz(
|
||||
VertragsbestandteilFactory::VERTRAGSBESTANDTEIL_LOHNGUIDE);
|
||||
}
|
||||
|
||||
public function getStellenbezeichnung()
|
||||
{
|
||||
return $this->stellenbezeichnung;
|
||||
}
|
||||
|
||||
public function setStellenbezeichnung($stellenbezeichnung): self
|
||||
{
|
||||
$this->markDirty('stellenbezeichnung', $this->stellenbezeichnung, $stellenbezeichnung);
|
||||
$this->stellenbezeichnung = $stellenbezeichnung;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getVordienstzeit()
|
||||
{
|
||||
return $this->vordienstzeit;
|
||||
}
|
||||
|
||||
public function setVordienstzeit($vordienstzeit): self
|
||||
{
|
||||
$this->markDirty('vordienstzeit', $this->vordienstzeit, $vordienstzeit);
|
||||
$this->vordienstzeit = $vordienstzeit;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getFachrichtung_kurzbz()
|
||||
{
|
||||
return $this->fachrichtung_kurzbz;
|
||||
}
|
||||
|
||||
public function setFachrichtung_kurzbz($fachrichtung_kurzbz): self
|
||||
{
|
||||
$this->markDirty('fachrichtung_kurzbz', $this->fachrichtung_kurzbz, $fachrichtung_kurzbz);
|
||||
$this->fachrichtung_kurzbz = $fachrichtung_kurzbz;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getModellstelle_kurzbz()
|
||||
{
|
||||
return $this->modellstelle_kurzbz;
|
||||
}
|
||||
|
||||
public function setModellstelle_kurzbz($modellstelle_kurzbz): self
|
||||
{
|
||||
$this->markDirty('modellstelle_kurzbz', $this->modellstelle_kurzbz, $modellstelle_kurzbz);
|
||||
$this->modellstelle_kurzbz = $modellstelle_kurzbz;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getKommentar_person()
|
||||
{
|
||||
return $this->kommentar_person;
|
||||
}
|
||||
|
||||
public function setKommentar_person($kommentar_person): self
|
||||
{
|
||||
$this->markDirty('kommentar_person', $this->kommentar_person, $kommentar_person);
|
||||
$this->kommentar_person = $kommentar_person;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getKommentar_modellstelle()
|
||||
{
|
||||
return $this->kommentar_modellstelle;
|
||||
}
|
||||
|
||||
public function setKommentar_modellstelle($kommentar_modellstelle): self
|
||||
{
|
||||
$this->markDirty('kommentar_modellstelle', $this->kommentar_modellstelle, $kommentar_modellstelle);
|
||||
$this->kommentar_modellstelle = $kommentar_modellstelle;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function hydrateByStdClass($data, $fromdb=false)
|
||||
{
|
||||
parent::hydrateByStdClass($data, $fromdb);
|
||||
$this->fromdb = $fromdb;
|
||||
isset($data->fachrichtung_kurzbz) && $this->setFachrichtung_kurzbz($data->fachrichtung_kurzbz);
|
||||
isset($data->stellenbezeichnung) && $this->setStellenbezeichnung($data->stellenbezeichnung);
|
||||
isset($data->vordienstzeit) && $this->setVordienstzeit($data->vordienstzeit);
|
||||
isset($data->modellstelle_kurzbz) && $this->setModellstelle_kurzbz($data->modellstelle_kurzbz);
|
||||
isset($data->kommentar_person) && $this->setKommentar_person($data->kommentar_person);
|
||||
isset($data->kommentar_modellstelle) && $this->setKommentar_modellstelle($data->kommentar_modellstelle);
|
||||
$this->fromdb = false;
|
||||
}
|
||||
|
||||
public function toStdClass(): \stdClass
|
||||
{
|
||||
$tmp = array(
|
||||
'vertragsbestandteil_id' => $this->getVertragsbestandteil_id(),
|
||||
'stellenbezeichnung' => $this->getStellenbezeichnung(),
|
||||
'vordienstzeit' => $this->getVordienstzeit(),
|
||||
'fachrichtung_kurzbz' => $this->getFachrichtung_kurzbz(),
|
||||
'modellstelle_kurzbz' => $this->getModellstelle_kurzbz(),
|
||||
'kommentar_person' => $this->getKommentar_person(),
|
||||
'kommentar_modellstelle' => $this->getKommentar_modellstelle(),
|
||||
);
|
||||
|
||||
$tmp = array_filter($tmp, function($k) {
|
||||
return in_array($k, $this->modifiedcolumns);
|
||||
}, ARRAY_FILTER_USE_KEY);
|
||||
|
||||
return (object) $tmp;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
$txt = <<<EOTXT
|
||||
modellstelle_kurzbz: {$this->getModellstelle_kurzbz()}
|
||||
|
||||
EOTXT;
|
||||
return parent::__toString() . $txt;
|
||||
}
|
||||
|
||||
public function validate()
|
||||
{
|
||||
$value = $this->vordienstzeit;
|
||||
|
||||
if ($value === null || $value === '') {
|
||||
$result = null; // allow null value
|
||||
} else {
|
||||
$result = filter_var($value, FILTER_VALIDATE_INT, [
|
||||
'options' => [
|
||||
'min_range' => 0,
|
||||
'max_range' => 100
|
||||
]
|
||||
]);
|
||||
|
||||
if ($result === false) {
|
||||
$this->validationerrors[] = 'Vordienstjahre muss eine ganze Zahl (0 bis 100) enthalten oder leer sein.';
|
||||
}
|
||||
}
|
||||
|
||||
return parent::validate();
|
||||
}
|
||||
}
|
||||
@@ -11,57 +11,4 @@ class Dashboard_Preset_model extends DB_Model
|
||||
$this->dbTable = 'dashboard.tbl_dashboard_preset';
|
||||
$this->pk = 'preset_id';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Presets of given uid.
|
||||
* @param integer dashboard_id
|
||||
* @param string $uid
|
||||
* @return array
|
||||
*/
|
||||
public function getPresets($dashboard_id, $uid)
|
||||
{
|
||||
// TODO: get Funktionen for uid and load all preset for all funktionen for uid
|
||||
//return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz'=> null));
|
||||
$sql = <<<EOSQL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
dashboard.tbl_dashboard_preset
|
||||
WHERE
|
||||
dashboard_id = ?
|
||||
AND (
|
||||
funktion_kurzbz IN (
|
||||
SELECT
|
||||
DISTINCT funktion_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzerfunktion
|
||||
WHERE
|
||||
uid = ?
|
||||
AND
|
||||
NOW()::date
|
||||
BETWEEN
|
||||
COALESCE(datum_von, '1970-01-01')
|
||||
AND
|
||||
COALESCE(datum_bis, '2170-12-31')
|
||||
)
|
||||
OR
|
||||
funktion_kurzbz IS NULL
|
||||
)
|
||||
ORDER BY
|
||||
funktion_kurzbz DESC
|
||||
EOSQL;
|
||||
|
||||
return $this->execQuery($sql, array($dashboard_id, $uid));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Preset by Dashboard and Funktion
|
||||
* @param integer dashboard_id
|
||||
* @param string funktion_kurzbz
|
||||
* @return array
|
||||
*/
|
||||
public function getPresetByDashboardAndFunktion($dashboard_id, $funktion_kurzbz)
|
||||
{
|
||||
return $this->loadWhere(array('dashboard_id' => $dashboard_id, 'funktion_kurzbz' => $funktion_kurzbz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,14 +402,17 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
SELECT
|
||||
vorname, nachname, mitarbeiter_uid, lehrfunktion_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehreinheit
|
||||
lehre.tbl_lehreinheit le
|
||||
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
|
||||
JOIN public.tbl_benutzer b ON b.uid = lema.mitarbeiter_uid
|
||||
JOIN public.tbl_person p using (person_id)
|
||||
WHERE
|
||||
tbl_lehreinheit.lehrveranstaltung_id= ?
|
||||
AND tbl_lehreinheit.studiensemester_kurzbz = ?
|
||||
le.lehrveranstaltung_id= ?
|
||||
AND le.studiensemester_kurzbz = ?
|
||||
AND lehrfunktion_kurzbz = 'LV-Leitung'
|
||||
AND lema.mitarbeiter_uid NOT like '_Dummy%'
|
||||
AND b.aktiv = TRUE
|
||||
AND p.aktiv = TRUE
|
||||
ORDER BY
|
||||
lema.insertamum DESC
|
||||
LIMIT 1
|
||||
|
||||
@@ -79,10 +79,10 @@ class Paabgabe_model extends DB_Model
|
||||
JOIN public.tbl_benutzer ON (public.tbl_benutzer.uid = student_uid)
|
||||
JOIN public.tbl_person USING (person_id)
|
||||
|
||||
WHERE (campus.tbl_paabgabe.insertamum >= NOW() - INTERVAL ?
|
||||
OR campus.tbl_paabgabe.updateamum >= NOW() - INTERVAL ?)
|
||||
AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||
|
||||
WHERE (campus.tbl_paabgabe.insertamum::date = CURRENT_DATE - INTERVAL ?
|
||||
OR campus.tbl_paabgabe.updateamum::date = CURRENT_DATE - INTERVAL ?)
|
||||
AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||
|
||||
return $this->execQuery($query, [$interval, $interval, $relevantTypes]);
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ class Paabgabe_model extends DB_Model
|
||||
JOIN public.tbl_person ON (public.tbl_benutzer.person_id = public.tbl_person.person_id)
|
||||
|
||||
WHERE campus.tbl_paabgabe.abgabedatum IS NOT NULL
|
||||
AND campus.tbl_paabgabe.abgabedatum >= NOW() - INTERVAL ?";
|
||||
AND campus.tbl_paabgabe.abgabedatum = CURRENT_DATE - INTERVAL ?";
|
||||
|
||||
if($relevantTypes !== null) {
|
||||
$query .= " AND campus.tbl_paabgabe.paabgabetyp_kurzbz IN ?";
|
||||
|
||||
@@ -594,7 +594,10 @@ class Studiengang_model extends DB_Model
|
||||
$this->addSelect('p.prestudent_id');
|
||||
$this->addSelect('pers.vorname');
|
||||
$this->addSelect('pers.nachname');
|
||||
$this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', " . $this->dbTable . ".bezeichnung, ')') AS name");
|
||||
$this->addSelect("CONCAT(UPPER(pers.nachname), ' ', pers.vorname, ' (', "
|
||||
. $this->dbTable . ".bezeichnung, ', ', "
|
||||
. "UPPER(" . $this->dbTable . ".typ), "
|
||||
. "UPPER(" . $this->dbTable . ".kurzbz),')') AS name");
|
||||
|
||||
$this->addJoin('public.tbl_prestudent p', 'studiengang_kz');
|
||||
$this->addJoin(
|
||||
|
||||
@@ -261,6 +261,42 @@ class Benutzerfunktion_model extends DB_Model
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get active Kompetenzfeldleitung bei UID.
|
||||
*
|
||||
* @param $uid
|
||||
* @return array|stdClass|null
|
||||
*/
|
||||
public function getKFLByUID($uid)
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
bf.uid,
|
||||
bf.oe_kurzbz,
|
||||
oe.organisationseinheittyp_kurzbz
|
||||
FROM
|
||||
public.tbl_benutzerfunktion bf
|
||||
JOIN public.tbl_organisationseinheit oe USING (oe_kurzbz)
|
||||
JOIN public.tbl_benutzer b USING (uid)
|
||||
WHERE
|
||||
b.uid = ?
|
||||
AND b.aktiv = TRUE
|
||||
AND funktion_kurzbz = \'Leitung\'
|
||||
AND organisationseinheittyp_kurzbz = \'Kompetenzfeld\'
|
||||
AND (datum_von IS NULL OR datum_von <= now())
|
||||
AND (datum_bis IS NULL OR datum_bis >= now())
|
||||
';
|
||||
|
||||
$parameters_array = array();
|
||||
if (is_string($uid))
|
||||
{
|
||||
$parameters_array[] = $uid;
|
||||
}
|
||||
|
||||
return $this->execQuery($query, $parameters_array);
|
||||
}
|
||||
|
||||
|
||||
public function insertBenutzerfunktion($Json)
|
||||
{
|
||||
unset($Json['benutzerfunktion_id']);
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
class App_model extends DB_Model
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dbTable = 'system.tbl_app';
|
||||
$this->pk = 'app';
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user