diff --git a/content/fasoverlay.js.php b/content/fasoverlay.js.php
index 3fec3ef47..deccf1351 100644
--- a/content/fasoverlay.js.php
+++ b/content/fasoverlay.js.php
@@ -226,6 +226,7 @@ function onVerbandSelect(event)
StudentDetailReset();
StudentDetailDisableFields(true);
StudentPrestudentDisableFields(true);
+ StudentKontoDisableFields(true);
}
catch(e)
{
diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php
index b195e492f..9d84380c4 100644
--- a/content/student/studentDBDML.php
+++ b/content/student/studentDBDML.php
@@ -40,6 +40,7 @@ require_once('../../include/student.class.php');
require_once('../../include/prestudent.class.php');
require_once('../../include/studiengang.class.php');
require_once('../../include/akte.class.php');
+require_once('../../include/konto.class.php');
$user = get_uid();
@@ -656,6 +657,156 @@ if(!$error)
$errormsg = 'Fehlerhafte Parameteruebergabe'.$_POST['akte_id'];
}
}
+ elseif(isset($_POST['type']) && $_POST['type']=='savebuchung') // ***** KONTO *****
+ {
+ //Speichert eine Buchung
+ if(isset($_POST['buchungsnr']) && is_numeric($_POST['buchungsnr']))
+ {
+ $buchung = new konto($conn, null, true);
+
+ if($buchung->load($_POST['buchungsnr']))
+ {
+ $buchung->betrag = $_POST['betrag'];
+ $buchung->buchungsdatum = $_POST['buchungsdatum'];
+ $buchung->buchungstext = $_POST['buchungstext'];
+ $buchung->mahnspanne = $_POST['mahnspanne'];
+ $buchung->buchungstyp_kurzbz = $_POST['buchungstyp_kurzbz'];
+ $buchung->new = false;
+ $buchung->updateamum = date('Y-m-d H:i:s');
+ $buchung->updatevon = $user;
+
+ if($buchung->save())
+ {
+ $return = true;
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehler beim Speicher:'.$buchung->errormsg;
+ }
+ }
+ else
+ {
+ $errormsg = 'Buchung wurde nicht gefunden:'.$_POST['buchungsnr'];
+ $return = false;
+ }
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehlerhafte Parameteruebergabe'.$_POST['buchungsnr'];
+ }
+ }
+ elseif(isset($_POST['type']) && $_POST['type']=='savegegenbuchung')
+ {
+ //Speichert eine Buchung
+ if(isset($_POST['buchungsnr']) && is_numeric($_POST['buchungsnr']))
+ {
+ $buchung = new konto($conn, null, true);
+
+ if($buchung->load($_POST['buchungsnr']))
+ {
+ if($buchung->buchungsnr_verweis=='')
+ {
+ $buchung->betrag = $buchung->betrag*(-1);
+ $buchung->buchungsdatum = date('Y-m-d');
+ $buchung->mahnspanne = '0';
+ $buchung->buchungsnr_verweis = $buchung->buchungsnr;
+ $buchung->new = true;
+ $buchung->insertamum = date('Y-m-d H:i:s');
+ $buchung->insertvon = $user;
+
+ if($buchung->save())
+ {
+ $return = true;
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehler beim Speichern:'.$buchung->errormsg;
+ }
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Gegenbuchungen koennen nur auf die obersten Buchungen getaetigt werden';
+ }
+ }
+ else
+ {
+ $errormsg = 'Buchung wurde nicht gefunden:'.$_POST['buchungsnr'];
+ $return = false;
+ }
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehlerhafte Parameteruebergabe'.$_POST['buchungsnr'];
+ }
+ }
+ elseif(isset($_POST['type']) && $_POST['type']=='deletebuchung')
+ {
+ //Loescht eine Buchung
+ if(isset($_POST['buchungsnr']) && is_numeric($_POST['buchungsnr']))
+ {
+ $buchung = new konto($conn, null, true);
+
+ if($buchung->delete($_POST['buchungsnr']))
+ {
+ $return = true;
+ }
+ else
+ {
+ $errormsg = $buchung->errormsg;
+ $return = false;
+ }
+ }
+ else
+ {
+ $return = false;
+ $errormsg = 'Fehlerhafte Parameteruebergabe'.$_POST['buchungsnr'];
+ }
+ }
+ elseif(isset($_POST['type']) && $_POST['type']=='neuebuchung')
+ {
+ //Speichert eine neue Buchung
+ //Gleichzeitiges speichern mehrerer Personen ist moeglich
+ //Personen werden durch ';' getrennt
+ $person_ids = explode(';',$_POST['person_ids']);
+ $errormsg = '';
+ foreach ($person_ids as $person_id)
+ {
+ if($person_id!='')
+ {
+ $buchung = new konto($conn, null, true);
+ $buchung->person_id = $person_id;
+ $buchung->studiengang_kz = $_POST['studiengang_kz'];
+ $buchung->studiensemester_kurzbz = $semester_aktuell;
+ $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->insertamum = date('Y-m-d H:i:s');
+ $buchung->insertvon = $user;
+ $buchung->new = true;
+
+ if($buchung->save())
+ {
+ $data = $buchung->buchungsnr;
+ }
+ else
+ {
+ $errormsg .= "Fehler bei $person_id: $buchung->errormsg\n";
+ }
+ }
+ }
+ if($errormsg=='')
+ $return = true;
+ else
+ $return = false;
+ }
else
{
$return = false;
diff --git a/content/student/studentenoverlay.xul.php b/content/student/studentenoverlay.xul.php
index 674ff0d71..98e7e405b 100644
--- a/content/student/studentenoverlay.xul.php
+++ b/content/student/studentenoverlay.xul.php
@@ -57,6 +57,7 @@ echo '-->
+
diff --git a/content/student/studentkontoneudialog.js.php b/content/student/studentkontoneudialog.js.php
new file mode 100644
index 000000000..931cc6575
--- /dev/null
+++ b/content/student/studentkontoneudialog.js.php
@@ -0,0 +1,82 @@
+,
+ * Andreas Oesterreicher and
+ * Rudolf Hangl .
+ */
+
+require_once('../../vilesci/config.inc.php');
+require_once('../../include/functions.inc.php');
+
+$conn = pg_pconnect(CONN_STRING);
+
+$user = get_uid();
+loadVariables($conn, $user);
+?>
+var studiengang_kz=''; // enthaelt die Studiengangskennzahl
+var person_ids=''; // enthaelt eine durch ';' getrennte Liste an Personen_ids
+
+// ****
+// * Ermittelt die markierten Personen und den aktuellen Studiengang
+// ****
+function StudentKontoNeuInit()
+{
+ var tree = window.opener.document.getElementById('student-tree')
+
+ var start = new Object();
+ var end = new Object();
+ var numRanges = tree.view.selection.getRangeCount();
+ var paramList= '';
+ var anzahl=0;
+
+ //alle markierten personen holen
+ for (var t = 0; t < numRanges; t++)
+ {
+ tree.view.selection.getRangeAt(t,start,end);
+ for (var v = start.value; v <= end.value; v++)
+ {
+ col = tree.columns ? tree.columns["student-treecol-person_id"] : "student-treecol-person_id";
+ uid = tree.view.getCellText(v,col);
+ paramList += ';'+uid;
+ anzahl +=1;
+ }
+ }
+
+ //Studiengang holen
+ var tree=window.opener.document.getElementById('tree-verband');
+
+ col = tree.columns ? tree.columns["stg_kz"] : "stg_kz";
+ studiengang_kz=tree.view.getCellText(tree.currentIndex,col);
+
+ person_ids = paramList;
+
+ if(anzahl>1)
+ document.getElementById('student-konto-neu-label').value='Anzahl Studenten: '+anzahl;
+}
+
+// ****
+// * Speichern der Buchung
+// * Hierzu wird eine Funktion vom Aufrufenden Fenster gestartet weil
+// * es dann nicht zu Problemen mit den Zugriffen auf die anderen Fkt
+// * kommt.
+// ****
+function StudentKontoNeuSpeichern()
+{
+ if(window.opener.StudentKontoNeuSpeichern(document, person_ids, studiengang_kz))
+ window.close();
+}
\ No newline at end of file
diff --git a/content/student/studentkontoneudialog.xul.php b/content/student/studentkontoneudialog.xul.php
new file mode 100644
index 000000000..da2788a9a
--- /dev/null
+++ b/content/student/studentkontoneudialog.xul.php
@@ -0,0 +1,99 @@
+,
+ * Andreas Oesterreicher and
+ * Rudolf Hangl .
+ */
+
+header("Cache-Control: no-cache");
+header("Cache-Control: post-check=0, pre-check=0",false);
+header("Expires Mon, 26 Jul 1997 05:00:00 GMT");
+header("Pragma: no-cache");
+header("Content-type: application/vnd.mozilla.xul+xml");
+
+include('../../vilesci/config.inc.php');
+echo ''."\n";
+
+echo '';
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/content/student/studentkontooverlay.xul.php b/content/student/studentkontooverlay.xul.php
index 1c7b985e1..1a8360abb 100644
--- a/content/student/studentkontooverlay.xul.php
+++ b/content/student/studentkontooverlay.xul.php
@@ -38,7 +38,7 @@ echo '';
@@ -51,7 +51,7 @@ echo '';
-
+
@@ -83,6 +83,10 @@ echo '';
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/konto/rdf#studiensemester_kurzbz" />
+
+
@@ -97,6 +101,7 @@ echo '';
+
@@ -105,10 +110,14 @@ echo '';
-
-
-
+
+
+
+
+
+
+
@@ -160,7 +169,7 @@ echo '';
-
+
diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php
index fd26bd576..9c7c55b52 100644
--- a/content/student/studentoverlay.js.php
+++ b/content/student/studentoverlay.js.php
@@ -30,6 +30,8 @@ loadVariables($conn, $user);
?>
// *********** Globale Variablen *****************//
var StudentSelectUid=null; //Student der nach dem Refresh markiert werden soll
+var StudentKontoSelectBuchung=null; //Buchung die nach dem Refresh markiert werden soll
+var StudentKontoTreeDatasource;
// ********** Observer und Listener ************* //
@@ -67,6 +69,39 @@ var StudentTreeListener =
}
};
+// ****
+// * Observer fuer Konto Tree
+// * startet Rebuild nachdem das Refresh
+// * der datasource fertig ist
+// ****
+var StudentKontoTreeSinkObserver =
+{
+ onBeginLoad : function(pSink) {},
+ onInterrupt : function(pSink) {},
+ onResume : function(pSink) {},
+ onError : function(pSink, pStatus, pError) {},
+ onEndLoad : function(pSink)
+ {
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+ document.getElementById('student-konto-tree').builder.rebuild();
+ }
+};
+
+// ****
+// * Nach dem Rebuild wird die Buchung wieder
+// * markiert
+// ****
+var StudentKontoTreeListener =
+{
+ willRebuild : function(builder) { },
+ didRebuild : function(builder)
+ {
+ //timeout nur bei Mozilla notwendig da sonst die rows
+ //noch keine values haben. Ab Seamonkey funktionierts auch
+ //ohne dem setTimeout
+ window.setTimeout(StudentKontoTreeSelectBuchung,10);
+ }
+};
// ***************** KEY Events ************************* //
// ****
@@ -144,6 +179,50 @@ function StudentTreeSelectStudent()
document.getElementById('student-toolbar-label-anzahl').value='Anzahl: '+items;
}
+// ****
+// * Selectiert die Buchung nachdem der Tree
+// * rebuildet wurde.
+// ****
+function StudentKontoTreeSelectBuchung()
+{
+ var tree=document.getElementById('student-konto-tree');
+ if(tree.view)
+ var items = tree.view.rowCount; //Anzahl der Zeilen ermitteln
+ else
+ return false;
+
+ //In der globalen Variable ist die zu selektierende Buchung gespeichert
+ if(StudentKontoTreeSelectBuchung!=null)
+ {
+ //Alle subtrees oeffnen weil rowCount nur die Anzahl der sichtbaren
+ //Zeilen zurueckliefert
+ for(var i=items-1;i>=0;i--)
+ {
+ if(!tree.view.isContainerOpen(i))
+ tree.view.toggleOpenState(i);
+ }
+
+ //Jetzt die wirkliche Anzahl (aller) Zeilen holen
+ items = tree.view.rowCount;
+ for(var i=0;icontent/student/studentkontoneudialog.xul.php","","chrome, status=no, width=500, height=350, centerscreen, resizable");
+}
+
+// ****
+// * Speichert die Daten aus dem BuchungenDialog
+// ****
+function StudentKontoNeuSpeichern(dialog, person_ids, studiengang_kz)
+{
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+
+ var url = 'content/student/studentDBDML.php';
+ var req = new phpRequest(url,'','');
+
+ //Daten aus dem Dialog holen
+ betrag = dialog.getElementById('student-konto-neu-textbox-betrag').value;
+ buchungsdatum = dialog.getElementById('student-konto-neu-textbox-buchungsdatum').value;
+ buchungstext = dialog.getElementById('student-konto-neu-textbox-buchungstext').value;
+ mahnspanne = dialog.getElementById('student-konto-neu-textbox-mahnspanne').value;
+ buchungstyp_kurzbz = dialog.getElementById('student-konto-neu-menulist-buchungstyp').value;
+
+ req.add('type', 'neuebuchung');
+
+ req.add('person_ids', person_ids);
+ req.add('studiengang_kz', studiengang_kz);
+ req.add('betrag', betrag);
+ req.add('buchungsdatum', buchungsdatum);
+ req.add('buchungstext', buchungstext);
+ req.add('mahnspanne', mahnspanne);
+ req.add('buchungstyp_kurzbz', buchungstyp_kurzbz);
+
+ var response = req.executePOST();
+
+ var val = new ParseReturnValue(response)
+
+ if (!val.dbdml_return)
+ {
+ if(val.dbdml_errormsg=='')
+ alert(response)
+ else
+ alert(val.dbdml_errormsg)
+ return false;
+ }
+ else
+ {
+ StudentKontoTreeDatasource.Refresh(false);
+ return true;
+ }
}
\ No newline at end of file
diff --git a/include/konto.class.php b/include/konto.class.php
index 2fc6dc800..f40079d08 100644
--- a/include/konto.class.php
+++ b/include/konto.class.php
@@ -132,8 +132,39 @@ class konto
// * Prueft die Variablen auf gueltigkeit
// * @return true wenn ok, false im Fehlerfall
// *******************************************
- function checkvars()
+ function validate()
{
+ $this->betrag = str_replace(',','.',$this->betrag);
+ if(!is_numeric($this->betrag))
+ {
+ $this->errormsg = 'Betrag ist ungueltig';
+ return false;
+ }
+
+ if(!is_numeric($this->studiengang_kz))
+ {
+ $this->errormsg = 'Studiengang_kz is ungueltig';
+ return false;
+ }
+
+ if($this->buchungstyp_kurzbz=='')
+ {
+ $this->errormsg = 'Typ muss angegeben werden';
+ return false;
+ }
+
+ if(!is_numeric($this->person_id))
+ {
+ $this->errormsg = 'Person_id ist ungueltig';
+ return false;
+ }
+
+ if(!is_numeric($this->mahnspanne))
+ {
+ $this->errormsg = 'Mahnspanne muss eine gueltige Zahl sein';
+ return false;
+ }
+
return true;
}
@@ -158,7 +189,7 @@ class konto
function save($new=null)
{
//Variablen pruefen
- if(!$this->checkvars())
+ if(!$this->validate())
return false;
if($new==null)
@@ -201,7 +232,8 @@ class konto
' updatevon='.$this->addslashes($this->updatevon).','.
' insertamum='.$this->addslashes($this->insertamum).','.
' insertvon='.$this->addslashes($this->insertvon).','.
- ' ext_id='.$this->addslashes($this->ext_id).';';
+ ' ext_id='.$this->addslashes($this->ext_id).
+ " WHERE buchungsnr='".addslashes($this->buchungsnr)."';";
}
//echo $qry;
@@ -241,18 +273,18 @@ class konto
}
}
- /**
- * Loescht den Datenensatz mit der ID die uebergeben wird
- * @param buchungsnr ID die geloescht werden soll
- * @return true wenn ok, false im Fehlerfall
- */
+ // ********************************************************
+ // * 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($this->conn, $qry))
+ if($row = pg_fetch_object($result))
{
if($row->anzahl>0)
{
@@ -262,7 +294,7 @@ class konto
else
{
//Wenn keine Verweise Vorhanden sind, dann die Buchung loeschen
- $qry = "DELETE FROM public.tbl_konto WHERE buchungsnr_verweis='".addslashes($buchungsnr)."'";
+ $qry = "DELETE FROM public.tbl_konto WHERE buchungsnr='".addslashes($buchungsnr)."'";
if(pg_query($this->conn, $qry))
return true;
else
@@ -288,10 +320,10 @@ class konto
// ******************************************
// * Laedt alle Buchungen einer Person
// * und legt diese geordnet in ein Array
- // * @param person_id
+ // * @param person_id, filter
// * @return true wenn ok, false wenn fehler
// ******************************************
- function getBuchungen($person_id)
+ function getBuchungen($person_id, $filter='alle')
{
if(!is_numeric($person_id))
{
@@ -299,7 +331,23 @@ class konto
return false;
}
- $qry = "SELECT * FROM public.tbl_konto WHERE person_id='".$person_id."' ORDER BY buchungsdatum";
+ if($filter=='offene')
+ {
+ //Alle Buchungen und 'darunterliegende' holen die noch offen sind
+ $qry = "SELECT * FROM public.tbl_konto
+ WHERE buchungsnr in (SELECT buchungsnr FROM public.tbl_konto as konto_a WHERE
+ betrag*(-1)>(SELECT CASE WHEN sum(betrag) is null THEN 0
+ ELSE sum(betrag) END
+ FROM public.tbl_konto WHERE buchungsnr_verweis=konto_a.buchungsnr)
+ AND person_id='$person_id') OR
+ buchungsnr_verweis in (SELECT buchungsnr FROM public.tbl_konto as konto_a WHERE
+ betrag*(-1)>(SELECT CASE WHEN sum(betrag) is null THEN 0
+ ELSE sum(betrag) END
+ FROM public.tbl_konto WHERE buchungsnr_verweis=konto_a.buchungsnr)
+ AND person_id='$person_id') ORDER BY buchungsdatum";
+ }
+ else
+ $qry = "SELECT * FROM public.tbl_konto WHERE person_id='".$person_id."' ORDER BY buchungsdatum";
if($result = pg_query($this->conn, $qry))
{
diff --git a/rdf/konto.rdf.php b/rdf/konto.rdf.php
index 011c3324b..527518efa 100644
--- a/rdf/konto.rdf.php
+++ b/rdf/konto.rdf.php
@@ -53,6 +53,11 @@ if(isset($_GET['person_id']) && is_numeric($_GET['person_id']))
else
$person_id='';
+if(isset($_GET['filter']))
+ $filter=$_GET['filter'];
+else
+ $filter='alle';
+
if(isset($_GET['buchungsnr']) && is_numeric($_GET['buchungsnr']))
{
$buchungsnr = $_GET['buchungsnr'];
@@ -64,7 +69,7 @@ $konto = new konto($conn, null, true);
if($person_id!='')
{
- $konto->getBuchungen($person_id);
+ $konto->getBuchungen($person_id, $filter);
}
elseif($buchungsnr!='')
{
diff --git a/skin/cis.css b/skin/cis.css
index 8a8378493..69cb97b34 100644
--- a/skin/cis.css
+++ b/skin/cis.css
@@ -353,12 +353,12 @@ h4
img.testtoolfrage
{
- max-width:300px;
- max-height:200px;
+ max-width:400px;
+ max-height:300px;
}
img.testtoolvorschlag
{
- max-width:50px;
- max-height:40px;
+ max-width:200px;
+ max-height:150px;
}
\ No newline at end of file
diff --git a/skin/tempus.css b/skin/tempus.css
index df39602c4..1d94d437b 100644
--- a/skin/tempus.css
+++ b/skin/tempus.css
@@ -25,6 +25,10 @@ menubar,menupopup,toolbar,tabpanels,tabbox,iframe,box,hbox,vbox,tree,label,descr
padding-left: 0px;
padding-right: 0px;
}
+menupopup
+{
+ border: 1px solid black;
+}
grid.lvaStundenplan
{
font-size: x-small;