From 668c5edc8752ede7c64200911ccfeeb3cac617ac Mon Sep 17 00:00:00 2001 From: konrad Date: Mon, 17 Mar 2008 21:35:31 +0000 Subject: [PATCH] *ODT renderer works *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 | 68 ++++++++++- src/eventsummary.h | 5 + src/odtrender.cpp | 191 ++++++++++++++++++++++++++++- src/odtrender.h | 15 ++- src/smoke_de.ts | 333 +++++++++++++++++++++++++++++++++----------------- src/smoke_de_SAX.ts | 334 +++++++++++++++++++++++++++++++++----------------- 6 files changed, 707 insertions(+), 239 deletions(-) diff --git a/src/eventsummary.cpp b/src/eventsummary.cpp index d85a721..e771b47 100644 --- a/src/eventsummary.cpp +++ b/src/eventsummary.cpp @@ -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())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); +} diff --git a/src/eventsummary.h b/src/eventsummary.h index 3409d8e..8ac219d 100644 --- a/src/eventsummary.h +++ b/src/eventsummary.h @@ -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; diff --git a/src/odtrender.cpp b/src/odtrender.cpp index 5919cfe..50ee487 100644 --- a/src/odtrender.cpp +++ b/src/odtrender.cpp @@ -15,20 +15,29 @@ #include #include #include +#include #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"<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;igetLoopIterations(lname); + //render the loop... + for(int j=0;j2){ + //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; +} /********************************************************************/ diff --git a/src/odtrender.h b/src/odtrender.h index bc506df..6d2a6a2 100644 --- a/src/odtrender.h +++ b/src/odtrender.h @@ -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); diff --git a/src/smoke_de.ts b/src/smoke_de.ts index 21ca778..f6ba829 100644 --- a/src/smoke_de.ts +++ b/src/smoke_de.ts @@ -219,7 +219,7 @@ Sie haben nicht das Recht diese Transaktin durchzuführen. - + Internal Error: unknown command, hiccup in code structure. Interner Fehler: unbekanntes Kommando, Fehler in Code-Struktur. Bitte melden Sie diesen Fehler und wie es dazu kam dem Programmierer. @@ -288,6 +288,11 @@ settemplate Vorlage erstellen + + + eventsummary + Veranstaltungübersicht + MCheckDialog @@ -525,6 +530,101 @@ + MEventSummary + + + Summary for Event %1 + Übersicht zu Veranstaltung %1 + + + + Title: + Titel: + + + + Artist: + Künstler: + + + + Start: + Beginn: + + + + yyyy-MM-dd hh:mm ap + Date+Time format for displaying event start time + ddd, d.M.yyyy hh:mm + + + + Capacity: + Sitzplätze: + + + + Tickets currently reserved: + Momentan reservierte Karten: + + + + Tickets currently cancelled: + Momentan abgesagte Karten: + + + + Tickets currently usable: + Momentan nutzbare Karten: + + + + Total Income: + Umsatz: + + + + . + decimal dot + , + + + + Price + Preis + + + + Bought + Gekauft + + + + Used + Benutzt + + + + Unused + Unbenutzt + + + + Print + Drucken + + + + Save as... + Speichern unter... + + + + Close + Schließen + + + MKeyGen @@ -740,571 +840,576 @@ At least %1 Bits of random are required. MOverview - + &Session &Session - + &Re-Login &Login wiederholen - + &Close Session Session &schließen - + &Event &Veranstaltung - + &Customer &Kunde - + C&onfigure &Konfigurieren - + Events Veranstaltungen - + Warning Warnung - + I was unable to renew the login at the server, the error was: %1 Der erneute Login ist fehlgeschlagen: %1 - + &Offline mode &Offlinemodus - + &New Event... &Neue Veranstaltung... - + &Show all customers &Alle Kunden anzeigen - + C&art &Einkaufswagen - + Add &Ticket Eintrittskarte &hinzufügen - + Add &Voucher &Gutschein hinzufügen - + &Remove Item &Entfernen - + &Abort Shopping &Einkauf abbrechen - + &Show all orders &Alle Bestellungen anzeigen - + New Event... Neue Veranstaltung... - + Details... Details... - + Order Ticket... Bestellen... - + Shopping Cart Einkaufswagen - + Add Ticket Eintrittskarte hinzufügen - + Add Voucher Gutschein hinzufügen - + Remove Item Entfernen - + Customer: Kunde - + Delivery Address: Lieferadresse: - + Comments: Kommentare: - + Clear Von vorn - + Start Time Anfangszeit - + Title Titel - + ddd MMMM d yyyy, h:mm ap time format ddd, d.M.yyyy hh:mm - + &Update Event List &Veranstaltungsliste auffrischen - + &Show/Edit details... &Details anzeigen/editieren... - + Users Nutzer - + New User... Neuer Nutzer... - + Delete User... Nutzer löschen... - + Description... Beschreibung.,. - + Hosts... Hosts... - + Roles... Rollen... - + Hosts Hosts - + Login Name Loginname - + Description Beschreibung - + New User Neuer Nutzer - + Please enter new user name (only letters, digits, and underscore allowed): Neuen Nutzernamen eingeben (Buchstaben, Ziffern, Unterstrich): - + Error Fehler - + The user name must contain only letters, digits, and underscores and must be at least one character long! Der Nutzername darf nur aus Buchstaben, Ziffern und Unterstrich bestehen. Er muss mindestens ein Zeichen enthalten. - + Edit Description Beschreibung ändern - + Descriptionof user %1: Beschreibung von Nutzer %1: - + Change my &Password Mein &Passwort ändern - + Set Password... Passwort setzen... - + New Host... Neuer Host... - + Add This Host... Diesen Host hinzufügen... - + Delete Host... Host löschen... - + Generate New Key... Neuen Schlüssel anlegen... - + Import... Importieren... - + Export... Exportieren... - + Password Passwort - + Please enter an initial password for the user: Bitte geben Sie ein intiales Passwort ein: - + Delete User? Nutzer löschen? - + Really delete user '%1'? Nutzer '%1' wirklich löschen? - + Error setting password: %1 Passwort kann nicht gesetzt werden: %1 - + The password must be non-empty and both lines must match Das Passwort darf nicht leer sein und beide Zeilen müssen übereinstimmen. - + Host Name Hostname - + Host Key Hostkey - + Create New Host Neuen Host anlegen - + Please enter a host name: Bitte geben Sie einen neuen Hostnamen ein: - + The key of this new host could only be generated with %1 bits entropy. Store anyway? Der Key dieses Hosts konnte nur mit %1 Bits Entropie angelegt werde. Trotzdem speichern? - + Delete this Host? Diesen Host löschen? - + Really delete host '%1'? Den Host '%1' wirklich löschen? - + Change Host Key? Hostkey ändern? - + Really change the key of host '%1'? Den Key von Host '%1' wirklich ändern? - + The new key of this host could only be generated with %1 bits entropy. Store anyway? Der Key dieses Hosts konnte nur mit %1 Bits Entropie angelegt werde. Trotzdem speichern? - + Import Key from File Key aus Datei importieren - + Unable to open file %1 for reading: %2 Datei %1 kann nicht zum Lesen geöffnet werden: %2 - + This is not a host key file. Dies ist keine Hostkeydatei. - + This host key file does not contain a valid host name. Die Hostkeydatei enthält keinen gültigen Hostnamen. - + This host key file does not contain a valid key. Diese Datei enthält keinen gültigen Hostkey. - + The key check sum did not match. Please get a clean copy of the host key file. Die Checksumme dieser Datei ist fehlgeschlagen. Bitte besorgen Sie eine neue Kopie der Datei. - + This host cannot be exported. Dieser Host kann nicht exportiert werden. - + Export Key to File Hostkey als Datei speichern - + Unable to open file %1 for writing: %2 Datei %1 kann nicht zum Schreiben geöffnet werden: %2 - + Order Items Bestellung anlegen - + Sell Items Verkaufen - + Order List Bestellungsliste - + -select mode- -Modus auswählen- - + All Orders Alle Bestellungen - + Open Orders Offene Bestellungen - + Outstanding Payments Noch nicht bezahlt - + Outstanding Refunds Offene Rückerstattungen - + Payment Bezahlen - + Refund Rückerstattung - + Print Tickets Eintrittskarten drucken - + Print Bill Rechnung drucken - + Amount Anzahl - + Select Event to order Ticket Bitte wählen Sie eine Verstaltung aus, um zu bestellen - + Select Auswählen - + Cancel Abbrechen - + There is nothing in the order. Ignoring it. Bestellung ist leer. Vorgang abgebrochen. - + Please chose a customer first! Bitte wählen Sie zunächst einen Kunden aus! - + The request failed. Anfrage ist fehlgeschlagen. - + A problem occurred during the order: %1 Die Bestellung ist fehlgeschlagen: %1 - + Entrance Einlasskontrolle - + Ticket Ok Eintrittskarte gültig - + Ticket Already Used Die Eintrittkarte wurde bereits benutzt! - + Ticket Not Paid Die Eintrittskarte ist noch nicht bezahlt! + + + Ticket Summary... + Eintrittskartenübersicht... + MPasswordChange - + Change my password Mein Passwort ändern - + Reset password of user %1 Passwort von Nutzer %1 setzen - + Old Password: Altes Passwort: - + New Password: Neues Passwort: - + Repeat Password: Paswort wiederholen: - + Set Password Passwort setzen - + Cancel Abbrechen diff --git a/src/smoke_de_SAX.ts b/src/smoke_de_SAX.ts index ef70a44..cfae056 100644 --- a/src/smoke_de_SAX.ts +++ b/src/smoke_de_SAX.ts @@ -1,6 +1,5 @@ - @default @@ -219,7 +218,7 @@ Des darfsde nisch. Da mussde den Baba Adminischdrador frachn. - + Internal Error: unknown command, hiccup in code structure. Isch hab da een Broblem. Irschendwie gibsd das Gommando nur halb, aber och ni' rischdisch. Frach ma' den Brogrammierer. @@ -288,6 +287,11 @@ settemplate Vorlache erschdellen. + + + eventsummary + + MCheckDialog @@ -525,6 +529,101 @@ + MEventSummary + + + Summary for Event %1 + + + + + Title: + Diddel: + + + + Artist: + Günsdlor: + + + + Start: + + + + + yyyy-MM-dd hh:mm ap + Date+Time format for displaying event start time + + + + + Capacity: + Magsimale Gäsde: + + + + Tickets currently reserved: + + + + + Tickets currently cancelled: + + + + + Tickets currently usable: + + + + + Total Income: + + + + + . + decimal dot + , + + + + Price + + + + + Bought + + + + + Used + + + + + Unused + + + + + Print + + + + + Save as... + + + + + Close + Zumachn + + + MKeyGen @@ -740,52 +839,52 @@ At least %1 Bits of random are required. MOverview - + &Session &Sidsung - + &Re-Login &Noch'ma einloggn - + &Close Session Sidsung &Zumachn - + &Event &Veranschdaldung - + &Customer &Gunde - + C&onfigure G&onfiguriern - + Events Veranschdaldungen - + Warning Dumm gelaufen - + I was unable to renew the login at the server, the error was: %1 Isch gann de' Verbindung off'n gross'n Reschner nisch erneuern. Der will nisch weil: %1 - + &Offline mode &Ohne Neds und Dobbelden Boden @@ -795,92 +894,92 @@ At least %1 Bits of random are required. &Dedails anzeigen... - + &New Event... Veranschdaldung &absach'n... - + &Show all customers &Alle Gunden anzeigen - + C&art Eing&aufswagen - + Add &Ticket Ein&driddsgarde hinzufüchen - + Add &Voucher &Gudschein hinzufüchen - + &Remove Item Doch &ni' nehm' - + &Abort Shopping &Eingauf Abbrechen - + &Show all orders &Alle Beschdellungen anzeichen - + New Event... Neue Veranschdaldung... - + Details... Dedails anzeichen... - + Order Ticket... Eindriddsgarde beschdellen... - + Shopping Cart Eingaufswagen - + Add Ticket Eindriddsgarde hinzufüchen - + Add Voucher Gudschein hinzufüchen - + Remove Item Doch ni' nehm' - + Customer: Gunde: - + Delivery Address: Adresse wo's Zeuch hin soll: - + Comments: Wischdiches Gelaber und Gerede: @@ -890,431 +989,436 @@ At least %1 Bits of random are required. Beschdellung abschbeichern - + Clear Wechwerfen und von vorne! - + Start Time Anfangszeit - + Title Diddel - + ddd MMMM d yyyy, h:mm ap time format ddd, d.M.yyyy hh:mm - + &Update Event List &Voranschdaldungsliste nochma holen - + &Show/Edit details... &Dedails anzeichen... - + Users Nudsor - + New User... Neier Nudsor... - + Delete User... Nudsor löschen... - + Description... Beschreibung... - + Hosts... Reschnor... - + Roles... Rollen... - + Hosts Reschnor - + Login Name Name zum Anmelden - + Description Beschreibung - + New User Neier Nudsor - + Please enter new user name (only letters, digits, and underscore allowed): Bidde gib ma nen neien Nudsornam' ein (nur Buchschdaben, Ziffern und "_"): - + Error Gans doller falschor Fehler - + The user name must contain only letters, digits, and underscores and must be at least one character long! Dor Nudsorname darf nur Buchschdaben, Ziffern und "_" endhalden. Umlaude sind böse. Und mindesdens een Buchschdaben lang mussor och sein. - + Edit Description Beschreibung ändorn - + Descriptionof user %1: Beschreibung vom Nudsor %1: - + Change my &Password Mei eechnes &Bassword ändorn - + Set Password... Bassword sedsen... - + New Host... Neier Reschnor... - + Add This Host... Die Gisde hier hinzufüchen... - + Delete Host... Reschnor löschen... - + Generate New Key... Neien Schlüssel erzeuchen... - + Import... Imbordieren... - + Export... Eggsbordieren... - + Password Bassword - + Please enter an initial password for the user: Bidde gib ma een Bassword für den Nudsor ein: - + Delete User? Nudsor löschen? - + Really delete user '%1'? Nudsor '%1' wirklich löschen? Bissde Dir da och gans sischor? - + Error setting password: %1 Gann Bassword ni sedsen: %1 - + The password must be non-empty and both lines must match Das Bassword darf nisch leer sein und beide Basswordzeilen müssen gleisch sein. - + Host Name Reschnorname - + Host Key Reschnorschlüssel - + Create New Host Neien Reschnor anlechen - + Please enter a host name: Gib ma nen Nam' für de Gisde ein: - + The key of this new host could only be generated with %1 bits entropy. Store anyway? Dor Schlüssel von der Gisde hat nur %1 zufällige Bids. Das is a bissl wenisch. Drodsdem schbeichorn? - + Delete this Host? De Gisdge löschen? - + Really delete host '%1'? De Gisde '%1' wirklisch löschen? Bissde da och sischor? - + Change Host Key? Den Schlüssel von dem Reschnor ändorn? - + Really change the key of host '%1'? Wirglich den Schlüssel von dem Reschnor '%1' ändorn? Gans sischor? - + The new key of this host could only be generated with %1 bits entropy. Store anyway? Dor Schlüssel von der Gisde hat nur %1 zufällige Bids. Das is a bissl wenisch. Drodsdem schbeichorn? - + Import Key from File Schlüssel aus nor Dadai holen - + Unable to open file %1 for reading: %2 Gann de Dadai %1 nisch lesen. Des iss jedsd geene Ordografieschwäche, sondern: %2 - + This is not a host key file. Das is abor doch gar ge Schlüssel! Willsde misch verarschen? - + This host key file does not contain a valid host name. De Schlüsseldadai had nen gans seldsamen Reschnornamen da drin. Desdorweschen gannsch die ni nehm. - + This host key file does not contain a valid key. De Dadai is a bissl gabudd. Die mussde nochmal holen, ich gann die so ned lesen. - + The key check sum did not match. Please get a clean copy of the host key file. Isch hab da ma nachgereschned. De Scheggsumme vom Schlüssel is falsch. Das gannsch Dir so ni abnehm. - + This host cannot be exported. Den Reschnor gannsch ni schbeichorn. - + Export Key to File Schlüssel als Dadei ablechen - + Unable to open file %1 for writing: %2 Gann de Dadai %1 nicht zum Schreiben offmachen weil: %2 - + Order Items Ne Beschdellung anlegn. - + Sell Items Vorkofen - + Order List Beschdelllisde - + -select mode- -wähl ma was aus- - + All Orders Alle Beschdellungen - + Open Orders Offene Beschdellungen - + Outstanding Payments Wo noch ni bezahld is - + Outstanding Refunds Wo was zurügerschdadded werden muss - + Payment Bezahln - + Refund Zurügerschdadden - + Print Tickets Eindriddsgarde druggn - + Print Bill Reschnung druggn - + Amount Anzahl - + Select Event to order Ticket Wähl ma ne Voranschdaldung aus um ne Garde zu beschdelln - + Select Auswähln - + Cancel Ni machen - + There is nothing in the order. Ignoring it. Da is doch gar nischd drin. Isch mach das jedsd ni! - + Please chose a customer first! Du mussd schon nen Gunden auswähln, sonsd wees isch doch ni wer's griechen soll! - + The request failed. De Anfrache is schiefgegangen. - + A problem occurred during the order: %1 Isch hadde nen Broblem mit dor Beschdellung: %1 - + Entrance Einlassgondrolle - + Ticket Ok Eindriddsgarde is in Ordnung - + Ticket Already Used Die habsch schonmal gesehn, da will eener bedrüchen. - + Ticket Not Paid Eindriddsgarde is nisch bedsahld. Schiggn ma' an de Gasse. + + + Ticket Summary... + + MPasswordChange - + Change my password Mei eechnes Bassword ändorn - + Reset password of user %1 Bassword vom Nudsor %1 zurügsedsen - + Old Password: Aldes Bassword: - + New Password: Neies Bassword: - + Repeat Password: Nochma neies Bassword: - + Set Password Bassword sedsen - + Cancel Vorgisses, ni sedsen -- 1.7.2.5