From 071b361959543bd5af0d3ba7407a67a4da092408 Mon Sep 17 00:00:00 2001 From: ma0048 Date: Tue, 15 Feb 2022 12:47:42 +0100 Subject: [PATCH 1/3] verhinderte buchungen, die bereits vorhanden sind + neue configeintrag --- content/student/studentDBDML.php | 62 +++++++++++++++++++------------- include/konto.class.php | 24 +++++++++++++ 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index a2c6eca51..290c2e84b 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -2288,33 +2288,47 @@ if(!$error) } else { - foreach ($person_ids as $person_id) + $exists = false; + if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && (in_array($_POST['buchungstyp_kurzbz'], unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK)))) { - if($person_id!='') - { - $buchung = new konto(); - $buchung->person_id = $person_id; - $buchung->studiengang_kz = $_POST['studiengang_kz']; - $buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; - $buchung->buchungsnr_verweis=''; - $buchung->betrag = $_POST['betrag']; - $buchung->buchungsdatum = $_POST['buchungsdatum']; - $buchung->buchungstext = $_POST['buchungstext']; - $buchung->mahnspanne = $_POST['mahnspanne']; - $buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz']; - $buchung->credit_points = $_POST["credit_points"]; - $buchung->insertamum = date('Y-m-d H:i:s'); - $buchung->insertvon = $user; - $buchung->anmerkung = $_POST['anmerkung']; - $buchung->new = true; + $konto = new konto(); + $exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $_POST['buchungstyp_kurzbz']); + } - if($buchung->save()) + if ($exists) + { + $errormsg = 'Buchung bereits vorhanden.'; + } + else + { + foreach ($person_ids as $person_id) + { + if($person_id!='') { - $data = $buchung->buchungsnr; - } - else - { - $errormsg .= "Fehler beim Speichern: $buchung->errormsg\n"; + $buchung = new konto(); + $buchung->person_id = $person_id; + $buchung->studiengang_kz = $_POST['studiengang_kz']; + $buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; + $buchung->buchungsnr_verweis=''; + $buchung->betrag = $_POST['betrag']; + $buchung->buchungsdatum = $_POST['buchungsdatum']; + $buchung->buchungstext = $_POST['buchungstext']; + $buchung->mahnspanne = $_POST['mahnspanne']; + $buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz']; + $buchung->credit_points = $_POST["credit_points"]; + $buchung->insertamum = date('Y-m-d H:i:s'); + $buchung->insertvon = $user; + $buchung->anmerkung = $_POST['anmerkung']; + $buchung->new = true; + + if($buchung->save()) + { + $data = $buchung->buchungsnr; + } + else + { + $errormsg .= "Fehler beim Speichern: $buchung->errormsg\n"; + } } } } diff --git a/include/konto.class.php b/include/konto.class.php index 09afa5303..6c4891674 100644 --- a/include/konto.class.php +++ b/include/konto.class.php @@ -957,6 +957,30 @@ class konto extends basis_db return false; } } + + public function checkDoppelteBuchung($person_ids, $stsem, $typ) + { + $qry = "SELECT betrag + FROM public.tbl_konto + JOIN public.tbl_benutzer benutzer USING(person_id) + WHERE person_id IN (".$this->implode4SQL(array_filter($person_ids)).") + AND studiensemester_kurzbz = ".$this->db_add_param($stsem)." + AND buchungstyp_kurzbz = ".$this->db_add_param($typ)." + GROUP BY buchungsnr"; + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + return true; + else + return false; + } + else + { + $this->errormsg = 'Fehler bei der Abfrage aufgetreten'; + return false; + } + } } ?> From ae15c922b8333d1c3b4a427011a6906e160e2b8f Mon Sep 17 00:00:00 2001 From: ma0048 Date: Fri, 18 Feb 2022 10:30:40 +0100 Subject: [PATCH 2/3] buchung kann nun trotz vorhandener buchung gebucht werden --- content/student/studentDBDML.php | 77 ++++++++++++++------------- content/student/studentoverlay.js.php | 36 +++++++++++++ 2 files changed, 75 insertions(+), 38 deletions(-) diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php index 290c2e84b..4a4b64201 100644 --- a/content/student/studentDBDML.php +++ b/content/student/studentDBDML.php @@ -2272,6 +2272,21 @@ if(!$error) $errormsg = 'Fehlerhafte Parameteruebergabe'; } } + elseif(isset($_POST['type']) && $_POST['type']=='checkbuchung') + { + $person_ids = explode(';',$_POST['person_ids']); + $exists = false; + if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && (in_array($_POST['buchungstyp_kurzbz'], unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK)))) + { + $konto = new konto(); + $exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $_POST['buchungstyp_kurzbz']); + } + + if($exists) + $return = true; + else + $return = false; + } elseif(isset($_POST['type']) && $_POST['type']=='neuebuchung') { //Speichert eine neue Buchung @@ -2288,47 +2303,33 @@ if(!$error) } else { - $exists = false; - if (defined('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK') && (in_array($_POST['buchungstyp_kurzbz'], unserialize(FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK)))) + foreach ($person_ids as $person_id) { - $konto = new konto(); - $exists = $konto->checkDoppelteBuchung($person_ids, $_POST['studiensemester_kurzbz'], $_POST['buchungstyp_kurzbz']); - } - - if ($exists) - { - $errormsg = 'Buchung bereits vorhanden.'; - } - else - { - foreach ($person_ids as $person_id) + if($person_id!='') { - if($person_id!='') - { - $buchung = new konto(); - $buchung->person_id = $person_id; - $buchung->studiengang_kz = $_POST['studiengang_kz']; - $buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; - $buchung->buchungsnr_verweis=''; - $buchung->betrag = $_POST['betrag']; - $buchung->buchungsdatum = $_POST['buchungsdatum']; - $buchung->buchungstext = $_POST['buchungstext']; - $buchung->mahnspanne = $_POST['mahnspanne']; - $buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz']; - $buchung->credit_points = $_POST["credit_points"]; - $buchung->insertamum = date('Y-m-d H:i:s'); - $buchung->insertvon = $user; - $buchung->anmerkung = $_POST['anmerkung']; - $buchung->new = true; + $buchung = new konto(); + $buchung->person_id = $person_id; + $buchung->studiengang_kz = $_POST['studiengang_kz']; + $buchung->studiensemester_kurzbz = $_POST['studiensemester_kurzbz']; + $buchung->buchungsnr_verweis=''; + $buchung->betrag = $_POST['betrag']; + $buchung->buchungsdatum = $_POST['buchungsdatum']; + $buchung->buchungstext = $_POST['buchungstext']; + $buchung->mahnspanne = $_POST['mahnspanne']; + $buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz']; + $buchung->credit_points = $_POST["credit_points"]; + $buchung->insertamum = date('Y-m-d H:i:s'); + $buchung->insertvon = $user; + $buchung->anmerkung = $_POST['anmerkung']; + $buchung->new = true; - if($buchung->save()) - { - $data = $buchung->buchungsnr; - } - else - { - $errormsg .= "Fehler beim Speichern: $buchung->errormsg\n"; - } + if($buchung->save()) + { + $data = $buchung->buchungsnr; + } + else + { + $errormsg .= "Fehler beim Speichern: $buchung->errormsg\n"; } } } diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php index ffb50609f..9af82c4f1 100644 --- a/content/student/studentoverlay.js.php +++ b/content/student/studentoverlay.js.php @@ -3044,6 +3044,20 @@ function StudentKontoNeuSpeichern(dialog, person_ids, studiengang_kz) return false; } + var tocheck = ; + + var exists = false; + + if (tocheck) + { + exists = StudentCheckBuchung(person_ids, studiensemester_kurzbz, buchungstyp_kurzbz, studiengang_kz); + } + if (exists) + { + if(!confirm('Die Buchung ist bereits vorhanden. Trotzdem fortfahren?')) + return false; + } + req.add('type', 'neuebuchung'); req.add('person_ids', person_ids); @@ -3075,6 +3089,28 @@ function StudentKontoNeuSpeichern(dialog, person_ids, studiengang_kz) return true; } } +// **** +// * Prüft ob die Buchung bereits vorhanden ist +// **** +function StudentCheckBuchung(person_ids, studiensemester_kurzbz, buchungstyp_kurzbz, studiengang_kz) +{ + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + + var url = 'content/student/studentDBDML.php'; + var req = new phpRequest(url,'',''); + req.add('type', 'checkbuchung'); + + req.add('person_ids', person_ids); + req.add('studiensemester_kurzbz', studiensemester_kurzbz); + req.add('buchungstyp_kurzbz', buchungstyp_kurzbz); + req.add('studiengang_kz', studiengang_kz); + + var response = req.executePOST(); + + var val = new ParseReturnValue(response); + + return(val.dbdml_return); +} // ***** // * Druckt eine Zahlungsbestaetigung aus From 5686ef612b5244a7e85e60900fb8399b8edcd9ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96sterreicher?= Date: Wed, 13 Apr 2022 08:44:09 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Neuer=20Config=20Eintrag=20f=C3=BCr=20Check?= =?UTF-8?q?=20auf=20doppelte=20Buchungen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/vilesci.config-default.inc.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index cd45e6979..bc6995182 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -254,4 +254,10 @@ define('BIS_STANDORTCODE_LEHRGAENGE', '0'); // bPk Abfrage define('BPK_FUER_ALLE_BENUTZER_ABFRAGEN', false); + +// Bei folgenden Buchungstypen wird ein Anlegen geprüft ob bereits ein Eintrag für diesen Typ vorhanden ist im selben +// Semester und ggf ein Hinweis ausgegeben +define('FAS_DOPPELTE_BUCHUNGSTYPEN_CHECK', serialize( + array('StudiengebuehrAnzahlung', 'Studiengebuehr', 'StudiengebuehrRestzahlung', 'OEH') +)); ?>