Advertisement
Guest User

Untitled

a guest
Aug 10th, 2015
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 32.77 KB | None | 0 0
  1. '''
  2. Created on Jun 9, 2015
  3.  
  4. @author: n0268773
  5. '''
  6.  
  7. import hashlib
  8. import random
  9. import smtplib
  10. import sys
  11.  
  12. from PyQt4 import QtCore, QtGui
  13. from PyQt4.Qt import QAbstractItemView, QHeaderView, QTableWidgetItem, \
  14. QApplication
  15. from PyQt4.QtGui import QMainWindow
  16. from PyQt4.QtSql import QSqlDatabase, QSqlQuery
  17.  
  18. from checkin import CheckinWindow
  19. from checkout import CheckoutWindow
  20. from mainWindow import Ui_MainWindow
  21.  
  22. '''
  23. CheckinWindow and CheckoutWindow need this at top
  24.  
  25. try:
  26. from PyQt4.QtCore import QString
  27. except ImportError:
  28. # we are using Python3 so QString is not defined
  29. QString = str
  30. def _fromUtf8(s):
  31. return s
  32.  
  33.  
  34. '''
  35.  
  36.  
  37. class Main(QMainWindow):
  38. def __init__(self):
  39. super(Main, self).__init__()
  40. # build ui
  41. self.ui = Ui_MainWindow()
  42. self.ui.setupUi(self)
  43. global borrowedList
  44. global availableList
  45. availableList = {}
  46. borrowedList = {}
  47. self.updateAvailableTable()
  48. self.updateBorrowedTable()
  49. self.ui.availableTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  50. self.ui.borrowedTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  51. # Connect signals with responses
  52. self.ui.checkoutButton.clicked.connect(self.handleCheckout)
  53. self.ui.checkinButton.clicked.connect(self.handleCheckin)
  54. self.ui.pingButton.clicked.connect(self.handlePingButton)
  55. self.ui.borrowedTable.clicked.connect(self.handleBorrowedListChange)
  56.  
  57. def handlePingButton(self):
  58. nNumber = self.ui.pingButton.text().split(" ")
  59. #send_email()
  60. print("pinging", nNumber[1])
  61.  
  62. def handleBorrowedListChange(self):
  63. # Change the text borrowed phone text block
  64. rowNum = self.ui.borrowedTable.currentRow()
  65. nNumber = self.ui.borrowedTable.item(rowNum, self.ui.borrowedTable.columnCount()-1).text()
  66. text = self.ui.borrowedTable.item(rowNum,1).text()
  67.  
  68. # change ping button information
  69. self.ui.borrowedDeviceOwnerLabel.setText("Click the button below to request n%s to return the %s" % (nNumber, text))
  70. self.ui.pingButton.setText("Ping n%s" % nNumber)
  71. self.ui.pingButton.setEnabled(True)
  72.  
  73. def handleCheckin(self):
  74. global checkinWindow
  75. checkinWindow = Checkin()
  76. checkinWindow.show()
  77.  
  78. def handleCheckout(self):
  79. global checkoutWidget
  80. checkoutWidget = Checkout()
  81. checkoutWidget.show()
  82.  
  83. def updateBorrowedTable(self):
  84. global borrowedList
  85. borrowedList = {}
  86. borrowedTable = self.ui.borrowedTable
  87. query = QSqlQuery(db)
  88. query.exec_("SELECT * from test_phone_table;")
  89.  
  90. row = 0
  91. borrowedTable.setColumnCount(6)
  92. borrowedTable.setColumnWidth(0,50)
  93. borrowedTable.setRowCount(0)
  94. borrowedTable.verticalHeader().setVisible(False)
  95. for i in range (0, borrowedTable.columnCount()):
  96. borrowedTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  97.  
  98. borrowedTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  99. borrowedTable.setSelectionMode(QAbstractItemView.SingleSelection)
  100.  
  101. while query.next():
  102. record = query.record()
  103. if record.value(record.count()-1) == 'true':
  104. borrowedList[record.value(0)] = record.value(1)
  105. borrowedTable.setRowCount(row+1)
  106. for col in range(0, record.count()):
  107. if isinstance(record.value(col), int):
  108. item = QTableWidgetItem()
  109. item.setData(QtCore.Qt.EditRole, record.value(col))
  110. borrowedTable.setItem(row, col, item)
  111. else:
  112. item = QTableWidgetItem(record.value(col))
  113. borrowedTable.setItem(row, col, item)
  114.  
  115. row = row+1
  116.  
  117. borrowedTable.show()
  118.  
  119. def updateAvailableTable(self):
  120. availableTable = self.ui.availableTable
  121. availableTable.setFocusPolicy(QtCore.Qt.NoFocus)
  122. query = QSqlQuery(db)
  123. query.exec_("SELECT * from test_phone_table;")
  124.  
  125. availableTable.setColumnCount(5)
  126. availableTable.setColumnWidth(0,50)
  127. availableTable.setRowCount(0)
  128. availableTable.verticalHeader().setVisible(False)
  129. for i in range (0, availableTable.columnCount()):
  130. availableTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  131.  
  132. availableTable.setSelectionMode(QAbstractItemView.NoSelection)
  133. global availableList
  134. availableList = {}
  135. row = 0
  136. while query.next():
  137. record = query.record()
  138. if record.value(record.count()-1) == 'false':
  139. availableList[record.value(0)] = record.value(1)
  140. availableTable.setRowCount(row+1)
  141. for col in range(0, record.count()):
  142. if isinstance(record.value(col), int):
  143. item = QTableWidgetItem()
  144. item.setData(QtCore.Qt.EditRole, record.value(col))
  145. availableTable.setItem(row, col, item)
  146. else:
  147. item = QTableWidgetItem(record.value(col))
  148. availableTable.setItem(row, col, item)
  149.  
  150. row = row+1
  151. else:
  152. self.ui.borrowedDeviceOwnerLabel.setText("Select a borrowed device to ping borrower")
  153. availableTable.show()
  154.  
  155.  
  156. class Checkin(QMainWindow):
  157. def __init__(self):
  158. super(Checkin, self).__init__()
  159. # build ui
  160. self.checkinUI = CheckinWindow()
  161. self.checkinUI.setupUi(self)
  162. self.checkinUI.doneButton.clicked.connect(self.handleDone)
  163. self.checkinUI.removeDeviceButton.clicked.connect(self.removeDevice)
  164. self.checkinUI.deviceButton.clicked.connect(self.addDevice)
  165.  
  166. returningDeviceTable = self.checkinUI.returningDeviceTable
  167. returningDeviceTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  168. returningDeviceTable.setRowCount(0)
  169. returningDeviceTable.setColumnCount(2)
  170. returningDeviceTable.setColumnWidth(0, 50)
  171. returningDeviceTable.verticalHeader().setVisible(False)
  172. for i in range (0, returningDeviceTable.columnCount()):
  173. returningDeviceTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  174.  
  175. returningDeviceTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  176. returningDeviceTable.setSelectionMode(QAbstractItemView.SingleSelection)
  177.  
  178. def addDevice(self):
  179. if borrowedList:
  180. randPhone = random.choice(list(borrowedList.keys()))
  181. row = self.checkinUI.returningDeviceTable.rowCount()
  182. self.checkinUI.returningDeviceTable.setRowCount((row + 1))
  183. item = QTableWidgetItem()
  184. item.setData(QtCore.Qt.EditRole,randPhone)
  185. self.checkinUI.returningDeviceTable.setItem(row, 0, item)
  186. self.checkinUI.returningDeviceTable.setItem(row, 1, QTableWidgetItem(borrowedList[randPhone]))
  187. self.checkinUI.returningDeviceTable.show()
  188.  
  189. def handleDone(self):
  190. returningDeviceTable = self.checkinUI.returningDeviceTable
  191. for row in range (0, returningDeviceTable.rowCount()):
  192. ID = int(returningDeviceTable.item(row, 0).text())
  193. query = QSqlQuery(db)
  194. query.prepare('update test_phone_table set borrower_n_number = ?, borrowed = ? where ID = ?')
  195. query.addBindValue("")
  196. query.addBindValue('false')
  197. query.addBindValue(ID)
  198. query.exec_()
  199.  
  200. mainClass.updateAvailableTable()
  201. mainClass.updateBorrowedTable()
  202. self.close()
  203.  
  204. def removeDevice(self):
  205. returningDeviceTable = self.checkinUI.returningDeviceTable
  206. returningDeviceTable.removeRow(returningDeviceTable.currentRow())
  207. returningDeviceTable.setAlternatingRowColors(False)
  208. returningDeviceTable.setAlternatingRowColors(True)
  209.  
  210.  
  211. class Checkout(QMainWindow):
  212.  
  213. def __init__(self):
  214. super(Checkout, self).__init__()
  215. # build ui
  216. self.checkoutUI = CheckoutWindow()
  217. self.checkoutUI.setupUi(self)
  218. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  219. requestedDeviceTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  220. self.checkoutUI.removeDeviceButton.clicked.connect(self.removeDevice)
  221. self.checkoutUI.doneButton.clicked.connect(self.handleDone)
  222. self.checkoutUI.cancelButton.clicked.connect(self.handleCancel)
  223. self.checkoutUI.idButton.clicked.connect(self.handleID)
  224.  
  225. global idAdded
  226. idAdded = False
  227. self.checkoutUI.doneButton.setDisabled(True)
  228.  
  229. requestedDeviceTable.setRowCount(0)
  230. requestedDeviceTable.setColumnCount(2)
  231. requestedDeviceTable.setColumnWidth(0, 50)
  232. requestedDeviceTable.verticalHeader().setVisible(False)
  233. for i in range (0, requestedDeviceTable.columnCount()):
  234. requestedDeviceTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  235.  
  236. requestedDeviceTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  237. requestedDeviceTable.setSelectionMode(QAbstractItemView.SingleSelection)
  238. #setup validation for text fields
  239. nRegex = QtCore.QRegExp('^(n|N)*\d{7}$')
  240. emaillRegex = QtCore.QRegExp('^[^@]+@[^@]+\.[^@]+$')
  241. nValidator = QtGui.QRegExpValidator(nRegex)
  242. emailValidator = QtGui.QRegExpValidator(emaillRegex)
  243. nNumberLine = self.checkoutUI.nNumberLine;
  244. nNumberLine.setValidator(nValidator)
  245. emailLine = self.checkoutUI.emailLine
  246. emailLine.setValidator(emailValidator)
  247. self.checkoutUI.hashLine.setDisabled(True)
  248.  
  249.  
  250. #connect validator to change in text
  251.  
  252. global nNumberCheck
  253. global emailCheck
  254. nNumberCheck = False
  255. emailCheck = False
  256. nNumberLine.textChanged.connect(self.checkNLine)
  257. nNumberLine.textChanged.emit(nNumberLine.text())
  258. emailLine.textChanged.connect(self.checkEmailLine)
  259. emailLine.textChanged.emit(emailLine.text())
  260.  
  261. nNumberLine.textChanged.connect(self.buttonEnabler)
  262. emailLine.textChanged.connect(self.buttonEnabler)
  263.  
  264. def buttonEnabler (self):
  265. global nNumberCheck, emailCheck
  266. if nNumberCheck and emailCheck:
  267. self.checkoutUI.doneButton.setDisabled(False)
  268. self.checkoutUI.requiredFieldsLabel.hide()
  269. else:
  270. self.checkoutUI.doneButton.setDisabled(True)
  271. self.checkoutUI.requiredFieldsLabel.show()
  272.  
  273. def checkNLine(self, *args, **kwargs):
  274. sender = self.sender()
  275. validator = sender.validator()
  276. state = validator.validate(sender.text(), 0)[0]
  277. global nNumberCheck
  278.  
  279. if state == QtGui.QValidator.Acceptable:
  280. nNumberCheck = True
  281. color = '#c4df9b' # green
  282. elif state == QtGui.QValidator.Intermediate:
  283. nNumberCheck = False
  284. color = '#fff79a' # yellow
  285. else:
  286. nNumberCheck = False
  287. color = '#f6989d' # red
  288. sender.setStyleSheet('QLineEdit { background-color: %s }' % color)
  289.  
  290. def checkEmailLine(self, *args, **kwargs):
  291. global emailCheck
  292. sender = self.sender()
  293. validator = sender.validator()
  294. state = validator.validate(sender.text(), 0)[0]
  295. if state == QtGui.QValidator.Acceptable:
  296. emailCheck = True
  297. color = '#c4df9b' # green
  298. elif state == QtGui.QValidator.Intermediate:
  299. emailCheck = False
  300. color = '#fff79a' # yellow
  301. else:
  302. emailCheck = False
  303. color = '#f6989d' # red
  304. sender.setStyleSheet('QLineEdit { background-color: %s }' % color)
  305.  
  306. def handleID(self):
  307. self.addDevice()
  308. global idAdded
  309. nNumber = ""
  310. hashText = ''
  311. if not idAdded:
  312. nNumber = "%s" % ("%d" % random.randint(0, 9999999)).zfill(7)
  313. self.checkoutUI.nNumberLine.setText("%s" % nNumber)
  314. hashText = hashlib.md5(nNumber.encode('utf_8')).hexdigest( print ("HASHTEXT", hashText)
  315. )
  316. self.checkoutUI.hashLine.setText(hashText)
  317. idAdded = True
  318.  
  319. #TODO: Change query to reflect RFID information rather than N#
  320. query = QSqlQuery(db)
  321. query.prepare('SELECT n_number, email from users where rfid_md5 = ?;')
  322. query.addBindValue(hashText)
  323. query.exec_()
  324. while q'''
  325. Created on Jun 9, 2015
  326.  
  327. @author: n0268773
  328. '''
  329.  
  330. import hashlib
  331. import random
  332. import smtplib
  333. import sys
  334.  
  335. from PyQt4 import QtCore, QtGui
  336. from PyQt4.Qt import QAbstractItemView, QHeaderView, QTableWidgetItem, \
  337. QApplication
  338. from PyQt4.QtGui import QMainWindow
  339. from PyQt4.QtSql import QSqlDatabase, QSqlQuery
  340.  
  341. from checkin import CheckinWindow
  342. from checkout import CheckoutWindow
  343. from mainWindow import Ui_MainWindow
  344.  
  345. '''
  346. CheckinWindow and CheckoutWindow need this at top
  347.  
  348. try:
  349. from PyQt4.QtCore import QString
  350. except ImportError:
  351. # we are using Python3 so QString is not defined
  352. QString = str
  353. def _fromUtf8(s):
  354. return s
  355.  
  356.  
  357. '''
  358.  
  359.  
  360. class Main(QMainWindow):
  361. def __init__(self):
  362. super(Main, self).__init__()
  363. # build ui
  364. self.ui = Ui_MainWindow()
  365. self.ui.setupUi(self)
  366. global borrowedList
  367. global availableList
  368. availableList = {}
  369. borrowedList = {}
  370. self.updateAvailableTable()
  371. self.updateBorrowedTable()
  372. self.ui.availableTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  373. self.ui.borrowedTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  374. # Connect signals with responses
  375. self.ui.checkoutButton.clicked.connect(self.handleCheckout)
  376. self.ui.checkinButton.clicked.connect(self.handleCheckin)
  377. self.ui.pingButton.clicked.connect(self.handlePingButton)
  378. self.ui.borrowedTable.clicked.connect(self.handleBorrowedListChange)
  379.  
  380. def handlePingButton(self):
  381. nNumber = self.ui.pingButton.text().split(" ")
  382. #send_email()
  383. print("pinging", nNumber[1])
  384.  
  385. def handleBorrowedListChange(self):
  386. # Change the text borrowed phone text block
  387. rowNum = self.ui.borrowedTable.currentRow()
  388. nNumber = self.ui.borrowedTable.item(rowNum, self.ui.borrowedTable.columnCount()-1).text()
  389. text = self.ui.borrowedTable.item(rowNum,1).text()
  390.  
  391. # change ping button information
  392. self.ui.borrowedDeviceOwnerLabel.setText("Click the button below to request n%s to return the %s" % (nNumber, text))
  393. self.ui.pingButton.setText("Ping n%s" % nNumber)
  394. self.ui.pingButton.setEnabled(True)
  395.  
  396. def handleCheckin(self):
  397. global checkinWindow
  398. checkinWindow = Checkin()
  399. checkinWindow.show()
  400.  
  401. def handleCheckout(self):
  402. global checkoutWidget
  403. checkoutWidget = Checkout()
  404. checkoutWidget.show()
  405.  
  406. def updateBorrowedTable(self):
  407. global borrowedList
  408. borrowedList = {}
  409. borrowedTable = self.ui.borrowedTable
  410. query = QSqlQuery(db)
  411. query.exec_("SELECT * from test_phone_table;")
  412.  
  413. row = 0
  414. borrowedTable.setColumnCount(6)
  415. borrowedTable.setColumnWidth(0,50)
  416. borrowedTable.setRowCount(0)
  417. borrowedTable.verticalHeader().setVisible(False)
  418. for i in range (0, borrowedTable.columnCount()):
  419. borrowedTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  420.  
  421. borrowedTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  422. borrowedTable.setSelectionMode(QAbstractItemView.SingleSelection)
  423.  
  424. while query.next():
  425. record = query.record()
  426. if record.value(record.count()-1) == 'true':
  427. borrowedList[record.value(0)] = record.value(1)
  428. borrowedTable.setRowCount(row+1)
  429. for col in range(0, record.count()):
  430. if isinstance(record.value(col), int):
  431. item = QTableWidgetItem()
  432. item.setData(QtCore.Qt.EditRole, record.value(col))
  433. borrowedTable.setItem(row, col, item)
  434. else:
  435. item = QTableWidgetItem(record.value(col))
  436. borrowedTable.setItem(row, col, item)
  437.  
  438. row = row+1
  439.  
  440. borrowedTable.show()
  441.  
  442. def updateAvailableTable(self):
  443. availableTable = self.ui.availableTable
  444. availableTable.setFocusPolicy(QtCore.Qt.NoFocus)
  445. query = QSqlQuery(db)
  446. query.exec_("SELECT * from test_phone_table;")
  447.  
  448. availableTable.setColumnCount(5)
  449. availableTable.setColumnWidth(0,50)
  450. availableTable.setRowCount(0)
  451. availableTable.verticalHeader().setVisible(False)
  452. for i in range (0, availableTable.columnCount()):
  453. availableTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  454.  
  455. availableTable.setSelectionMode(QAbstractItemView.NoSelection)
  456. global availableList
  457. availableList = {}
  458. row = 0
  459. while query.next():
  460. record = query.record()
  461. if record.value(record.count()-1) == 'false':
  462. availableList[record.value(0)] = record.value(1)
  463. availableTable.setRowCount(row+1)
  464. for col in range(0, record.count()):
  465. if isinstance(record.value(col), int):
  466. item = QTableWidgetItem()
  467. item.setData(QtCore.Qt.EditRole, record.value(col))
  468. availableTable.setItem(row, col, item)
  469. else:
  470. item = QTableWidgetItem(record.value(col))
  471. availableTable.setItem(row, col, item)
  472.  
  473. row = row+1
  474. else:
  475. self.ui.borrowedDeviceOwnerLabel.setText("Select a borrowed device to ping borrower")
  476. availableTable.show()
  477.  
  478.  
  479. class Checkin(QMainWindow):
  480. def __init__(self):
  481. super(Checkin, self).__init__()
  482. # build ui
  483. self.checkinUI = CheckinWindow()
  484. self.checkinUI.setupUi(self)
  485. self.checkinUI.doneButton.clicked.connect(self.handleDone)
  486. self.checkinUI.removeDeviceButton.clicked.connect(self.removeDevice)
  487. self.checkinUI.deviceButton.clicked.connect(self.addDevice)
  488.  
  489. returningDeviceTable = self.checkinUI.returningDeviceTable
  490. returningDeviceTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  491. returningDeviceTable.setRowCount(0)
  492. returningDeviceTable.setColumnCount(2)
  493. returningDeviceTable.setColumnWidth(0, 50)
  494. returningDeviceTable.verticalHeader().setVisible(False)
  495. for i in range (0, returningDeviceTable.columnCount()):
  496. returningDeviceTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  497.  
  498. returningDeviceTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  499. returningDeviceTable.setSelectionMode(QAbstractItemView.SingleSelection)
  500.  
  501. def addDevice(self):
  502. if borrowedList:
  503. randPhone = random.choice(list(borrowedList.keys()))
  504. row = self.checkinUI.returningDeviceTable.rowCount()
  505. self.checkinUI.returningDeviceTable.setRowCount((row + 1))
  506. item = QTableWidgetItem()
  507. item.setData(QtCore.Qt.EditRole,randPhone)
  508. self.checkinUI.returningDeviceTable.setItem(row, 0, item)
  509. self.checkinUI.returningDeviceTable.setItem(row, 1, QTableWidgetItem(borrowedList[randPhone]))
  510. self.checkinUI.returningDeviceTable.show()
  511.  
  512. def handleDone(self):
  513. returningDeviceTable = self.checkinUI.returningDeviceTable
  514. for row in range (0, returningDeviceTable.rowCount()):
  515. ID = int(returningDeviceTable.item(row, 0).text())
  516. query = QSqlQuery(db)
  517. query.prepare('update test_phone_table set borrower_n_number = ?, borrowed = ? where ID = ?')
  518. query.addBindValue("")
  519. query.addBindValue('false')
  520. query.addBindValue(ID)
  521. query.exec_()
  522.  
  523. mainClass.updateAvailableTable()
  524. mainClass.updateBorrowedTable()
  525. self.close()
  526.  
  527. def removeDevice(self):
  528. returningDeviceTable = self.checkinUI.returningDeviceTable
  529. returningDeviceTable.removeRow(returningDeviceTable.currentRow())
  530. returningDeviceTable.setAlternatingRowColors(False)
  531. returningDeviceTable.setAlternatingRowColors(True)
  532.  
  533.  
  534. class Checkout(QMainWindow):
  535.  
  536. def __init__(self):
  537. super(Checkout, self).__init__()
  538. # build ui
  539. self.checkoutUI = CheckoutWindow()
  540. self.checkoutUI.setupUi(self)
  541. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  542. requestedDeviceTable.setEditTriggers(QAbstractItemView.NoEditTriggers)
  543. self.checkoutUI.removeDeviceButton.clicked.connect(self.removeDevice)
  544. self.checkoutUI.doneButton.clicked.connect(self.handleDone)
  545. self.checkoutUI.cancelButton.clicked.connect(self.handleCancel)
  546. self.checkoutUI.idButton.clicked.connect(self.handleID)
  547.  
  548. global idAdded
  549. idAdded = False
  550. self.checkoutUI.doneButton.setDisabled(True)
  551.  
  552. requestedDeviceTable.setRowCount(0)
  553. requestedDeviceTable.setColumnCount(2)
  554. requestedDeviceTable.setColumnWidth(0, 50)
  555. requestedDeviceTable.verticalHeader().setVisible(False)
  556. for i in range (0, requestedDeviceTable.columnCount()):
  557. requestedDeviceTable.horizontalHeader().setResizeMode(i, QHeaderView.Stretch)
  558.  
  559. requestedDeviceTable.setSelectionBehavior(QAbstractItemView.SelectRows)
  560. requestedDeviceTable.setSelectionMode(QAbstractItemView.SingleSelection)
  561. #setup validation for text fields
  562. nRegex = QtCore.QRegExp('^(n|N)*\d{7}$')
  563. emaillRegex = QtCore.QRegExp('^[^@]+@[^@]+\.[^@]+$')
  564. nValidator = QtGui.QRegExpValidator(nRegex)
  565. emailValidator = QtGui.QRegExpValidator(emaillRegex)
  566. nNumberLine = self.checkoutUI.nNumberLine;
  567. nNumberLine.setValidator(nValidator)
  568. emailLine = self.checkoutUI.emailLine
  569. emailLine.setValidator(emailValidator)
  570. self.checkoutUI.hashLine.setDisabled(True)
  571.  
  572.  
  573. #connect validator to change in text
  574.  
  575. global nNumberCheck
  576. global emailCheck
  577. nNumberCheck = False
  578. emailCheck = False
  579. nNumberLine.textChanged.connect(self.checkNLine)
  580. nNumberLine.textChanged.emit(nNumberLine.text())
  581. emailLine.textChanged.connect(self.checkEmailLine)
  582. emailLine.textChanged.emit(emailLine.text())
  583.  
  584. nNumberLine.textChanged.connect(self.buttonEnabler)
  585. emailLine.textChanged.connect(self.buttonEnabler)
  586.  
  587. def buttonEnabler (self):
  588. global nNumberCheck, emailCheck
  589. if nNumberCheck and emailCheck:
  590. self.checkoutUI.doneButton.setDisabled(False)
  591. self.checkoutUI.requiredFieldsLabel.hide()
  592. else:
  593. self.checkoutUI.doneButton.setDisabled(True)
  594. self.checkoutUI.requiredFieldsLabel.show()
  595.  
  596. def checkNLine(self, *args, **kwargs):
  597. sender = self.sender()
  598. validator = sender.validator()
  599. state = validator.validate(sender.text(), 0)[0]
  600. global nNumberCheck
  601.  
  602. if state == QtGui.QValidator.Acceptable:
  603. nNumberCheck = True
  604. color = '#c4df9b' # green
  605. elif state == QtGui.QValidator.Intermediate:
  606. nNumberCheck = False
  607. color = '#fff79a' # yellow
  608. else:
  609. nNumberCheck = False
  610. color = '#f6989d' # red
  611. sender.setStyleSheet('QLineEdit { background-color: %s }' % color)
  612.  
  613. def checkEmailLine(self, *args, **kwargs):
  614. global emailCheck
  615. sender = self.sender()
  616. validator = sender.validator()
  617. state = validator.validate(sender.text(), 0)[0]
  618. if state == QtGui.QValidator.Acceptable:
  619. emailCheck = True
  620. color = '#c4df9b' # green
  621. elif state == QtGui.QValidator.Intermediate:
  622. emailCheck = False
  623. color = '#fff79a' # yellow
  624. else:
  625. emailCheck = False
  626. color = '#f6989d' # red
  627. sender.setStyleSheet('QLineEdit { background-color: %s }' % color)
  628.  
  629. def handleID(self):
  630. self.addDevice()
  631. global idAdded
  632. nNumber = ""
  633. hashText = ''
  634. if not idAdded:
  635. nNumber = "%s" % ("%d" % random.randint(0, 9999999)).zfill(7)
  636. self.checkoutUI.nNumberLine.setText("%s" % nNumber)
  637. hashText = hashlib.md5(nNumber.encode('utf_8')).hexdigest( print ("HASHTEXT", hashText)
  638. )
  639. self.checkoutUI.hashLine.setText(hashText)
  640. idAdded = True
  641.  
  642. #TODO: Change query to reflect RFID information rather than N#
  643. query = QSqlQuery(db)
  644. query.prepare('SELECT n_number, email from users where rfid_md5 = ?;')
  645. query.addBindValue(hashText)
  646. query.exec_()
  647. while query.next():
  648. record = query.record()
  649. self.checkoutUI.nNumberLine.setText(record.value(0))
  650. self.checkoutUI.nNumberLine.setDisabled(True)
  651. self.checkoutUI.emailLine.setText(record.value(1))
  652. self.checkoutUI.emailLine.setDisabled(True)
  653.  
  654. def removeDevice(self):
  655. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  656. requestedDeviceTable.removeRow(requestedDeviceTable.currentRow())
  657. requestedDeviceTable.setAlternatingRowColors(False)
  658. requestedDeviceTable.setAlternatingRowColors(True)
  659.  
  660. def handleDone(self):
  661. #write to DB
  662. #remove from available
  663. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  664. nNumber = self.checkoutUI.nNumberLine.text()
  665. email = self.checkoutUI.emailLine.text()
  666. hashText = self.checkoutUI.hashLine.text()
  667. query = QSqlQuery(db)
  668. for row in range (0, requestedDeviceTable.rowCount()):
  669. ID = int(requestedDeviceTable.item(row, 0).text())
  670. query.prepare('update test_phone_table set borrower_n_number = ?, borrowed = ? where ID = ?')
  671. query.addBindValue(nNumber)
  672. query.addBindValue('true')
  673. query.addBindValue(ID)
  674. query.exec_()
  675. query.prepare('insert into users (n_number, email, rfid_md5) values (?, ?, ?)')
  676. query.addBindValue(nNumber)
  677. query.addBindValue(email)
  678. query.addBindValue(hashText)
  679. query.exec_()
  680. mainClass.updateAvailableTable()
  681. mainClass.updateBorrowedTable()
  682. self.close()
  683.  
  684. def handleCancel(self):
  685. self.close()
  686.  
  687. def addDevice(self):
  688. global availableList
  689. if availableList:
  690. randPhone = random.choice(list(availableList.keys()))
  691. row = self.checkoutUI.requestedDeviceTable.rowCount()
  692. self.checkoutUI.requestedDeviceTable.setRowCount((row + 1))
  693. item = QTableWidgetItem()
  694. item.setData(QtCore.Qt.EditRole,randPhone)
  695. self.checkoutUI.requestedDeviceTable.setItem(row, 0, item)
  696. self.checkoutUI.requestedDeviceTable.setItem(row, 1, QTableWidgetItem(availableList[randPhone]))
  697. self.checkoutUI.requestedDeviceTable.show(
  698. )
  699.  
  700. def send_email():
  701. gmail_user = "nirmalspeedisfast@gmail.com"
  702. gmail_pwd = "12814551"
  703. TO = 'nirmalspeedisfast@gmail.com'
  704. SUBJECT = "Testing sending using gmail"
  705. TEXT = "Testing sending mail using gmail servers"
  706. server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
  707. server.ehlo()
  708. server.starttls()
  709. server.login(gmail_user, gmail_pwd)
  710. BODY = '\r\n'.join(['To: %s' % TO,
  711. 'From: %s' % gmail_user,
  712. 'Subject: %s' % SUBJECT,
  713. '', TEXT])
  714.  
  715. server.sendmail(gmail_user, [TO], BODY)
  716. print ('email sent')
  717.  
  718.  
  719. if __name__ == '__main__':
  720. app = QApplication(sys.argv)
  721. global db
  722. db = QSqlDatabase.addDatabase("QSQLITE")
  723. db.setDatabaseName("test.sqlite")
  724. db.open()
  725. # db = QSqlDatabase.addDatabase('QODBC')
  726. # db.setDatabaseName('Driver={SQL Server Native Client 11.0};Server=(localdb)\\v11.0;')
  727. # ok = db.open()
  728. lastError = db.lastError().text()
  729. if not lastError:
  730. print (lastError)
  731.  
  732. global mainClass
  733.  
  734. mainClass = Main()
  735. checkoutWidget = Checkout
  736. mainClass.show()
  737.  
  738.  
  739.  
  740. sys.exit(app.exec_())
  741. uery.next():
  742. record = query.record()
  743. self.checkoutUI.nNumberLine.setText(record.value(0))
  744. self.checkoutUI.nNumberLine.setDisabled(True)
  745. self.checkoutUI.emailLine.setText(record.value(1))
  746. self.checkoutUI.emailLine.setDisabled(True)
  747.  
  748. def removeDevice(self):
  749. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  750. requestedDeviceTable.removeRow(requestedDeviceTable.currentRow())
  751. requestedDeviceTable.setAlternatingRowColors(False)
  752. requestedDeviceTable.setAlternatingRowColors(True)
  753.  
  754. def handleDone(self):
  755. #write to DB
  756. #remove from available
  757. requestedDeviceTable = self.checkoutUI.requestedDeviceTable
  758. nNumber = self.checkoutUI.nNumberLine.text()
  759. email = self.checkoutUI.emailLine.text()
  760. hashText = self.checkoutUI.hashLine.text()
  761. query = QSqlQuery(db)
  762. for row in range (0, requestedDeviceTable.rowCount()):
  763. ID = int(requestedDeviceTable.item(row, 0).text())
  764. query.prepare('update test_phone_table set borrower_n_number = ?, borrowed = ? where ID = ?')
  765. query.addBindValue(nNumber)
  766. query.addBindValue('true')
  767. query.addBindValue(ID)
  768. query.exec_()
  769. query.prepare('insert into users (n_number, email, rfid_md5) values (?, ?, ?)')
  770. query.addBindValue(nNumber)
  771. query.addBindValue(email)
  772. query.addBindValue(hashText)
  773. query.exec_()
  774. mainClass.updateAvailableTable()
  775. mainClass.updateBorrowedTable()
  776. self.close()
  777.  
  778. def handleCancel(self):
  779. self.close()
  780.  
  781. def addDevice(self):
  782. global availableList
  783. if availableList:
  784. randPhone = random.choice(list(availableList.keys()))
  785. row = self.checkoutUI.requestedDeviceTable.rowCount()
  786. self.checkoutUI.requestedDeviceTable.setRowCount((row + 1))
  787. item = QTableWidgetItem()
  788. item.setData(QtCore.Qt.EditRole,randPhone)
  789. self.checkoutUI.requestedDeviceTable.setItem(row, 0, item)
  790. self.checkoutUI.requestedDeviceTable.setItem(row, 1, QTableWidgetItem(availableList[randPhone]))
  791. self.checkoutUI.requestedDeviceTable.show(
  792. )
  793.  
  794. def send_email():
  795. gmail_user = "nirmalspeedisfast@gmail.com"
  796. gmail_pwd = "12814551"
  797. TO = 'nirmalspeedisfast@gmail.com'
  798. SUBJECT = "Testing sending using gmail"
  799. TEXT = "Testing sending mail using gmail servers"
  800. server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
  801. server.ehlo()
  802. server.starttls()
  803. server.login(gmail_user, gmail_pwd)
  804. BODY = '\r\n'.join(['To: %s' % TO,
  805. 'From: %s' % gmail_user,
  806. 'Subject: %s' % SUBJECT,
  807. '', TEXT])
  808.  
  809. server.sendmail(gmail_user, [TO], BODY)
  810. print ('email sent')
  811.  
  812.  
  813. if __name__ == '__main__':
  814. app = QApplication(sys.argv)
  815. global db
  816. db = QSqlDatabase.addDatabase("QSQLITE")
  817. db.setDatabaseName("test.sqlite")
  818. db.open()
  819. # db = QSqlDatabase.addDatabase('QODBC')
  820. # db.setDatabaseName('Driver={SQL Server Native Client 11.0};Server=(localdb)\\v11.0;')
  821. # ok = db.open()
  822. lastError = db.lastError().text()
  823. if not lastError:
  824. print (lastError)
  825.  
  826. global mainClass
  827.  
  828. mainClass = Main()
  829. checkoutWidget = Checkout
  830. mainClass.show()
  831.  
  832.  
  833.  
  834. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement