Guest User

Untitled

a guest
May 10th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.76 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. # work with windows
  5. import sys
  6.  
  7. from PyQt5.QtCore import Qt
  8. from PyQt5.QtWidgets import QApplication, QMessageBox, QTabWidget
  9. from PyQt5 import uic
  10. import psycopg2
  11.  
  12. Ui_WindowLogin, QLogIn = uic.loadUiType('login.ui')
  13. Ui_MainWindow, QMainWindow = uic.loadUiType('mainwindow.ui')
  14. Ui_WindowRegistration, QRegistration = uic.loadUiType('registration.ui')
  15. Ui_WindowTicket, QTicket = uic.loadUiType('ticket.ui')
  16. Ui_WindowChangeInfo, QChangeInfo = uic.loadUiType('changeinfo.ui')
  17. Ui_Profile, QProfile = uic.loadUiType('profile.ui')
  18. Ui_Admin, QAdmin = uic.loadUiType('adminwindow.ui')
  19.  
  20.  
  21. class ErrorMessage:
  22. def __init__(self, title="", message=""):
  23. msgBox = QMessageBox()
  24. msgBox.setIcon(QMessageBox.Warning)
  25. msgBox.setWindowTitle(title)
  26. msgBox.setText(message)
  27. msgBox.setStandardButtons(QMessageBox.Ok)
  28. msgBox.exec_()
  29.  
  30.  
  31. class LogInWindow(QLogIn):
  32. def __init__(self, parent=None):
  33.  
  34. QLogIn.__init__(self, parent)
  35. self.connect = psycopg2.connect(database='db_project', user='kirill', host='localhost', password='25112458')
  36.  
  37. self.ui = Ui_WindowLogin()
  38. self.ui.setupUi(self)
  39. # query_Text - здесь название поля из названия элементов в qtcreator
  40. self.ui.line_login.setText("email, например")
  41. self.ui.line_password.setText("Ваш пароль")
  42.  
  43. self.ui.sign_up_button.clicked.connect(
  44. lambda: self.parent().replace_with(RegistrationWindow())
  45. )
  46. self.ui.sign_in_button.clicked.connect(self.__execute_login)
  47.  
  48. def __del__(self):
  49. self.cursor.close()
  50. self.connect.close()
  51. self.ui = None
  52.  
  53. def __execute_login(self):
  54. try:
  55. self.cursor = self.connect.cursor()
  56. login = self.ui.line_login.text()
  57. password = self.ui.line_password.text()
  58.  
  59. self.cursor.execute(
  60. """SELECT user_id, name ,surname, login , status, passport_num,
  61. phone_number,password
  62. from users WHERE login=%s AND password=%s""",
  63. (login, password))
  64. user = self.cursor.fetchone()
  65. if not user:
  66. ErrorMessage('Warning', 'Invalid Username And Password')
  67. raise Exception("USER NOT EXISTS")
  68.  
  69. # creat instance of user in current session
  70. Current_User.set(user)
  71.  
  72. # !!!!!!!!
  73. if Current_User.status == "admin":
  74. self.parent().replace_with(AdminWindow())
  75. else:
  76. self.parent().replace_with(ProfileWindow())
  77.  
  78. except Exception as e:
  79. self.connect.rollback()
  80. print(e)
  81.  
  82. # обработка нажатия на "enter"
  83. def keyPressEvent(self, event):
  84. if event.key() == Qt.Key_Return and self.ui.line_login.hasFocus() \
  85. and self.ui.line_password.hasFocus():
  86. self.__execute_login()
  87.  
  88.  
  89. class ProfileWindow(QProfile):
  90. def __init__(self, parent=None):
  91. QProfile.__init__(self, parent)
  92. self.connect = psycopg2.connect(database='db_project', user='kirill', host='localhost', password='25112458')
  93. self.cursor = self.connect.cursor()
  94.  
  95. self.ui = Ui_Profile()
  96. self.ui.setupUi(self)
  97.  
  98. # self.ui.button_buy.clicked.connect(lambda: self.parent().replace_with(BuyTicketWindow()))
  99. self.ui.button_change.clicked.connect(lambda: self.parent().replace_with(ChangeInfoWindow()))
  100.  
  101. # display user info
  102. self.ui.label_name.setText(Current_User.name if Current_User.name != "" else "[No data]")
  103. self.ui.label_surname.setText(Current_User.surname if Current_User.name != "" else "[No data]")
  104. self.ui.label_login.setText(Current_User.login if Current_User.login != "" else "[No data]")
  105. self.ui.label_password.setText(Current_User.password if Current_User.password != "" else "[No data]")
  106. self.ui.label_passport.setText(Current_User.passport_num if Current_User.passport_num != "" else "[No data]")
  107. self.ui.label_phone.setText(Current_User.phone_number if Current_User.phone_number != "" else "[No data]")
  108.  
  109. # combobox: watch a list of bought tickets
  110. self.cursor.execute("SELECT ticket_id from tickets WHERE user_id=%s", (Current_User.user_id,))
  111. result = self.cursor.fetchall()
  112. for ticket in result:
  113. self.ui.comboBox_tickets.addItem(str(ticket))
  114.  
  115.  
  116. # Current_Ticket.set(ticket)
  117.  
  118. self.ui.comboBox_tickets.activated[str].connect(lambda: self.parent().replace_with(TicketWindow()))
  119.  
  120. def __del__(self):
  121. self.cursor.close()
  122. self.connect.close()
  123. self.ui = None
  124.  
  125.  
  126. class RegistrationWindow(QRegistration):
  127. def __init__(self, parent=None):
  128. QRegistration.__init__(self, parent)
  129. self.connect = psycopg2.connect(database='db_project', user='kirill', host='localhost', password='25112458')
  130.  
  131. self.ui = Ui_WindowRegistration()
  132. self.ui.setupUi(self)
  133.  
  134. self.ui.sign_up_button.clicked.connect(self.__execute_sign)
  135.  
  136. def __execute_sign(self):
  137. try:
  138. self.cursor = self.connect.cursor()
  139. name = self.ui.line_name.text()
  140. surname = self.ui.line_surname.text()
  141. passport = self.ui.line_passport.text()
  142. login = self.ui.line_login.text()
  143. password = self.ui.line_password.text()
  144.  
  145. self.cursor.execute(
  146. "INSERT INTO users (name, surname,passport_num,login,password) VALUES (%s,%s,%s,%s,%s)",
  147. (name, surname, passport, login, password))
  148. self.connect.commit()
  149.  
  150. # creat instance of user in current session
  151. self.cursor.execute("SELECT user_id from users WHERE passport_num=%s", (passport,))
  152. user_id = self.cursor.fetchone()
  153. user = (user_id[0], name, surname, login, "user", passport, None, password)
  154. Current_User.set(user)
  155. # end of creating
  156.  
  157. self.parent().replace_with(ProfileWindow())
  158.  
  159. except Exception as e:
  160. self.connect.rollback()
  161. print(e)
  162.  
  163. def __del__(self):
  164. self.cursor.close()
  165. self.connect.close()
  166. self.ui = None
  167.  
  168.  
  169. class MainWindow(QMainWindow):
  170. def __init__(self, parent=None):
  171. QMainWindow.__init__(self, parent)
  172. self.ui = Ui_MainWindow()
  173. self.ui.setupUi(self)
  174.  
  175. # переходим на окно log in
  176. self.current_widget = LogInWindow()
  177. self.ui.main_layout.addWidget(self.current_widget)
  178.  
  179. def replace_with(self, new_widget):
  180. self.ui.main_layout.replaceWidget(self.current_widget, new_widget)
  181. self.current_widget.setParent(None)
  182. self.current_widget = new_widget
  183.  
  184. def __del__(self):
  185. self.ui = None
  186.  
  187.  
  188. class ChangeInfoWindow(QChangeInfo):
  189. def __init__(self, parent=None):
  190. QChangeInfo.__init__(self, parent)
  191. self.ui = Ui_WindowChangeInfo()
  192. self.ui.setupUi(self)
  193.  
  194. self.ui.nameLine.setText(Current_User.name)
  195. self.ui.surnameLine.setText(Current_User.surname)
  196. self.ui.passporLine.setText(Current_User.passport_num)
  197. self.ui.phoneLine.setText(Current_User.phone_number)
  198. self.ui.loginLine.setText(Current_User.login)
  199. self.ui.passwordLine.setText(Current_User.password)
  200.  
  201. self.ui.buttonDone.clicked.connect(self.saveInfo())
  202.  
  203. # saves new information about user, checks it for validity
  204. def saveInfo(self):
  205. newName = self.ui.nameLine.text()
  206. newSurname = self.ui.surnameLine.text()
  207. newPassport = self.ui.passporLine.text()
  208. newPhone = self.ui.phoneLine.text()
  209. newLogin = self.ui.loginLine.text()
  210. newPassword = self.ui.passwordLine.text()
  211.  
  212. try:
  213. self.connect = psycopg2.connect(database='db_project', user='kirill', host='localhost', password='25112458')
  214. self.cursor = self.connect.cursor()
  215. self.cursor.execute("""SELECT user_id FROM users WHERE passport_num = %s""", (newPassport,))
  216. if not self.cursor.fetchone():
  217. ErrorMessage('Error', 'This user already exists')
  218.  
  219. self.cursor.execute("""SELECT user_id FROM users WHERE login = %s""", (newLogin,))
  220. if not self.cursor.fetchone():
  221. ErrorMessage('Error', 'The user with this login already exists')
  222.  
  223. self.cursor.execute(
  224. """UPDATE users SET name = %s, surname=%s, login=%s, password=%s, passport_num=%s, phone_number=%s,""",
  225. (newName, newSurname, newLogin, newPassword, newPassport, newPhone))
  226. self.connect.commit()
  227. except Exception as e:
  228. self.connect.rollback()
  229. print(e)
  230.  
  231. # Modify user in current session
  232. Current_User.set((Current_User.user_id, newName, newSurname, newLogin, "user", newPassport, newPhone,
  233. newPassword))
  234.  
  235. self.parent().replace_with(ProfileWindow())
  236.  
  237. def __del__(self):
  238. self.cursor.close()
  239. self.connect.close()
  240. self.ui = None
  241.  
  242.  
  243. class TicketWindow(QTicket):
  244. def __init__(self, parent=None): # , ticket_id=None):
  245. # ticket_id needs for display appropriate ticket
  246. # self.ticket_id = ticket_id
  247.  
  248. QTicket.__init__(self, parent)
  249. self.ui = Ui_WindowTicket()
  250. self.ui.setupUi(self)
  251. try:
  252. self.connect = psycopg2.connect(database='db_project', user='kirill', host='localhost', password='25112458')
  253. self.cursor = self.connect.cursor()
  254.  
  255. # getting info about ticket from db
  256. self.cursor.execute("""SELECT flight_id, plane_id, seat_id, tariff_id FROM tickets WHERE ticket_id=%s""",
  257. (Current_Ticket.ticket_id,)) # (self.ticket_id,))
  258. ticket = self.cursor.fetchone()
  259. # здесь нужно добавить rowFactory в перспективе
  260. self.cursor.execute("""SELECT departure, destination FROM flights WHERE flight_id = %s""", (ticket[0],))
  261. flightDirection = self.cursor.fetchone()
  262. self.cursor.execute("""SELECT company FROM planes WHERE plane_id=%s""", (ticket[1],))
  263. airline = self.cursor.fetchone()
  264. self.cursor.execute("""SELECT price, large_luggage FROM tariff WHERE tariff_id = %s""", (ticket[3],))
  265. tariff = self.cursor.fetchone()
  266. except Exception as e:
  267. self.connect.rollback()
  268. print(e)
  269.  
  270. # putting info into window
  271. outDeparture = self.ui.departure
  272. outDeparture.setText(flightDirection[0])
  273.  
  274. outDestination = self.ui.destination
  275. outDestination.setText(flightDirection[1])
  276.  
  277. outAirline = self.ui.airline
  278. outAirline.setText(airline[0])
  279.  
  280. outSeat = self.ui.seat
  281. outSeat.setText(str(ticket[2]))
  282.  
  283. outPrice = self.ui.price
  284. outPrice.setText(str(tariff[0]))
  285.  
  286. outLuggage = self.ui.lagguge
  287. outLuggage.setText("Услуга куплена" if tariff[1] else "Услуга не куплена")
  288.  
  289. self.ui.pushButtonOk.clicked.connect(
  290. lambda: self.parent().replace_with(ProfileWindow())
  291. )
  292.  
  293. self.ui.returnTicket.clicked.connect(self.returnTick)
  294.  
  295. def returnTick(self):
  296. self.cursor.execute("""DELETE FROM tickets WHERE ticket_id = %s""", (Current_Ticket.ticket_id,))
  297. self.connect.commit()
  298. self.parent().replace_with(ProfileWindow())
  299.  
  300. def __del__(self):
  301. self.cursor.close()
  302. self.connect.close()
  303. self.ui = None
  304.  
  305.  
  306. class AdminWindow(QAdmin):
  307. def __init__(self, parent=None):
  308. QAdmin.__init__(self, parent)
  309.  
  310. self.ui = Ui_Admin()
  311. self.ui.setupUi(self)
  312.  
  313. self.ui.users.setTitle(";lsd;la,")
  314.  
  315.  
  316. class Ticket():
  317. def __init__(self):
  318. self.ticket_id = None
  319.  
  320. def set(self, ticket=None):
  321. self.ticket_id = ticket
  322.  
  323.  
  324. class User():
  325. def __init__(self):
  326. self.user_id = None
  327. self.name = ""
  328. self.surname = ""
  329. self.login = ""
  330. self.status = "user"
  331. self.passport_num = ""
  332. self.phone_number = ""
  333. self.password = ""
  334.  
  335. def set(self, user=(None, "", "", "", "user", "", "", "")):
  336. self.user_id = user[0]
  337. self.name = user[1]
  338. self.surname = user[2]
  339. self.login = user[3]
  340. self.status = user[4]
  341. self.passport_num = user[5]
  342. self.phone_number = user[6]
  343. self.password = user[7]
  344.  
  345.  
  346. if __name__ == '__main__':
  347. # пользователь в сессии
  348. global Current_User
  349. Current_User = User()
  350. global Current_Ticket
  351. Current_Ticket = Ticket()
  352.  
  353. app = QApplication(sys.argv)
  354. # создаем окно
  355. w = MainWindow()
  356. w.setWindowTitle("Air ticket")
  357. w.show()
  358.  
  359. # w = AdminWindow()
  360. # w.setWindowTitle("ajksnd")
  361. # w.show()
  362.  
  363. # enter tha main loop
  364. sys.exit(app.exec_())
Add Comment
Please, Sign In to add comment