main_window.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import datetime
  2. import os
  3. from json import loads, dumps
  4. from PyQt5.QtWidgets import QMainWindow, QListWidgetItem, QListWidget, QMessageBox, QFileDialog
  5. from PyQt5 import uic
  6. from add_card_window import AddCardWin
  7. from card_widget import CardWidget
  8. from view_card_window import ViewCardWin
  9. PATH_TO_DATA_FILE = 'data.json'
  10. class MainWindow(QMainWindow):
  11. def __init__(self):
  12. super().__init__()
  13. uic.loadUi('ui/MainWin.ui', self)
  14. self.pushButton.setVisible(False)
  15. self.pushButton.clicked.connect(self.clear_find)
  16. self.lineEdit.textChanged.connect(self.check_find_string)
  17. self.pushButton_2.clicked.connect(self.add_card)
  18. self.pushButton_3.clicked.connect(self.dump_checked)
  19. self.checkBox.stateChanged.connect(self.select_all)
  20. self.cards_info = []
  21. with open(PATH_TO_DATA_FILE, 'r', encoding='utf-8') as file:
  22. self.cards_info = loads(file.read())
  23. self.checked_cards = []
  24. self.load_cards()
  25. def select_all(self):
  26. for item_index in range(self.listWidget.count()):
  27. item = self.listWidget.item(item_index)
  28. widget = self.listWidget.itemWidget(item)
  29. widget.checkBox.blockSignals(True)
  30. widget.checkBox.setChecked(self.checkBox.isChecked())
  31. self.checked_cards.append(widget.checkBox.card)
  32. widget.checkBox.blockSignals(False)
  33. def dump_checked(self):
  34. if not self.checked_cards:
  35. QMessageBox.warning(self, 'Ошибка выгрузки данных', 'Не выбраны книжки для выгрузки')
  36. return
  37. options = QFileDialog.Options()
  38. directory = QFileDialog.getExistingDirectory(self, "Выберите путь сохранения", options=options)
  39. if directory:
  40. dumping_card_info = []
  41. for card in self.checked_cards:
  42. copy_card = card.copy()
  43. del copy_card['uuid']
  44. dumping_card_info.append(copy_card)
  45. file_name = os.path.join(directory,
  46. f'Трудовые книжки - {str(datetime.date.today())}.json')
  47. with open(file_name, 'w', encoding='utf-8') as file:
  48. file.write(dumps(dumping_card_info))
  49. QMessageBox.information(self, 'Данные выгружены', 'Данные успешно выгружены в файл')
  50. def clear_find(self):
  51. self.lineEdit.clear()
  52. def add_card(self):
  53. self.add_card_win = AddCardWin(self)
  54. self.add_card_win.show()
  55. self.close()
  56. def check_find_string(self):
  57. if self.lineEdit.text():
  58. self.pushButton.setVisible(True)
  59. else:
  60. self.pushButton.setVisible(False)
  61. self.find_card()
  62. def find_card(self):
  63. for item_index in range(self.listWidget.count()):
  64. item = self.listWidget.item(item_index)
  65. widget = self.listWidget.itemWidget(item)
  66. if self.lineEdit.text().lower().strip() in widget.label.text().lower().strip():
  67. item.setHidden(False)
  68. else:
  69. item.setHidden(True)
  70. def load_cards(self):
  71. self.listWidget.clear()
  72. for card in self.cards_info:
  73. card_widget = CardWidget()
  74. list_item = QListWidgetItem()
  75. card_widget.label.setText(
  76. f'{card["title"]["last_name"]} {card["title"]["first_name"]} - {card["title"]["issue_date"]}')
  77. card_widget.checkBox.stateChanged.connect(self.select_card)
  78. card_widget.checkBox.card = card
  79. card_widget.pushButton.card = card
  80. card_widget.pushButton.clicked.connect(self.open_card)
  81. list_item.setSizeHint(card_widget.sizeHint())
  82. self.listWidget.addItem(list_item)
  83. self.listWidget.setItemWidget(list_item, card_widget)
  84. def select_card(self):
  85. sender = self.sender()
  86. if sender.isChecked():
  87. self.checked_cards.append(sender.card.copy())
  88. else:
  89. del self.checked_cards[self.checked_cards.index(sender.card)]
  90. self.checkBox.blockSignals(True)
  91. self.checkBox.setChecked(len(self.checked_cards) == len(self.cards_info))
  92. self.checkBox.blockSignals(False)
  93. def open_card(self):
  94. sender = self.sender()
  95. self.view_card = ViewCardWin(self, sender.card)
  96. self.view_card.show()
  97. self.close()
  98. def showEvent(self, event):
  99. super(MainWindow, self).showEvent(event)
  100. with open(PATH_TO_DATA_FILE, 'r', encoding='utf-8') as file:
  101. self.cards_info = loads(file.read())
  102. self.load_cards()