From 884d4a3296b9023729e628063fa994efdf9aa4fe Mon Sep 17 00:00:00 2001 From: Karl Burkhart Date: Thu, 3 Nov 2011 15:54:43 +0000 Subject: [PATCH] Im WaWi kann nun ein Projekt zu einer Bestellung zugeordnet werden, Im Planner gibt es eigenen Reiter Bestellung --- content/planner.overlay.js.php | 41 +++ content/planner.overlay.xul.php | 4 +- content/projekt/bestellung.overlay.js.php | 296 ++------------------- content/projekt/bestellung.overlay.xul.php | 63 +---- include/projekt.class.php | 34 +++ include/wawi_bestellung.class.php | 63 +++++ rdf/bestellung.rdf.php | 76 ++++-- wawi/bestellung.php | 53 +++- 8 files changed, 271 insertions(+), 359 deletions(-) diff --git a/content/planner.overlay.js.php b/content/planner.overlay.js.php index 0b82f4439..f7c327d40 100755 --- a/content/planner.overlay.js.php +++ b/content/planner.overlay.js.php @@ -217,6 +217,47 @@ function treeProjektmenueSelect() document.getElementById('toolbarbutton-projektdokument-zuweisung').disabled=true; } + + + +// Bestellung laden + if(projekt_phase_id=='' && projekt_kurzbz!='') + { + try + { + url = "rdf/bestellung.rdf.php?projektKurzbz="+projekt_kurzbz+"&"+gettimestamp(); + var treeDokument=document.getElementById('tree-bestellung'); + + //Alte DS entfernen + var oldDatasources = treeDokument.database.GetDataSources(); + while(oldDatasources.hasMoreElements()) + { + treeDokument.database.RemoveDataSource(oldDatasources.getNext()); + } + + try + { + datasourceTreeDokument.removeXMLSinkObserver(DokumentTreeSinkObserver); + treeDokument.builder.removeListener(DokumentTreeListener); + } + catch(e) + {} + + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + datasourceTreeDokument = rdfService.GetDataSource(url); + datasourceTreeDokument.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + datasourceTreeDokument.QueryInterface(Components.interfaces.nsIRDFXMLSink); + treeDokument.database.AddDataSource(datasourceTreeDokument); + datasourceTreeDokument.addXMLSinkObserver(DokumentTreeSinkObserver); + treeDokument.builder.addListener(DokumentTreeListener); + } + catch(e) + { + debug("whoops Documents load failed with exception: "+e); + } + } + + if(projekt_kurzbz!='') { //Neu Button bei Tasks aktivieren diff --git a/content/planner.overlay.xul.php b/content/planner.overlay.xul.php index a7d25c6a9..fb6f28fdc 100755 --- a/content/planner.overlay.xul.php +++ b/content/planner.overlay.xul.php @@ -110,8 +110,8 @@ echo ' - @@ -122,8 +122,8 @@ echo ' - diff --git a/content/projekt/bestellung.overlay.js.php b/content/projekt/bestellung.overlay.js.php index e077a7596..a24531d27 100755 --- a/content/projekt/bestellung.overlay.js.php +++ b/content/projekt/bestellung.overlay.js.php @@ -1,5 +1,5 @@ + * Authors: Andreas Österreicher + * Karl Burkhart */ require_once('../../config/vilesci.config.inc.php'); -die('// fuehrt zu Konflikten'); -?> +?> // *********** Globale Variablen *****************// -var ProjektSelectKurzbz=null; //Kurzbz des Projekt Eintrages der nach dem Refresh markiert werden soll + +var DokumentSelectID=null; //ID des Dokuments das nach dem Refresh markiert werden soll // ********** Observer und Listener ************* // // **** -// * Observer fuer LV Tree +// * Observer fuer Dokument Tree // * startet Rebuild nachdem das Refresh // * der datasource fertig ist // **** -var observerTreeProjekt = +var DokumentTreeSinkObserver = { onBeginLoad : function(pSink) {}, onInterrupt : function(pSink) {}, @@ -40,15 +41,15 @@ var observerTreeProjekt = onEndLoad : function(pSink) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - document.getElementById('tree-projekt').builder.rebuild(); + document.getElementById('tree-bestellung').builder.rebuild(); } }; // **** -// * Nach dem Rebuild wird die Lehreinheit wieder +// * Nach dem Rebuild wird das Dokument wieder // * markiert // **** -var listenerTreeProjekt = +var DokumentTreeListener = { willRebuild : function(builder) { @@ -58,7 +59,7 @@ var listenerTreeProjekt = //timeout nur bei Mozilla notwendig da sonst die rows //noch keine values haben. Ab Seamonkey funktionierts auch //ohne dem setTimeout - window.setTimeout(ProjektTreeSelectProjekt,10); + window.setTimeout(DokumentTreeSelectDokument,10); // Progressmeter stoppen //document.getElementById('statusbar-progressmeter').setAttribute('mode','determined'); } @@ -67,173 +68,47 @@ var listenerTreeProjekt = // ****************** FUNKTIONEN ************************** // // **** -// * Asynchroner (Nicht blockierender) Refresh des LV Trees +// * Asynchroner (Nicht blockierender) Refresh des Dokument Trees // **** -function ProjektTreeRefresh() +function BestellungTreeRefresh() { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - //markierte Lehreinheit global speichern damit diese LE nach dem + //markiertes Dokument global speichern damit es nach dem //refresh wieder markiert werden kann. - var tree = document.getElementById('tree-projekt'); + var tree = document.getElementById('tree-bestellung'); try { - ProjektSelectKurzbz = getTreeCellText(tree, "treecol-projekt-projekt_kurzbz", tree.currentIndex); + DokumentSelectID = getTreeCellText(tree, "treecol-bestellung-bestell_nr", tree.currentIndex); } catch(e) { - ProjektSelectKurzbz=null; + DokumentSelectID=null; } - datasourceTreeProjekt.Refresh(false); //non blocking + + datasourceTreeDokument.Refresh(false); //non blocking } // **** -// * Selectiert die Lektorzuordnung nachdem der Tree +// * Selectiert das Dokument nachdem der Tree // * rebuildet wurde. // **** -function onselectProjekt() +function DokumentTreeSelectDokument() { - // Trick 17 (sonst gibt's ein Permission denied) - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - var tree = document.getElementById('tree-projekt'); - - if (tree.currentIndex==-1) return; - try - { - //Ausgewaehltes Projekt holen - var projekt_kurzbz = getTreeCellText(tree, "treecol-projekt-projekt_kurzbz", tree.currentIndex); - - if(projekt_kurzbz!='') - { - //Projekt wurde markiert - //Loeschen Button aktivieren - document.getElementById('toolbarbutton-projekt-del').disabled=false; - } - else - { - return false; - } - } - catch(e) - { - alert(e); - return false; - } - var req = new phpRequest('rdf/projekt.rdf.php','',''); - req.add('projekt_kurzbz',projekt_kurzbz); - var response = req.execute(); - - // Datasource holen - var dsource=parseRDFString(response, 'http://www.technikum-wien.at/projekt/alle-projekte'); - - dsource=dsource.QueryInterface(Components.interfaces.nsIRDFDataSource); - - var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]. - getService(Components.interfaces.nsIRDFService); - var subject = rdfService.GetResource("http://www.technikum-wien.at/projekt/" + projekt_kurzbz); - - var predicateNS = "http://www.technikum-wien.at/projekt/rdf"; - - //Daten holen - var projekt_kurzbz = getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#projekt_kurzbz" )); - var oe_kurzbz=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#oe_kurzbz" )); - var titel=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#titel" )); - var beschreibung=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#beschreibung" )); - var nummer=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#nummer" )); - var beginn=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#beginn" )); - var ende=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#ende" )); - var personentage=getTargetHelper(dsource,subject,rdfService.GetResource( predicateNS + "#personentage" )); - - //Daten den Feldern zuweisen - - document.getElementById('textbox-projekt-detail-projekt_kurzbz').value=projekt_kurzbz; - document.getElementById('textbox-projekt-detail-oe_kurzbz').value=oe_kurzbz; - document.getElementById('textbox-projekt-detail-titel').value=titel; - document.getElementById('textbox-projekt-detail-beschreibung').value=beschreibung; - document.getElementById('textbox-projekt-detail-nummer').value=nummer; - document.getElementById('textbox-projekt-detail-beginn').value=beginn; - document.getElementById('textbox-projekt-detail-ende').value=ende; - document.getElementById('checkbox-projekt-detail-neu').checked=false; - - //Notizen zu einem Projekt Laden - notiz = document.getElementById('box-projekt-notizen'); - notiz.LoadNotizTree(projekt_kurzbz,'','','','','','', ''); -} -// **** -// * Speichert die Details -// **** -function saveProjektDetail() -{ - - //Werte holen - projekt_kurzbz = document.getElementById('textbox-projekt-detail-projekt_kurzbz').value; - oe_kurzbz = document.getElementById('textbox-projekt-detail-oe_kurzbz').value; - titel = document.getElementById('textbox-projekt-detail-titel').value; - beschreibung = document.getElementById('textbox-projekt-detail-beschreibung').value; - nummer = document.getElementById('textbox-projekt-detail-nummer').value; - beginn = document.getElementById('textbox-projekt-detail-beginn').value; - ende = document.getElementById('textbox-projekt-detail-ende').value; - neu = document.getElementById('checkbox-projekt-detail-neu').checked; - - var soapBody = new SOAPObject("saveProjekt"); - soapBody.appendChild(new SOAPObject("projekt_kurzbz")).val(projekt_kurzbz); - soapBody.appendChild(new SOAPObject("oe_kurzbz")).val(oe_kurzbz); - soapBody.appendChild(new SOAPObject("titel")).val(titel); - soapBody.appendChild(new SOAPObject("beschreibung")).val(beschreibung); - soapBody.appendChild(new SOAPObject("nummer")).val(nummer); - soapBody.appendChild(new SOAPObject("beginn")).val(beginn); - soapBody.appendChild(new SOAPObject("ende")).val(ende); - - if(neu) - soapBody.appendChild(new SOAPObject("neu")).val('true'); - else - soapBody.appendChild(new SOAPObject("neu")).val('false'); - var sr = new SOAPRequest("saveProjekt",soapBody); - - SOAPClient.Proxy="soap/projekt.soap.php?"+gettimestamp(); - SOAPClient.SendRequest(sr, clb_saveProjekt); -} -// **** -// * Callback Funktion nach Speichern eines Projekts -// **** -function clb_saveProjekt(respObj) -{ - try - { - var projekt_kurzbz = respObj.Body[0].saveProjektResponse[0].message[0].Text; - ProjektSelectKurzbz = projekt_kurzbz; - } - catch(e) - { - var fehler = respObj.Body[0].Fault[0].faultstring[0].Text; - alert('Fehler: '+fehler); - return; - } - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - - datasourceTreeProjekt.Refresh(false); //non blocking - SetStatusBarText('Daten wurden gespeichert'); -} -// **** -// * Selectiert ein Projekt nachdem der Tree -// * rebuildet wurde. -// **** -function ProjektTreeSelectProjekt() -{ - var tree=document.getElementById('tree-projekt'); + var tree=document.getElementById('tree-bestellung'); var items = tree.view.rowCount; //Anzahl der Zeilen ermitteln //In der globalen Variable ist die zu selektierende ID gespeichert - if(ProjektSelectKurzbz!=null) + if(DokumentSelectID!=null) { for(var i=0;i + * Karl Burkhart */ header("Cache-Control: no-cache"); @@ -50,9 +51,7 @@ echo ''; - - - + @@ -61,43 +60,23 @@ echo ''; - @@ -106,15 +85,10 @@ echo ''; - + - - - - - - + @@ -122,26 +96,9 @@ echo ''; - - - - - - - - - - - - - - - - - - + diff --git a/include/projekt.class.php b/include/projekt.class.php index 6906b97c0..2b926f483 100755 --- a/include/projekt.class.php +++ b/include/projekt.class.php @@ -285,5 +285,39 @@ class projekt extends basis_db return false; } } + public function getProjektFromBestellung($bestellungID) + { + $qry ="select * from fue.tbl_projekt + join wawi.tbl_projekt_bestellung USING (projekt_kurzbz) + where bestellung_id= '".addslashes($bestellungID)."'"; + + if($this->db_query($qry)) + { + if($row = $this->db_fetch_object()) + { + $this->projekt_kurzbz = $row->projekt_kurzbz; + $this->nummer= $row->nummer; + $this->titel= $row->titel; + $this->beschreibung= $row->beschreibung; + $this->beginn= $row->beginn; + $this->ende = $row->ende; + $this->oe_kurzbz= $row->oe_kurzbz; + $this->budget= $row->budget; + + return true; + } + else + { + $this->errormsg = 'Datensatz wurde nicht gefunden'; + return false; + } + } + else + { + $this->errormsg = 'Fehler beim Laden der Daten'; + return false; + } + } + } ?> diff --git a/include/wawi_bestellung.class.php b/include/wawi_bestellung.class.php index 312002285..6beaaa1ed 100644 --- a/include/wawi_bestellung.class.php +++ b/include/wawi_bestellung.class.php @@ -971,6 +971,69 @@ class wawi_bestellung extends basis_db } return false; } + + /** + * + * speichert / loescht ein Projekt zu einer Bestellung + * @param $bestellungID + * @param $projektKurzbz + */ + public function saveProjektToBestellung($bestellungID, $projektKurzbz) + { + // Wenn keine ProjektKurzbz übergeben wurde Lösche die Zuteilung + if($projektKurzbz == '') + { + $qry = "DELETE FROM wawi.tbl_projekt_bestellung WHERE bestellung_id = '".addslashes($bestellungID)."';"; + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = "Fehler beim Löschen der Zuordnung: Projekt zu Bestellung aufgetreten."; + return false; + } + } + else + { + $qry1 = "SELECT 1 FROM wawi.tbl_projekt_bestellung WHERE bestellung_id = '".addslashes($bestellungID)."';"; + + if($this->db_query($qry1)) + { + if($row = $this->db_fetch_object()) + { + // es gibt eine Zuordnung -> UPDATE + $qry ="UPDATE wawi.tbl_projekt_bestellung SET projekt_kurzbz = '".addslashes($projektKurzbz)."' + WHERE bestellung_id = '".addslashes($bestellungID)."';"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = "Fehler beim Zuordnen: Bestellung zu Projekt aufgetreten."; + return false; + } + } + else + { + // gibt noch keine Zuordnung -> INSERT + $qry ="INSERT INTO wawi.tbl_projekt_bestellung (projekt_kurzbz, bestellung_id, anteil) VALUES ('".addslashes($projektKurzbz)."', '".addslashes($bestellungID)."', '100');"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = "Fehler beim Zuordnen: Bestellung zu Projekt aufgetreten."; + return false; + } + } + } + } + } /** * diff --git a/rdf/bestellung.rdf.php b/rdf/bestellung.rdf.php index c3cc240cc..ba8410def 100644 --- a/rdf/bestellung.rdf.php +++ b/rdf/bestellung.rdf.php @@ -21,34 +21,52 @@ require_once('../config/vilesci.config.inc.php'); require_once('../include/rdf.class.php'); require_once('../include/wawi_bestellung.class.php'); -$oRdf = new rdf('BESTELLUNG','http://www.technikum-wien.at/bestellung'); -$oRdf->sendHeader(); - -$oBestellung = new wawi_bestellung(); -$oBestellung->getBestellungProjekt('lernquadrat'); - -foreach ($oBestellung->result as $bestellung) -{ - $i=$oRdf->newObjekt($bestellung->bestellung_id); - $oRdf->obj[$i]->setAttribut('bestellung_id',$bestellung->bestellung_id,false); - $oRdf->obj[$i]->setAttribut('kostenstelle_id',$bestellung->kostenstelle_id,false); - $oRdf->obj[$i]->setAttribut('konto_id',$bestellung->konto_id,false); - $oRdf->obj[$i]->setAttribut('lieferadresse',$bestellung->lieferadresse,true); - $oRdf->obj[$i]->setAttribut('rechnungsadresse',$bestellung->rechnungsadresse,true); - $oRdf->obj[$i]->setAttribut('freigegeben',$bestellung->freigegeben,true); - $oRdf->obj[$i]->setAttribut('bestell_nr',$bestellung->bestell_nr,false); - $oRdf->obj[$i]->setAttribut('titel',$bestellung->titel,true); - $oRdf->obj[$i]->setAttribut('bemerkung',$bestellung->bemerkung,true); - $oRdf->obj[$i]->setAttribut('liefertermin',$bestellung->liefertermin,true); - $oRdf->obj[$i]->setAttribut('besteller_uid',$bestellung->besteller_uid,false); - $oRdf->obj[$i]->setAttribut('updateamum',$bestellung->updateamum,true); - $oRdf->obj[$i]->setAttribut('updatevon',$bestellung->updatevon,true); - $oRdf->obj[$i]->setAttribut('insertamum',$bestellung->insertamum,true); - $oRdf->obj[$i]->setAttribut('insertvon',$bestellung->insertvon,true); - $oRdf->obj[$i]->setAttribut('ext_id',$bestellung->ext_id,false); - $oRdf->obj[$i]->setAttribut('zahlungstyp_kurzbz',$bestellung->zahlungstyp_kurzbz,true); - +if(isset($_GET['projektKurzbz'])) +{ + $projektKurzbz = $_GET['projektKurzbz']; + $oRdf = new rdf('BESTELLUNG','http://www.technikum-wien.at/bestellung'); + $oRdf->sendHeader(); + + $oBestellung = new wawi_bestellung(); + $oBestellung->getBestellungProjekt($projektKurzbz); + + + foreach ($oBestellung->result as $bestellung) + { + $brutto = $bestellung->getBrutto($bestellung->bestellung_id); + if($brutto == '') + $brutto = '0'; + else + $brutto = sprintf("%01.2f", $brutto); + + + $i=$oRdf->newObjekt($bestellung->bestellung_id); + $oRdf->obj[$i]->setAttribut('bestellung_id',$bestellung->bestellung_id,false); + $oRdf->obj[$i]->setAttribut('kostenstelle_id',$bestellung->kostenstelle_id,false); + $oRdf->obj[$i]->setAttribut('konto_id',$bestellung->konto_id,false); + $oRdf->obj[$i]->setAttribut('lieferadresse',$bestellung->lieferadresse,true); + $oRdf->obj[$i]->setAttribut('rechnungsadresse',$bestellung->rechnungsadresse,true); + $oRdf->obj[$i]->setAttribut('freigegeben',$bestellung->freigegeben,true); + $oRdf->obj[$i]->setAttribut('bestell_nr',$bestellung->bestell_nr,false); + $oRdf->obj[$i]->setAttribut('titel',$bestellung->titel,true); + $oRdf->obj[$i]->setAttribut('bemerkung',$bestellung->bemerkung,true); + $oRdf->obj[$i]->setAttribut('liefertermin',$bestellung->liefertermin,true); + $oRdf->obj[$i]->setAttribut('besteller_uid',$bestellung->besteller_uid,false); + $oRdf->obj[$i]->setAttribut('updateamum',$bestellung->updateamum,true); + $oRdf->obj[$i]->setAttribut('updatevon',$bestellung->updatevon,true); + $oRdf->obj[$i]->setAttribut('insertamum',$bestellung->insertamum,true); + $oRdf->obj[$i]->setAttribut('insertvon',$bestellung->insertvon,true); + $oRdf->obj[$i]->setAttribut('ext_id',$bestellung->ext_id,false); + $oRdf->obj[$i]->setAttribut('betrag',$brutto,false); + $oRdf->obj[$i]->setAttribut('zahlungstyp_kurzbz',$bestellung->zahlungstyp_kurzbz,true); + + $oRdf->addSequence($bestellung->bestellung_id); + } + + $oRdf->sendRdfText(); + } +else +{ + echo "Parameter: projektKurzbz"; } - -$oRdf->sendRdfText(); ?> diff --git a/wawi/bestellung.php b/wawi/bestellung.php index b221ea24c..5b178bba1 100644 --- a/wawi/bestellung.php +++ b/wawi/bestellung.php @@ -40,6 +40,7 @@ require_once '../include/wawi_aufteilung.class.php'; require_once '../include/wawi_bestellstatus.class.php'; require_once '../include/wawi_zahlungstyp.class.php'; require_once '../include/tags.class.php'; +require_once '../include/projekt.class.php'; $aktion =''; $test = 0; // Bestelldetail Anzahl @@ -53,6 +54,14 @@ $rechte->getBerechtigungen($user); $kst=new wawi_kostenstelle(); $kst->loadArray($rechte->getKostenstelle($berechtigung_kurzbz),'bezeichnung'); +$projekt = new projekt(); +$projekt->getProjekteMitarbeiter($user); +$projektZugeordnet = false; + +// Abfrage ob dem user ein oder mehrere Projekte zugeordnet sind +if(count($projekt->result) > 0) + $projektZugeordnet = true; + if(isset($_POST['getKonto'])) { $id = $_POST['id']; @@ -885,8 +894,8 @@ if($_GET['method']=='update') $bestellung_new = new wawi_bestellung(); $bestellung_new->load($bestellung_id); $bestellung_new_brutto = $bestellung_new->getBrutto($bestellung_id); - $status = new wawi_bestellstatus(); - + $status = new wawi_bestellstatus(); + if(!$rechte->isberechtigt('wawi/bestellung',null, 'sui',$bestellung_old->kostenstelle_id) && !$rechte->isberechtigt('wawi/freigabe',null, 's',$bestellung_old->kostenstelle_id) && !$rechte->isberechtigt('wawi/freigabe_advanced')) @@ -898,6 +907,7 @@ if($_GET['method']=='update') // überprüfen wenn js fehlschlägt, nicht speichern if(isset($_POST['filter_kst']) || isset($_POST['titel'])) { + $aufteilung_anzahl = $_POST['anz_aufteilung']; $bestellung_detail_anz = $_POST['detail_anz']; @@ -917,7 +927,13 @@ if($_GET['method']=='update') $bestellung_new->updatevon = $user; $bestellung_new->zahlungstyp_kurzbz = $_POST['filter_zahlungstyp']; $bestellung_new->kostenstelle_id = $_POST['filter_kst']; - + + if(isset($_POST['filter_projekt'])) + { + // Projekt zu Bestellung speichern + $bestellung_new->saveProjektToBestellung($bestellung_new->bestellung_id, $_REQUEST['filter_projekt']); + } + // wenn sich kostenstelle geändert hat, neue bestellnummer generieren if($bestellung_new->kostenstelle_id != $bestellung_old->kostenstelle_id && !$status->isStatiVorhanden($bestellung_id, 'Bestellung') ) { @@ -1381,9 +1397,36 @@ if($_GET['method']=='update') echo " Firma: \n"; echo " \n"; echo " \n"; - echo " Kontaktperson: \n"; - echo " \n"; + echo " Kontaktperson: \n"; + echo " "; + // wenn user projekt zugeordnet ist -> Projekt Drop Down anzeigen + $ProjektUser = new projekt(); + $ProjektUser->getProjektFromBestellung($bestellung->bestellung_id); + $Bestellung_Projekt = false; // Projekt DropDown aus allen Projekten von eingeloggten User und dem der Bestellung -> true wenn Projekt aus Bestellung in User Projekten enthalten ist + if($projektZugeordnet == true) + { + echo " Projekt:"; + echo " "; + } + echo " \n"; + echo ""; echo "\n"; echo "\n"; $disabled = '';