Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.07 KB | None | 0 0
  1. import sys, sqlite3, time, datetime
  2. from PyQt5.QtWidgets import (QApplication, QVBoxLayout, QMainWindow, QPushButton, QFormLayout, QGroupBox, QWidget,
  3. QLabel, QComboBox, QFileDialog)
  4. import xlsxwriter
  5. import os
  6. import datetime
  7. import sqlite3 as sql
  8. from PyQt5.QtWidgets import QApplication, QDialog, QTableWidgetItem
  9. from design.UiAdmissionDialog import Ui_AdmissionDialog
  10. from design.main import Ui_MainWindow
  11. from design.UiAddComponentDialog import Ui_AddComponentDialog
  12. from design.index import Ui_IndexWindow
  13. import xlrd, xlwt
  14. from openpyxl import load_workbook
  15. from design.rem import Ui_RemWindow
  16. from design.analizis import Ui_AnalizWindow
  17.  
  18. f1 = ""
  19. f2 = ""
  20. f3 = ""
  21.  
  22.  
  23. class MainWidget(QMainWindow, Ui_IndexWindow):
  24. def __init__(self):
  25. super().__init__()
  26. self.setupUi(self)
  27. self.pushButton_input_complect.clicked.connect(self.open_complect)
  28. self.pushButton_load_form.clicked.connect(self.open_load_form)
  29. self.pushButton_remains_complect.clicked.connect(self.open_rem)
  30.  
  31. def open_rem(self):
  32. self.n = Remeins()
  33. self.close()
  34. self.n.show()
  35.  
  36. def open_complect(self):
  37. self.n = AdmissionDialog()
  38. self.close()
  39. self.n.show()
  40.  
  41. def open_load_form(self):
  42. self.n = MyWidget()
  43. self.close()
  44. self.n.show()
  45.  
  46.  
  47. class MyWidget(QMainWindow, Ui_MainWindow):
  48. def __init__(self):
  49. super().__init__()
  50. self.setupUi(self)
  51. self.pushButton_add_file_drons.clicked.connect(self.ch_exel_drons)
  52. self.pushButton_add_file_complect.clicked.connect(self.ch_exel_complect)
  53. self.pushButton_add_fil_tech_map.clicked.connect(self.ch_exel_tech_map)
  54. self.pushButton_close.clicked.connect(self.close_w)
  55. self.pushButton_load.clicked.connect(self.load)
  56.  
  57. def ch_exel_drons(self):
  58. global f1
  59. f1 = QFileDialog.getOpenFileName(self, 'Выбрать файл дронов')[0]
  60. self.lineEdit_drons.setText(f1)
  61.  
  62. def ch_exel_complect(self):
  63. global f2
  64. f2 = QFileDialog.getOpenFileName(self, 'Выбрать файл комплектующих')[0]
  65. self.lineEdit_complect.setText(f2)
  66.  
  67. def ch_exel_tech_map(self):
  68. global f3
  69. f3 = QFileDialog.getOpenFileName(self, 'Выбрать файл Тех. карт')[0]
  70. self.lineEdit_tech_map.setText(f3)
  71.  
  72. def close_w(self):
  73. self.close()
  74.  
  75. def load(self):
  76. con = sqlite3.connect("ABP_db.db")
  77. cur = con.cursor()
  78.  
  79. wb = load_workbook(f1)
  80.  
  81. sheet = wb.get_sheet_by_name(wb.get_sheet_names()[0])
  82. i = 2
  83. while (1 == 1):
  84. if sheet['A' + str(i)].value == None:
  85. break
  86. else:
  87. num_dr = sheet['A' + str(i)].value
  88. name_dr = sheet['B' + str(i)].value
  89. price_dr = sheet['C' + str(i)].value
  90. print(num_dr, name_dr, price_dr)
  91. try:
  92. price_dr = float(price_dr)
  93. except Exception as e:
  94. i += 1
  95. continue
  96. cur.execute(f"""INSERT INTO Drones (number, name, price) VALUES ({num_dr}, '{name_dr}', {price_dr})""")
  97. con.commit()
  98. i += 1
  99. con.commit()
  100.  
  101. wb = load_workbook(f2)
  102. sheet = wb.get_sheet_by_name(wb.get_sheet_names()[0])
  103.  
  104. i = 2
  105. while (1 == 1):
  106. if sheet['A' + str(i)].value == None:
  107. break
  108. else:
  109. num = sheet['A' + str(i)].value
  110. name = sheet['B' + str(i)].value
  111. categ = sheet['C' + str(i)].value
  112. print(num, "----", name, "-----", categ)
  113. cur.execute(f"""INSERT INTO Components (number, name, category) VALUES ({num}, '{name}', '{categ}')""")
  114. i += 1
  115.  
  116. wb = load_workbook(f3)
  117.  
  118. sheet = wb.get_sheet_by_name(wb.get_sheet_names()[0])
  119. i = 2
  120. prev_num_tech = 0
  121. while (1 == 1):
  122. if sheet['B' + str(i)].value == None:
  123. break
  124. else:
  125. num_tech = sheet['A' + str(i)].value
  126. if num_tech is None:
  127. num_tech = prev_num_tech
  128. else:
  129. prev_num_tech = num_tech
  130. name_tech = sheet['B' + str(i)].value
  131. comp_tech = sheet['C' + str(i)].value
  132. count_tech = sheet['D' + str(i)].value
  133. try:
  134. count_tech = int(count_tech)
  135. except Exception as e:
  136. i += 1
  137. continue
  138. print(num_tech, "----", name_tech, "----", comp_tech, "----", count_tech)
  139. cur.execute(
  140. f"""INSERT INTO Maps (number, drone, component, count) VALUES ({num_tech}, '{name_tech}', '{comp_tech}', {count_tech})""")
  141. con.commit()
  142. i += 1
  143.  
  144.  
  145. import pyqtgraph
  146.  
  147.  
  148. class Analiz(QMainWindow, Ui_AnalizWindow):
  149. def __init__(self):
  150. super().__init__()
  151. self.setupUi(self)
  152. self.lineEdit_end.textChanged.connect(self.onChenged)
  153.  
  154. def onChenged(self):
  155. if (check(self.lineEdit_beg.text())) and (check(self.lineEdit_end.text())):
  156. str = list(map(int, self.lineEdit_beg.text().split(".")))
  157. be = datetime.datetime(str[2], str[1], str[0])
  158. str = list(map(int, self.lineEdit_end.text().split(".")))
  159.  
  160. self.graphicsView.clear()
  161. en = datetime.datetime(str[2], str[1], str[0])
  162. con = sqlite3.connect("ABP_db.db")
  163. cur = con.cursor()
  164. hist = cur.execute("SELECT * FROM Admissions").fetchall()
  165. gr = []
  166. for i in hist:
  167. if i[3] != '':
  168. gr.append(i)
  169.  
  170. delta = en - be
  171. be_d = list(map(int, self.lineEdit_beg.text().split('.')))
  172. p = 0
  173. c = 0
  174.  
  175. while (p < len(gr)):
  176. q = gr[p]
  177. da = list(map(int, q[5].split('.')))
  178. if (da[2] >= be_d[2]) and (da[1] >= be_d[1]) and (da[0] >= be_d[0]):
  179. break
  180. if q[3] != '':
  181. c += q[4]
  182. p += 1
  183.  
  184. delta_1 = datetime.datetime(2020, 3, 27) - datetime.datetime(2020, 3, 26)
  185. i = be
  186. ans = []
  187. ans_data = []
  188. ans.append(c)
  189. zn = 0
  190. ans_data.append(zn)
  191. while (en - i).days != 0:
  192. i += delta_1
  193. zn+=1
  194. data = list(map(int, i.date().strftime("%Y.%m.%d").split('.')))
  195. ans_data.append(zn) # i.date().strftime("%d.%m.%Y")
  196. data[2], data[0] = data[0], data[2]
  197. print(data)
  198. for j in gr:
  199. print(j)
  200. d1 = list(map(int,j[5].split('.')))
  201. print(d1)
  202. if d1 == data and j[3] != '':
  203. c += j[4]
  204. ans.append(c)
  205. print(ans)
  206. print(ans_data)
  207. self.graphicsView.plot(ans_data,ans, pen='g')
  208. else:
  209. self.graphicsView.clear()
  210. def check(str):
  211. if (len(str.split('.')) == 3):
  212. if (len(str.split('.')[0]) == 2) and (len(str.split('.')[1]) == 2) and len(str.split('.')[2]) == 4:
  213. return True
  214. else:
  215. return False
  216. else:
  217. return False
  218.  
  219.  
  220. def create_exel():
  221. con = sql.connect("ABP_db.db")
  222. cur = con.cursor()
  223. items = cur.execute(f"""SELECT * FROM Admissions""").fetchall()
  224. workbook = xlsxwriter.Workbook(
  225. 'История' + datetime.datetime.strftime(datetime.datetime.now(), "_%Y_%m_%d__%H_%M_%S") + '.xlsx')
  226. worksheet = workbook.add_worksheet()
  227. for row in range(len(items)):
  228. worksheet.write(row, 0, items[row][0])
  229. worksheet.write(row, 1, items[row][1])
  230. worksheet.write(row, 2, items[row][2])
  231. worksheet.write(row, 3, items[row][3])
  232. worksheet.write(row, 4, items[row][4])
  233. workbook.close()
  234.  
  235.  
  236. class Remeins(QMainWindow, Ui_RemWindow):
  237. def __init__(self):
  238. super().__init__()
  239. self.setupUi(self)
  240. self.pushButton_run.clicked.connect(self.run)
  241. self.pushButton_clode.clicked.connect(self.cl)
  242. self.lineEdit_data.setText(datetime.datetime.strftime(datetime.datetime.now(), "%d.%m.%Y"))
  243. self.pushButton_print.clicked.connect(self.print)
  244.  
  245. def print(self):
  246. con = sqlite3.connect("ABP_db.db")
  247. cur = con.cursor()
  248. date = self.lineEdit_data.text().split(".")
  249. hist = cur.execute("SELECT * FROM Admissions").fetchall()
  250. comp = cur.execute(f"""SELECT * FROM Components""").fetchall()
  251. count = dict()
  252. for i in comp:
  253. count[i[1]] = 0
  254. for i in hist:
  255. dt_hist = i[5].split(".")
  256. if (int(date[2]) >= int(dt_hist[2]) and int(date[1]) >= int(dt_hist[1]) and int(date[0]) >= int(
  257. dt_hist[0])):
  258. count[i[2]] += i[4]
  259.  
  260. workbook = xlsxwriter.Workbook('Остатки' + date[0] + "_" + date[1] + "_" + date[2] + '.xlsx')
  261. worksheet = workbook.add_worksheet()
  262. for row in range(len(count)):
  263. worksheet.write(row, 0, str(comp[row][0]))
  264. worksheet.write(row, 1, comp[row][1])
  265. worksheet.write(row, 2, count[comp[row][1]])
  266. workbook.close()
  267. os.startfile('Остатки' + date[0] + "_" + date[1] + "_" + date[2] + '.xlsx', "print")
  268.  
  269. def cl(self):
  270. self.close()
  271.  
  272. def run(self):
  273. con = sqlite3.connect("ABP_db.db")
  274. cur = con.cursor()
  275. date = self.lineEdit_data.text().split(".")
  276. hist = cur.execute("SELECT * FROM Admissions").fetchall()
  277. print(hist)
  278. comp = cur.execute(f"""SELECT * FROM Components""").fetchall()
  279. print(comp)
  280. count = dict()
  281. for i in comp:
  282. count[i[1]] = 0
  283. for i in hist:
  284. dt_hist = i[5].split(".")
  285. if (int(date[2]) >= int(dt_hist[2]) and int(date[1]) >= int(dt_hist[1]) and int(date[0]) >= int(
  286. dt_hist[0])):
  287. count[i[2]] += i[4]
  288. print(count)
  289. self.tableWidget_rem.setRowCount(len(comp))
  290. for i in range(len(comp)):
  291. print(comp[i][0])
  292. print(comp[i][1])
  293. print(count[comp[i][1]])
  294.  
  295. self.tableWidget_rem.setItem(i, 0, QTableWidgetItem(comp[i][1]))
  296. self.tableWidget_rem.setItem(i, 1, QTableWidgetItem(str(count[comp[i][1]])))
  297.  
  298.  
  299. class AddComponentDialog(QDialog, Ui_AddComponentDialog):
  300. def __init__(self, table_tw, parent):
  301. super().__init__()
  302.  
  303. self.setupUi(self)
  304. self.table_tw = table_tw
  305. self.con = sql.connect("ABP_db.db")
  306. self.parent = parent
  307.  
  308. cur = self.con.cursor()
  309. items = cur.execute(f"""SELECT name FROM Components""").fetchall()
  310. for item in items:
  311. self.component_cb.addItem(item[0])
  312. cur.close()
  313. self.OK_btn.clicked.connect(self.add_row)
  314. self.cancel_btn.clicked.connect(self.close)
  315.  
  316. def add_row(self):
  317. component_name = self.component_cb.currentText()
  318. cur = self.con.cursor()
  319. categ = cur.execute(f"""SELECT category FROM Components
  320. WHERE name like '{component_name}'""").fetchone()[0]
  321. if categ == "Аккумуляторные батареи":
  322. if self.serial_num_le.text() == '':
  323. self.message_lb.setText("Введите серийный номер для АКБ")
  324. return
  325. if self.count_sb.value() != 1:
  326. self.message_lb.setText("Для АКБ можно указать кол-во только равное 1")
  327. return
  328. else:
  329. if self.serial_num_le.text() != '':
  330. self.message_lb.setText("Серийный номер можно выбрать только для АКБ")
  331. return
  332. self.pos = self.table_tw.rowCount()
  333. self.table_tw.setRowCount(self.table_tw.rowCount() + 1)
  334. self.table_tw.setItem(self.pos, 0, QTableWidgetItem(component_name))
  335. self.table_tw.setItem(self.pos, 1, QTableWidgetItem(self.serial_num_le.text()))
  336. self.table_tw.setItem(self.pos, 2, QTableWidgetItem(str(self.count_sb.value())))
  337. self.parent.written = False
  338. self.close()
  339.  
  340.  
  341. class AdmissionDialog(QDialog, Ui_AdmissionDialog):
  342. def __init__(self):
  343. super().__init__()
  344. self.setupUi(self)
  345.  
  346. self.written = True
  347.  
  348. self.row_count = 0
  349. self.table_tw.setRowCount(self.row_count)
  350.  
  351. self.num = 1
  352. self.con = sql.connect("ABP_db.db")
  353. cur = self.con.cursor()
  354. res = cur.execute(f"""SELECT number from Admissions""").fetchall()
  355. if res:
  356. self.num = max(map(lambda x: x[0], res)) + 1
  357. self.number_lb.setText(str(self.num))
  358.  
  359. now = datetime.datetime.today()
  360. self.date = f'{now.day}.{now.month}.{now.year}'
  361. self.date_lb.setText(self.date)
  362.  
  363. self.ok_btn.clicked.connect(lambda: (self.ok_func(), self.close()))
  364. self.write_btn.clicked.connect(self.write_func)
  365. self.close_btn.clicked.connect(self.close_func)
  366. self.add_row_btn.clicked.connect(self.add_row_func)
  367. self.del_row_btn.clicked.connect(self.del_row_func)
  368.  
  369. def close_func(self):
  370. if self.table_tw.rowCount():
  371. if not self.written:
  372. self.message_lb1.setText('Есть несохраненные данные.')
  373. self.message_lb2.setText('Чтобы все равно закрыть, нажмите ещё раз')
  374. self.written = True
  375. else:
  376. create_exel()
  377. self.close()
  378. else:
  379. create_exel()
  380. self.close()
  381.  
  382. def del_row_func(self):
  383. items = self.table_tw.selectedItems()
  384. if items:
  385. self.table_tw.removeRow(items[0].row())
  386.  
  387. def add_row_func(self) -> None:
  388. self.add_row_dialog = AddComponentDialog(self.table_tw, self)
  389. self.add_row_dialog.show()
  390.  
  391. def ok_func(self) -> None:
  392. self.write_func()
  393. self.close()
  394.  
  395. def write_func(self) -> None:
  396. person = self.person_name_le.text()
  397. cur = self.con.cursor()
  398. for i in range(self.table_tw.rowCount()):
  399. items = []
  400. for j in range(3):
  401. items.append(self.table_tw.item(i, j).text())
  402. cur.execute(f"""INSERT INTO Admissions (number, person, component, serial, count, date)
  403. VALUES ({self.num}, '{person}', '{items[0]}', '{items[1]}', '{items[2]}', '{self.date}')""")
  404. self.con.commit()
  405. self.table_tw.setRowCount(0)
  406. self.written = True
  407.  
  408.  
  409. app = QApplication(sys.argv)
  410. ex = Analiz()
  411. ex.show()
  412. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement