*ODT renderer works
authorkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Mon, 17 Mar 2008 21:35:31 +0000 (21:35 +0000)
committerkonrad <konrad@6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33>
Mon, 17 Mar 2008 21:35:31 +0000 (21:35 +0000)
*eventsummary printing works (needs to be redirected to correct template, no save as yet)

git-svn-id: https://silmor.de/svn/softmagic/smoke/trunk@131 6e3c4bff-ac9f-4ac1-96c5-d2ea494d3e33

src/eventsummary.cpp
src/eventsummary.h
src/odtrender.cpp
src/odtrender.h
src/smoke_de.ts
src/smoke_de_SAX.ts

index d85a721..e771b47 100644 (file)
@@ -137,5 +137,69 @@ void MEventSummary::getSummaryData()
 
 void MEventSummary::print()
 {
-       MOdtSignalRenderer("").renderToPrinter("");
-}
\ No newline at end of file
+       MOdtSignalRenderer rend("../examples/eventsummary.odtt");
+       connect(&rend,SIGNAL(getVariable(QString,QString&)),this,SLOT(getVariable(QString,QString&)));
+       connect(&rend,SIGNAL(getLoopIterations(QString,int&)),this,SLOT(getLoopIterations(QString,int&)));
+       connect(&rend,SIGNAL(getLoopVariable(QString,int,QString,QString&)),this,SLOT(getLoopVariable(QString,int,QString,QString&)));
+       rend.renderToPrinter();
+}
+
+void MEventSummary::getVariable(QString varname,QString&value)
+{
+       if(varname=="TITLE")
+               value=title;
+       else
+       if(varname=="ARTIST")
+               value=artist;
+       else
+       if(varname=="START")
+               value=QDateTime::fromTime_t(starttime).toString(tr("yyyy-MM-dd hh:mm ap","Date+Time format for displaying event start time"));
+       else
+       if(varname=="CAPACITY")
+               value=QString::number(capacity);
+       else
+       if(varname=="RESERVED")
+               value=QString::number(nreserved);
+       else
+       if(varname=="BOUGHT")
+               value=QString::number(ntotaltickets);
+       else
+       if(varname=="USED"){
+               int nused=0;
+               for(int i=0;i<tickets.size();i++)nused+=tickets[i].used;
+               value=QString::number(nused);
+       }else
+       if(varname=="UNUSED"){
+               int nunused=0;
+               for(int i=0;i<tickets.size();i++)nunused+=tickets[i].unused;
+               value=QString::number(nunused);
+       }else
+       if(varname=="CANCELLED")
+               value=QString::number(ncancelled);
+       else
+       if(varname=="TOTALMONEY")
+               value=QString::number(ntotalmoney/100)
+                 +tr(".","decimal dot")
+                 +QString().sprintf("%02d",ntotalmoney%100);
+}
+
+void MEventSummary::getLoopIterations(QString loopname,int&iterations)
+{
+       if(loopname=="TICKETS")iterations=tickets.size();
+}
+
+void MEventSummary::getLoopVariable(QString loopname,int iteration,QString varname,QString&value)
+{
+       if(loopname!="TICKETS")return;
+       if(iteration<0 || iteration>=tickets.size())return;
+       
+       if(varname=="PRICE"){
+               int p=tickets[iteration].price;
+               value=QString::number(p/100)
+                 +tr(".","decimal dot")
+                 +QString().sprintf("%02d",p%100);
+       }else
+       if(varname=="BOUGHT")value=QString::number(tickets[iteration].bought);else
+       if(varname=="USED")value=QString::number(tickets[iteration].used);else
+       if(varname=="UNUSED")value=QString::number(tickets[iteration].unused);  
+}
index 3409d8e..8ac219d 100644 (file)
@@ -34,6 +34,11 @@ class MEventSummary:public QDialog
                /**internal: print summary*/
                void print();
                
+               //used for ODT rendering:
+               void getVariable(QString varname,QString&value);
+               void getLoopIterations(QString loopname,int&iterations);
+               void getLoopVariable(QString loopname,int iteration,QString varname,QString&value);
+               
        private:
                MWebRequest*req;
                int eventid,starttime,capacity;
index 5919cfe..50ee487 100644 (file)
 #include <QTemporaryFile>
 #include <QDir>
 #include <QFile>
+#include <QProcess>
 
 #include "zip/qunzip.h"
 #include "zip/qzip.h"
 
+
+QString MOdtRenderer::openOfficePath(){return officepath;}
+void MOdtRenderer::setOpenOfficePath(QString p){officepath=p;}
+QString MOdtRenderer::officepath="soffice";
+
+
 class MOdtRendererPrivate
 {
        protected:
                friend class MOdtRenderer;
                
                MOdtRendererPrivate(QString file,MOdtRenderer*p);
+               ~MOdtRendererPrivate();
                
                void render(QIODevice*);
                
-               
+               QString render(QString);
+               QString renderLine(QString,QString,int);
                
        private:
                MOdtRenderer*parent;
@@ -47,6 +56,7 @@ MOdtRendererPrivate::MOdtRendererPrivate(QString file,MOdtRenderer*p)
        parent=p;
        //open ZIP
        if(tfile.open(QIODevice::ReadOnly))temp.open(&tfile);
+       //TODO: make sure this is a valid ZIP file, preferably with some ODT content
 }
 
 MOdtRenderer::~MOdtRenderer()
@@ -54,33 +64,206 @@ MOdtRenderer::~MOdtRenderer()
        delete d;
        d=0;
 }
+MOdtRendererPrivate::~MOdtRendererPrivate()
+{
+       temp.close();
+       tfile.close();
+}
 
 void MOdtRenderer::renderToFile(QString file)
 {
        QFile f(file);
        if(f.open(QIODevice::WriteOnly)){
                renderToFile(f);
+               f.close();
        }
 }
 
 void MOdtRenderer::renderToFile(QFile &file)
 {
        qDebug("File Name: %s",file.fileName().toAscii().data());
-       
+       if(!file.isWritable())
+               if(!file.open(QIODevice::WriteOnly))return;
+       file.seek(0);
+       file.resize(0);
+       d->render(&file);
 }
 
-void MOdtRenderer::renderToPrinter(QString printername)
+void MOdtRenderer::renderToPrinter()
 {
        //generate temporary file
        QTemporaryFile tfile;
+       tfile.setAutoRemove(false);
        tfile.setFileTemplate(QDir::tempPath()+"/msmoke_XXXXXX.odt");
        tfile.open();
+       QString tname=tfile.fileName();
        //render
        renderToFile(tfile);
+       tfile.close();
        //call ooffice and print
-       
+       QProcess proc;
+       proc.start(officepath,QStringList()<<"-p"<<tname);
+       proc.waitForFinished();
+       //remove temporary file
+       QFile(tname).remove();
+}
+
+void MOdtRendererPrivate::render(QIODevice*out)
+{
+       //sanity check
+       if(!temp.isOpen())return;
+       if(!out->isWritable())return;
+       //rewind input
+       if(!temp.gotoFirstFile())return;
+       //create output
+       QZip ozip;
+       ozip.open(out);
+       //copy contents
+       do{
+               QString cname;
+               QDateTime tstamp;
+               temp.getCurrentFileInfo(cname,&tstamp);
+               if(cname=="content.xml"){
+                       //get content
+                       QBuffer buffer;
+                       buffer.open(QBuffer::ReadWrite);
+                       temp.getCurrentFile(buffer);
+                       //render
+                       QByteArray cont=render(QString::fromUtf8(buffer.data())).toUtf8();
+                       //write
+                       buffer.close();
+                       buffer.setData(cont);
+                       buffer.open(QBuffer::ReadWrite);
+                       buffer.seek(0);
+                       ozip.storeFile(cname,buffer,tstamp);
+               }else{
+                       //copy unchanged
+                       QBuffer buffer;
+                       buffer.open(QBuffer::ReadWrite);
+                       int meth;
+                       unsigned long crc,usz;
+                       temp.getCurrentFileRaw(buffer,meth,crc,usz);
+                       buffer.seek(0);
+                       ozip.storeFileRaw(cname,buffer,tstamp,meth,crc,usz);
+               }
+       }while(temp.gotoNextFile());
+       ozip.close();
+}
+
+QString MOdtRendererPrivate::render(QString s)
+{
+       //buffer for the whole file
+       QStringList fbuf=s.split("\n");
+       //buffer for loops
+       QStringList lbuf;
+       QString lname;
+       //buffer for return value
+       QString ret;
+       //go through all lines
+       bool isloop=false;
+       for(int i=0;i<fbuf.size();i++){
+               //are we inside a loop?
+               if(isloop){
+                       //is this the end of the loop?
+                       if(fbuf[i].trimmed()=="#ENDLOOP"){
+                               //get iterations
+                               int lcnt=parent->getLoopIterations(lname);
+                               //render the loop...
+                               for(int j=0;j<lcnt;j++){
+                                       //...line by line
+                                       for(int k=0;k<lbuf.size();k++){
+                                               ret+=renderLine(lbuf[k],lname,j);
+                                               ret+="\n";
+                                       }
+                               }
+                               //reset state
+                               isloop=false;
+                               lbuf.clear();
+                               lname="";
+                       }else{//not finished yet
+                               //collect lines
+                               lbuf<<fbuf[i];
+                       }
+               }else{//not inside a loop
+                       //is this the start of a loop?
+                       if(fbuf[i].trimmed().startsWith("#LOOP:")){
+                               lname=fbuf[i].trimmed().mid(6).trimmed();
+                               isloop=true;
+                       }else{//not a loop
+                               //convert line
+                               ret+=renderLine(fbuf[i],"",-1);
+                               ret+="\n";
+                       }
+               }
+       }
+       //return result
+       return ret;
 }
 
+QString MOdtRendererPrivate::renderLine(QString line,QString loop,int lpos)
+{
+       QString ret,vname;
+       bool isvar=false;
+       static QString vc="ABCDEFGHIJKLMNOPQRSTUVWXYZ:";
+       //scan characters
+       for(int i=0;i<line.size();i++){
+               //are we currently inside a variable name?
+               if(isvar){
+                       //end of var?
+                       if(line[i]=='@'){
+                               if(vname=="")ret+="@";
+                               else{
+                                       QStringList vl=vname.split(":");
+                                       if(vl.size()>2){
+                                               //this was a mistake, reset
+                                               ret+="@";
+                                               ret+=vname+"@";
+                                       }else
+                                       if(vl.size()==2){
+                                               //this is a loop variable, 
+                                               //check that it is the right loop
+                                               //or any loop at all...
+                                               if(loop!="" && loop==vl[0]){
+                                                       //get value
+                                                       ret+=parent->getLoopVariable(loop,lpos,vl[1]);
+                                               }
+                                       }else
+                                               //this is a normal variable, get valie
+                                               ret+=parent->getVariable(vname);
+                               }
+                               //reset mode
+                               isvar=false;
+                               vname="";
+                       }else
+                       //continuation of var?
+                       if(vc.contains(line[i])){
+                               //valid var-name-letter, add
+                               vname+=line[i];
+                       }else{//not a valid var-name-letter
+                               //reset
+                               isvar=false;
+                               ret+="@";
+                               ret+=vname;
+                               vname="";
+                       }
+               }else{//not inside variable name
+                       //is this the start of a var?
+                       if(line[i]=='@'){
+                               isvar=true;
+                               vname="";
+                       }else{
+                               ret+=line[i];
+                       }
+               }
+       }
+       //anything left over?
+       if(isvar){
+               //reset
+               ret+="@"+vname;
+       }
+       //return transformed line
+       return ret;
+}
 
 /********************************************************************/
 
index bc506df..6d2a6a2 100644 (file)
@@ -35,7 +35,13 @@ class MOdtRenderer
                virtual void renderToFile(QFile& file);
                
                /**starts the internal rendering routine and outputs to printer (calls OpenOffice to print)*/
-               virtual void renderToPrinter(QString printername);
+               virtual void renderToPrinter();
+               
+               /**returns the currently configured path to OpenOffice*/
+               static QString openOfficePath();
+               
+               /**sets the path to OpenOffice*/
+               static void setOpenOfficePath(QString);
                
        protected:
                friend class MOdtRendererPrivate;
@@ -49,6 +55,7 @@ class MOdtRenderer
                virtual QString getLoopVariable(QString loopname,int iteration,QString varname)=0;
        private:
                MOdtRendererPrivate*d;
+               static QString officepath;
 };
 
 /**generic class that implements MOdtRenderer by calling signals; the signals must be connected using a direct or blocking connection; if any of them is not used it will behave as if the variable/loop did not exist*/
@@ -63,13 +70,13 @@ class MOdtSignalRenderer:public QObject,public MOdtRenderer
        
        signals:
                /**connect this to return the value of a variable during rendering; should return empty string if the variable does not exist*/
-               virtual void getVariable(QString varname,QString&value);
+               void getVariable(QString varname,QString&value);
                
                /**connect this to return the amount of iterations for a defined loop; should return 0 if the loop does not exist*/
-               virtual void getLoopIterations(QString loopname,int&iterations);
+               void getLoopIterations(QString loopname,int&iterations);
                
                /**connect this to return a specific instance of a loop internal variable; should return empty string if the request is not valid*/
-               virtual void getLoopVariable(QString loopname,int iteration,QString varname,QString&value);
+               void getLoopVariable(QString loopname,int iteration,QString varname,QString&value);
        
        protected:
                QString getVariable(QString varname);
index 21ca778..f6ba829 100644 (file)
         <translation>Sie haben nicht das Recht diese Transaktin durchzuführen.</translation>
     </message>
     <message>
-        <location filename="../www/machine.php" line="274"/>
+        <location filename="../www/machine.php" line="280"/>
         <source>Internal Error: unknown command, hiccup in code structure.</source>
         <translation>Interner Fehler: unbekanntes Kommando, Fehler in Code-Struktur. Bitte melden Sie diesen Fehler und wie es dazu kam dem Programmierer.</translation>
     </message>
         <source>settemplate</source>
         <translation>Vorlage erstellen</translation>
     </message>
+    <message>
+        <location filename="../www/machine.php" line="23"/>
+        <source>eventsummary</source>
+        <translation>Veranstaltungübersicht</translation>
+    </message>
 </context>
 <context>
     <name>MCheckDialog</name>
     </message>
 </context>
 <context>
+    <name>MEventSummary</name>
+    <message>
+        <location filename="eventsummary.cpp" line="36"/>
+        <source>Summary for Event %1</source>
+        <translation>Übersicht zu Veranstaltung %1</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="42"/>
+        <source>Title:</source>
+        <translation>Titel:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="44"/>
+        <source>Artist:</source>
+        <translation>Künstler:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="46"/>
+        <source>Start:</source>
+        <translation>Beginn:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="156"/>
+        <source>yyyy-MM-dd hh:mm ap</source>
+        <comment>Date+Time format for displaying event start time</comment>
+        <translation>ddd, d.M.yyyy hh:mm</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="49"/>
+        <source>Capacity:</source>
+        <translation>Sitzplätze:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="51"/>
+        <source>Tickets currently reserved:</source>
+        <translation>Momentan reservierte Karten:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="53"/>
+        <source>Tickets currently cancelled:</source>
+        <translation>Momentan abgesagte Karten:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="55"/>
+        <source>Tickets currently usable:</source>
+        <translation>Momentan nutzbare Karten:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="57"/>
+        <source>Total Income:</source>
+        <translation>Umsatz:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="200"/>
+        <source>.</source>
+        <comment>decimal dot</comment>
+        <translation>,</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Price</source>
+        <translation>Preis</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Bought</source>
+        <translation>Gekauft</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Used</source>
+        <translation>Benutzt</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Unused</source>
+        <translation>Unbenutzt</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="84"/>
+        <source>Print</source>
+        <translation>Drucken</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="86"/>
+        <source>Save as...</source>
+        <translation>Speichern unter...</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="88"/>
+        <source>Close</source>
+        <translation>Schließen</translation>
+    </message>
+</context>
+<context>
     <name>MKeyGen</name>
     <message>
         <location filename="keygen.cpp" line="86"/>
@@ -740,571 +840,576 @@ At least %1 Bits of random are required.</source>
 <context>
     <name>MOverview</name>
     <message>
-        <location filename="overview.cpp" line="49"/>
+        <location filename="overview.cpp" line="50"/>
         <source>&amp;Session</source>
         <translation>&amp;Session</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="50"/>
+        <location filename="overview.cpp" line="51"/>
         <source>&amp;Re-Login</source>
         <translation>&amp;Login wiederholen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="54"/>
+        <location filename="overview.cpp" line="55"/>
         <source>&amp;Close Session</source>
         <translation>Session &amp;schließen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="56"/>
+        <location filename="overview.cpp" line="57"/>
         <source>&amp;Event</source>
         <translation>&amp;Veranstaltung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="61"/>
+        <location filename="overview.cpp" line="62"/>
         <source>&amp;Customer</source>
         <translation>&amp;Kunde</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="72"/>
+        <location filename="overview.cpp" line="73"/>
         <source>C&amp;onfigure</source>
         <translation>&amp;Konfigurieren</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="79"/>
+        <location filename="overview.cpp" line="80"/>
         <source>Events</source>
         <translation>Veranstaltungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="609"/>
+        <location filename="overview.cpp" line="626"/>
         <source>Warning</source>
         <translation>Warnung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="303"/>
+        <location filename="overview.cpp" line="308"/>
         <source>I was unable to renew the login at the server, the error was: %1</source>
         <translation>Der erneute Login ist fehlgeschlagen: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="51"/>
+        <location filename="overview.cpp" line="52"/>
         <source>&amp;Offline mode</source>
         <translation>&amp;Offlinemodus</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="59"/>
+        <location filename="overview.cpp" line="60"/>
         <source>&amp;New Event...</source>
         <translation>&amp;Neue Veranstaltung...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="62"/>
+        <location filename="overview.cpp" line="63"/>
         <source>&amp;Show all customers</source>
         <translation>&amp;Alle Kunden anzeigen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="64"/>
+        <location filename="overview.cpp" line="65"/>
         <source>C&amp;art</source>
         <translation>&amp;Einkaufswagen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="65"/>
+        <location filename="overview.cpp" line="66"/>
         <source>Add &amp;Ticket</source>
         <translation>Eintrittskarte &amp;hinzufügen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="66"/>
+        <location filename="overview.cpp" line="67"/>
         <source>Add &amp;Voucher</source>
         <translation>&amp;Gutschein hinzufügen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="67"/>
+        <location filename="overview.cpp" line="68"/>
         <source>&amp;Remove Item</source>
         <translation>&amp;Entfernen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="68"/>
+        <location filename="overview.cpp" line="69"/>
         <source>&amp;Abort Shopping</source>
         <translation>&amp;Einkauf abbrechen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="70"/>
+        <location filename="overview.cpp" line="71"/>
         <source>&amp;Show all orders</source>
         <translation>&amp;Alle Bestellungen anzeigen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="89"/>
+        <location filename="overview.cpp" line="90"/>
         <source>New Event...</source>
         <translation>Neue Veranstaltung...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="162"/>
+        <location filename="overview.cpp" line="167"/>
         <source>Details...</source>
         <translation>Details...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="96"/>
+        <location filename="overview.cpp" line="97"/>
         <source>Order Ticket...</source>
         <translation>Bestellen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="102"/>
+        <location filename="overview.cpp" line="107"/>
         <source>Shopping Cart</source>
         <translation>Einkaufswagen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="114"/>
+        <location filename="overview.cpp" line="119"/>
         <source>Add Ticket</source>
         <translation>Eintrittskarte hinzufügen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="116"/>
+        <location filename="overview.cpp" line="121"/>
         <source>Add Voucher</source>
         <translation>Gutschein hinzufügen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="119"/>
+        <location filename="overview.cpp" line="124"/>
         <source>Remove Item</source>
         <translation>Entfernen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="125"/>
+        <location filename="overview.cpp" line="130"/>
         <source>Customer:</source>
         <translation>Kunde</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="131"/>
+        <location filename="overview.cpp" line="136"/>
         <source>Delivery Address:</source>
         <translation>Lieferadresse:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="134"/>
+        <location filename="overview.cpp" line="139"/>
         <source>Comments:</source>
         <translation>Kommentare:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="147"/>
+        <location filename="overview.cpp" line="152"/>
         <source>Clear</source>
         <translation>Von vorn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Start Time</source>
         <translation>Anfangszeit</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Title</source>
         <translation>Titel</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="278"/>
+        <location filename="overview.cpp" line="283"/>
         <source>ddd MMMM d yyyy, h:mm ap</source>
         <comment>time format</comment>
         <translation>ddd, d.M.yyyy hh:mm</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="57"/>
+        <location filename="overview.cpp" line="58"/>
         <source>&amp;Update Event List</source>
         <translation>&amp;Veranstaltungsliste auffrischen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="58"/>
+        <location filename="overview.cpp" line="59"/>
         <source>&amp;Show/Edit details...</source>
         <translation>&amp;Details anzeigen/editieren...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="180"/>
+        <location filename="overview.cpp" line="185"/>
         <source>Users</source>
         <translation>Nutzer</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="188"/>
+        <location filename="overview.cpp" line="193"/>
         <source>New User...</source>
         <translation>Neuer Nutzer...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="191"/>
+        <location filename="overview.cpp" line="196"/>
         <source>Delete User...</source>
         <translation>Nutzer löschen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="195"/>
+        <location filename="overview.cpp" line="200"/>
         <source>Description...</source>
         <translation>Beschreibung.,.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="198"/>
+        <location filename="overview.cpp" line="203"/>
         <source>Hosts...</source>
         <translation>Hosts...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="201"/>
+        <location filename="overview.cpp" line="206"/>
         <source>Roles...</source>
         <translation>Rollen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="210"/>
+        <location filename="overview.cpp" line="215"/>
         <source>Hosts</source>
         <translation>Hosts</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="333"/>
+        <location filename="overview.cpp" line="350"/>
         <source>Login Name</source>
         <translation>Loginname</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="333"/>
+        <location filename="overview.cpp" line="350"/>
         <source>Description</source>
         <translation>Beschreibung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="348"/>
+        <location filename="overview.cpp" line="365"/>
         <source>New User</source>
         <translation>Neuer Nutzer</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="348"/>
+        <location filename="overview.cpp" line="365"/>
         <source>Please enter new user name (only letters, digits, and underscore allowed):</source>
         <translation>Neuen Nutzernamen eingeben (Buchstaben, Ziffern, Unterstrich):</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="761"/>
+        <location filename="overview.cpp" line="778"/>
         <source>Error</source>
         <translation>Fehler</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="353"/>
+        <location filename="overview.cpp" line="370"/>
         <source>The user name must contain only letters, digits, and underscores and must be at least one character long!</source>
         <translation>Der Nutzername darf nur aus Buchstaben, Ziffern und Unterstrich bestehen. Er muss mindestens ein Zeichen enthalten.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="388"/>
+        <location filename="overview.cpp" line="405"/>
         <source>Edit Description</source>
         <translation>Beschreibung ändern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="388"/>
+        <location filename="overview.cpp" line="405"/>
         <source>Descriptionof user %1:</source>
         <translation>Beschreibung von Nutzer %1:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="52"/>
+        <location filename="overview.cpp" line="53"/>
         <source>Change my &amp;Password</source>
         <translation>Mein &amp;Passwort ändern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="204"/>
+        <location filename="overview.cpp" line="209"/>
         <source>Set Password...</source>
         <translation>Passwort setzen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="218"/>
+        <location filename="overview.cpp" line="223"/>
         <source>New Host...</source>
         <translation>Neuer Host...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="221"/>
+        <location filename="overview.cpp" line="226"/>
         <source>Add This Host...</source>
         <translation>Diesen Host hinzufügen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="224"/>
+        <location filename="overview.cpp" line="229"/>
         <source>Delete Host...</source>
         <translation>Host löschen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="228"/>
+        <location filename="overview.cpp" line="233"/>
         <source>Generate New Key...</source>
         <translation>Neuen Schlüssel anlegen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="231"/>
+        <location filename="overview.cpp" line="236"/>
         <source>Import...</source>
         <translation>Importieren...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="234"/>
+        <location filename="overview.cpp" line="239"/>
         <source>Export...</source>
         <translation>Exportieren...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="357"/>
+        <location filename="overview.cpp" line="374"/>
         <source>Password</source>
         <translation>Passwort</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="357"/>
+        <location filename="overview.cpp" line="374"/>
         <source>Please enter an initial password for the user:</source>
         <translation>Bitte geben Sie ein intiales Passwort ein:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="372"/>
+        <location filename="overview.cpp" line="389"/>
         <source>Delete User?</source>
         <translation>Nutzer löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="372"/>
+        <location filename="overview.cpp" line="389"/>
         <source>Really delete user &apos;%1&apos;?</source>
         <translation>Nutzer &apos;%1&apos; wirklich löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="431"/>
+        <location filename="overview.cpp" line="448"/>
         <source>Error setting password: %1</source>
         <translation>Passwort kann nicht gesetzt werden: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="446"/>
+        <location filename="overview.cpp" line="463"/>
         <source>The password must be non-empty and both lines must match</source>
         <translation>Das Passwort darf nicht leer sein und beide Zeilen müssen übereinstimmen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="462"/>
+        <location filename="overview.cpp" line="479"/>
         <source>Host Name</source>
         <translation>Hostname</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="462"/>
+        <location filename="overview.cpp" line="479"/>
         <source>Host Key</source>
         <translation>Hostkey</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="480"/>
+        <location filename="overview.cpp" line="497"/>
         <source>Create New Host</source>
         <translation>Neuen Host anlegen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="480"/>
+        <location filename="overview.cpp" line="497"/>
         <source>Please enter a host name:</source>
         <translation>Bitte geben Sie einen neuen Hostnamen ein:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="488"/>
+        <location filename="overview.cpp" line="505"/>
         <source>The key of this new host could only be generated with %1 bits entropy. Store anyway?</source>
         <translation>Der Key dieses Hosts konnte nur mit %1 Bits Entropie angelegt werde. Trotzdem speichern?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="511"/>
+        <location filename="overview.cpp" line="528"/>
         <source>Delete this Host?</source>
         <translation>Diesen Host löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="511"/>
+        <location filename="overview.cpp" line="528"/>
         <source>Really delete host &apos;%1&apos;?</source>
         <translation>Den Host &apos;%1&apos; wirklich löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="525"/>
+        <location filename="overview.cpp" line="542"/>
         <source>Change Host Key?</source>
         <translation>Hostkey ändern?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="525"/>
+        <location filename="overview.cpp" line="542"/>
         <source>Really change the key of host &apos;%1&apos;?</source>
         <translation>Den Key von Host &apos;%1&apos; wirklich ändern?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="530"/>
+        <location filename="overview.cpp" line="547"/>
         <source>The new key of this host could only be generated with %1 bits entropy. Store anyway?</source>
         <translation>Der Key dieses Hosts konnte nur mit %1 Bits Entropie angelegt werde. Trotzdem speichern?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="541"/>
+        <location filename="overview.cpp" line="558"/>
         <source>Import Key from File</source>
         <translation>Key aus Datei importieren</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="550"/>
+        <location filename="overview.cpp" line="567"/>
         <source>Unable to open file %1 for reading: %2</source>
         <translation>Datei %1 kann nicht zum Lesen geöffnet werden: %2</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="562"/>
+        <location filename="overview.cpp" line="579"/>
         <source>This is not a host key file.</source>
         <translation>Dies ist keine Hostkeydatei.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="567"/>
+        <location filename="overview.cpp" line="584"/>
         <source>This host key file does not contain a valid host name.</source>
         <translation>Die Hostkeydatei enthält keinen gültigen Hostnamen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="572"/>
+        <location filename="overview.cpp" line="589"/>
         <source>This host key file does not contain a valid key.</source>
         <translation>Diese Datei enthält keinen gültigen Hostkey.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="577"/>
+        <location filename="overview.cpp" line="594"/>
         <source>The key check sum did not match. Please get a clean copy of the host key file.</source>
         <translation>Die Checksumme dieser Datei ist fehlgeschlagen. Bitte besorgen Sie eine neue Kopie der Datei.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="595"/>
+        <location filename="overview.cpp" line="612"/>
         <source>This host cannot be exported.</source>
         <translation>Dieser Host kann nicht exportiert werden.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="600"/>
+        <location filename="overview.cpp" line="617"/>
         <source>Export Key to File</source>
         <translation>Hostkey als Datei speichern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="609"/>
+        <location filename="overview.cpp" line="626"/>
         <source>Unable to open file %1 for writing: %2</source>
         <translation>Datei %1 kann nicht zum Schreiben geöffnet werden: %2</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="141"/>
+        <location filename="overview.cpp" line="146"/>
         <source>Order Items</source>
         <translation>Bestellung anlegen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="144"/>
+        <location filename="overview.cpp" line="149"/>
         <source>Sell Items</source>
         <translation>Verkaufen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="151"/>
+        <location filename="overview.cpp" line="156"/>
         <source>Order List</source>
         <translation>Bestellungsliste</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="155"/>
+        <location filename="overview.cpp" line="160"/>
         <source>-select mode-</source>
         <translation>-Modus auswählen-</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="156"/>
+        <location filename="overview.cpp" line="161"/>
         <source>All Orders</source>
         <translation>Alle Bestellungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="157"/>
+        <location filename="overview.cpp" line="162"/>
         <source>Open Orders</source>
         <translation>Offene Bestellungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="158"/>
+        <location filename="overview.cpp" line="163"/>
         <source>Outstanding Payments</source>
         <translation>Noch nicht bezahlt</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="159"/>
+        <location filename="overview.cpp" line="164"/>
         <source>Outstanding Refunds</source>
         <translation>Offene Rückerstattungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="164"/>
+        <location filename="overview.cpp" line="169"/>
         <source>Payment</source>
         <translation>Bezahlen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="165"/>
+        <location filename="overview.cpp" line="170"/>
         <source>Refund</source>
         <translation>Rückerstattung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="167"/>
+        <location filename="overview.cpp" line="172"/>
         <source>Print Tickets</source>
         <translation>Eintrittskarten drucken</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="168"/>
+        <location filename="overview.cpp" line="173"/>
         <source>Print Bill</source>
         <translation>Rechnung drucken</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Amount</source>
         <translation>Anzahl</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="666"/>
+        <location filename="overview.cpp" line="683"/>
         <source>Select Event to order Ticket</source>
         <translation>Bitte wählen Sie eine Verstaltung aus, um zu bestellen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="680"/>
+        <location filename="overview.cpp" line="697"/>
         <source>Select</source>
         <translation>Auswählen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="682"/>
+        <location filename="overview.cpp" line="699"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="717"/>
+        <location filename="overview.cpp" line="734"/>
         <source>There is nothing in the order. Ignoring it.</source>
         <translation>Bestellung ist leer. Vorgang abgebrochen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="721"/>
+        <location filename="overview.cpp" line="738"/>
         <source>Please chose a customer first!</source>
         <translation>Bitte wählen Sie zunächst einen Kunden aus!</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="757"/>
+        <location filename="overview.cpp" line="774"/>
         <source>The request failed.</source>
         <translation>Anfrage ist fehlgeschlagen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="761"/>
+        <location filename="overview.cpp" line="778"/>
         <source>A problem occurred during the order: %1</source>
         <translation>Die Bestellung ist fehlgeschlagen: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="172"/>
+        <location filename="overview.cpp" line="177"/>
         <source>Entrance</source>
         <translation>Einlasskontrolle</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="797"/>
+        <location filename="overview.cpp" line="814"/>
         <source>Ticket Ok</source>
         <translation>Eintrittskarte gültig</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="801"/>
+        <location filename="overview.cpp" line="818"/>
         <source>Ticket Already Used</source>
         <translation>Die Eintrittkarte wurde bereits benutzt!</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="805"/>
+        <location filename="overview.cpp" line="822"/>
         <source>Ticket Not Paid</source>
         <translation>Die Eintrittskarte ist noch nicht bezahlt!</translation>
     </message>
+    <message>
+        <location filename="overview.cpp" line="101"/>
+        <source>Ticket Summary...</source>
+        <translation>Eintrittskartenübersicht...</translation>
+    </message>
 </context>
 <context>
     <name>MPasswordChange</name>
     <message>
-        <location filename="overview.cpp" line="823"/>
+        <location filename="overview.cpp" line="840"/>
         <source>Change my password</source>
         <translation>Mein Passwort ändern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="825"/>
+        <location filename="overview.cpp" line="842"/>
         <source>Reset password of user %1</source>
         <translation>Passwort von Nutzer %1 setzen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="829"/>
+        <location filename="overview.cpp" line="846"/>
         <source>Old Password:</source>
         <translation>Altes Passwort:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="833"/>
+        <location filename="overview.cpp" line="850"/>
         <source>New Password:</source>
         <translation>Neues Passwort:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="836"/>
+        <location filename="overview.cpp" line="853"/>
         <source>Repeat Password:</source>
         <translation>Paswort wiederholen:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="844"/>
+        <location filename="overview.cpp" line="861"/>
         <source>Set Password</source>
         <translation>Passwort setzen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="846"/>
+        <location filename="overview.cpp" line="863"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
index ef70a44..cfae056 100644 (file)
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS><TS version="1.1" language="de">
-<defaultcodec></defaultcodec>
 <context>
     <name>@default</name>
     <message>
         <translation>Des darfsde nisch. Da mussde den Baba Adminischdrador frachn.</translation>
     </message>
     <message>
-        <location filename="../www/machine.php" line="274"/>
+        <location filename="../www/machine.php" line="280"/>
         <source>Internal Error: unknown command, hiccup in code structure.</source>
         <translation>Isch hab da een Broblem. Irschendwie gibsd das Gommando nur halb, aber och ni&apos; rischdisch. Frach ma&apos; den Brogrammierer.</translation>
     </message>
         <source>settemplate</source>
         <translation>Vorlache erschdellen.</translation>
     </message>
+    <message>
+        <location filename="../www/machine.php" line="23"/>
+        <source>eventsummary</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MCheckDialog</name>
     </message>
 </context>
 <context>
+    <name>MEventSummary</name>
+    <message>
+        <location filename="eventsummary.cpp" line="36"/>
+        <source>Summary for Event %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="42"/>
+        <source>Title:</source>
+        <translation type="unfinished">Diddel:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="44"/>
+        <source>Artist:</source>
+        <translation type="unfinished">Günsdlor:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="46"/>
+        <source>Start:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="156"/>
+        <source>yyyy-MM-dd hh:mm ap</source>
+        <comment>Date+Time format for displaying event start time</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="49"/>
+        <source>Capacity:</source>
+        <translation type="unfinished">Magsimale Gäsde:</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="51"/>
+        <source>Tickets currently reserved:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="53"/>
+        <source>Tickets currently cancelled:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="55"/>
+        <source>Tickets currently usable:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="57"/>
+        <source>Total Income:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="200"/>
+        <source>.</source>
+        <comment>decimal dot</comment>
+        <translation type="unfinished">,</translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Price</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Bought</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Used</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="68"/>
+        <source>Unused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="84"/>
+        <source>Print</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="86"/>
+        <source>Save as...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="eventsummary.cpp" line="88"/>
+        <source>Close</source>
+        <translation type="unfinished">Zumachn</translation>
+    </message>
+</context>
+<context>
     <name>MKeyGen</name>
     <message>
         <location filename="keygen.cpp" line="86"/>
@@ -740,52 +839,52 @@ At least %1 Bits of random are required.</source>
 <context>
     <name>MOverview</name>
     <message>
-        <location filename="overview.cpp" line="49"/>
+        <location filename="overview.cpp" line="50"/>
         <source>&amp;Session</source>
         <translation>&amp;Sidsung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="50"/>
+        <location filename="overview.cpp" line="51"/>
         <source>&amp;Re-Login</source>
         <translation>&amp;Noch&apos;ma einloggn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="54"/>
+        <location filename="overview.cpp" line="55"/>
         <source>&amp;Close Session</source>
         <translation>Sidsung &amp;Zumachn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="56"/>
+        <location filename="overview.cpp" line="57"/>
         <source>&amp;Event</source>
         <translation>&amp;Veranschdaldung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="61"/>
+        <location filename="overview.cpp" line="62"/>
         <source>&amp;Customer</source>
         <translation>&amp;Gunde</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="72"/>
+        <location filename="overview.cpp" line="73"/>
         <source>C&amp;onfigure</source>
         <translation>G&amp;onfiguriern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="79"/>
+        <location filename="overview.cpp" line="80"/>
         <source>Events</source>
         <translation>Veranschdaldungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="609"/>
+        <location filename="overview.cpp" line="626"/>
         <source>Warning</source>
         <translation>Dumm gelaufen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="303"/>
+        <location filename="overview.cpp" line="308"/>
         <source>I was unable to renew the login at the server, the error was: %1</source>
         <translation>Isch gann de&apos; Verbindung off&apos;n gross&apos;n Reschner nisch erneuern. Der will nisch weil: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="51"/>
+        <location filename="overview.cpp" line="52"/>
         <source>&amp;Offline mode</source>
         <translation>&amp;Ohne Neds und Dobbelden Boden</translation>
     </message>
@@ -795,92 +894,92 @@ At least %1 Bits of random are required.</source>
         <translation type="obsolete">&amp;Dedails anzeigen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="59"/>
+        <location filename="overview.cpp" line="60"/>
         <source>&amp;New Event...</source>
         <translation>Veranschdaldung &amp;absach&apos;n...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="62"/>
+        <location filename="overview.cpp" line="63"/>
         <source>&amp;Show all customers</source>
         <translation>&amp;Alle Gunden anzeigen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="64"/>
+        <location filename="overview.cpp" line="65"/>
         <source>C&amp;art</source>
         <translation>Eing&amp;aufswagen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="65"/>
+        <location filename="overview.cpp" line="66"/>
         <source>Add &amp;Ticket</source>
         <translation>Ein&amp;driddsgarde hinzufüchen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="66"/>
+        <location filename="overview.cpp" line="67"/>
         <source>Add &amp;Voucher</source>
         <translation>&amp;Gudschein hinzufüchen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="67"/>
+        <location filename="overview.cpp" line="68"/>
         <source>&amp;Remove Item</source>
         <translation>Doch &amp;ni&apos; nehm&apos;</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="68"/>
+        <location filename="overview.cpp" line="69"/>
         <source>&amp;Abort Shopping</source>
         <translation>&amp;Eingauf Abbrechen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="70"/>
+        <location filename="overview.cpp" line="71"/>
         <source>&amp;Show all orders</source>
         <translation>&amp;Alle Beschdellungen anzeichen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="89"/>
+        <location filename="overview.cpp" line="90"/>
         <source>New Event...</source>
         <translation>Neue Veranschdaldung...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="162"/>
+        <location filename="overview.cpp" line="167"/>
         <source>Details...</source>
         <translation>Dedails anzeichen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="96"/>
+        <location filename="overview.cpp" line="97"/>
         <source>Order Ticket...</source>
         <translation>Eindriddsgarde beschdellen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="102"/>
+        <location filename="overview.cpp" line="107"/>
         <source>Shopping Cart</source>
         <translation>Eingaufswagen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="114"/>
+        <location filename="overview.cpp" line="119"/>
         <source>Add Ticket</source>
         <translation>Eindriddsgarde hinzufüchen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="116"/>
+        <location filename="overview.cpp" line="121"/>
         <source>Add Voucher</source>
         <translation>Gudschein hinzufüchen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="119"/>
+        <location filename="overview.cpp" line="124"/>
         <source>Remove Item</source>
         <translation>Doch ni&apos; nehm&apos;</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="125"/>
+        <location filename="overview.cpp" line="130"/>
         <source>Customer:</source>
         <translation>Gunde:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="131"/>
+        <location filename="overview.cpp" line="136"/>
         <source>Delivery Address:</source>
         <translation>Adresse wo&apos;s Zeuch hin soll:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="134"/>
+        <location filename="overview.cpp" line="139"/>
         <source>Comments:</source>
         <translation>Wischdiches Gelaber und Gerede:</translation>
     </message>
@@ -890,431 +989,436 @@ At least %1 Bits of random are required.</source>
         <translation type="obsolete">Beschdellung abschbeichern</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="147"/>
+        <location filename="overview.cpp" line="152"/>
         <source>Clear</source>
         <translation>Wechwerfen und von vorne!</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Start Time</source>
         <translation>Anfangszeit</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Title</source>
         <translation>Diddel</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="278"/>
+        <location filename="overview.cpp" line="283"/>
         <source>ddd MMMM d yyyy, h:mm ap</source>
         <comment>time format</comment>
         <translation>ddd, d.M.yyyy hh:mm</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="57"/>
+        <location filename="overview.cpp" line="58"/>
         <source>&amp;Update Event List</source>
         <translation>&amp;Voranschdaldungsliste nochma holen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="58"/>
+        <location filename="overview.cpp" line="59"/>
         <source>&amp;Show/Edit details...</source>
         <translation>&amp;Dedails anzeichen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="180"/>
+        <location filename="overview.cpp" line="185"/>
         <source>Users</source>
         <translation>Nudsor</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="188"/>
+        <location filename="overview.cpp" line="193"/>
         <source>New User...</source>
         <translation>Neier Nudsor...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="191"/>
+        <location filename="overview.cpp" line="196"/>
         <source>Delete User...</source>
         <translation>Nudsor löschen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="195"/>
+        <location filename="overview.cpp" line="200"/>
         <source>Description...</source>
         <translation>Beschreibung...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="198"/>
+        <location filename="overview.cpp" line="203"/>
         <source>Hosts...</source>
         <translation>Reschnor...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="201"/>
+        <location filename="overview.cpp" line="206"/>
         <source>Roles...</source>
         <translation>Rollen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="210"/>
+        <location filename="overview.cpp" line="215"/>
         <source>Hosts</source>
         <translation>Reschnor</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="333"/>
+        <location filename="overview.cpp" line="350"/>
         <source>Login Name</source>
         <translation>Name zum Anmelden</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="333"/>
+        <location filename="overview.cpp" line="350"/>
         <source>Description</source>
         <translation>Beschreibung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="348"/>
+        <location filename="overview.cpp" line="365"/>
         <source>New User</source>
         <translation>Neier Nudsor</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="348"/>
+        <location filename="overview.cpp" line="365"/>
         <source>Please enter new user name (only letters, digits, and underscore allowed):</source>
         <translation>Bidde gib ma nen neien Nudsornam&apos; ein (nur Buchschdaben, Ziffern und &quot;_&quot;):</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="761"/>
+        <location filename="overview.cpp" line="778"/>
         <source>Error</source>
         <translation>Gans doller falschor Fehler</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="353"/>
+        <location filename="overview.cpp" line="370"/>
         <source>The user name must contain only letters, digits, and underscores and must be at least one character long!</source>
         <translation>Dor Nudsorname darf nur Buchschdaben, Ziffern und &quot;_&quot; endhalden. Umlaude sind böse. Und mindesdens een Buchschdaben lang mussor och sein.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="388"/>
+        <location filename="overview.cpp" line="405"/>
         <source>Edit Description</source>
         <translation>Beschreibung ändorn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="388"/>
+        <location filename="overview.cpp" line="405"/>
         <source>Descriptionof user %1:</source>
         <translation>Beschreibung vom Nudsor %1:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="52"/>
+        <location filename="overview.cpp" line="53"/>
         <source>Change my &amp;Password</source>
         <translation>Mei eechnes &amp;Bassword ändorn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="204"/>
+        <location filename="overview.cpp" line="209"/>
         <source>Set Password...</source>
         <translation>Bassword sedsen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="218"/>
+        <location filename="overview.cpp" line="223"/>
         <source>New Host...</source>
         <translation>Neier Reschnor...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="221"/>
+        <location filename="overview.cpp" line="226"/>
         <source>Add This Host...</source>
         <translation>Die Gisde hier hinzufüchen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="224"/>
+        <location filename="overview.cpp" line="229"/>
         <source>Delete Host...</source>
         <translation>Reschnor löschen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="228"/>
+        <location filename="overview.cpp" line="233"/>
         <source>Generate New Key...</source>
         <translation>Neien Schlüssel erzeuchen...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="231"/>
+        <location filename="overview.cpp" line="236"/>
         <source>Import...</source>
         <translation>Imbordieren...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="234"/>
+        <location filename="overview.cpp" line="239"/>
         <source>Export...</source>
         <translation>Eggsbordieren...</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="357"/>
+        <location filename="overview.cpp" line="374"/>
         <source>Password</source>
         <translation>Bassword</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="357"/>
+        <location filename="overview.cpp" line="374"/>
         <source>Please enter an initial password for the user:</source>
         <translation>Bidde gib ma een Bassword für den Nudsor ein:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="372"/>
+        <location filename="overview.cpp" line="389"/>
         <source>Delete User?</source>
         <translation>Nudsor löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="372"/>
+        <location filename="overview.cpp" line="389"/>
         <source>Really delete user &apos;%1&apos;?</source>
         <translation>Nudsor &apos;%1&apos; wirklich löschen? Bissde Dir da och gans sischor?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="431"/>
+        <location filename="overview.cpp" line="448"/>
         <source>Error setting password: %1</source>
         <translation>Gann Bassword ni sedsen: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="446"/>
+        <location filename="overview.cpp" line="463"/>
         <source>The password must be non-empty and both lines must match</source>
         <translation>Das Bassword darf nisch leer sein und beide Basswordzeilen müssen gleisch sein.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="462"/>
+        <location filename="overview.cpp" line="479"/>
         <source>Host Name</source>
         <translation>Reschnorname</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="462"/>
+        <location filename="overview.cpp" line="479"/>
         <source>Host Key</source>
         <translation>Reschnorschlüssel</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="480"/>
+        <location filename="overview.cpp" line="497"/>
         <source>Create New Host</source>
         <translation>Neien Reschnor anlechen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="480"/>
+        <location filename="overview.cpp" line="497"/>
         <source>Please enter a host name:</source>
         <translation>Gib ma nen Nam&apos; für de Gisde ein:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="488"/>
+        <location filename="overview.cpp" line="505"/>
         <source>The key of this new host could only be generated with %1 bits entropy. Store anyway?</source>
         <translation>Dor Schlüssel von der Gisde hat nur %1 zufällige Bids. Das is a bissl wenisch. Drodsdem schbeichorn?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="511"/>
+        <location filename="overview.cpp" line="528"/>
         <source>Delete this Host?</source>
         <translation>De Gisdge löschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="511"/>
+        <location filename="overview.cpp" line="528"/>
         <source>Really delete host &apos;%1&apos;?</source>
         <translation>De Gisde &apos;%1&apos; wirklisch löschen? Bissde da och sischor?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="525"/>
+        <location filename="overview.cpp" line="542"/>
         <source>Change Host Key?</source>
         <translation>Den Schlüssel von dem Reschnor ändorn?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="525"/>
+        <location filename="overview.cpp" line="542"/>
         <source>Really change the key of host &apos;%1&apos;?</source>
         <translation>Wirglich den Schlüssel von dem Reschnor &apos;%1&apos; ändorn? Gans sischor?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="530"/>
+        <location filename="overview.cpp" line="547"/>
         <source>The new key of this host could only be generated with %1 bits entropy. Store anyway?</source>
         <translation>Dor Schlüssel von der Gisde hat nur %1 zufällige Bids. Das is a bissl wenisch. Drodsdem schbeichorn?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="541"/>
+        <location filename="overview.cpp" line="558"/>
         <source>Import Key from File</source>
         <translation>Schlüssel aus nor Dadai holen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="550"/>
+        <location filename="overview.cpp" line="567"/>
         <source>Unable to open file %1 for reading: %2</source>
         <translation>Gann de Dadai %1 nisch lesen. Des iss jedsd geene Ordografieschwäche, sondern: %2</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="562"/>
+        <location filename="overview.cpp" line="579"/>
         <source>This is not a host key file.</source>
         <translation>Das is abor doch gar ge Schlüssel! Willsde misch verarschen?</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="567"/>
+        <location filename="overview.cpp" line="584"/>
         <source>This host key file does not contain a valid host name.</source>
         <translation>De Schlüsseldadai had nen gans seldsamen Reschnornamen da drin. Desdorweschen gannsch die ni nehm.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="572"/>
+        <location filename="overview.cpp" line="589"/>
         <source>This host key file does not contain a valid key.</source>
         <translation>De Dadai is a bissl gabudd. Die mussde nochmal holen, ich gann die so ned lesen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="577"/>
+        <location filename="overview.cpp" line="594"/>
         <source>The key check sum did not match. Please get a clean copy of the host key file.</source>
         <translation>Isch hab da ma nachgereschned. De Scheggsumme vom Schlüssel is falsch. Das gannsch Dir so ni abnehm.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="595"/>
+        <location filename="overview.cpp" line="612"/>
         <source>This host cannot be exported.</source>
         <translation>Den Reschnor gannsch ni schbeichorn.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="600"/>
+        <location filename="overview.cpp" line="617"/>
         <source>Export Key to File</source>
         <translation>Schlüssel als Dadei ablechen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="609"/>
+        <location filename="overview.cpp" line="626"/>
         <source>Unable to open file %1 for writing: %2</source>
         <translation>Gann de Dadai %1 nicht zum Schreiben offmachen weil: %2</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="141"/>
+        <location filename="overview.cpp" line="146"/>
         <source>Order Items</source>
         <translation>Ne Beschdellung anlegn.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="144"/>
+        <location filename="overview.cpp" line="149"/>
         <source>Sell Items</source>
         <translation>Vorkofen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="151"/>
+        <location filename="overview.cpp" line="156"/>
         <source>Order List</source>
         <translation>Beschdelllisde</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="155"/>
+        <location filename="overview.cpp" line="160"/>
         <source>-select mode-</source>
         <translation>-wähl ma was aus-</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="156"/>
+        <location filename="overview.cpp" line="161"/>
         <source>All Orders</source>
         <translation>Alle Beschdellungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="157"/>
+        <location filename="overview.cpp" line="162"/>
         <source>Open Orders</source>
         <translation>Offene Beschdellungen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="158"/>
+        <location filename="overview.cpp" line="163"/>
         <source>Outstanding Payments</source>
         <translation>Wo noch ni bezahld is</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="159"/>
+        <location filename="overview.cpp" line="164"/>
         <source>Outstanding Refunds</source>
         <translation>Wo was zurügerschdadded werden muss</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="164"/>
+        <location filename="overview.cpp" line="169"/>
         <source>Payment</source>
         <translation>Bezahln</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="165"/>
+        <location filename="overview.cpp" line="170"/>
         <source>Refund</source>
         <translation>Zurügerschdadden</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="167"/>
+        <location filename="overview.cpp" line="172"/>
         <source>Print Tickets</source>
         <translation>Eindriddsgarde druggn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="168"/>
+        <location filename="overview.cpp" line="173"/>
         <source>Print Bill</source>
         <translation>Reschnung druggn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="646"/>
+        <location filename="overview.cpp" line="663"/>
         <source>Amount</source>
         <translation>Anzahl</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="666"/>
+        <location filename="overview.cpp" line="683"/>
         <source>Select Event to order Ticket</source>
         <translation>Wähl ma ne Voranschdaldung aus um ne Garde zu beschdelln</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="680"/>
+        <location filename="overview.cpp" line="697"/>
         <source>Select</source>
         <translation>Auswähln</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="682"/>
+        <location filename="overview.cpp" line="699"/>
         <source>Cancel</source>
         <translation>Ni machen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="717"/>
+        <location filename="overview.cpp" line="734"/>
         <source>There is nothing in the order. Ignoring it.</source>
         <translation>Da is doch gar nischd drin. Isch mach das jedsd ni!</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="721"/>
+        <location filename="overview.cpp" line="738"/>
         <source>Please chose a customer first!</source>
         <translation>Du mussd schon nen Gunden auswähln, sonsd wees isch doch ni wer&apos;s griechen soll!</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="757"/>
+        <location filename="overview.cpp" line="774"/>
         <source>The request failed.</source>
         <translation>De Anfrache is schiefgegangen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="761"/>
+        <location filename="overview.cpp" line="778"/>
         <source>A problem occurred during the order: %1</source>
         <translation>Isch hadde nen Broblem mit dor Beschdellung: %1</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="172"/>
+        <location filename="overview.cpp" line="177"/>
         <source>Entrance</source>
         <translation>Einlassgondrolle</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="797"/>
+        <location filename="overview.cpp" line="814"/>
         <source>Ticket Ok</source>
         <translation>Eindriddsgarde is in Ordnung</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="801"/>
+        <location filename="overview.cpp" line="818"/>
         <source>Ticket Already Used</source>
         <translation>Die habsch schonmal gesehn, da will eener bedrüchen.</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="805"/>
+        <location filename="overview.cpp" line="822"/>
         <source>Ticket Not Paid</source>
         <translation>Eindriddsgarde is nisch bedsahld. Schiggn ma&apos; an de Gasse.</translation>
     </message>
+    <message>
+        <location filename="overview.cpp" line="101"/>
+        <source>Ticket Summary...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MPasswordChange</name>
     <message>
-        <location filename="overview.cpp" line="823"/>
+        <location filename="overview.cpp" line="840"/>
         <source>Change my password</source>
         <translation>Mei eechnes Bassword ändorn</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="825"/>
+        <location filename="overview.cpp" line="842"/>
         <source>Reset password of user %1</source>
         <translation>Bassword vom Nudsor %1 zurügsedsen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="829"/>
+        <location filename="overview.cpp" line="846"/>
         <source>Old Password:</source>
         <translation>Aldes Bassword:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="833"/>
+        <location filename="overview.cpp" line="850"/>
         <source>New Password:</source>
         <translation>Neies Bassword:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="836"/>
+        <location filename="overview.cpp" line="853"/>
         <source>Repeat Password:</source>
         <translation>Nochma neies Bassword:</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="844"/>
+        <location filename="overview.cpp" line="861"/>
         <source>Set Password</source>
         <translation>Bassword sedsen</translation>
     </message>
     <message>
-        <location filename="overview.cpp" line="846"/>
+        <location filename="overview.cpp" line="863"/>
         <source>Cancel</source>
         <translation>Vorgisses, ni sedsen</translation>
     </message>