[Pykafe-commits] SF.net SVN: pykafe: [99] trunk/pykafe/server
Status: Pre-Alpha
Brought to you by:
jnmbk
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. |