[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.
|