, * Andreas Oesterreicher and * Rudolf Hangl . */ /** * Klasse Konto * @create 2007-05-14 */ class konto { var $conn; // @var resource DB-Handle var $new; // @var boolean var $errormsg; // @var string var $result = array(); // @var adresse Objekt var $buch_nr = array(); var $buch_date = array(); //Tabellenspalten var $buchungsnr; var $person_id; var $studiengang_kz; var $studiensemester_kurzbz; var $buchungsnr_verweis; var $betrag; var $buchungsdatum; var $buchungstext; var $mahnspanne; var $buchungstyp_kurzbz; var $updateamum; var $updatevon; var $insertamum; var $insertvon; var $ext_id; var $anrede; var $titelpost; var $titelpre; var $nachname; var $vorname; var $vornamen; //var $beschreibung; // ************************************************************************** // * Konstruktor // * @param $conn Connection // * $buchungsnr ID der Adresse die geladen werden soll (Default=null) // ************************************************************************** function konto($conn, $buchungsnr=null, $unicode=false) { $this->conn = $conn; if($unicode!=null) { if ($unicode) { $qry = "SET CLIENT_ENCODING TO 'UNICODE';"; } else { $qry="SET CLIENT_ENCODING TO 'LATIN9';"; } if(!pg_query($conn,$qry)) { $this->errormsg = "Encoding konnte nicht gesetzt werden"; return false; } } if($buchungsnr!=null) $this->load($buchungsnr); } // ************************************************ // * Laedt die Funktion mit der ID $buchungsnr // * @param $buchungsnr ID der zu ladenden Email // * @return true wenn ok, false im Fehlerfall // ************************************************ function load($buchungsnr) { if(!is_numeric($buchungsnr)) { $this->errormsg = 'Buchungsnr muss eine gueltige Zahl sein'; return false; } $qry = "SELECT tbl_konto.*, anrede, titelpost, titelpre, nachname, vorname, vornamen FROM public.tbl_konto JOIN public.tbl_person USING (person_id) WHERE buchungsnr='$buchungsnr'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { $this->buchungsnr = $row->buchungsnr; $this->person_id = $row->person_id; $this->studiengang_kz = $row->studiengang_kz; $this->studiensemester_kurzbz = $row->studiensemester_kurzbz; $this->buchungsnr_verweis = $row->buchungsnr_verweis; $this->betrag = $row->betrag; $this->buchungsdatum = $row->buchungsdatum; $this->buchungstext = $row->buchungstext; $this->mahnspanne = $row->mahnspanne; $this->buchungstyp_kurzbz = $row->buchungstyp_kurzbz; $this->updatamum = $row->updateamum; $this->updatevon = $row->updatevon; $this->insertamum = $row->insertamum; $this->insertvon = $row->insertvon; $this->ext_id = $row->ext_id; $this->anrede = $row->anrede; $this->titelpost = $row->titelpost; $this->titelpre = $row->titelpre; $this->nachname = $row->nachname; $this->vorname = $row->vorname; $this->vornamen = $row->vornamen; return true; } else { $this->errormsg = 'Datensatz wurde nicht gefunden'; return false; } } else { $this->errormsg = 'Fehler beim Laden der Daten'; return false; } } // ******************************************* // * Prueft die Variablen auf gueltigkeit // * @return true wenn ok, false im Fehlerfall // ******************************************* function validate() { $this->betrag = str_replace(',','.',$this->betrag); if(!is_numeric($this->betrag)) { $this->errormsg = "Betrag ('".$this->betrag."') ist ungueltig bei Person '".$this->person_id."'"; return false; } if(!is_numeric($this->studiengang_kz)) { $this->errormsg = "'Studiengang_kz ('".$this->studiengang_kz."') ist ungueltig bei Person '".$this->person_id."'"; return false; } if($this->buchungstyp_kurzbz=='') { $this->errormsg = "Typ muss angegeben werden bei Person '".$this->person_id."'"; return false; } if(!is_numeric($this->person_id)) { $this->errormsg = "'Person_id ('".$this->person_id."') ist ungueltig"; return false; } if(!is_numeric($this->mahnspanne)) { $this->errormsg = "Mahnspanne ('".$this->mahnspanne."') muss eine gueltige Zahl sein bei Person '".$this->person_id."'"; return false; } return true; } // ************************************************ // * wenn $var '' ist wird "null" zurueckgegeben // * wenn $var !='' ist werden datenbankkritische // * Zeichen mit backslash versehen und das Ergebnis // * unter Hochkomma gesetzt. // ************************************************ function addslashes($var) { return ($var!=''?"'".addslashes($var)."'":'null'); } // *********************************************************************** // * Speichert den aktuellen Datensatz in die Datenbank // * Wenn $neu auf true gesetzt ist wird ein neuer Datensatz angelegt // * andernfalls wird der Datensatz mit der ID in $kontakt_id aktualisiert // * @param $new true wenn insert false wenn update // * @return true wenn ok, false im Fehlerfall // *********************************************************************** function save($new=null) { //Variablen pruefen if(!$this->validate()) return false; if($new==null) $new = $this->new; if($new) { //Neuen Datensatz einfuegen $qry='BEGIN;INSERT INTO public.tbl_konto (person_id, studiengang_kz, studiensemester_kurzbz, buchungsnr_verweis, betrag, buchungsdatum, buchungstext, mahnspanne, buchungstyp_kurzbz, updateamum, updatevon, insertamum, insertvon, ext_id) VALUES('. $this->addslashes($this->person_id).', '. $this->addslashes($this->studiengang_kz).', '. $this->addslashes($this->studiensemester_kurzbz).', '. $this->addslashes($this->buchungsnr_verweis).', '. $this->addslashes($this->betrag).', '. $this->addslashes($this->buchungsdatum).', '. $this->addslashes($this->buchungstext).', '. $this->addslashes($this->mahnspanne).', '. $this->addslashes($this->buchungstyp_kurzbz).', '. $this->addslashes($this->updateamum).', '. $this->addslashes($this->updatevon).', '. $this->addslashes($this->insertamum).', '. $this->addslashes($this->insertvon).', '. $this->addslashes($this->ext_id).');'; } else { //Updaten des bestehenden Datensatzes $qry = 'UPDATE public.tbl_konto SET '. ' person_id='.$this->addslashes($this->person_id).','. ' studiengang_kz='.$this->addslashes($this->studiengang_kz).','. ' studiensemester_kurzbz='.$this->addslashes($this->studiensemester_kurzbz).','. ' buchungsnr_verweis='.$this->addslashes($this->buchungsnr_verweis).','. ' betrag='.$this->addslashes($this->betrag).','. ' buchungsdatum='.$this->addslashes($this->buchungsdatum).','. ' buchungstext='.$this->addslashes($this->buchungstext).','. ' mahnspanne='.$this->addslashes($this->mahnspanne).','. ' buchungstyp_kurzbz='.$this->addslashes($this->buchungstyp_kurzbz).','. ' updateamum='.$this->addslashes($this->updateamum).','. ' updatevon='.$this->addslashes($this->updatevon).','. ' insertamum='.$this->addslashes($this->insertamum).','. ' insertvon='.$this->addslashes($this->insertvon).','. ' ext_id='.$this->addslashes($this->ext_id). " WHERE buchungsnr='".addslashes($this->buchungsnr)."';"; } //echo $qry; if(pg_query($this->conn, $qry)) { if($new) { $qry = "SELECT currval('public.tbl_konto_buchungsnr_seq') as id"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { $this->buchungsnr = $row->id; pg_query($this->conn, 'COMMIT;'); } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn, 'ROLLBACK;'); return false; } } else { $this->errormsg = 'Fehler beim Auslesen der Sequence'; pg_query($this->conn, 'ROLLBACK;'); return false; } } return true; } else { $this->errormsg = 'Fehler beim Speichern der Daten'; return true; } } // ******************************************************** // * Loescht den Datenensatz mit der ID die uebergeben wird // * @param buchungsnr ID die geloescht werden soll // * @return true wenn ok, false im Fehlerfall // ******************************************************** function delete($buchungsnr) { //Pruefen ob Verweise auf diese Buchung Vorhanden sind $qry = "SELECT count(*) as anzahl FROM public.tbl_konto WHERE buchungsnr_verweis='".addslashes($buchungsnr)."'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { if($row->anzahl>0) { $this->errormsg = 'Bitte zuerst die zugeordneten Buchungen loeschen'; return false; } else { //Wenn keine Verweise Vorhanden sind, dann die Buchung loeschen $qry = "DELETE FROM public.tbl_konto WHERE buchungsnr='".addslashes($buchungsnr)."'"; if(pg_query($this->conn, $qry)) return true; else { $this->errormsg = 'Fehler beim Loeschen der Buchung'; return false; } } } else { $this->errormsg = 'Fehler beim Ermitteln der Verweise'; return false; } } else { $this->errormsg = 'Fehler beim Ermitteln der Verweise'; return false; } } // ****************************************** // * Laedt alle Buchungen einer Person // * und legt diese geordnet in ein Array // * @param person_id, filter // * @return true wenn ok, false wenn fehler // ****************************************** function getBuchungen($person_id, $filter='alle', $studiengang_kz='') { if(!is_numeric($person_id)) { $this->errormsg = 'Person_id muss eine gueltige Zahl sein'; return false; } if($studiengang_kz!='') $stgwhere = " AND tbl_konto.studiengang_kz='$studiengang_kz' "; else $stgwhere = ''; if($filter=='offene') { //Alle Buchungen und 'darunterliegende' holen die noch offen sind $qry = "SELECT tbl_konto.*, anrede, titelpost, titelpre, nachname, vorname, vornamen FROM public.tbl_konto JOIN public.tbl_person USING (person_id) WHERE buchungsnr in (SELECT buchungsnr FROM public.tbl_konto as konto_a WHERE (betrag + (SELECT CASE WHEN sum(betrag) is null THEN 0 ELSE sum(betrag) END FROM public.tbl_konto WHERE buchungsnr_verweis=konto_a.buchungsnr))<>0 AND person_id='$person_id') OR buchungsnr_verweis in (SELECT buchungsnr FROM public.tbl_konto as konto_a WHERE (betrag + (SELECT CASE WHEN sum(betrag) is null THEN 0 ELSE sum(betrag) END FROM public.tbl_konto WHERE buchungsnr_verweis=konto_a.buchungsnr))<>0 AND person_id='$person_id') $stgwhere ORDER BY buchungsdatum"; } else $qry = "SELECT tbl_konto.*, anrede, titelpost, titelpre, nachname, vorname, vornamen FROM public.tbl_konto JOIN public.tbl_person USING (person_id) WHERE person_id='".$person_id."' $stgwhere ORDER BY buchungsdatum"; if($result = pg_query($this->conn, $qry)) { while($row = pg_fetch_object($result)) { $buchung = new konto($this->conn, null, null); $buchung->buchungsnr = $row->buchungsnr; $buchung->person_id = $row->person_id; $buchung->studiengang_kz = $row->studiengang_kz; $buchung->studiensemester_kurzbz = $row->studiensemester_kurzbz; $buchung->buchungsnr_verweis = $row->buchungsnr_verweis; $buchung->betrag = $row->betrag; $buchung->buchungsdatum = $row->buchungsdatum; $buchung->buchungstext = $row->buchungstext; $buchung->mahnspanne = $row->mahnspanne; $buchung->buchungstyp_kurzbz = $row->buchungstyp_kurzbz; $buchung->updatamum = $row->updateamum; $buchung->updatevon = $row->updatevon; $buchung->insertamum = $row->insertamum; $buchung->insertvon = $row->insertvon; $buchung->ext_id = $row->ext_id; $buchung->anrede = $row->anrede; $buchung->titelpost = $row->titelpost; $buchung->titelpre = $row->titelpre; $buchung->nachname = $row->nachname; $buchung->vorname = $row->vorname; $buchung->vornamen = $row->vornamen; if($buchung->buchungsnr_verweis!='') { $this->result[$buchung->buchungsnr_verweis]['childs'][] = $buchung; } else { $this->result[$buchung->buchungsnr]['parent'] = $buchung; } } return true; } else { $this->errormsg = 'Fehler beim Laden der Daten'; return false; } } // ****************************************** // * Liefert alle Buchungstypen // * @return true wenn ok, false wenn Fehler // ****************************************** function getBuchungstyp() { $qry = "SELECT * FROM public.tbl_buchungstyp ORDER BY beschreibung"; if($result = pg_query($this->conn, $qry)) { while($row = pg_fetch_object($result)) { $typ = new konto($this->conn, null, null); $typ->buchungstyp_kurzbz = $row->buchungstyp_kurzbz; $typ->beschreibung = $row->beschreibung; $this->result[] = $typ; } return false; } else { $this->errormsg = 'Fehler beim Laden der Daten'; return false; } } // ****************************** // * Berechnet den offenen Betrag // * einer Buchung // ****************************** function getDifferenz($buchungsnr) { $qry = "SELECT sum(betrag) as differenz FROM public.tbl_konto WHERE buchungsnr='$buchungsnr' OR buchungsnr_verweis='$buchungsnr'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) return $row->differenz*(-1); else { $this->errormsg = 'Fehler beim Ermitteln der Differenz'; return false; } } else { $this->errormsg = 'Fehler beim Ermitteln der Differenz'; return false; } } // ****************************** // * ueberprueft, ob studiengebuehr gebucht ist fuer // * student_uid und studiensemester // * gibt true/false zurueck und setzt bei true das buchungsdatum $this->buchungsdatum // ****************************** function checkStudienbeitrag($uid, $stsem) { $subqry = "SELECT tbl_konto.buchungsnr, tbl_konto.buchungsdatum FROM public.tbl_konto, public.tbl_benutzer WHERE tbl_konto.studiensemester_kurzbz = '".$stsem."' AND tbl_benutzer.uid = '".$uid."' AND tbl_benutzer.person_id = tbl_konto.person_id and tbl_konto.buchungstyp_kurzbz = 'Studiengebuehr' ORDER BY buchungsnr"; $subres = pg_query($this->conn, $subqry); if (pg_num_rows($subres)==0) return false; else { while ($subrow = pg_fetch_object($subres)) { $buch_nr[] = $subrow->buchungsnr; $buch_date[] = $subrow->buchungsdatum; } } $qry = "SELECT sum(betrag) as differenz FROM public.tbl_konto WHERE buchungsnr='".$buch_nr[0]."' OR buchungsnr_verweis='".$buch_nr[0]."'"; if($result = pg_query($this->conn, $qry)) { if($row = pg_fetch_object($result)) { if ($row->differenz == 0) { $this->buchungsdatum = $buch_date[1]; return true; } else return false; } else { $this->errormsg = 'Fehler beim Ermitteln der Differenz'; return false; } } else { $this->errormsg = 'Fehler beim Ermitteln der Differenz'; return false; } } } ?>