Thread: [Pykafe-commits] SF.net SVN: pykafe: [62] trunk/pykafe/server
Status: Pre-Alpha
Brought to you by:
jnmbk
From: <jn...@us...> - 2007-06-01 12:21:02
|
Revision: 62 http://pykafe.svn.sourceforge.net/pykafe/?rev=62&view=rev Author: jnmbk Date: 2007-06-01 05:21:04 -0700 (Fri, 01 Jun 2007) Log Message: ----------- changed N/A state name to not connected Modified Paths: -------------- trunk/pykafe/server/server.py trunk/pykafe/server/session.py This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-01 13:05:24
|
Revision: 63 http://pykafe.svn.sourceforge.net/pykafe/?rev=63&view=rev Author: jnmbk Date: 2007-06-01 06:05:26 -0700 (Fri, 01 Jun 2007) Log Message: ----------- better settings window Modified Paths: -------------- trunk/pykafe/server/settingswindow.py trunk/pykafe/server/settingswindow.ui This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-02 09:56:14
|
Revision: 66 http://pykafe.svn.sourceforge.net/pykafe/?rev=66&view=rev Author: jnmbk Date: 2007-06-02 02:56:16 -0700 (Sat, 02 Jun 2007) Log Message: ----------- logging works and a new state was added to session Modified Paths: -------------- trunk/pykafe/server/logger.py trunk/pykafe/server/server.py trunk/pykafe/server/session.py trunk/pykafe/server/settings.py Modified: trunk/pykafe/server/logger.py =================================================================== --- trunk/pykafe/server/logger.py 2007-06-02 09:55:38 UTC (rev 65) +++ trunk/pykafe/server/logger.py 2007-06-02 09:56:16 UTC (rev 66) @@ -9,9 +9,12 @@ # # Please read the COPYING file. # + from database import Database from PyQt4 import QtCore -def add(self, log_type, log_value, cashier, computer = "", member = "", income = ""): +def add(log_type, log_value, cashier, computer = "", member = "", income = ""): date = QtCore.QDateTime.currentDateTime().toTime_t() - Database().runOnce("insert into logs (date, log_type, log_value, cashier, computer, member, income) values (?,?,?,?,?,?,?)", date, log_type, log_value, cashier, computer, member, income) + Database().runOnce("insert into logs (date, log_type, log_value, cashier, computer, member, income) values (?,?,?,?,?,?,?)", (date, log_type, log_value, cashier, computer, member, income)) +class logTypes: + information, warning, error, emergency = range(4) Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-02 09:55:38 UTC (rev 65) +++ trunk/pykafe/server/server.py 2007-06-02 09:56:16 UTC (rev 66) @@ -41,10 +41,11 @@ tcpSocket.disconnectFromHost() class ListenerThread(QtCore.QThread): - def __init__(self, parent, socketDescriptor, clients): + def __init__(self, parent, socketDescriptor, clients, config): QtCore.QThread.__init__(self, parent) self.socketDescriptor = socketDescriptor self.clients = clients + self.config = config def run(self): self.tcpSocket = QtNetwork.QTcpSocket() @@ -64,12 +65,30 @@ client = self.clients[self.clientNumber] data = base64.decodestring(self.tcpSocket.readAll()) print "data:", data - if data[:3] == "004": - #Says I'm here + + if data[:3] == "011": if client.session.state == ClientSession.notConnected: + logger.add(logger.logTypes.information, "client connected", self.config.last_cashier, client.name) + if self.config.filter_enable: + message = "007" + filterFile = open(self.config.filter_file) + filters = filterFile.readlines() + filterFile.close() + for i in filters: + message += i + client.sendMessage(message) self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.working) + message = "016" + message += "%s|%s|%s|%s" % (self.config.price_fixedprice, + self.config.price_fixedpriceminutes, + self.config.price_onehourprice, + self.config.price_rounding) + client.sendMessage(message) else: - #TODO: illegal activity + #client is somehow rebooted + #TODO: send current session information after taking 004 + #message = "013" + #client.sendSession() pass elif data[:3] == "000": #User wants to open @@ -82,16 +101,18 @@ if client.session.state == ClientSession.working: username, password = data[3:].split("|") db = Database() - db.cur.execute("select count() from members where username = ? and password = ?", (username, sha.new(password).hexdigest())) + db.cur.execute("select count() from members where username = ? and password = ?", (username, password)) if db.cur.fetchall()[0][0]: client.sendMessage("0031") + logger.add(logger.logTypes.information, _("member login"), self.config.last_cashier, client.name, username) client.setState(ClientSession.loggedIn, user = username) else: - #TODO: log: wrong password or username entered + logger.add(logger.logTypes.warning, _("Someone entered wrong password or username"), self.config.last_cashier, client.name, username) client.sendMessage("0030") elif data[:3] == "008": client.setState(ClientSession.waitingMoney) self.tcpSocket.disconnectFromHost() + self.terminate() class ClientThread(QtCore.QThread): def __init__(self, parent, config): @@ -144,23 +165,6 @@ def setState(self, state, user = "guest", endTime = ""): if self.session.state == ClientSession.requestedOpening and state != ClientSession.requestedOpening: self.changeColor("white") - if state == ClientSession.working: - if self.session.state == ClientSession.loggedIn: - #TODO: calculate time and money - - #logger.add("logout", "", self.config.cashier, self.name, user, income) - #save detailed session information to logs - pass - if self.session.state == ClientSession.notConnected: - if self.config.filter_enable: - #send filter - message = "007" - filterFile = open(self.config.filter_file) - filters = filterFile.readlines() - filterFile.close() - for i in filters: - message += i - self.sendMessage(message) elif state == ClientSession.loggedIn: self.session.user = user self.setText(2, user) @@ -175,9 +179,13 @@ elif state == ClientSession.waitingMoney: self.changeColor("red") self.session.state = state - self.setText(1, self.session.getCurrentState()) - #print "state is now %s" % self.session.getCurrentState() + self.setText(1, self.session.toString()) + def sendSession(self): + #send latest session to the client + message = "012" + self.sendMessage(message) + class Product(QtGui.QTreeWidgetItem): def __init__(self, parent, productInformation): QtGui.QTreeWidgetItem.__init__(self, parent) @@ -210,11 +218,11 @@ self.config.set("last_cashier", cashier) else: self.cashier = self.config.last_cashier - print "Current cashier is:", self.config.last_cashier + logger.add(logger.logTypes.information, _("cashier login to server"), self.config.last_cashier) if not self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), int(self.config.network_port)): - #TODO: retry button + logger.add(logger.logTypes.error, _("Unable to start server: %s") % self.errorString(), self.config.last_cashier) QtGui.QMessageBox.critical(self.parent(), _("Connection Error"), _("Unable to start server: %s") % self.errorString()) - exit() + self.parent().close() self.clients = [] for clientInformation in self.config.clientList: self.clients.append(Client(ui.main_treeWidget, clientInformation, self.config)) @@ -244,8 +252,7 @@ self.products.append(Product(self.ui.orders_treeWidget_2, product)) def incomingConnection(self, socketDescriptor): - print "connection came" - thread = ListenerThread(self.parent(), socketDescriptor, self.clients) + thread = ListenerThread(self.parent(), socketDescriptor, self.clients, self.config) self.threads.append(thread) QtCore.QObject.connect(thread, QtCore.SIGNAL("stateChange"), self.setClientState) thread.start() Modified: trunk/pykafe/server/session.py =================================================================== --- trunk/pykafe/server/session.py 2007-06-02 09:55:38 UTC (rev 65) +++ trunk/pykafe/server/session.py 2007-06-02 09:56:16 UTC (rev 66) @@ -40,7 +40,7 @@ return True else: return False - def getCurrentState(self): + def toString(self): """returns current state as a string""" if self.state == self.notConnected: return _("Not Connected") Modified: trunk/pykafe/server/settings.py =================================================================== --- trunk/pykafe/server/settings.py 2007-06-02 09:55:38 UTC (rev 65) +++ trunk/pykafe/server/settings.py 2007-06-02 09:56:16 UTC (rev 66) @@ -13,12 +13,19 @@ from PyQt4 import QtGui, QtCore from pysqlite2 import dbapi2 as sqlite from database import Database -import sha +from client import getSiteIP +import sha, socket import locale, gettext locale.setlocale(locale.LC_ALL, "C") _ = gettext.translation("pyKafe_server", fallback=True).ugettext +def getSiteIP(site): + try: + return socket.gethostbyname(site) + except socket.gaierror: + return False + class Cashier(QtGui.QTreeWidgetItem): def __init__(self, parent, cashierInformation): QtGui.QTreeWidgetItem.__init__(self, parent) @@ -49,7 +56,7 @@ def filterAdd(self, text = None, errorDialog = True): if not text: text = self.ui.filter_address.text() - if not text: + if not getSiteIP(text): if errorDialog: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You didn't enter a valid address")) return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-03 10:02:26
|
Revision: 79 http://pykafe.svn.sourceforge.net/pykafe/?rev=79&view=rev Author: jnmbk Date: 2007-06-03 03:02:27 -0700 (Sun, 03 Jun 2007) Log Message: ----------- fixes in options window send options to all clients when accepted logger takes cashier from database Modified Paths: -------------- trunk/pykafe/server/logger.py trunk/pykafe/server/server.py trunk/pykafe/server/settings.py trunk/pykafe/server/settingswindow.py trunk/pykafe/server/settingswindow.ui Modified: trunk/pykafe/server/logger.py =================================================================== --- trunk/pykafe/server/logger.py 2007-06-03 09:58:49 UTC (rev 78) +++ trunk/pykafe/server/logger.py 2007-06-03 10:02:27 UTC (rev 79) @@ -13,7 +13,8 @@ from database import Database from PyQt4 import QtCore -def add(log_type, log_value, cashier, computer = "", member = "", income = ""): +def add(log_type, log_value, computer = "", member = "", income = ""): + cashier = Database().runOnce("select setting_value from general_settings where setting_id = 'last_cashier'")[0][0] date = QtCore.QDateTime.currentDateTime().toTime_t() Database().runOnce("insert into logs (date, log_type, log_value, cashier, computer, member, income) values (?,?,?,?,?,?,?)", (date, log_type, log_value, cashier, computer, member, income)) class logTypes: Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-03 09:58:49 UTC (rev 78) +++ trunk/pykafe/server/server.py 2007-06-03 10:02:27 UTC (rev 79) @@ -18,13 +18,13 @@ from session import ClientSession from database import Database from settingswindow import Ui_SettingsWindow +from currencyformat import currency import logger import base64, sha, time, os import locale, gettext locale.setlocale(locale.LC_MESSAGES, "C") -#maybe using LC_MONETARY would be better for printing money in listwidgets -locale.setlocale(locale.LC_NUMERIC, "") +locale.setlocale(locale.LC_MONETARY, "") _ = gettext.translation("pyKafe_server", fallback=True).ugettext class MessageSender(QtCore.QThread): @@ -65,10 +65,9 @@ client = self.clients[self.clientNumber] data = base64.decodestring(self.tcpSocket.readAll()) print "data:", data - if data[:3] == "011": + #TODO: Move these into setState if client.session.state in (ClientSession.notConnected, ClientSession.notReady): - logger.add(logger.logTypes.information, "client connected", self.config.last_cashier, client.name) if self.config.filter_enable: message = "007" filterFile = open(self.config.filter_file) @@ -76,9 +75,9 @@ filterFile.close() for i in filters: message += i - client.sendMessage(message) + client.sendMessage(message.strip()) message = "016" - message += "%s|%s|%s|%s".strip() % (self.config.price_fixedprice, + message += "%s|%s|%s|%s" % (self.config.price_fixedprice, self.config.price_fixedpriceminutes, self.config.price_onehourprice, self.config.price_rounding) @@ -92,7 +91,7 @@ #client.sendSession() elif data[:3] == "004": if client.session.state == ClientSession.notReady: - client.setState(ClientSession.ready) + self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.ready) elif data[:3] == "000": #User wants to open if client.session.state == ClientSession.ready: @@ -107,13 +106,13 @@ db.cur.execute("select count() from members where username = ? and password = ?", (username, password)) if db.cur.fetchall()[0][0]: client.sendMessage("0031") - logger.add(logger.logTypes.information, _("member login"), self.config.last_cashier, client.name, username) - client.setState(ClientSession.loggedIn, user = username) + logger.add(logger.logTypes.information, _("Member logged in"), computer = client.name, member = username) + self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.waitingMoney, user = username) else: - logger.add(logger.logTypes.warning, _("Someone entered wrong password or username"), self.config.last_cashier, client.name, username) + logger.add(logger.logTypes.warning, _("Someone entered wrong password or username"), computer = client.name, member = username) client.sendMessage("0030") elif data[:3] == "008": - client.setState(ClientSession.waitingMoney) + self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.waitingMoney) self.tcpSocket.disconnectFromHost() class ClientThread(QtCore.QThread): @@ -131,7 +130,7 @@ else: #TODO: round the price using price_rounding price = float(self.config.price_onehourprice)/3600 * utime - self.emit(QtCore.SIGNAL("changetext"),3,str(price)) + self.emit(QtCore.SIGNAL("changetext"),3,currency(price)) usedTime = QtCore.QDateTime() usedTime.setTime_t(utime) self.emit(QtCore.SIGNAL("changetext"),4,usedTime.toUTC().time().toString("hh.mm")) @@ -140,8 +139,8 @@ class Client(QtGui.QTreeWidgetItem): def __init__(self, parent, clientInformation, config): QtGui.QTreeWidgetItem.__init__(self, parent) + self.config = config self.fillList(clientInformation) - self.config = config watcherThread = ClientThread(self, config) QtCore.QObject.connect(watcherThread, QtCore.SIGNAL("changetext"), self.setText) watcherThread.start() @@ -170,7 +169,7 @@ elif state == ClientSession.loggedIn: self.session.user = user self.setText(2, user) - self.setText(3, self.config.currency_prefix + "0" + self.config.currency_suffix) + self.setText(3, currency(0.0)) self.session.startTime = QtCore.QDateTime.currentDateTime() self.setText(4, self.session.startTime.time().toString("00.00")) if endTime: @@ -182,20 +181,26 @@ self.changeColor("red") self.session.state = state self.setText(1, self.session.toString()) + logger.add(logger.logTypes.information, _("State changed to %s") % self.session.toString(), member = self.name) def sendSession(self): - #send latest session to the client - message = "012" + "sends latest session to the client, this is for eliminating client side problems like rebooting" + message = "012"+\ + str(self.session.state)+'|'+\ + self.session.user+'|'+\ + str(self.session.startTime.toTime_t())+'|'+\ + str(self.session.endTime.toTime_t()) self.sendMessage(message) class Product(QtGui.QTreeWidgetItem): def __init__(self, parent, productInformation): QtGui.QTreeWidgetItem.__init__(self, parent) self.updateValues(productInformation) + def updateValues(self, productInformation): self.name, self.price, self.quantity = productInformation self.setText(0,self.name) - self.setText(1,locale.format("%.2f", self.price, grouping=True)) + self.setText(1,currency(float(self.price))) self.setText(2,str(self.quantity)) class Member(QtGui.QTreeWidgetItem): @@ -218,25 +223,27 @@ self.ui = ui if self.config.startup_askpassword: self.config.set("last_cashier", cashier) - logger.add(logger.logTypes.information, _("cashier login to server"), self.config.last_cashier) + logger.add(logger.logTypes.information, _("cashier login to server")) if not self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), int(self.config.network_port)): - logger.add(logger.logTypes.error, _("Unable to start server: %s") % self.errorString(), self.config.last_cashier) + logger.add(logger.logTypes.error, _("Unable to start server: %s") % self.errorString()) QtGui.QMessageBox.critical(self.parent(), _("Connection Error"), _("Unable to start server: %s") % self.errorString()) self.parent().close() self.clients = [] for clientInformation in self.config.clientList: self.clients.append(Client(ui.main_treeWidget, clientInformation, self.config)) ui.main_treeWidget.sortItems(0, QtCore.Qt.AscendingOrder) - self.initMembers() + self.initMembers(first = True) self.initProducts() self.localize() self.threads = [] - def initMembers(self): - self.members = [] - memberList = Database().run("select * from members where is_cashier='0'") - for memberInformation in memberList: - self.members.append(Member(self.ui.members_treeWidget, memberInformation[:7])) + def initMembers(self, first = False): + #TODO: Call this function after adding and deleting + if first: + self.members = [] + memberList = Database().run("select * from members where is_cashier='0'") + for memberInformation in memberList: + self.members.append(Member(self.ui.members_treeWidget, memberInformation[:7])) self.ui.members_dateEdit.setDate(QtCore.QDate.currentDate()) self.ui.members_dateEdit_2.setDate(QtCore.QDate.currentDate().addMonths(1)) self.ui.members_username.clear() @@ -372,6 +379,7 @@ self.members.append(Member(self.ui.members_treeWidget, memberInformation[:7])) self.filterMembers(self.ui.members_filter.text()) self.ui.statusbar.showMessage(_("Added member")) + logger.add(logger.logTypes.information, _("Added member"), member = memberInformation[0]) except sqlite.IntegrityError: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("Username must be unique")) @@ -458,10 +466,16 @@ member.setHidden(True) def localize(self): - self.ui.members_debt.setPrefix(self.config.currency_prefix) - self.ui.members_debt.setSuffix(self.config.currency_suffix) - self.ui.orders_spinBox_2.setPrefix(self.config.currency_prefix) - self.ui.orders_spinBox_2.setSuffix(self.config.currency_suffix) + conv = locale.localeconv() + symbol = conv['currency_symbol'] + if conv['p_cs_precedes']: + symbol += ' ' + self.ui.members_debt.setPrefix(symbol) + self.ui.orders_spinBox_2.setPrefix(symbol) + else: + symbol = ' ' + symbol + self.ui.members_debt.setSuffix(symbol) + self.ui.orders_spinBox_2.setSuffix(symbol) def addProduct(self): productName = unicode(self.ui.orders_itemLineEdit.text()) @@ -519,7 +533,29 @@ QtGui.QMessageBox.aboutQt(self.parent()) def settings(self): - settingsDialog = QtGui.QDialog(self.parent()) + self.settingsDialog = QtGui.QDialog(self.parent()) + QtCore.QObject.connect(self.settingsDialog, QtCore.SIGNAL("accepted()"), self.sendOptions) settingsUi = Ui_SettingsWindow() - settingsUi.setupUi(settingsDialog, self.config) - settingsDialog.show() + settingsUi.setupUi(self.settingsDialog, self.config) + self.settingsDialog.show() + + def sendOptions(self): + "Sends internet filtering and pricing settings to all clients" + if self.config.filter_enable: + filterMessage = "007" + filterFile = open(self.config.filter_file) + filters = filterFile.readlines() + filterFile.close() + for i in filters: + filterMessage += i + filterMessage = filterMessage.strip() + priceMessage = "016" + priceMessage += "%s|%s|%s|%s" % (self.config.price_fixedprice, + self.config.price_fixedpriceminutes, + self.config.price_onehourprice, + self.config.price_rounding) + for client in self.clients: + if client.session.state != ClientSession.notConnected: + client.sendMessage(priceMessage) + if self.config.filter_enable: + client.sendMessage(filterMessage) Modified: trunk/pykafe/server/settings.py =================================================================== --- trunk/pykafe/server/settings.py 2007-06-03 09:58:49 UTC (rev 78) +++ trunk/pykafe/server/settings.py 2007-06-03 10:02:27 UTC (rev 79) @@ -17,6 +17,7 @@ import locale, gettext locale.setlocale(locale.LC_ALL, "C") +locale.setlocale(locale.LC_MONETARY, "") _ = gettext.translation("pyKafe_server", fallback=True).ugettext def getSiteIP(site): @@ -46,6 +47,7 @@ self.filterRead() self.cashiers = [] self.fillCashiers() + self.localize() def fillCashiers(self): cashierList = Database().run("select username,password,name from members where is_cashier='1'") @@ -56,17 +58,17 @@ if not text: text = self.ui.filter_address.text() #TODO: a QtGui.QProgressDialog() is needed here because getSiteIP takes some time to complete its job - if not getSiteIP(text): - if errorDialog: - QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You didn't enter a valid address")) - return + if errorDialog: + if not getSiteIP(text): + QtGui.QMessageBox.critical(self.parent, _("Error"), _("You didn't enter a valid address")) + return self.filterItems.append(QtGui.QTreeWidgetItem(self.ui.filter_treeWidget)) self.filterItems[-1].setText(0, text) def filterDelete(self): currentFilter = self.ui.filter_treeWidget.currentItem() if not currentFilter: - QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You must select a filter first")) + QtGui.QMessageBox.critical(self.parent, _("Error"), _("You must select a filter first")) return self.ui.filter_treeWidget.takeTopLevelItem(self.ui.filter_treeWidget.indexOfTopLevelItem(currentFilter)) del(self.filterItems[self.filterItems.index(currentFilter)]) @@ -74,7 +76,7 @@ def filterUpdate(self): currentFilter = self.ui.filter_treeWidget.currentItem() if not currentFilter: - QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You must select a filter first")) + QtGui.QMessageBox.critical(self.parent, _("Error"), _("You must select a filter first")) return currentFilter.setText(0, self.ui.filter_address.text()) @@ -83,6 +85,7 @@ if not currentFilter: currentFilter = previous self.ui.filter_address.setText(currentFilter.text(0)) + def filterEnable(self): if self.ui.filter_enable.checkState() == QtCore.Qt.Checked: self.ui.filter_address.setEnabled(True) @@ -102,7 +105,7 @@ self.ui.filter_browse.setEnabled(False) def filterBrowse(self): - fileName = QtGui.QFileDialog.getOpenFileName(self.parent(), _("Select Filter File"), self.config.filter_file[:self.config.filter_file.rfind('/')], "Text files (*.txt)") + fileName = QtGui.QFileDialog.getOpenFileName(self.parent, _("Select Filter File"), self.config.filter_file[:self.config.filter_file.rfind('/')], "Text files (*.txt)") if not fileName: return self.ui.filter_file.setText(fileName) @@ -120,8 +123,12 @@ filter_file.writelines(filters) filter_file.close() self.config.set("filter_file", unicode(self.ui.filter_file.text())) + self.config.set("price_fixedpriceminutes", str(self.ui.pricing_minutes.value())) + self.config.set("price_fixedprice", str(self.ui.pricing_fixed.value())) + self.config.set("price_onehourprice", str(self.ui.pricing_onehour.value())) + self.config.set("price_rounding", str(self.ui.pricing_rounding.value())) #TODO: cashier changes should be applied here, not directly to db! - self.parent.close() + self.parent.accept() def readFromConfig(self): if self.config.filter_enable: @@ -129,7 +136,25 @@ self.ui.filter_file.setText(self.config.filter_file) if self.config.startup_askpassword: self.ui.checkBox_2.setCheckState(QtCore.Qt.Checked) + self.ui.pricing_minutes.setValue(int(self.config.price_fixedpriceminutes)) + self.ui.pricing_fixed.setValue(float(self.config.price_fixedprice)) + self.ui.pricing_onehour.setValue(float(self.config.price_onehourprice)) + self.ui.pricing_rounding.setValue(float(self.config.price_rounding)) + def localize(self): + conv = locale.localeconv() + symbol = conv['currency_symbol'] + if conv['p_cs_precedes']: + symbol += ' ' + self.ui.pricing_fixed.setPrefix(symbol) + self.ui.pricing_onehour.setPrefix(symbol) + self.ui.pricing_rounding.setPrefix(symbol) + else: + symbol = ' ' + symbol + self.ui.pricing_fixed.setSuffix(symbol) + self.ui.pricing_onehour.setSuffix(symbol) + self.ui.pricing_rounding.setSuffix(symbol) + def filterRead(self): file = open(unicode(self.ui.filter_file.text())) filters = file.readlines() Modified: trunk/pykafe/server/settingswindow.py =================================================================== --- trunk/pykafe/server/settingswindow.py 2007-06-03 09:58:49 UTC (rev 78) +++ trunk/pykafe/server/settingswindow.py 2007-06-03 10:02:27 UTC (rev 79) @@ -67,10 +67,10 @@ self.label_2.setObjectName("label_2") self.hboxlayout.addWidget(self.label_2) - self.doubleSpinBox = QtGui.QDoubleSpinBox(self.tab_3) - self.doubleSpinBox.setMaximum(1000000000.0) - self.doubleSpinBox.setObjectName("doubleSpinBox") - self.hboxlayout.addWidget(self.doubleSpinBox) + self.pricing_rounding = QtGui.QDoubleSpinBox(self.tab_3) + self.pricing_rounding.setMaximum(1000000000.0) + self.pricing_rounding.setObjectName("pricing_rounding") + self.hboxlayout.addWidget(self.pricing_rounding) self.gridlayout2.addLayout(self.hboxlayout,2,0,1,1) spacerItem2 = QtGui.QSpacerItem(20,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) @@ -85,20 +85,20 @@ self.label_5.setObjectName("label_5") self.hboxlayout1.addWidget(self.label_5) - self.spinBox = QtGui.QSpinBox(self.tab_3) - self.spinBox.setMaximum(3600) - self.spinBox.setSingleStep(15) - self.spinBox.setObjectName("spinBox") - self.hboxlayout1.addWidget(self.spinBox) + self.pricing_minutes = QtGui.QSpinBox(self.tab_3) + self.pricing_minutes.setMaximum(3600) + self.pricing_minutes.setSingleStep(15) + self.pricing_minutes.setObjectName("pricing_minutes") + self.hboxlayout1.addWidget(self.pricing_minutes) self.label = QtGui.QLabel(self.tab_3) self.label.setObjectName("label") self.hboxlayout1.addWidget(self.label) - self.pricing_30minutes = QtGui.QDoubleSpinBox(self.tab_3) - self.pricing_30minutes.setMaximum(1000000000.0) - self.pricing_30minutes.setObjectName("pricing_30minutes") - self.hboxlayout1.addWidget(self.pricing_30minutes) + self.pricing_fixed = QtGui.QDoubleSpinBox(self.tab_3) + self.pricing_fixed.setMaximum(1000000000.0) + self.pricing_fixed.setObjectName("pricing_fixed") + self.hboxlayout1.addWidget(self.pricing_fixed) self.gridlayout2.addLayout(self.hboxlayout1,0,0,1,1) self.hboxlayout2 = QtGui.QHBoxLayout() @@ -323,7 +323,7 @@ self.tabWidget.setCurrentIndex(0) self.manager = SettingsManager(self, SettingsWindow, config) QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),self.manager.accept) - QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),SettingsWindow.close) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),SettingsWindow.reject) QtCore.QObject.connect(self.filter_add,QtCore.SIGNAL("clicked()"),self.manager.filterAdd) QtCore.QObject.connect(self.filter_delete,QtCore.SIGNAL("clicked()"),self.manager.filterDelete) QtCore.QObject.connect(self.filter_update,QtCore.SIGNAL("clicked()"),self.manager.filterUpdate) @@ -337,11 +337,11 @@ QtCore.QObject.connect(self.cashiers_reportsButton,QtCore.SIGNAL("clicked()"),self.manager.cashierReports) QtCore.QMetaObject.connectSlotsByName(SettingsWindow) SettingsWindow.setTabOrder(self.tabWidget,self.checkBox_2) - SettingsWindow.setTabOrder(self.checkBox_2,self.spinBox) - SettingsWindow.setTabOrder(self.spinBox,self.pricing_30minutes) - SettingsWindow.setTabOrder(self.pricing_30minutes,self.pricing_onehour) - SettingsWindow.setTabOrder(self.pricing_onehour,self.doubleSpinBox) - SettingsWindow.setTabOrder(self.doubleSpinBox,self.filter_enable) + SettingsWindow.setTabOrder(self.checkBox_2,self.pricing_minutes) + SettingsWindow.setTabOrder(self.pricing_minutes,self.pricing_fixed) + SettingsWindow.setTabOrder(self.pricing_fixed,self.pricing_onehour) + SettingsWindow.setTabOrder(self.pricing_onehour,self.pricing_rounding) + SettingsWindow.setTabOrder(self.pricing_rounding,self.filter_enable) SettingsWindow.setTabOrder(self.filter_enable,self.filter_file) SettingsWindow.setTabOrder(self.filter_file,self.filter_browse) SettingsWindow.setTabOrder(self.filter_browse,self.filter_address) Modified: trunk/pykafe/server/settingswindow.ui =================================================================== --- trunk/pykafe/server/settingswindow.ui 2007-06-03 09:58:49 UTC (rev 78) +++ trunk/pykafe/server/settingswindow.ui 2007-06-03 10:02:27 UTC (rev 79) @@ -103,7 +103,7 @@ </widget> </item> <item> - <widget class="QDoubleSpinBox" name="doubleSpinBox" > + <widget class="QDoubleSpinBox" name="pricing_rounding" > <property name="maximum" > <double>1000000000.000000000000000</double> </property> @@ -140,7 +140,7 @@ </widget> </item> <item> - <widget class="QSpinBox" name="spinBox" > + <widget class="QSpinBox" name="pricing_minutes" > <property name="maximum" > <number>3600</number> </property> @@ -157,7 +157,7 @@ </widget> </item> <item> - <widget class="QDoubleSpinBox" name="pricing_30minutes" > + <widget class="QDoubleSpinBox" name="pricing_fixed" > <property name="maximum" > <double>1000000000.000000000000000</double> </property> @@ -568,10 +568,10 @@ <tabstops> <tabstop>tabWidget</tabstop> <tabstop>checkBox_2</tabstop> - <tabstop>spinBox</tabstop> - <tabstop>pricing_30minutes</tabstop> + <tabstop>pricing_minutes</tabstop> + <tabstop>pricing_fixed</tabstop> <tabstop>pricing_onehour</tabstop> - <tabstop>doubleSpinBox</tabstop> + <tabstop>pricing_rounding</tabstop> <tabstop>filter_enable</tabstop> <tabstop>filter_file</tabstop> <tabstop>filter_browse</tabstop> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-03 10:06:31
|
Revision: 80 http://pykafe.svn.sourceforge.net/pykafe/?rev=80&view=rev Author: jnmbk Date: 2007-06-03 03:06:30 -0700 (Sun, 03 Jun 2007) Log Message: ----------- very small fixes in main window Modified Paths: -------------- trunk/pykafe/server/mainwindow.py trunk/pykafe/server/mainwindow.ui Modified: trunk/pykafe/server/mainwindow.py =================================================================== --- trunk/pykafe/server/mainwindow.py 2007-06-03 10:02:27 UTC (rev 79) +++ trunk/pykafe/server/mainwindow.py 2007-06-03 10:06:30 UTC (rev 80) @@ -159,11 +159,13 @@ self.gridlayout4.addWidget(self.orders_itemComboBox,1,1,1,1) self.orders_spinBox_1 = QtGui.QSpinBox(self.groupBox_2) + self.orders_spinBox_1.setMinimum(1) self.orders_spinBox_1.setObjectName("orders_spinBox_1") self.gridlayout4.addWidget(self.orders_spinBox_1,1,2,1,1) self.gridlayout3.addLayout(self.gridlayout4,1,0,1,5) self.orders_treeWidget_1 = QtGui.QTreeWidget(self.groupBox_2) + self.orders_treeWidget_1.setRootIsDecorated(False) self.orders_treeWidget_1.setSortingEnabled(True) self.orders_treeWidget_1.setObjectName("orders_treeWidget_1") self.gridlayout3.addWidget(self.orders_treeWidget_1,0,0,1,5) @@ -200,6 +202,7 @@ self.gridlayout5.setObjectName("gridlayout5") self.orders_treeWidget_2 = QtGui.QTreeWidget(self.groupBox_3) + self.orders_treeWidget_2.setRootIsDecorated(False) self.orders_treeWidget_2.setSortingEnabled(True) self.orders_treeWidget_2.setObjectName("orders_treeWidget_2") self.gridlayout5.addWidget(self.orders_treeWidget_2,0,0,1,4) @@ -479,14 +482,14 @@ self.menuHelp = QtGui.QMenu(self.menubar) self.menuHelp.setObjectName("menuHelp") - self.menuTools = QtGui.QMenu(self.menubar) - self.menuTools.setObjectName("menuTools") - self.menuFile = QtGui.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuNew = QtGui.QMenu(self.menuFile) self.menuNew.setObjectName("menuNew") + + self.menuTools = QtGui.QMenu(self.menubar) + self.menuTools.setObjectName("menuTools") MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) @@ -517,12 +520,12 @@ self.menuHelp.addSeparator() self.menuHelp.addAction(self.actionAbout_pyKafe) self.menuHelp.addAction(self.actionAbout_Qt) - self.menuTools.addAction(self.actionSettings) self.menuNew.addAction(self.actionComputer) self.menuNew.addAction(self.actionEntertainment) self.menuFile.addAction(self.menuNew.menuAction()) self.menuFile.addSeparator() self.menuFile.addAction(self.actionExit) + self.menuTools.addAction(self.actionSettings) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuTools.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) @@ -599,7 +602,7 @@ MainWindow.setTabOrder(self.logs_dateTimeEdit_2,self.logs_treeWidget) def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(_("PyKafe")) + MainWindow.setWindowTitle("PyKafe") self.main_startTimeButton.setStatusTip(_("Starts selected computer for usage (timed)")) self.main_startTimeButton.setText(_("Timed")) self.main_stopButton.setStatusTip(_("Switches to login state")) @@ -674,9 +677,9 @@ self.logs_treeWidget.headerItem().setText(6,_("Income")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _("Logs")) self.menuHelp.setTitle(_("Help")) - self.menuTools.setTitle(_("Tools")) self.menuFile.setTitle(_("File")) self.menuNew.setTitle(_("New")) + self.menuTools.setTitle(_("Tools")) self.actionContents.setText(_("Contents")) self.actionAbout_pyKafe.setText(_("About pyKafe")) self.actionAbout_Qt.setText(_("About Qt")) Modified: trunk/pykafe/server/mainwindow.ui =================================================================== --- trunk/pykafe/server/mainwindow.ui 2007-06-03 10:02:27 UTC (rev 79) +++ trunk/pykafe/server/mainwindow.ui 2007-06-03 10:06:30 UTC (rev 80) @@ -351,12 +351,19 @@ <widget class="QComboBox" name="orders_itemComboBox" /> </item> <item row="1" column="2" > - <widget class="QSpinBox" name="orders_spinBox_1" /> + <widget class="QSpinBox" name="orders_spinBox_1" > + <property name="minimum" > + <number>1</number> + </property> + </widget> </item> </layout> </item> <item row="0" column="0" colspan="5" > <widget class="QTreeWidget" name="orders_treeWidget_1" > + <property name="rootIsDecorated" > + <bool>false</bool> + </property> <property name="sortingEnabled" > <bool>true</bool> </property> @@ -450,6 +457,9 @@ </property> <item row="0" column="0" colspan="4" > <widget class="QTreeWidget" name="orders_treeWidget_2" > + <property name="rootIsDecorated" > + <bool>false</bool> + </property> <property name="sortingEnabled" > <bool>true</bool> </property> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-10 18:54:43
|
Revision: 110 http://pykafe.svn.sourceforge.net/pykafe/?rev=110&view=rev Author: jnmbk Date: 2007-06-10 11:54:45 -0700 (Sun, 10 Jun 2007) Log Message: ----------- new uis Added Paths: ----------- trunk/pykafe/server/memberreports.ui trunk/pykafe/server/payment.ui Added: trunk/pykafe/server/memberreports.ui =================================================================== --- trunk/pykafe/server/memberreports.ui (rev 0) +++ trunk/pykafe/server/memberreports.ui 2007-06-10 18:54:45 UTC (rev 110) @@ -0,0 +1,172 @@ +<ui version="4.0" > + <class>MemberReports</class> + <widget class="QDialog" name="MemberReports" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>453</width> + <height>408</height> + </rect> + </property> + <property name="windowTitle" > + <string>Member Reports</string> + </property> + <property name="windowIcon" > + <iconset>../../data/icons/pyKafe.png</iconset> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="2" column="1" > + <widget class="QLabel" name="timeLabel" /> + </item> + <item row="3" column="1" > + <widget class="QLabel" name="totalLabel" /> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Total:</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="label_1" > + <property name="text" > + <string>Used Time:</string> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2" > + <widget class="QTreeWidget" name="ordersTreeWidget" > + <column> + <property name="text" > + <string>Date</string> + </property> + </column> + <column> + <property name="text" > + <string>Payment</string> + </property> + </column> + <column> + <property name="text" > + <string>Cost</string> + </property> + </column> + </widget> + </item> + <item row="4" column="1" > + <widget class="QLabel" name="bytesLabel" /> + </item> + <item row="4" column="0" > + <widget class="QLabel" name="label_3" > + <property name="text" > + <string>Received/Sent data in KB:</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2" > + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="0" > + <widget class="QDateTimeEdit" name="dateTimeEdit_2" /> + </item> + <item rowspan="2" row="0" column="1" > + <widget class="QToolButton" name="toolButton" > + <property name="text" > + <string>Find</string> + </property> + <property name="icon" > + <iconset>../../data/icons/find.png</iconset> + </property> + <property name="iconSize" > + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="toolButtonStyle" > + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QDateTimeEdit" name="dateTimeEdit" /> + </item> + </layout> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>MemberReports</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MemberReports</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>toolButton</sender> + <signal>clicked()</signal> + <receiver>MemberReports</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>218</x> + <y>56</y> + </hint> + <hint type="destinationlabel" > + <x>132</x> + <y>119</y> + </hint> + </hints> + </connection> + </connections> +</ui> Added: trunk/pykafe/server/payment.ui =================================================================== --- trunk/pykafe/server/payment.ui (rev 0) +++ trunk/pykafe/server/payment.ui 2007-06-10 18:54:45 UTC (rev 110) @@ -0,0 +1,160 @@ +<ui version="4.0" > + <class>PaymentDialog</class> + <widget class="QDialog" name="PaymentDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle" > + <string>Payment</string> + </property> + <property name="windowIcon" > + <iconset>../../data/icons/pyKafe.png</iconset> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="0" > + <widget class="QGroupBox" name="groupBox" > + <property name="title" > + <string>Cafeteria Costs</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QTreeWidget" name="cafeteriaWidget" > + <property name="rootIsDecorated" > + <bool>false</bool> + </property> + <property name="allColumnsShowFocus" > + <bool>true</bool> + </property> + <column> + <property name="text" > + <string>Date</string> + </property> + </column> + <column> + <property name="text" > + <string>Product</string> + </property> + </column> + <column> + <property name="text" > + <string>Price</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="0" > + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label" > + <property name="text" > + <string>Used Time:</string> + </property> + </widget> + </item> + <item> + <widget class="QTimeEdit" name="usedTime" > + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item row="2" column="0" > + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Total Cost:</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="totalCost" > + <property name="readOnly" > + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item row="4" column="0" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>PaymentDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>PaymentDialog</receiver> + <slot></slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-11 01:19:31
|
Revision: 125 http://pykafe.svn.sourceforge.net/pykafe/?rev=125&view=rev Author: jnmbk Date: 2007-06-10 18:19:29 -0700 (Sun, 10 Jun 2007) Log Message: ----------- cafeteria seems OK Modified Paths: -------------- trunk/pykafe/server/payment.py trunk/pykafe/server/server.py Modified: trunk/pykafe/server/payment.py =================================================================== --- trunk/pykafe/server/payment.py 2007-06-11 00:38:03 UTC (rev 124) +++ trunk/pykafe/server/payment.py 2007-06-11 01:19:29 UTC (rev 125) @@ -87,9 +87,8 @@ def retranslateUi(self, PaymentDialog): PaymentDialog.setWindowTitle(QtGui.QApplication.translate("PaymentDialog", "Payment", None, QtGui.QApplication.UnicodeUTF8)) self.groupBox.setTitle(QtGui.QApplication.translate("PaymentDialog", "Cafeteria Costs", None, QtGui.QApplication.UnicodeUTF8)) - self.cafeteriaWidget.headerItem().setText(0,QtGui.QApplication.translate("PaymentDialog", "Date", None, QtGui.QApplication.UnicodeUTF8)) - self.cafeteriaWidget.headerItem().setText(1,QtGui.QApplication.translate("PaymentDialog", "Product", None, QtGui.QApplication.UnicodeUTF8)) - self.cafeteriaWidget.headerItem().setText(2,QtGui.QApplication.translate("PaymentDialog", "Price", None, QtGui.QApplication.UnicodeUTF8)) + self.cafeteriaWidget.headerItem().setText(0,QtGui.QApplication.translate("PaymentDialog", "Product", None, QtGui.QApplication.UnicodeUTF8)) + self.cafeteriaWidget.headerItem().setText(1,QtGui.QApplication.translate("PaymentDialog", "Price", None, QtGui.QApplication.UnicodeUTF8)) self.label_2.setText(QtGui.QApplication.translate("PaymentDialog", "Total Cost:", None, QtGui.QApplication.UnicodeUTF8)) self.label.setText(QtGui.QApplication.translate("PaymentDialog", "Used Time:", None, QtGui.QApplication.UnicodeUTF8)) self.label_3.setText(QtGui.QApplication.translate("PaymentDialog", "guest", None, QtGui.QApplication.UnicodeUTF8)) Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-11 00:38:03 UTC (rev 124) +++ trunk/pykafe/server/server.py 2007-06-11 01:19:29 UTC (rev 125) @@ -395,6 +395,7 @@ #TODO: Call this function after adding and deleting if first: self.members = [] + self.ui.members_treeWidget.clear() memberList = Database().run("select * from members where is_cashier='0'") for memberInformation in memberList: self.members.append(Member(self.ui.members_treeWidget, memberInformation[:7])) @@ -869,10 +870,27 @@ paymentDialog = QtGui.QDialog(self.parent()) paymentUi = Ui_PaymentDialog() paymentUi.setupUi(paymentDialog) - paymentUi.totalCost.setValue(client.session.calculateTotal(self.config)) + totalCost = client.session.calculateTotal(self.config) + cost = client.session.calculatePrice(self.config) + paymentUi.totalCost.setValue(totalCost) paymentUi.label_3.setText("%s: %s" % (client.name, client.session.user)) time = client.session.startTime.secsTo(QtCore.QDateTime.currentDateTime()) paymentUi.usedTime.setTime(QtCore.QTime().addSecs(time)) for order in client.session.orders: - QtGui.QTreeWidgetItem(paymentUi.cafeteriaWidget, order) + print order + QtGui.QTreeWidgetItem(paymentUi.cafeteriaWidget, [order[0], currency(order[1])]) paymentDialog.show() + payingType, credit = Database().runOnce("select paying_type, debt from members where username=?",(client.session.user,))[0] + if payingType == _("Pre Paid"): + credit = Database().runOnce("select debt from members where username = ?", (client.session.user,))[0][0] + if totalCost > credit: + QtGui.QMessageBox.warning(self.parent(), _("Low credit"), _("%s's credit has finished! Has %s debt.") % (client.session.user, currency(totalCost - credit))) + logger.add(logger.logTypes.warning, _("Member has low credit"), client.name, client.session.user, totalCost - credit) + else: + logger.add(logger.logTypes.information, _("Money paid"), client.name, client.session.user, totalCost) + Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, cost)) + self.initMembers() + Database().runOnce("update members set debt=? where username=?", (totalCost - credit, client.session.user)) + else: + Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, cost)) + logger.add(logger.logTypes.information, _("Money paid"), client.name, client.session.user, totalCost) \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-04 15:39:40
|
Revision: 93 http://pykafe.svn.sourceforge.net/pykafe/?rev=93&view=rev Author: jnmbk Date: 2007-06-04 08:39:40 -0700 (Mon, 04 Jun 2007) Log Message: ----------- orders thing and initial file for memberstats Modified Paths: -------------- trunk/pykafe/server/mainwindow.py trunk/pykafe/server/server.py Added Paths: ----------- trunk/pykafe/server/memberstats.ui Modified: trunk/pykafe/server/mainwindow.py =================================================================== --- trunk/pykafe/server/mainwindow.py 2007-06-04 15:38:47 UTC (rev 92) +++ trunk/pykafe/server/mainwindow.py 2007-06-04 15:39:40 UTC (rev 93) @@ -396,7 +396,7 @@ self.members_debt = QtGui.QDoubleSpinBox(self.groupBox) self.members_debt.setAlignment(QtCore.Qt.AlignRight) self.members_debt.setMaximum(1000000000.0) - self.members_debt.setMinimum(-1000000000.0) + self.members_debt.setMinimum(0) self.members_debt.setObjectName("members_debt") self.gridlayout9.addWidget(self.members_debt,3,1,1,1) self.gridlayout8.addLayout(self.gridlayout9,0,0,1,1) @@ -662,7 +662,7 @@ self.members_payingType.addItem(_("Pre Paid")) self.members_payingType.addItem(_("Normal")) self.textLabel1_3.setText(_("Username:")) - self.textLabel4_2.setText(_("Debt:")) + self.textLabel4_2.setText(_("Credit:")) self.textLabel3_2.setText(_("Real Name:")) self.textLabel7.setText(_("Subscribing period:")) self.label_2.setText(_("Starts")) Added: trunk/pykafe/server/memberstats.ui =================================================================== --- trunk/pykafe/server/memberstats.ui (rev 0) +++ trunk/pykafe/server/memberstats.ui 2007-06-04 15:39:40 UTC (rev 93) @@ -0,0 +1,189 @@ +<ui version="4.0" > + <class>MemberStatsDialog</class> + <widget class="QDialog" name="MemberStatsDialog" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>507</width> + <height>302</height> + </rect> + </property> + <property name="windowTitle" > + <string>Member statistics</string> + </property> + <property name="windowIcon" > + <iconset>../../data/icons/pyKafe.png</iconset> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QSplitter" name="splitter_2" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <widget class="QSplitter" name="splitter" > + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <widget class="QWidget" name="layoutWidget" > + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label" > + <property name="text" > + <string>Daily usage graph</string> + </property> + </widget> + </item> + <item> + <widget class="QGraphicsView" name="dailyUsage" /> + </item> + </layout> + </widget> + <widget class="QWidget" name="layoutWidget" > + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Hourly usage graph</string> + </property> + </widget> + </item> + <item> + <widget class="QGraphicsView" name="hourlyUsage" /> + </item> + </layout> + </widget> + </widget> + <widget class="QWidget" name="" > + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="profit" > + <property name="text" > + <string>Profit from this member +until now:</string> + </property> + </widget> + </item> + <item> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QLabel" name="label_4" > + <property name="text" > + <string>Average bandwith usage per hour</string> + </property> + </widget> + </item> + <item> + <widget class="QGraphicsView" name="bandwidthUsage" /> + </item> + <item> + <widget class="QLabel" name="received" > + <property name="text" > + <string>Received:</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="sent" > + <property name="text" > + <string>Sent:</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + <item row="1" column="0" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>MemberStatsDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MemberStatsDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-04 15:38:47 UTC (rev 92) +++ trunk/pykafe/server/server.py 2007-06-04 15:39:40 UTC (rev 93) @@ -43,11 +43,13 @@ class ListenerThread(QtCore.QThread): - def __init__(self, parent, socketDescriptor, clients, config): + def __init__(self, parent, socketDescriptor, clients, config, server): + #TODO: We should use server only, clients and config aren't necessary QtCore.QThread.__init__(self, parent) self.socketDescriptor = socketDescriptor self.clients = clients self.config = config + self.server = server def run(self): self.tcpSocket = QtNetwork.QTcpSocket() @@ -83,10 +85,17 @@ if db.cur.fetchall()[0][0]: client.sendMessage("0031") logger.add(logger.logTypes.information, _("Member logged in"), computer = client.name, member = username) - self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.loggedIn, user = username) + self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.loggedIn, username) else: logger.add(logger.logTypes.warning, _("Someone entered wrong password or username"), computer = client.name, member = username) client.sendMessage("0030") + elif data[:3] == "018": + message = "" + for product in self.server.products: + message += product.name +'|'+ str(product.price) +'|'+ str(product.quantity) +'||' + print "sending:", message[:-2] + self.tcpSocket.write(base64.encodestring(message[:-2])) + self.tcpSocket.waitForBytesWritten() self.tcpSocket.disconnectFromHost() @@ -135,13 +144,16 @@ if state == ClientSession.loggedIn: self.session.user = user self.session.startTime = QtCore.QDateTime.currentDateTime() - self.setTexts((2,3,4), (user,currency(0.0), self.session.startTime.time().toString("00.00"))) + self.setTexts((2,3,4), (user,currency(float(self.config.price_fixedprice)), self.session.startTime.time().toString("00.00"))) if endTime: self.session.endTime = endTime self.setText(5, self.session.endTime.time().toString("hh.mm")) self.changeColor("green") elif state == ClientSession.notReady: - #if self.session.state in (ClientSession.notConnected, ClientSession.notReady): + if self.session.state == ClientSession.loggedIn: + """if self.parent().payingType == _("Pre Paid"): + print "user is pre_paid and has %s credit" % currency(self.parent().debt) + self.parent().reduceCredit(self.session.calculatePrice())""" if self.config.filter_enable: message = "007" filterFile = open(self.config.filter_file) @@ -214,6 +226,8 @@ def updateValuesWithoutPassword(self, memberInformation): self.userName, self.realName, self.startDate, self.endDate, self.debt, self.payingType = memberInformation self.setText(0, self.userName) + def reduceCredit(self, value): + self.debt -= value class PykafeServer(QtNetwork.QTcpServer): def __init__(self, parent, ui, cashier = None): @@ -258,14 +272,14 @@ self.products.append(Product(self.ui.orders_treeWidget_2, product)) def incomingConnection(self, socketDescriptor): - thread = ListenerThread(self.parent(), socketDescriptor, self.clients, self.config) + thread = ListenerThread(self.parent(), socketDescriptor, self.clients, self.config, self) self.threads.append(thread) QtCore.QObject.connect(thread, QtCore.SIGNAL("stateChange"), self.setClientState) thread.start() print "We have %d thread(s)" % len(self.threads) - def setClientState(self, client, state): - self.clients[client].setState(state) + def setClientState(self, client, state, user = "guest"): + self.clients[client].setState(state, user) def startClient(self): client = self.ui.main_treeWidget.currentItem() @@ -284,7 +298,7 @@ client.sendMessage("0011") client.setState(ClientSession.loggedIn) elif state == ClientSession.waitingMoney: - client.setState(ClientSession.ready) + client.setState(ClientSession.notReady) client.sendMessage("015") elif state == ClientSession.notReady: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("Client isn't ready")) @@ -303,7 +317,7 @@ client.sendMessage("0011") client.setState(ClientSession.loggedIn) elif state == ClientSession.waitingMoney: - client.setState(ClientSession.ready) + client.setState(ClientSession.notReady) client.sendMessage("015") elif state == ClientSession.notReady: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("Client isn't ready")) @@ -336,7 +350,7 @@ client.sendMessage("0010") client.setState(ClientSession.ready) elif state == ClientSession.waitingMoney: - client.setState(ClientSession.ready) + client.setState(ClientSession.notReady) client.sendMessage("015") def changeButton(self): @@ -405,6 +419,9 @@ if not member: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You must select a member first")) return + if member.userName == "guest": + QtGui.QMessageBox.information(self.parent(), _("Error"), _("You can't change guest")) + return memberInformation = [unicode(self.ui.members_username.text()), " ", unicode(self.ui.members_realName.text()), @@ -440,6 +457,9 @@ if not member: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You must select a member first")) return + if member.userName == "guest": + QtGui.QMessageBox.information(self.parent(), _("Error"), _("You can't delete guest")) + return answer = QtGui.QMessageBox.question(self.parent(), _("Are you sure?"), _("Do you really want to delete this member?"), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes).__or__(QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.Yes: Database().runOnce("delete from members where username = ?", (member.userName,)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-06 10:17:39
|
Revision: 99 http://pykafe.svn.sourceforge.net/pykafe/?rev=99&view=rev Author: jnmbk Date: 2007-06-06 03:17:41 -0700 (Wed, 06 Jun 2007) Log Message: ----------- lots of more codes Modified Paths: -------------- trunk/pykafe/server/config.py trunk/pykafe/server/mainwindow.py trunk/pykafe/server/mainwindow.ui trunk/pykafe/server/server.py trunk/pykafe/server/session.py trunk/pykafe/server/settings.py trunk/pykafe/server/settingswindow.py trunk/pykafe/server/settingswindow.ui Added Paths: ----------- trunk/pykafe/server/cashierreports.py trunk/pykafe/server/cashierreports.ui trunk/pykafe/server/clientsettingswindow.py trunk/pykafe/server/clientsettingswindow.ui Added: trunk/pykafe/server/cashierreports.py =================================================================== --- trunk/pykafe/server/cashierreports.py (rev 0) +++ trunk/pykafe/server/cashierreports.py 2007-06-06 10:17:41 UTC (rev 99) @@ -0,0 +1,112 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007, pyKafe Development Team +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# + +from PyQt4 import QtCore, QtGui +from database import Database + +import locale, gettext +locale.setlocale(locale.LC_ALL, "C") +_ = gettext.translation("pyKafe_server", fallback=True).ugettext + +class Handler: + def __init__(self, ui, cashier): + self.ui = ui + self.cashierName = cashier + def search(self): + startDate = self.ui.dateTimeEdit.dateTime().toTime_t() + endDate = self.ui.dateTimeEdit_2.dateTime().toTime_t() + income = Database().runOnce("select sum(income) from safe where cashier=? and date between ? and ?", (self.cashierName, startDate, endDate))[0][0] + self.ui.doubleSpinBox.setValue(income) + added = Database().runOnce("select count() from logs where log_value=? and cashier=? and date between ? and ?", (_("Added member"), self.cashierName, startDate, endDate))[0][0] + deleted = Database().runOnce("select count() from logs where log_value=? and cashier=? and date between ? and ?", (_("Deleted member"), self.cashierName, startDate, endDate))[0][0] + self.ui.spinBox.setValue(added) + self.ui.spinBox_2.setValue(deleted) + +class Ui_CashierReports(object): + def setupUi(self, CashierReports, cashier): + CashierReports.setObjectName("CashierReports") + CashierReports.resize(QtCore.QSize(QtCore.QRect(0,0,266,239).size()).expandedTo(CashierReports.minimumSizeHint())) + CashierReports.setWindowIcon(QtGui.QIcon("../../data/icons/pyKafe.png")) + + self.gridlayout = QtGui.QGridLayout(CashierReports) + self.gridlayout.setMargin(9) + self.gridlayout.setSpacing(6) + self.gridlayout.setObjectName("gridlayout") + + self.doubleSpinBox = QtGui.QDoubleSpinBox(CashierReports) + self.doubleSpinBox.setEnabled(False) + self.doubleSpinBox.setObjectName("doubleSpinBox") + self.gridlayout.addWidget(self.doubleSpinBox,1,1,1,2) + + self.label = QtGui.QLabel(CashierReports) + self.label.setObjectName("label") + self.gridlayout.addWidget(self.label,1,0,1,1) + + self.gridlayout1 = QtGui.QGridLayout() + self.gridlayout1.setMargin(0) + self.gridlayout1.setSpacing(6) + self.gridlayout1.setObjectName("gridlayout1") + + self.dateTimeEdit_2 = QtGui.QDateTimeEdit(CashierReports) + self.dateTimeEdit_2.setObjectName("dateTimeEdit_2") + self.gridlayout1.addWidget(self.dateTimeEdit_2,1,0,1,1) + + self.toolButton = QtGui.QToolButton(CashierReports) + self.toolButton.setIcon(QtGui.QIcon("../../data/icons/find.png")) + self.toolButton.setIconSize(QtCore.QSize(64,64)) + self.toolButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon) + self.toolButton.setObjectName("toolButton") + self.gridlayout1.addWidget(self.toolButton,0,1,2,1) + + self.dateTimeEdit = QtGui.QDateTimeEdit(CashierReports) + self.dateTimeEdit.setObjectName("dateTimeEdit") + self.gridlayout1.addWidget(self.dateTimeEdit,0,0,1,1) + self.gridlayout.addLayout(self.gridlayout1,0,0,1,3) + + self.spinBox = QtGui.QSpinBox(CashierReports) + self.spinBox.setEnabled(False) + self.spinBox.setObjectName("spinBox") + self.gridlayout.addWidget(self.spinBox,2,2,1,1) + + self.spinBox_2 = QtGui.QSpinBox(CashierReports) + self.spinBox_2.setEnabled(False) + self.spinBox_2.setObjectName("spinBox_2") + self.gridlayout.addWidget(self.spinBox_2,3,2,1,1) + + self.label_3 = QtGui.QLabel(CashierReports) + self.label_3.setObjectName("label_3") + self.gridlayout.addWidget(self.label_3,3,0,1,2) + + self.label_2 = QtGui.QLabel(CashierReports) + self.label_2.setObjectName("label_2") + self.gridlayout.addWidget(self.label_2,2,0,1,1) + + self.buttonBox = QtGui.QDialogButtonBox(CashierReports) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.NoButton|QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.gridlayout.addWidget(self.buttonBox,4,0,1,3) + + self.retranslateUi(CashierReports) + self.handler = Handler(self, cashier) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),CashierReports.accept) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),CashierReports.reject) + QtCore.QObject.connect(self.toolButton,QtCore.SIGNAL("clicked()"),self.handler.search) + QtCore.QMetaObject.connectSlotsByName(CashierReports) + + def retranslateUi(self, CashierReports): + CashierReports.setWindowTitle(QtGui.QApplication.translate("CashierReports", "Cashier Reports", None, QtGui.QApplication.UnicodeUTF8)) + self.label.setText(QtGui.QApplication.translate("CashierReports", "Income:", None, QtGui.QApplication.UnicodeUTF8)) + self.toolButton.setText(QtGui.QApplication.translate("CashierReports", "Find", None, QtGui.QApplication.UnicodeUTF8)) + self.label_3.setText(QtGui.QApplication.translate("CashierReports", "Members deleted:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_2.setText(QtGui.QApplication.translate("CashierReports", "Members added:", None, QtGui.QApplication.UnicodeUTF8)) + Added: trunk/pykafe/server/cashierreports.ui =================================================================== --- trunk/pykafe/server/cashierreports.ui (rev 0) +++ trunk/pykafe/server/cashierreports.ui 2007-06-06 10:17:41 UTC (rev 99) @@ -0,0 +1,165 @@ +<ui version="4.0" > + <class>CashierReports</class> + <widget class="QDialog" name="CashierReports" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>266</width> + <height>239</height> + </rect> + </property> + <property name="windowTitle" > + <string>Cashier Reports</string> + </property> + <property name="windowIcon" > + <iconset>../../data/icons/pyKafe.png</iconset> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="1" colspan="2" > + <widget class="QDoubleSpinBox" name="doubleSpinBox" > + <property name="enabled" > + <bool>false</bool> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Income:</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="3" > + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="1" column="0" > + <widget class="QDateTimeEdit" name="dateTimeEdit_2" /> + </item> + <item rowspan="2" row="0" column="1" > + <widget class="QToolButton" name="toolButton" > + <property name="text" > + <string>Find</string> + </property> + <property name="icon" > + <iconset>../../data/icons/find.png</iconset> + </property> + <property name="iconSize" > + <size> + <width>64</width> + <height>64</height> + </size> + </property> + <property name="toolButtonStyle" > + <enum>Qt::ToolButtonTextUnderIcon</enum> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QDateTimeEdit" name="dateTimeEdit" /> + </item> + </layout> + </item> + <item row="2" column="2" > + <widget class="QSpinBox" name="spinBox" > + <property name="enabled" > + <bool>false</bool> + </property> + </widget> + </item> + <item row="3" column="2" > + <widget class="QSpinBox" name="spinBox_2" > + <property name="enabled" > + <bool>false</bool> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2" > + <widget class="QLabel" name="label_3" > + <property name="text" > + <string>Members deleted:</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Members added:</string> + </property> + </widget> + </item> + <item row="4" column="0" colspan="3" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>CashierReports</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>CashierReports</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>toolButton</sender> + <signal>clicked()</signal> + <receiver>CashierReports</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>218</x> + <y>56</y> + </hint> + <hint type="destinationlabel" > + <x>132</x> + <y>119</y> + </hint> + </hints> + </connection> + </connections> +</ui> Added: trunk/pykafe/server/clientsettingswindow.py =================================================================== --- trunk/pykafe/server/clientsettingswindow.py (rev 0) +++ trunk/pykafe/server/clientsettingswindow.py 2007-06-06 10:17:41 UTC (rev 99) @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007, pyKafe Development Team +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# + +from PyQt4 import QtCore, QtGui + +import locale, gettext +locale.setlocale(locale.LC_ALL, "C") +_ = gettext.translation("pyKafe_server", fallback=True).ugettext + +class Ui_ClientSettingsWindow(object): + def setupUi(self, ClientSettingsWindow, client): + ClientSettingsWindow.setObjectName("ClientSettingsWindow") + ClientSettingsWindow.setWindowModality(QtCore.Qt.WindowModal) + ClientSettingsWindow.resize(QtCore.QSize(QtCore.QRect(0,0,334,107).size()).expandedTo(ClientSettingsWindow.minimumSizeHint())) + ClientSettingsWindow.setWindowIcon(QtGui.QIcon("../../data/icons/kcontrol.png")) + + self.gridlayout = QtGui.QGridLayout(ClientSettingsWindow) + self.gridlayout.setMargin(9) + self.gridlayout.setSpacing(6) + self.gridlayout.setObjectName("gridlayout") + + self.label = QtGui.QLabel(ClientSettingsWindow) + self.label.setObjectName("label") + self.gridlayout.addWidget(self.label,0,0,1,1) + + self.label_2 = QtGui.QLabel(ClientSettingsWindow) + self.label_2.setObjectName("label_2") + self.gridlayout.addWidget(self.label_2,1,0,1,1) + + self.clientIP = QtGui.QLineEdit(ClientSettingsWindow) + self.clientIP.setObjectName("clientIP") + self.clientIP.setInputMask("000.000.000.000;_") + self.gridlayout.addWidget(self.clientIP,1,1,1,1) + + self.clientID = QtGui.QLineEdit(ClientSettingsWindow) + self.clientID.setObjectName("clientID") + self.gridlayout.addWidget(self.clientID,0,1,1,1) + + self.buttonBox = QtGui.QDialogButtonBox(ClientSettingsWindow) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.NoButton|QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.gridlayout.addWidget(self.buttonBox,2,0,1,2) + + self.retranslateUi(ClientSettingsWindow) + if client: + self.clientID.setText(client.name) + self.clientIP.setText(client.ip) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),ClientSettingsWindow.accept) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),ClientSettingsWindow.reject) + QtCore.QMetaObject.connectSlotsByName(ClientSettingsWindow) + ClientSettingsWindow.setTabOrder(self.clientID,self.clientIP) + ClientSettingsWindow.setTabOrder(self.clientIP,self.buttonBox) + + def retranslateUi(self, ClientSettingsWindow): + ClientSettingsWindow.setWindowTitle(_("Client Settings")) + self.label.setText(_("Client ID:")) + self.label_2.setText(_("Client IP:")) Added: trunk/pykafe/server/clientsettingswindow.ui =================================================================== --- trunk/pykafe/server/clientsettingswindow.ui (rev 0) +++ trunk/pykafe/server/clientsettingswindow.ui 2007-06-06 10:17:41 UTC (rev 99) @@ -0,0 +1,100 @@ +<ui version="4.0" > + <class>ClientSettingsWindow</class> + <widget class="QDialog" name="ClientSettingsWindow" > + <property name="windowModality" > + <enum>Qt::WindowModal</enum> + </property> + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>334</width> + <height>107</height> + </rect> + </property> + <property name="windowTitle" > + <string>Client Settings</string> + </property> + <property name="windowIcon" > + <iconset>../../data/icons/kcontrol.png</iconset> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QLabel" name="label" > + <property name="text" > + <string>Client ID:</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="label_2" > + <property name="text" > + <string>Client IP:</string> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QLineEdit" name="clientIP" /> + </item> + <item row="0" column="1" > + <widget class="QLineEdit" name="clientID" /> + </item> + <item row="2" column="0" colspan="2" > + <widget class="QDialogButtonBox" name="buttonBox" > + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons" > + <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>clientID</tabstop> + <tabstop>clientIP</tabstop> + <tabstop>buttonBox</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>ClientSettingsWindow</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel" > + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel" > + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>ClientSettingsWindow</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel" > + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel" > + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> Modified: trunk/pykafe/server/config.py =================================================================== --- trunk/pykafe/server/config.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/config.py 2007-06-06 10:17:41 UTC (rev 99) @@ -26,9 +26,11 @@ settings = Database().runOnce("select * from general_settings") for config, value in settings: setattr(self, config, value) - clientList = [ClientInformation("192.168.2.3", "computer1"), - ClientInformation("192.168.2.4", "computer2"), - ClientInformation("192.168.2.5", "computer3")] + self.clientList=[] + clients = Database().runOnce("select ip, name from computers") + for client in clients: + self.clientList.append(ClientInformation(client[0], client[1])) + def set(self, config, value): "sets given configuration as given value writes to database, this doesn't do anything if there's not a real change" if getattr(self, config) == value: Modified: trunk/pykafe/server/mainwindow.py =================================================================== --- trunk/pykafe/server/mainwindow.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/mainwindow.py 2007-06-06 10:17:41 UTC (rev 99) @@ -20,8 +20,8 @@ def setupUi(self, MainWindow, cashier = None): MainWindow.setObjectName("MainWindow") MainWindow.resize(QtCore.QSize(QtCore.QRect(0,0,650,500).size()).expandedTo(MainWindow.minimumSizeHint())) - icon = QtGui.QIcon("../../data/icons/pyKafe.png") - MainWindow.setWindowIcon(icon) + self.pyKafeIcon = QtGui.QIcon("../../data/icons/pyKafe.png") + MainWindow.setWindowIcon(self.pyKafeIcon) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") @@ -280,7 +280,6 @@ self.vboxlayout.setObjectName("vboxlayout") self.members_treeWidget = QtGui.QTreeWidget(self.layoutWidget) - self.members_treeWidget.setAlternatingRowColors(True) self.members_treeWidget.setRootIsDecorated(False) self.members_treeWidget.setSortingEnabled(True) self.members_treeWidget.setObjectName("members_treeWidget") @@ -470,6 +469,7 @@ self.logs_treeWidget = QtGui.QTreeWidget(self.tab_3) self.logs_treeWidget.setObjectName("logs_treeWidget") + self.logs_treeWidget.setRootIsDecorated(False) self.gridlayout11.addWidget(self.logs_treeWidget,1,0,1,3) self.tabWidget.addTab(self.tab_3,"") self.gridlayout.addWidget(self.tabWidget,0,0,1,1) @@ -537,10 +537,10 @@ QtCore.QObject.connect(self.main_stopButton,QtCore.SIGNAL("clicked()"),self.server.stopClient) QtCore.QObject.connect(self.actionExit,QtCore.SIGNAL("activated()"),MainWindow.close) QtCore.QObject.connect(self.main_startTimeButton,QtCore.SIGNAL("clicked()"),self.server.startTimed) - QtCore.QObject.connect(self.orders_addButton_1,QtCore.SIGNAL("clicked()"),MainWindow.close) - QtCore.QObject.connect(self.orders_updateButton_1,QtCore.SIGNAL("clicked()"),MainWindow.close) - QtCore.QObject.connect(self.orders_deleteButton_1,QtCore.SIGNAL("clicked()"),MainWindow.close) - QtCore.QObject.connect(self.orders_cancelButton_1,QtCore.SIGNAL("clicked()"),MainWindow.close) + QtCore.QObject.connect(self.orders_addButton_1,QtCore.SIGNAL("clicked()"),self.server.orderAdd) + QtCore.QObject.connect(self.orders_updateButton_1,QtCore.SIGNAL("clicked()"),self.server.orderUpdate) + QtCore.QObject.connect(self.orders_deleteButton_1,QtCore.SIGNAL("clicked()"),self.server.orderDelete) + QtCore.QObject.connect(self.orders_cancelButton_1,QtCore.SIGNAL("clicked()"),self.server.orderCancel) QtCore.QObject.connect(self.orders_addButton_2,QtCore.SIGNAL("clicked()"),self.server.addProduct) QtCore.QObject.connect(self.orders_updateButton_2,QtCore.SIGNAL("clicked()"),self.server.updateProduct) QtCore.QObject.connect(self.orders_deleteButton_2,QtCore.SIGNAL("clicked()"),self.server.deleteProduct) @@ -557,9 +557,11 @@ QtCore.QObject.connect(self.members_filter,QtCore.SIGNAL("textChanged(QString)"),self.server.filterMembers) QtCore.QObject.connect(self.actionAbout_pyKafe,QtCore.SIGNAL("activated()"),self.server.about) QtCore.QObject.connect(self.actionAbout_Qt,QtCore.SIGNAL("activated()"),self.server.aboutQt) - QtCore.QObject.connect(self.orders_treeWidget_1,QtCore.SIGNAL("currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)"),MainWindow.close) + QtCore.QObject.connect(self.orders_treeWidget_1,QtCore.SIGNAL("currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)"),self.server.orderChanged) QtCore.QObject.connect(self.orders_treeWidget_2,QtCore.SIGNAL("currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)"),self.server.productChanged) QtCore.QObject.connect(self.actionSettings,QtCore.SIGNAL("activated()"),self.server.settings) + QtCore.QObject.connect(self.actionComputer,QtCore.SIGNAL("activated()"),self.server.addClient) + QtCore.QObject.connect(self.logs_searchButton,QtCore.SIGNAL("clicked()"),self.server.refreshLogs) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.tabWidget,self.main_startButton) MainWindow.setTabOrder(self.main_startButton,self.main_startTimeButton) @@ -628,7 +630,7 @@ self.label_8.setText(_("Item")) self.label_7.setText(_("Computer ID")) self.label_9.setText(_("Quantity")) - self.orders_treeWidget_1.headerItem().setText(0,_("ID")) + self.orders_treeWidget_1.headerItem().setText(0,_("Computer Name")) self.orders_treeWidget_1.headerItem().setText(1,_("Item")) self.orders_treeWidget_1.headerItem().setText(2,_("Cost")) self.orders_treeWidget_1.headerItem().setText(3,_("Quantity")) @@ -638,7 +640,7 @@ self.orders_addButton_1.setText(_("Add")) self.groupBox_3.setTitle(_("Cafeteria Stocks")) self.orders_treeWidget_2.headerItem().setText(0,_("Item")) - self.orders_treeWidget_2.headerItem().setText(1,_("Cost")) + self.orders_treeWidget_2.headerItem().setText(1,_("Price")) self.orders_treeWidget_2.headerItem().setText(2,_("Quantity")) self.label_6.setText(_("Quantity")) self.label_5.setText(_("Price")) Modified: trunk/pykafe/server/mainwindow.ui =================================================================== --- trunk/pykafe/server/mainwindow.ui 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/mainwindow.ui 2007-06-06 10:17:41 UTC (rev 99) @@ -603,9 +603,6 @@ </property> <item> <widget class="QTreeWidget" name="members_treeWidget" > - <property name="alternatingRowColors" > - <bool>true</bool> - </property> <property name="rootIsDecorated" > <bool>false</bool> </property> @@ -1578,5 +1575,21 @@ </hint> </hints> </connection> + <connection> + <sender>actionComputer</sender> + <signal>activated()</signal> + <receiver>MainWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel" > + <x>324</x> + <y>249</y> + </hint> + </hints> + </connection> </connections> </ui> Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/server.py 2007-06-06 10:17:41 UTC (rev 99) @@ -14,10 +14,11 @@ from PyQt4 import QtNetwork, QtCore, QtGui from pysqlite2 import dbapi2 as sqlite -from config import PykafeConfiguration +from config import PykafeConfiguration, ClientInformation from session import ClientSession from database import Database from settingswindow import Ui_SettingsWindow +from clientsettingswindow import Ui_ClientSettingsWindow from currencyformat import currency import logger import base64, sha, os @@ -80,10 +81,14 @@ elif data[:3] == "002": if client.session.state == ClientSession.ready: username, password = data[3:].split("|") - db = Database() - db.cur.execute("select count() from members where username = ? and password = ?", (username, password)) - if db.cur.fetchall()[0][0]: - client.sendMessage("0031") + if Database().runOnce("select count() from members where username = ? and password = ?", (username, password))[0][0]: + wallpaper = "" + try: + wallpaper = Database().runOnce("select setting_value from member_settings where username=? and setting_name=?", (username,"wallpaper"))[0][0] + print wallpaper + except IndexError: + pass + client.sendMessage("0031%s|%s" % (username, wallpaper)) logger.add(logger.logTypes.information, _("Member logged in"), computer = client.name, member = username) self.emit(QtCore.SIGNAL("stateChange"), self.clientNumber, ClientSession.loggedIn, username) else: @@ -92,10 +97,20 @@ elif data[:3] == "018": message = "" for product in self.server.products: - message += product.name +'|'+ str(product.price) +'|'+ str(product.quantity) +'||' + message += product.name +'|'+ str(product.quantity) +'|'+ str(product.price) +'||' print "sending:", message[:-2] self.tcpSocket.write(base64.encodestring(message[:-2])) self.tcpSocket.waitForBytesWritten() + elif data[:3] == "019": + for order in data[3:].split('||'): + self.emit(QtCore.SIGNAL("orderCame"), order.split('|'), client.name) + elif data[:3] == "022": + self.sleep(2) + Database().runOnce("update member_settings set setting_value=? where username=? and setting_name=?", (data[3:], client.session.user, "wallpaper")) + elif data[:3] == "023": + self.sleep(5) + member, recv, trans = data[3:].split('|') + logger.add(logger.logTypes.information, _("received, sent:") + recv + '|' + trans, client.name, member) self.tcpSocket.disconnectFromHost() @@ -107,16 +122,64 @@ def run(self): while(True): if self.client.session.state == ClientSession.loggedIn: - self.emit(QtCore.SIGNAL("changetext"),3,currency(self.client.session.calculatePrice(self.config))) + self.emit(QtCore.SIGNAL("changetext"),3,currency(self.client.session.calculateTotal(self.config))) usedTime = QtCore.QDateTime() usedTime.setTime_t(self.client.session.startTime.secsTo(QtCore.QDateTime.currentDateTime())) self.emit(QtCore.SIGNAL("changetext"),4,usedTime.toUTC().time().toString("hh.mm")) self.sleep(int(self.config.ui_refreshdelay)) +class Log(QtGui.QTreeWidgetItem): + def __init__(self, parent, textTuple): + QtGui.QTreeWidgetItem.__init__(self, parent) + self.updateTexts(textTuple) + def updateTexts(self, textTuple): + for column, text in map(lambda x,y:(x,y), xrange(7), textTuple): + self.setText(column, unicode(str(text))) + if column == 1: + if text == _("emergency"): color = "purple" + elif text == _("warning"): color = "orange" + elif text == _("error"): color = "red" + elif text == _("information"): color = "lightblue" + self.changeColor(color) + def changeColor(self, colorName): + for i in range(self.columnCount()): + self.setBackground(i, QtGui.QBrush(QtGui.QColor(colorName))) + +class Order(QtGui.QTreeWidgetItem): + def __init__(self, parent, order, clientName, toDatabase = True): + QtGui.QTreeWidgetItem.__init__(self, parent) + self.productName = str(order[0]) + self.quantity = int(order[1]) + self.clientName = str(clientName) + self.updateTexts() + if toDatabase: + Database().run("insert into orders values(?,?,?)", (self.productName, self.quantity, self.clientName)) + + def updateTexts(self): + for column, text in map(lambda x,y:(x,y), xrange(4), (self.clientName, self.productName, currency(self.price()), str(self.quantity))): + self.setText(column, text) + + def price(self): + "Calculates and returns price of order" + products = Database().runOnce("select product_name, unit_price from products") + for product in products: + if self.productName == product[0]: + return float(product[1]) * self.quantity + return 0.0 + + def update(self, clientName, productName, quantity): + Database().run("update orders set product_name=?,quantity=?,computer_name=? where product_name=? and quantity=? and computer_name=?", (str(productName), int(quantity), str(clientName), self.productName, self.quantity, self.clientName)) + self.clientName = str(clientName) + self.productName = str(productName) + self.quantity = int(quantity) + self.updateTexts() + + class Client(QtGui.QTreeWidgetItem): - def __init__(self, parent, clientInformation, config): + def __init__(self, parent, clientInformation, config, server): QtGui.QTreeWidgetItem.__init__(self, parent) self.config = config + self.server = server self.fillList(clientInformation) watcherThread = ClientThread(self, config) QtCore.QObject.connect(watcherThread, QtCore.SIGNAL("changetext"), self.setText) @@ -124,12 +187,22 @@ self.threads = [watcherThread] def fillList(self, clientInformation): + self.id = id self.session = clientInformation.session self.ip = clientInformation.ip self.name = clientInformation.name self.setText(0, self.name) self.setState(ClientSession.notConnected) + def updateInformation(self, parent, name, ip): + try: + Database().runOnce("update computers set name=?,ip=? where name=?", (str(name), str(ip), self.name)) + self.name = name + self.ip = ip + self.setText(0, self.name) + except sqlite.IntegrityError: + QtGui.QMessageBox.critical(parent, _("Error"), _("Client ip and name must be unique.") + " " + _("Client information won't be changed")) + def changeColor(self, colorName): for i in range(self.columnCount()): self.setBackground(i, QtGui.QBrush(QtGui.QColor(colorName))) @@ -150,10 +223,40 @@ self.setText(5, self.session.endTime.time().toString("hh.mm")) self.changeColor("green") elif state == ClientSession.notReady: + if self.session.state == ClientSession.waitingMoney: + total = self.session.calculateTotal(self.config) + print "will pay", total + payingType, credit = Database().runOnce("select paying_type, debt from members where username=?",(self.session.user,))[0] + print payingType, credit + if payingType == _("Pre Paid"): + print "user is pre_paid and has %s credit" % currency(credit) + for member in self.server.members: + print member.userName, self.session.user + if member.userName == self.session.user: + if member.debt < total: + QtGui.QMessageBox.warning(self.server.parent(), _("Low credit"), _("%s's credit has finished! Has %s debt.") % (member.userName, currency(total - member.debt))) + logger.add(logger.logTypes.warning, _("Member has low credit"), self.name, member.userName, member.debt - total) + member.debt -= total + Database().runOnce("update members set debt=? where username=?", (member.debt, member.userName)) + else: + logger.add(logger.logTypes.information, _("Money paid"), self.name, member.userName, total) + Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, total)) + #logger.add(logger.logTypes.information, _("money paid"), self.name, self.session.user, self.session.calculateTotal() if self.session.state == ClientSession.loggedIn: - """if self.parent().payingType == _("Pre Paid"): - print "user is pre_paid and has %s credit" % currency(self.parent().debt) - self.parent().reduceCredit(self.session.calculatePrice())""" + total = self.session.calculateTotal(self.config) + payingType, credit = Database().runOnce("select paying_type, debt from members where username=?",(self.session.user,))[0] + if payingType == _("Pre Paid"): + print "user is pre_paid and has %s credit" % currency(credit) + for member in self.server.members: + if member.userName == self.session.user: + if member.debt < total: + QtGui.QMessageBox.warning(self.server.parent(), _("Low credit"), _("%s's credit has finished! Has %s debt.") % (member.userName, currency(total - member.debt))) + logger.add(logger.logTypes.warning, _("Member has low credit"), self.name, member.userName, member.debt - total) + member.debt -= total + Database().runOnce("update members set debt=? where username=?", (member.debt, member.userName)) + else: + logger.add(logger.logTypes.information, _("Money paid"), self.name, member.userName, total) + Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, total)) if self.config.filter_enable: message = "007" filterFile = open(self.config.filter_file) @@ -184,7 +287,7 @@ self.changeColor("lightblue") self.session.state = state self.setText(1, self.session.toString()) - logger.add(logger.logTypes.information, _("State changed to %s") % self.session.toString(), member = self.name) + logger.add(logger.logTypes.information, _("State changed to %s") % self.session.toString(), computer = self.name, member = self.session.user) self.setSelected(False) def sendSession(self): @@ -211,7 +314,7 @@ def updateValues(self, productInformation): self.name, self.price, self.quantity = productInformation self.setText(0,self.name) - self.setText(1,currency(float(self.price))) + self.setText(1,str(self.price)) self.setText(2,str(self.quantity)) class Member(QtGui.QTreeWidgetItem): @@ -226,8 +329,6 @@ def updateValuesWithoutPassword(self, memberInformation): self.userName, self.realName, self.startDate, self.endDate, self.debt, self.payingType = memberInformation self.setText(0, self.userName) - def reduceCredit(self, value): - self.debt -= value class PykafeServer(QtNetwork.QTcpServer): def __init__(self, parent, ui, cashier = None): @@ -243,10 +344,15 @@ self.parent().close() self.clients = [] for clientInformation in self.config.clientList: - self.clients.append(Client(ui.main_treeWidget, clientInformation, self.config)) + self.clients.append(Client(ui.main_treeWidget, clientInformation, self.config, self)) + self.ui.orders_idComboBox.addItem(clientInformation.name, QtCore.QVariant(clientInformation.ip)) ui.main_treeWidget.sortItems(0, QtCore.Qt.AscendingOrder) self.initMembers(first = True) self.initProducts() + self.initOrders() + self.ui.logs_dateTimeEdit_1.setDateTime(QtCore.QDateTime.currentDateTime().addDays(-1)) + self.ui.logs_dateTimeEdit_2.setDateTime(QtCore.QDateTime.currentDateTime().addDays(1)) + self.refreshLogs() self.localize() self.threads = [] @@ -270,11 +376,19 @@ productList = Database().run("select * from products") for product in productList: self.products.append(Product(self.ui.orders_treeWidget_2, product)) + self.ui.orders_itemComboBox.addItem(product[0]) + def initOrders(self): + self.orders = [] + orderList = Database().run("select * from orders") + for order in orderList: + self.orderAdd(order[:2], order[2], toDatabase = False) + def incomingConnection(self, socketDescriptor): thread = ListenerThread(self.parent(), socketDescriptor, self.clients, self.config, self) self.threads.append(thread) QtCore.QObject.connect(thread, QtCore.SIGNAL("stateChange"), self.setClientState) + QtCore.QObject.connect(thread, QtCore.SIGNAL("orderCame"), self.orderAdd) thread.start() print "We have %d thread(s)" % len(self.threads) @@ -366,9 +480,6 @@ return os.system("krdc -s -f -l -c %s&" % client.ip) - def settingsButton(self): - pass - def shutdownButton(self): client = self.ui.main_treeWidget.currentItem() if not client: @@ -403,6 +514,7 @@ if toDatabase: try: Database().runOnce("insert into members values (?,?,?,?,?,?,?,?)", memberInformation) + Database().runOnce("insert into member_settings values (?,?,?)", (memberInformation[0], "wallpaper", "")) self.members.append(Member(self.ui.members_treeWidget, memberInformation[:7])) self.filterMembers(self.ui.members_filter.text()) self.ui.statusbar.showMessage(_("Added member")) @@ -436,8 +548,10 @@ if self.ui.members_password.text(): try: Database().runOnce("update members set username=?,password=?,name=?,starting_date=?,finish_date=?,debt=?,paying_type=? where username = ?", memberInformation) + Database().runOnce("update member_settings set username=? where username = ?", (memberInformation[0], member.userName)) member.updateValues(memberInformation[:7]) self.filterMembers(self.ui.members_filter.text()) + logger.add(logger.logTypes.warning, _("Updated member"), member = member.userName) self.ui.statusbar.showMessage(_("Updated member information")) except sqlite.IntegrityError: QtGui.QMessageBox.critical(self.parent(), _("Error"), _("Username must be unique")) @@ -445,6 +559,7 @@ del(memberInformation[1]) try: Database().runOnce("update members set username=?,name=?,starting_date=?,finish_date=?,debt=?,paying_type=? where username=?", memberInformation) + Database().runOnce("update member_settings set username=? where username = ?", (memberInformation[0], member.userName)) member.updateValuesWithoutPassword(memberInformation[:6]) self.filterMembers(self.ui.members_filter.text()) self.ui.statusbar.showMessage(_("Updated member information")) @@ -463,9 +578,11 @@ answer = QtGui.QMessageBox.question(self.parent(), _("Are you sure?"), _("Do you really want to delete this member?"), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes).__or__(QtGui.QMessageBox.No), QtGui.QMessageBox.No) if answer == QtGui.QMessageBox.Yes: Database().runOnce("delete from members where username = ?", (member.userName,)) + Database().runOnce("delete from member_settings where username = ?", (member.userName,)) self.ui.members_treeWidget.takeTopLevelItem(self.ui.members_treeWidget.indexOfTopLevelItem(member)) del(self.members[self.members.index(member)]) self.filterMembers(self.ui.members_filter.text()) + logger.add(logger.logTypes.warning, _("Deleted member"), member = member.userName) self.ui.statusbar.showMessage(_("Deleted member")) def memberReports(self): @@ -557,6 +674,7 @@ if answer == QtGui.QMessageBox.Yes: Database().runOnce("delete from products where product_name = ?", (product.name,)) self.ui.orders_treeWidget_2.takeTopLevelItem(self.ui.orders_treeWidget_2.indexOfTopLevelItem(product)) + del(self.products[self.products.index(product)]) self.ui.statusbar.showMessage(_("Deleted product")) def about(self): @@ -572,6 +690,39 @@ settingsUi.setupUi(self.settingsDialog, self.config) self.settingsDialog.show() + def settingsButton(self, add = False): + client = self.ui.main_treeWidget.currentItem() + if not client and not add: + QtGui.QMessageBox.information(self.parent(), _("Information"), _("Choose a client first")) + return + clientSettingsDialog = QtGui.QDialog(self.parent()) + self.clientSettingsUi = Ui_ClientSettingsWindow() + self.clientSettingsUi.setupUi(clientSettingsDialog, client) + if add: + clientSettingsDialog.setWindowTitle(_("Add Computer")) + clientSettingsDialog.setWindowIcon(self.ui.pyKafeIcon) + QtCore.QObject.connect(clientSettingsDialog, QtCore.SIGNAL("accepted()"), self.clientAdder) + else: + QtCore.QObject.connect(clientSettingsDialog, QtCore.SIGNAL("accepted()"), self.changeClient) + clientSettingsDialog.show() + + def changeClient(self): + client = self.ui.main_treeWidget.currentItem() + client.updateInformation(self.parent(), unicode(self.clientSettingsUi.clientID.text()), self.clientSettingsUi.clientIP.text()) + + def addClient(self): + self.settingsButton(add = True) + + def clientAdder(self): + name = unicode(self.clientSettingsUi.clientID.text()) + ip = unicode(self.clientSettingsUi.clientIP.text()) + try: + Database().runOnce("insert into computers(ip,name) values(?,?)", (ip, name)) + info = ClientInformation(ip, name) + self.clients.append(Client(self.ui.main_treeWidget, info, self.config, self)) + except sqlite.IntegrityError: + QtGui.QMessageBox.critical(self.parent(), _("Error"), _("Client ip and name must be unique")) + def sendOptions(self): "Sends internet filtering and pricing settings to all clients" if self.config.filter_enable: @@ -592,3 +743,83 @@ client.sendMessage(priceMessage) if self.config.filter_enable: client.sendMessage(filterMessage) + + def orderAdd(self, order = None, clientName = None, toDatabase = True): + if not order: + clientName = self.ui.orders_idComboBox.currentText() + order = (self.ui.orders_itemComboBox.currentText(), self.ui.orders_spinBox_1.value()) + self.orders.append(Order(self.ui.orders_treeWidget_1, order, clientName, toDatabase)) + + def orderChanged(self, current, previous): + order = current + if not order: + order = previous + if not order: return + self.ui.orders_idComboBox.setCurrentIndex(self.ui.orders_idComboBox.findText(order.clientName)) + self.ui.orders_itemComboBox.setCurrentIndex(self.ui.orders_itemComboBox.findText(order.productName)) + self.ui.orders_spinBox_1.setValue(order.quantity) + + def orderUpdate(self): + order = self.ui.orders_treeWidget_1.currentItem() + if not order: + QtGui.QMessageBox.information(self.parent(), _("Information"), _("Choose an order first")) + return + order.update(self.ui.orders_idComboBox.currentText() ,self.ui.orders_itemComboBox.currentText(), self.ui.orders_spinBox_1.value()) + + def orderCancel(self, question = True): + order = self.ui.orders_treeWidget_1.currentItem() + if not order: + QtGui.QMessageBox.information(self.parent(), _("Information"), _("Choose an order first")) + return + if question: + answer = QtGui.QMessageBox.question(self.parent(), _("Are you sure?"), _("Do you really want to cancel this order?"), QtGui.QMessageBox.StandardButtons(QtGui.QMessageBox.Yes).__or__(QtGui.QMessageBox.No), QtGui.QMessageBox.No) + else: + answer = QtGui.QMessageBox.Yes + if answer == QtGui.QMessageBox.Yes: + Database().runOnce("delete from orders where product_name=? and quantity=? and computer_name=?", (order.productName, order.quantity, order.clientName)) + self.ui.orders_treeWidget_1.takeTopLevelItem(self.ui.orders_treeWidget_1.indexOfTopLevelItem(order)) + del(self.orders[self.orders.index(order)]) + self.ui.statusbar.showMessage(_("Cancelled order")) + + def orderDelete(self): + order = self.ui.orders_treeWidget_1.currentItem() + if not order: + QtGui.QMessageBox.information(self.parent(), _("Information"), _("Choose an order first")) + return + stocks = Database().runOnce("select stock from products where product_name=?", (order.productName,))[0][0] + if order.quantity>stocks: + QtGui.QMessageBox.warning(self.parent(), _("Warning"), _("Order quantity exceeds stocks. Stocks will be set to 0")) + Database().runOnce("update products set stock=? where product_name=?", (0, order.productName)) + for product in self.products: + if product.name == order.productName: + product.setText(2, "0") + else: + Database().runOnce("update products set stock=? where product_name=?", (stocks - order.quantity, order.productName)) + for product in self.products: + if product.name == order.productName: + product.quantity = stocks - order.quantity + product.setText(2, str(product.quantity)) + for client in self.clients: + if client.name == order.clientName: + logger.add(logger.logTypes.information, _("cafeteria item sold"), order.clientName, client.session.user, order.price()) + Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, order.price())) + client.session.orders.append(order.price()) + self.orderCancel(question = False) + + def refreshLogs(self): + startDate = self.ui.logs_dateTimeEdit_1.dateTime().toTime_t() + endDate = self.ui.logs_dateTimeEdit_2.dateTime().toTime_t() + if startDate>endDate: + QtGui.QMessageBox.warning(self.parent(), _("Warning"), _("Starting time must be smaller than ending time. They will be set to equal")) + self.ui.logs_dateTimeEdit_1.setDateTime(self.ui.logs_dateTimeEdit_2.dateTime()) + return + self.logs = [] + logs = Database().run("select date,log_type,log_value,cashier,computer,member,income from logs where date between ? and ?", (startDate, endDate)) + for log in logs: + time = QtCore.QDateTime.fromTime_t(log[0]).toString("dd.MM.yyyy hh.mm") + type = log[1] + if type == logger.logTypes.emergency: type = _("emergency") + elif type == logger.logTypes.warning: type = _("warning") + elif type == logger.logTypes.error: type = _("error") + elif type == logger.logTypes.information: type = _("information") + self.logs.append(Log(self.ui.logs_treeWidget, (time, type) + log[2:])) Modified: trunk/pykafe/server/session.py =================================================================== --- trunk/pykafe/server/session.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/session.py 2007-06-06 10:17:41 UTC (rev 99) @@ -26,6 +26,8 @@ self.startTime = None self.endTime = None self.orders = [] + self.receivedBytes = 0 + self.transferredBytes = 0 def calculatePrice(self, config): time = self.startTime.secsTo(QtCore.QDateTime.currentDateTime()) @@ -35,6 +37,11 @@ #TODO: round the price using price_rounding price = float(config.price_onehourprice)/3600 * time return price + def calculateTotal(self, config): + total = self.calculatePrice(config) + for i in self.orders: + total += i + return total def toString(self): """returns current state as a string""" Modified: trunk/pykafe/server/settings.py =================================================================== --- trunk/pykafe/server/settings.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/settings.py 2007-06-06 10:17:41 UTC (rev 99) @@ -13,6 +13,7 @@ from PyQt4 import QtGui, QtCore from pysqlite2 import dbapi2 as sqlite from database import Database +from cashierreports import Ui_CashierReports import sha, socket import locale, gettext @@ -215,7 +216,15 @@ except sqlite.IntegrityError: QtGui.QMessageBox.critical(self.parent, _("Error"), _("Username must be unique")) def cashierReports(self): - pass + cashier = self.ui.cashiers_treeWidget.currentItem() + if not cashier: + QtGui.QMessageBox.critical(self.parent, _("Error"), _("You must select a cashier first")) + return + dialog = QtGui.QDialog(self.parent) + reportwindow = Ui_CashierReports() + reportwindow.setupUi(dialog, cashier.userName) + dialog.show() + def cashierChanged(self, current, previous): currentCashier = current if not currentCashier: @@ -223,3 +232,18 @@ self.ui.cashiers_username.setText(currentCashier.userName) self.ui.cashiers_password.clear() self.ui.cashiers_realName.setText(currentCashier.realName) + def checkPricingRoundingValue(self): + if self.ui.pricing_rounding.value() > self.ui.pricing_fixed.value(): + QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Price rounding must be smaller than or equal to fixed price. Correct value will be set.")) + self.ui.pricing_rounding.setValue(self.ui.pricing_fixed.value()) + def checkPricingOnehourValue(self): + if self.ui.pricing_fixed.value() > self.ui.pricing_onehour.value(): + QtGui.QMessageBox.warning(self.parent, _("Warning"), _("One hour price must be bigger than or equal to fixed price. Correct value will be set.")) + self.ui.pricing_onehour.setValue(self.ui.pricing_fixed.value()) + def checkPricingFixedValue(self): + if self.ui.pricing_rounding.value() > self.ui.pricing_fixed.value(): + QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Fixed price must be bigger than or equal to price rounding. Correct value will be set.")) + self.ui.pricing_fixed.setValue(self.ui.pricing_rounding.value()) + elif self.ui.pricing_fixed.value() > self.ui.pricing_onehour.value(): + QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Fixed price must be smaller than or equal to one hour price. Correct value will be set.")) + self.ui.pricing_fixed.setValue(self.ui.pricing_onehour.value()) Modified: trunk/pykafe/server/settingswindow.py =================================================================== --- trunk/pykafe/server/settingswindow.py 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/settingswindow.py 2007-06-06 10:17:41 UTC (rev 99) @@ -86,8 +86,8 @@ self.hboxlayout1.addWidget(self.label_5) self.pricing_minutes = QtGui.QSpinBox(self.tab_3) - self.pricing_minutes.setMaximum(3600) - self.pricing_minutes.setSingleStep(15) + self.pricing_minutes.setMaximum(60) + self.pricing_minutes.setSingleStep(5) self.pricing_minutes.setObjectName("pricing_minutes") self.hboxlayout1.addWidget(self.pricing_minutes) @@ -335,6 +335,9 @@ QtCore.QObject.connect(self.cashiers_deleteButton,QtCore.SIGNAL("clicked()"),self.manager.cashierDelete) QtCore.QObject.connect(self.cashiers_updateButton,QtCore.SIGNAL("clicked()"),self.manager.cashierUpdate) QtCore.QObject.connect(self.cashiers_reportsButton,QtCore.SIGNAL("clicked()"),self.manager.cashierReports) + QtCore.QObject.connect(self.pricing_fixed,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingFixedValue) + QtCore.QObject.connect(self.pricing_onehour,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingOnehourValue) + QtCore.QObject.connect(self.pricing_rounding,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingRoundingValue) QtCore.QMetaObject.connectSlotsByName(SettingsWindow) SettingsWindow.setTabOrder(self.tabWidget,self.checkBox_2) SettingsWindow.setTabOrder(self.checkBox_2,self.pricing_minutes) Modified: trunk/pykafe/server/settingswindow.ui =================================================================== --- trunk/pykafe/server/settingswindow.ui 2007-06-06 10:11:23 UTC (rev 98) +++ trunk/pykafe/server/settingswindow.ui 2007-06-06 10:17:41 UTC (rev 99) @@ -142,10 +142,10 @@ <item> <widget class="QSpinBox" name="pricing_minutes" > <property name="maximum" > - <number>3600</number> + <number>60</number> </property> <property name="singleStep" > - <number>15</number> + <number>5</number> </property> </widget> </item> @@ -800,5 +800,53 @@ </hint> </hints> </connection> + <connection> + <sender>pricing_fixed</sender> + <signal>valueChanged(double)</signal> + <receiver>SettingsWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>319</x> + <y>56</y> + </hint> + <hint type="destinationlabel" > + <x>233</x> + <y>149</y> + </hint> + </hints> + </connection> + <connection> + <sender>pricing_onehour</sender> + <signal>valueChanged(double)</signal> + <receiver>SettingsWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>292</x> + <y>89</y> + </hint> + <hint type="destinationlabel" > + <x>233</x> + <y>149</y> + </hint> + </hints> + </connection> + <connection> + <sender>pricing_rounding</sender> + <signal>valueChanged(double)</signal> + <receiver>SettingsWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel" > + <x>292</x> + <y>122</y> + </hint> + <hint type="destinationlabel" > + <x>233</x> + <y>149</y> + </hint> + </hints> + </connection> </connections> </ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-10 20:25:29
|
Revision: 114 http://pykafe.svn.sourceforge.net/pykafe/?rev=114&view=rev Author: jnmbk Date: 2007-06-10 13:25:32 -0700 (Sun, 10 Jun 2007) Log Message: ----------- fix rounding Modified Paths: -------------- trunk/pykafe/server/settings.py trunk/pykafe/server/settingswindow.py Modified: trunk/pykafe/server/settings.py =================================================================== --- trunk/pykafe/server/settings.py 2007-06-10 19:45:52 UTC (rev 113) +++ trunk/pykafe/server/settings.py 2007-06-10 20:25:32 UTC (rev 114) @@ -232,18 +232,11 @@ self.ui.cashiers_username.setText(currentCashier.userName) self.ui.cashiers_password.clear() self.ui.cashiers_realName.setText(currentCashier.realName) - def checkPricingRoundingValue(self): - if self.ui.pricing_rounding.value() > self.ui.pricing_fixed.value(): - QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Price rounding must be smaller than or equal to fixed price. Correct value will be set.")) - self.ui.pricing_rounding.setValue(self.ui.pricing_fixed.value()) def checkPricingOnehourValue(self): if self.ui.pricing_fixed.value() > self.ui.pricing_onehour.value(): QtGui.QMessageBox.warning(self.parent, _("Warning"), _("One hour price must be bigger than or equal to fixed price. Correct value will be set.")) self.ui.pricing_onehour.setValue(self.ui.pricing_fixed.value()) def checkPricingFixedValue(self): - if self.ui.pricing_rounding.value() > self.ui.pricing_fixed.value(): - QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Fixed price must be bigger than or equal to price rounding. Correct value will be set.")) - self.ui.pricing_fixed.setValue(self.ui.pricing_rounding.value()) - elif self.ui.pricing_fixed.value() > self.ui.pricing_onehour.value(): + if self.ui.pricing_fixed.value() > self.ui.pricing_onehour.value(): QtGui.QMessageBox.warning(self.parent, _("Warning"), _("Fixed price must be smaller than or equal to one hour price. Correct value will be set.")) self.ui.pricing_fixed.setValue(self.ui.pricing_onehour.value()) Modified: trunk/pykafe/server/settingswindow.py =================================================================== --- trunk/pykafe/server/settingswindow.py 2007-06-10 19:45:52 UTC (rev 113) +++ trunk/pykafe/server/settingswindow.py 2007-06-10 20:25:32 UTC (rev 114) @@ -337,7 +337,6 @@ QtCore.QObject.connect(self.cashiers_reportsButton,QtCore.SIGNAL("clicked()"),self.manager.cashierReports) QtCore.QObject.connect(self.pricing_fixed,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingFixedValue) QtCore.QObject.connect(self.pricing_onehour,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingOnehourValue) - QtCore.QObject.connect(self.pricing_rounding,QtCore.SIGNAL("valueChanged(double)"),self.manager.checkPricingRoundingValue) QtCore.QMetaObject.connectSlotsByName(SettingsWindow) SettingsWindow.setTabOrder(self.tabWidget,self.checkBox_2) SettingsWindow.setTabOrder(self.checkBox_2,self.pricing_minutes) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-10 22:10:57
|
Revision: 117 http://pykafe.svn.sourceforge.net/pykafe/?rev=117&view=rev Author: jnmbk Date: 2007-06-10 15:10:40 -0700 (Sun, 10 Jun 2007) Log Message: ----------- payment dialog, not tested Modified Paths: -------------- trunk/pykafe/server/server.py trunk/pykafe/server/session.py Added Paths: ----------- trunk/pykafe/server/payment.py Added: trunk/pykafe/server/payment.py =================================================================== --- trunk/pykafe/server/payment.py (rev 0) +++ trunk/pykafe/server/payment.py 2007-06-10 22:10:40 UTC (rev 117) @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'payment.ui' +# +# Created: Mon Jun 11 00:40:07 2007 +# by: PyQt4 UI code generator 4.1.1 +# +# WARNING! All changes made in this file will be lost! + +import sys +from PyQt4 import QtCore, QtGui + +class Ui_PaymentDialog(object): + def setupUi(self, PaymentDialog): + PaymentDialog.setObjectName("PaymentDialog") + PaymentDialog.resize(QtCore.QSize(QtCore.QRect(0,0,400,300).size()).expandedTo(PaymentDialog.minimumSizeHint())) + PaymentDialog.setWindowIcon(QtGui.QIcon("../../data/icons/pyKafe.png")) + + self.gridlayout = QtGui.QGridLayout(PaymentDialog) + self.gridlayout.setMargin(9) + self.gridlayout.setSpacing(6) + self.gridlayout.setObjectName("gridlayout") + + self.groupBox = QtGui.QGroupBox(PaymentDialog) + self.groupBox.setObjectName("groupBox") + + self.gridlayout1 = QtGui.QGridLayout(self.groupBox) + self.gridlayout1.setMargin(9) + self.gridlayout1.setSpacing(6) + self.gridlayout1.setObjectName("gridlayout1") + + self.cafeteriaWidget = QtGui.QTreeWidget(self.groupBox) + self.cafeteriaWidget.setRootIsDecorated(False) + self.cafeteriaWidget.setAllColumnsShowFocus(True) + self.cafeteriaWidget.setObjectName("cafeteriaWidget") + self.gridlayout1.addWidget(self.cafeteriaWidget,0,0,1,1) + self.gridlayout.addWidget(self.groupBox,2,0,1,1) + + self.hboxlayout = QtGui.QHBoxLayout() + self.hboxlayout.setMargin(0) + self.hboxlayout.setSpacing(6) + self.hboxlayout.setObjectName("hboxlayout") + + self.label_2 = QtGui.QLabel(PaymentDialog) + self.label_2.setObjectName("label_2") + self.hboxlayout.addWidget(self.label_2) + + self.totalCost = QtGui.QDoubleSpinBox(PaymentDialog) + self.totalCost.setReadOnly(True) + self.totalCost.setMaximum(1000000000.0) + self.totalCost.setObjectName("totalCost") + self.hboxlayout.addWidget(self.totalCost) + self.gridlayout.addLayout(self.hboxlayout,3,0,1,1) + + self.buttonBox = QtGui.QDialogButtonBox(PaymentDialog) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok) + self.buttonBox.setCenterButtons(True) + self.buttonBox.setObjectName("buttonBox") + self.gridlayout.addWidget(self.buttonBox,5,0,1,1) + + self.hboxlayout1 = QtGui.QHBoxLayout() + self.hboxlayout1.setMargin(0) + self.hboxlayout1.setSpacing(6) + self.hboxlayout1.setObjectName("hboxlayout1") + + self.label = QtGui.QLabel(PaymentDialog) + self.label.setObjectName("label") + self.hboxlayout1.addWidget(self.label) + + self.usedTime = QtGui.QTimeEdit(PaymentDialog) + self.usedTime.setReadOnly(True) + self.usedTime.setObjectName("usedTime") + self.hboxlayout1.addWidget(self.usedTime) + self.gridlayout.addLayout(self.hboxlayout1,1,0,1,1) + + self.label_3 = QtGui.QLabel(PaymentDialog) + self.label_3.setAlignment(QtCore.Qt.AlignCenter) + self.label_3.setObjectName("label_3") + self.gridlayout.addWidget(self.label_3,0,0,1,1) + + self.retranslateUi(PaymentDialog) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),PaymentDialog.accept) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),PaymentDialog.) + QtCore.QMetaObject.connectSlotsByName(PaymentDialog) + + def retranslateUi(self, PaymentDialog): + PaymentDialog.setWindowTitle(QtGui.QApplication.translate("PaymentDialog", "Payment", None, QtGui.QApplication.UnicodeUTF8)) + self.groupBox.setTitle(QtGui.QApplication.translate("PaymentDialog", "Cafeteria Costs", None, QtGui.QApplication.UnicodeUTF8)) + self.cafeteriaWidget.headerItem().setText(0,QtGui.QApplication.translate("PaymentDialog", "Date", None, QtGui.QApplication.UnicodeUTF8)) + self.cafeteriaWidget.headerItem().setText(1,QtGui.QApplication.translate("PaymentDialog", "Product", None, QtGui.QApplication.UnicodeUTF8)) + self.cafeteriaWidget.headerItem().setText(2,QtGui.QApplication.translate("PaymentDialog", "Price", None, QtGui.QApplication.UnicodeUTF8)) + self.label_2.setText(QtGui.QApplication.translate("PaymentDialog", "Total Cost:", None, QtGui.QApplication.UnicodeUTF8)) + self.label.setText(QtGui.QApplication.translate("PaymentDialog", "Used Time:", None, QtGui.QApplication.UnicodeUTF8)) + self.label_3.setText(QtGui.QApplication.translate("PaymentDialog", "guest", None, QtGui.QApplication.UnicodeUTF8)) + Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-10 20:33:58 UTC (rev 116) +++ trunk/pykafe/server/server.py 2007-06-10 22:10:40 UTC (rev 117) @@ -20,6 +20,7 @@ from settingswindow import Ui_SettingsWindow from clientsettingswindow import Ui_ClientSettingsWindow from currencyformat import currency +from payment import Ui_PaymentDialog import logger import base64, sha, os @@ -243,6 +244,14 @@ elif state == ClientSession.notReady: if self.session.state == ClientSession.waitingMoney: total = self.session.calculateTotal(self.config) + self.emit(QtCore.SIGNAL("payment"), self) + #dialog = Ui_PaymentDialog() + #self.parent() + self.paymentDialog = QtGui.QDialog(self.parent()) + QtCore.QObject.connect(self.paymentDialog, QtCore.SIGNAL("accepted()"), self.sendOptions) + settingsUi = Ui_SettingsWindow() + settingsUi.setupUi(self.settingsDialog, self.config) + self.settingsDialog.show() print "will pay", total payingType, credit = Database().runOnce("select paying_type, debt from members where username=?",(self.session.user,))[0] print payingType, credit @@ -364,7 +373,9 @@ self.parent().close() self.clients = [] for clientInformation in self.config.clientList: - self.clients.append(Client(ui.main_treeWidget, clientInformation, self.config, self)) + client = Client(ui.main_treeWidget, clientInformation, self.config, self) + QtCore.QObject.connect(client, QtCore.SIGNAL("payment"), self.payment) + self.clients.append(client) self.ui.orders_idComboBox.addItem(clientInformation.name, QtCore.QVariant(clientInformation.ip)) ui.main_treeWidget.sortItems(0, QtCore.Qt.AscendingOrder) self.initMembers(first = True) @@ -829,7 +840,7 @@ if client.name == order.clientName: logger.add(logger.logTypes.information, _("cafeteria item sold"), order.clientName, client.session.user, order.price()) Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, order.price())) - client.session.orders.append(order.price()) + client.session.addOrder(order.productName, order.price()) self.orderCancel(question = False) def refreshLogs(self): @@ -849,3 +860,14 @@ elif type == logger.logTypes.error: type = _("error") elif type == logger.logTypes.information: type = _("information") self.logs.append(Log(self.ui.logs_treeWidget, (time, type) + log[2:])) + + def payment(self, client): + paymentDialog = QtGui.QDialog(self.parent()) + paymentUi = Ui_PaymentDialog() + paymentUi.setupUi(paymentDialog) + paymentUi.totalCost.setValue(client.session.calculateTotal()) + time = client.session.startTime.secsTo(QtCore.QDateTime.currentDateTime()) + paymentUi.usedTime.setTime(QtCore.QTime().addSecs(time)) + for order in client.session.orders: + QtGui.QTreeWidgetItem(paymentUi.cafeteriaWidget, order) + paymentDialog.show() Modified: trunk/pykafe/server/session.py =================================================================== --- trunk/pykafe/server/session.py 2007-06-10 20:33:58 UTC (rev 116) +++ trunk/pykafe/server/session.py 2007-06-10 22:10:40 UTC (rev 117) @@ -21,8 +21,11 @@ notConnected, notReady, ready, loggedIn, requestedOpening, waitingMoney = range(6) def __init__(self): self.state = 0 + self.settings = None + self.initialize() + + def initialize(self): self.user = None - self.settings = None self.startTime = None self.endTime = None self.orders = [] @@ -40,8 +43,11 @@ def calculateTotal(self, config): total = self.calculatePrice(config) for i in self.orders: - total += i + total += i[1] return total + + def addOrder(self, productName, price): + self.orders.append([productName, price]) def toString(self): """returns current state as a string""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-10 22:28:06
|
Revision: 119 http://pykafe.svn.sourceforge.net/pykafe/?rev=119&view=rev Author: jnmbk Date: 2007-06-10 15:28:07 -0700 (Sun, 10 Jun 2007) Log Message: ----------- cancel button isn't there Modified Paths: -------------- trunk/pykafe/server/payment.py trunk/pykafe/server/payment.ui Modified: trunk/pykafe/server/payment.py =================================================================== --- trunk/pykafe/server/payment.py 2007-06-10 22:11:30 UTC (rev 118) +++ trunk/pykafe/server/payment.py 2007-06-10 22:28:07 UTC (rev 119) @@ -1,13 +1,14 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'payment.ui' # -# Created: Mon Jun 11 00:40:07 2007 -# by: PyQt4 UI code generator 4.1.1 +# Copyright (C) 2007, pyKafe Development Team # -# WARNING! All changes made in this file will be lost! +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# -import sys from PyQt4 import QtCore, QtGui class Ui_PaymentDialog(object): @@ -81,7 +82,6 @@ self.retranslateUi(PaymentDialog) QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),PaymentDialog.accept) - QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),PaymentDialog.) QtCore.QMetaObject.connectSlotsByName(PaymentDialog) def retranslateUi(self, PaymentDialog): Modified: trunk/pykafe/server/payment.ui =================================================================== --- trunk/pykafe/server/payment.ui 2007-06-10 22:11:30 UTC (rev 118) +++ trunk/pykafe/server/payment.ui 2007-06-10 22:28:07 UTC (rev 119) @@ -151,21 +151,5 @@ </hint> </hints> </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>PaymentDialog</receiver> - <slot></slot> - <hints> - <hint type="sourcelabel" > - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel" > - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> </connections> </ui> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-11 00:38:06
|
Revision: 124 http://pykafe.svn.sourceforge.net/pykafe/?rev=124&view=rev Author: jnmbk Date: 2007-06-10 17:38:03 -0700 (Sun, 10 Jun 2007) Log Message: ----------- half of payment things Modified Paths: -------------- trunk/pykafe/server/payment.py trunk/pykafe/server/server.py Modified: trunk/pykafe/server/payment.py =================================================================== --- trunk/pykafe/server/payment.py 2007-06-11 00:37:05 UTC (rev 123) +++ trunk/pykafe/server/payment.py 2007-06-11 00:38:03 UTC (rev 124) @@ -93,4 +93,3 @@ self.label_2.setText(QtGui.QApplication.translate("PaymentDialog", "Total Cost:", None, QtGui.QApplication.UnicodeUTF8)) self.label.setText(QtGui.QApplication.translate("PaymentDialog", "Used Time:", None, QtGui.QApplication.UnicodeUTF8)) self.label_3.setText(QtGui.QApplication.translate("PaymentDialog", "guest", None, QtGui.QApplication.UnicodeUTF8)) - Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-11 00:37:05 UTC (rev 123) +++ trunk/pykafe/server/server.py 2007-06-11 00:38:03 UTC (rev 124) @@ -243,10 +243,11 @@ self.changeColor("green") elif state == ClientSession.notReady: if self.session.state == ClientSession.waitingMoney: - total = self.session.calculateTotal(self.config) self.server.payment(self) + #total = self.session.calculateTotal(self.config) #dialog = Ui_PaymentDialog() #self.parent() + """ self.paymentDialog = QtGui.QDialog(self.parent()) QtCore.QObject.connect(self.paymentDialog, QtCore.SIGNAL("accepted()"), self.sendOptions) settingsUi = Ui_SettingsWindow() @@ -269,9 +270,11 @@ #logger.add(logger.logTypes.information, _("Money paid"), self.name, member.userName, total) #Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, total)) #logger.add(logger.logTypes.information, _("money paid"), self.name, self.session.user, self.session.calculateTotal() - pass + """ + pass if self.session.state == ClientSession.loggedIn: - total = self.session.calculateTotal(self.config) + self.server.payment(self) + """total = self.session.calculateTotal(self.config) payingType, credit = Database().runOnce("select paying_type, debt from members where username=?",(self.session.user,))[0] if payingType == _("Pre Paid"): print "user is pre_paid and has %s credit" % currency(credit) @@ -285,7 +288,8 @@ else: #logger.add(logger.logTypes.information, _("Money paid"), self.name, member.userName, total) #Database().runOnce("insert into safe values(?,?,?)", (QtCore.QDateTime.currentDateTime().toTime_t(), self.config.last_cashier, total)) - pass + pass""" + pass if self.config.filter_enable: message = "007" filterFile = open(self.config.filter_file) @@ -302,6 +306,7 @@ self.sendMessage(message) self.setTexts((2,3,4,5), ("","","","")) self.changeColor("orange") + self.session.initialize() elif state == ClientSession.requestedOpening: self.changeColor("red") elif state == ClientSession.waitingMoney: @@ -864,8 +869,9 @@ paymentDialog = QtGui.QDialog(self.parent()) paymentUi = Ui_PaymentDialog() paymentUi.setupUi(paymentDialog) - paymentUi.totalCost.setValue(client.session.calculateTotal()) - time = client.session.startTime.secsTo(QtCore.QDateTime.currentDateTime()) + paymentUi.totalCost.setValue(client.session.calculateTotal(self.config)) + paymentUi.label_3.setText("%s: %s" % (client.name, client.session.user)) + time = client.session.startTime.secsTo(QtCore.QDateTime.currentDateTime()) paymentUi.usedTime.setTime(QtCore.QTime().addSecs(time)) for order in client.session.orders: QtGui.QTreeWidgetItem(paymentUi.cafeteriaWidget, order) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2007-06-11 02:20:00
|
Revision: 128 http://pykafe.svn.sourceforge.net/pykafe/?rev=128&view=rev Author: jnmbk Date: 2007-06-10 19:19:57 -0700 (Sun, 10 Jun 2007) Log Message: ----------- yuppie k a Modified Paths: -------------- trunk/pykafe/server/server.py Added Paths: ----------- trunk/pykafe/server/memberreports.py Added: trunk/pykafe/server/memberreports.py =================================================================== --- trunk/pykafe/server/memberreports.py (rev 0) +++ trunk/pykafe/server/memberreports.py 2007-06-11 02:19:57 UTC (rev 128) @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007, pyKafe Development Team +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# + +from PyQt4 import QtCore, QtGui +from database import Database +from currencyformat import currency + +import locale, gettext +locale.setlocale(locale.LC_ALL, "C") +_ = gettext.translation("pyKafe_server", fallback=True).ugettext + +class Handler: + def __init__(self, ui, member): + self.ui = ui + self.memberName = member + self.ui.start.setDateTime(QtCore.QDateTime.currentDateTime().addDays(-7)) + self.ui.end.setDateTime(QtCore.QDateTime.currentDateTime().addDays(1)) + self.search() + def search(self): + self.ui.paymentTree.clear() + self.payments = [] + startDate = self.ui.start.dateTime().toTime_t() + endDate = self.ui.end.dateTime().toTime_t() + results = Database().runOnce("select date, log_value, income from logs where member=? and date between ? and ?", (self.memberName, startDate, endDate)) + received, sent, total = 0, 0, 0.0 + for result in results: + date = QtCore.QDateTime.fromTime_t(result[0]) + income = str(result[2]) + if _("Money paid") in result[1]: + self.payments.append(QtGui.QTreeWidgetItem(self.ui.paymentTree, [date.toString("dd.MM.yyyy hh.mm"), _("Normal"), currency(income)])) + if _("cafeteria item sold") in result[1]: + self.payments.append(QtGui.QTreeWidgetItem(self.ui.paymentTree, [date.toString("dd.MM.yyyy hh.mm"), _("Cafeteria"), currency(float(income))])) + if _("received, sent:") in result[1]: + received += int(result[1][len(_("received, sent:")):result[1].rfind("|")]) + sent += int(result[1].split("|")[1]) + for payment in self.payments: + current = payment.text(2).split(" ")[0] + total += float(current.replace(',', '.')) + self.ui.totalLabel.setText(currency(total)) + self.ui.bytesLabel.setText("%s / %s" % (str(received), str(sent))) + +class Ui_MemberReports(object): + def setupUi(self, MemberReports, member): + MemberReports.setObjectName("MemberReports") + MemberReports.resize(QtCore.QSize(QtCore.QRect(0,0,453,408).size()).expandedTo(MemberReports.minimumSizeHint())) + MemberReports.setWindowIcon(QtGui.QIcon("../../data/icons/pyKafe.png")) + + self.gridlayout = QtGui.QGridLayout(MemberReports) + self.gridlayout.setMargin(9) + self.gridlayout.setSpacing(6) + self.gridlayout.setObjectName("gridlayout") + + self.gridlayout1 = QtGui.QGridLayout() + self.gridlayout1.setMargin(0) + self.gridlayout1.setSpacing(6) + self.gridlayout1.setObjectName("gridlayout1") + + self.end = QtGui.QDateTimeEdit(MemberReports) + self.end.setObjectName("end") + self.gridlayout1.addWidget(self.end,1,0,1,1) + + self.findButton = QtGui.QToolButton(MemberReports) + self.findButton.setIcon(QtGui.QIcon("../../data/icons/find.png")) + self.findButton.setIconSize(QtCore.QSize(64,64)) + self.findButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon) + self.findButton.setObjectName("findButton") + self.gridlayout1.addWidget(self.findButton,0,1,2,1) + + self.start = QtGui.QDateTimeEdit(MemberReports) + self.start.setObjectName("start") + self.gridlayout1.addWidget(self.start,0,0,1,1) + self.gridlayout.addLayout(self.gridlayout1,0,0,1,2) + + self.buttonBox = QtGui.QDialogButtonBox(MemberReports) + self.buttonBox.setOrientation(QtCore.Qt.Horizontal) + self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.NoButton|QtGui.QDialogButtonBox.Ok) + self.buttonBox.setObjectName("buttonBox") + self.gridlayout.addWidget(self.buttonBox,4,0,1,2) + + self.label_3 = QtGui.QLabel(MemberReports) + self.label_3.setObjectName("label_3") + self.gridlayout.addWidget(self.label_3,3,0,1,1) + + self.bytesLabel = QtGui.QLabel(MemberReports) + self.bytesLabel.setObjectName("bytesLabel") + self.gridlayout.addWidget(self.bytesLabel,3,1,1,1) + + self.paymentTree = QtGui.QTreeWidget(MemberReports) + self.paymentTree.setObjectName("paymentTree") + self.gridlayout.addWidget(self.paymentTree,1,0,1,2) + + self.label_2 = QtGui.QLabel(MemberReports) + self.label_2.setObjectName("label_2") + self.gridlayout.addWidget(self.label_2,2,0,1,1) + + self.totalLabel = QtGui.QLabel(MemberReports) + self.totalLabel.setObjectName("totalLabel") + self.gridlayout.addWidget(self.totalLabel,2,1,1,1) + + self.retranslateUi(MemberReports) + self.handler = Handler(self, member) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),MemberReports.accept) + QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),MemberReports.reject) + QtCore.QObject.connect(self.findButton,QtCore.SIGNAL("clicked()"),self.handler.search) + QtCore.QMetaObject.connectSlotsByName(MemberReports) + + def retranslateUi(self, MemberReports): + MemberReports.setWindowTitle(QtGui.QApplication.translate("MemberReports", "Member Reports", None, QtGui.QApplication.UnicodeUTF8)) + self.findButton.setText(QtGui.QApplication.translate("MemberReports", "Find", None, QtGui.QApplication.UnicodeUTF8)) + self.label_3.setText(QtGui.QApplication.translate("MemberReports", "Received/Sent data in KB:", None, QtGui.QApplication.UnicodeUTF8)) + self.paymentTree.headerItem().setText(0,QtGui.QApplication.translate("MemberReports", "Date", None, QtGui.QApplication.UnicodeUTF8)) + self.paymentTree.headerItem().setText(1,QtGui.QApplication.translate("MemberReports", "Payment", None, QtGui.QApplication.UnicodeUTF8)) + self.paymentTree.headerItem().setText(2,QtGui.QApplication.translate("MemberReports", "Cost", None, QtGui.QApplication.UnicodeUTF8)) + self.label_2.setText(QtGui.QApplication.translate("MemberReports", "Total:", None, QtGui.QApplication.UnicodeUTF8)) + Modified: trunk/pykafe/server/server.py =================================================================== --- trunk/pykafe/server/server.py 2007-06-11 01:30:13 UTC (rev 127) +++ trunk/pykafe/server/server.py 2007-06-11 02:19:57 UTC (rev 128) @@ -21,6 +21,7 @@ from clientsettingswindow import Ui_ClientSettingsWindow from currencyformat import currency from payment import Ui_PaymentDialog +from memberreports import Ui_MemberReports import logger import base64, sha, os @@ -623,7 +624,14 @@ def memberReports(self): "Shows statistics about selected member" - pass + member = self.ui.members_treeWidget.currentItem() + if not member: + QtGui.QMessageBox.critical(self.parent(), _("Error"), _("You must select a member first")) + return + dialog = QtGui.QDialog(self.parent()) + reportwindow = Ui_MemberReports() + reportwindow.setupUi(dialog, member.userName) + dialog.show() def memberChanged(self, current, previous): member = current This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2008-01-27 08:32:00
|
Revision: 153 http://pykafe.svn.sourceforge.net/pykafe/?rev=153&view=rev Author: jnmbk Date: 2008-01-27 00:32:05 -0800 (Sun, 27 Jan 2008) Log Message: ----------- add GPL things and begin server Modified Paths: -------------- trunk/pykafe/server/main.py trunk/pykafe/server/mainwindow_server.py trunk/pykafe/server/tcpserver.py Added Paths: ----------- trunk/pykafe/server/defaultsettings.py Added: trunk/pykafe/server/defaultsettings.py =================================================================== --- trunk/pykafe/server/defaultsettings.py (rev 0) +++ trunk/pykafe/server/defaultsettings.py 2008-01-27 08:32:05 UTC (rev 153) @@ -0,0 +1,22 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under GPL v2 +# Copyright 2008, Ugur Cetin +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# + +"""A nice place to put default settings""" + +from PyQt4 import QtCore + +defaultsettings = \ +{ + "server/port":QtCore.QVariant(23105), +} Modified: trunk/pykafe/server/main.py =================================================================== --- trunk/pykafe/server/main.py 2008-01-26 20:15:05 UTC (rev 152) +++ trunk/pykafe/server/main.py 2008-01-27 08:32:05 UTC (rev 153) @@ -1,5 +1,16 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +# +# Licensed under GPL v2 +# Copyright 2008, Ugur Cetin +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# """PyKafe server main module """ Modified: trunk/pykafe/server/mainwindow_server.py =================================================================== --- trunk/pykafe/server/mainwindow_server.py 2008-01-26 20:15:05 UTC (rev 152) +++ trunk/pykafe/server/mainwindow_server.py 2008-01-27 08:32:05 UTC (rev 153) @@ -1,5 +1,16 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +# +# Licensed under GPL v2 +# Copyright 2008, Ugur Cetin +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# from PyQt4 import QtCore from PyQt4 import QtGui Modified: trunk/pykafe/server/tcpserver.py =================================================================== --- trunk/pykafe/server/tcpserver.py 2008-01-26 20:15:05 UTC (rev 152) +++ trunk/pykafe/server/tcpserver.py 2008-01-27 08:32:05 UTC (rev 153) @@ -1,8 +1,38 @@ #!/usr/bin/python # -*- coding: utf-8 -*- +# +# Licensed under GPL v2 +# Copyright 2008, Ugur Cetin +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# Please read the COPYING file. +# +"""Server module""" + +from PyQt4 import QtCore +from PyQt4 import QtGui from PyQt4 import QtNetwork +from defaultsettings import defaultsettings + class TcpServer(QtNetwork.QTcpServer): def __init__(self, parent = None): QtNetwork.QTcpServer.__init__(self, parent) + self.mainWindow = parent + + settings = QtCore.QSettings() + + if not self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), + settings.value("server/port", defaultsettings["server/port"]).toInt()[0]): + QtGui.QMessageBox.critical(self.parent(), + QtGui.QApplication.translate("TcpServer", "Connection Error"), + QtGui.QApplication.translate("TcpServer", "Unable to start server: %1").arg(self.errorString())) + + def incomingConnection(self, socketDescriptor): + # this is called when someone tries to connect + pass This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jn...@us...> - 2008-01-27 11:20:12
|
Revision: 155 http://pykafe.svn.sourceforge.net/pykafe/?rev=155&view=rev Author: jnmbk Date: 2008-01-27 03:20:14 -0800 (Sun, 27 Jan 2008) Log Message: ----------- this is better Modified Paths: -------------- trunk/pykafe/server/main.py trunk/pykafe/server/mainwindow_server.py trunk/pykafe/server/tcpserver.py Modified: trunk/pykafe/server/main.py =================================================================== --- trunk/pykafe/server/main.py 2008-01-27 10:45:55 UTC (rev 154) +++ trunk/pykafe/server/main.py 2008-01-27 11:20:14 UTC (rev 155) @@ -39,7 +39,6 @@ import mainwindow_server mainWindow = mainwindow_server.MainWindow() - mainWindow.show() return app.exec_() Modified: trunk/pykafe/server/mainwindow_server.py =================================================================== --- trunk/pykafe/server/mainwindow_server.py 2008-01-27 10:45:55 UTC (rev 154) +++ trunk/pykafe/server/mainwindow_server.py 2008-01-27 11:20:14 UTC (rev 155) @@ -24,6 +24,13 @@ self.tcpServer = tcpserver.TcpServer(self) + self.show() + if not self.tcpServer.isListening(): + QtGui.QMessageBox.critical(self, + QtGui.QApplication.translate("MainWindow", "Connection Error"), + QtGui.QApplication.translate("MainWindow", + "Unable to start server: %1").arg(self.tcpServer.errorString())) + @QtCore.pyqtSignature("on_main_startButton_clicked()") def on_main_startButton_clicked(self): print "started" Modified: trunk/pykafe/server/tcpserver.py =================================================================== --- trunk/pykafe/server/tcpserver.py 2008-01-27 10:45:55 UTC (rev 154) +++ trunk/pykafe/server/tcpserver.py 2008-01-27 11:20:14 UTC (rev 155) @@ -23,15 +23,13 @@ class TcpServer(QtNetwork.QTcpServer): def __init__(self, parent = None): QtNetwork.QTcpServer.__init__(self, parent) - self.mainWindow = parent settings = QtCore.QSettings() - if not self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), - settings.value("server/port", defaultsettings["server/port"]).toInt()[0]): - QtGui.QMessageBox.critical(self.parent(), - QtGui.QApplication.translate("TcpServer", "Connection Error"), - QtGui.QApplication.translate("TcpServer", "Unable to start server: %1").arg(self.errorString())) + # We just assume everything is going fine, gui should do the check here like this: + # if tcpServer.isListening(): + self.listen(QtNetwork.QHostAddress(QtNetwork.QHostAddress.Any), + settings.value("server/port", defaultsettings["server/port"]).toInt()[0]) def incomingConnection(self, socketDescriptor): # this is called when someone tries to connect This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |