Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.27 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from PyQt5 import QtGui, QtWidgets
  5. from QFilesTab import Files
  6. from QWebservicesTab import Webservices
  7. import qdarkstyle
  8.  
  9.  
  10. class MainWindow(QtWidgets.QMainWindow):
  11. def __init__(self):
  12. super().__init__()
  13.  
  14. self.task_bar()
  15. self.tab_layout()
  16. self.graph_elements()
  17. self.center()
  18.  
  19. def task_bar(self):
  20. ### actions on meenubar
  21. exitAct = QtWidgets.QAction('&Exit', self, shortcut='Ctrl+Q', statusTip='Exit application')
  22. exitAct.triggered.connect(self.close)
  23. moreinfo = QtWidgets.QAction('&Help', self, statusTip='More information')
  24. moreinfo.triggered.connect(self.information)
  25.  
  26. ### menubar
  27. menubar = self.menuBar()
  28. fileMenu = menubar.addMenu('&File')
  29. fileMenu.addAction(exitAct)
  30. fileMenu = menubar.addMenu('&Help')
  31. fileMenu.addAction(moreinfo)
  32.  
  33. def graph_elements(self):
  34. ### basic geometry and color
  35. self.setWindowTitle('Villain')
  36. self.setWindowIcon(QtGui.QIcon('dc1.png'))
  37. self.setStyleSheet((qdarkstyle.load_stylesheet_pyqt5()))
  38.  
  39. def tab_layout(self):
  40. self.tabwidget = QtWidgets.QTabWidget()
  41. self.tabwidget.addTab(Files(), 'Files Import') ### ADDED SUB_CLASS AS QTABWIDGET
  42. self.tabwidget.addTab(Webservices(), 'Webservice')
  43. self.setCentralWidget(self.tabwidget)
  44.  
  45. ### center main window
  46. def center(self):
  47. qr = self.frameGeometry()
  48. cp = QtWidgets.QDesktopWidget().availableGeometry().center()
  49. qr.moveCenter(cp)
  50. self.move(qr.topLeft())
  51.  
  52. def information(self):
  53. QtWidgets.QMessageBox.information(self,'Information','Version: 2.0n'
  54. 'Please, contact karol.chojnowski@digitalcaregroup.com for comments and suggestionsnn'
  55. 'Digital Care - Data Processing Team')
  56.  
  57. #!/usr/bin/env python
  58. # -*- coding: utf-8 -*-
  59.  
  60. import threading
  61. from PyQt5 import QtGui, QtWidgets, QtCore
  62. import pyodbc
  63.  
  64.  
  65.  
  66. class Files(QtWidgets.QWidget):
  67. def __init__(self):
  68. super().__init__()
  69. self.layout_init()
  70.  
  71. def layout_init(self):
  72. operator = ['TMobile', 'PLK', 'Play', 'Orange']
  73. variant = ['Select variant', 'Numer usługi/polisy', 'IMEI', 'PESEL', 'NIP',
  74. 'REGON', 'Nazwisko', 'Nazwa firmy']
  75. ###partners
  76. self.pvbox = QtWidgets.QVBoxLayout()
  77. self.buttongroup = QtWidgets.QButtonGroup(self)
  78. for elements, forms in enumerate(operator):
  79. element = str(forms)
  80. self.partners = QtWidgets.QRadioButton(element)
  81. self.buttongroup.addButton(self.partners, )
  82. self.pvbox.addWidget(self.partners,)
  83. self.buttongroup.buttonClicked.connect(self.on_itemSelected)
  84. self.buttongroup.buttonClicked['int'].connect(self.on_itemSelected)
  85.  
  86.  
  87. ###variants
  88. self.variants = QtWidgets.QComboBox()
  89. for elements, forms in enumerate(variant):
  90. element = str(forms)
  91. self.variants.addItem(element)
  92. self.variants.model().item(0).setEnabled(False)
  93. self.variants.activated.connect(self.update_textbox)
  94.  
  95. self.textbox = QtWidgets.QLineEdit()
  96.  
  97. self.tablewidget = QtWidgets.QTableWidget()
  98. self.tablewidget.setColumnCount(5)
  99. self.tablewidget.setHorizontalHeaderLabels(['FileNameOriginal', 'OrderItemCode', 'Imported','InfoCode', 'Row'])
  100. self.tablewidget.horizontalHeader().setDefaultAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
  101. self.tablewidget.horizontalHeader().setStretchLastSection(True)
  102. self.tablewidget.resizeColumnsToContents()
  103. self.tablewidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
  104. self.tablewidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
  105.  
  106. self.pb = QtWidgets.QPushButton(self.tr('Run process'))
  107. self.pb.setDisabled(True)
  108. self.textbox.textChanged.connect(self.disableButton)
  109. self.pb.clicked.connect(self.on_clicked_pb)
  110. self.clearbutton = QtWidgets.QPushButton(self.tr('Clear all'))
  111. self.clearbutton.setDisabled(True)
  112. self.clearbutton.clicked.connect(self.on_clicked_clear)
  113.  
  114. vgroupbox = QtWidgets.QGroupBox('Options')
  115. pgroupbox = QtWidgets.QGroupBox('Partner')
  116.  
  117. mainpanel = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight)
  118. variantpanel = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom)
  119. variantpanel.addWidget(self.variants)
  120. variantpanel.addWidget(self.textbox)
  121. variantpanel.addWidget(self.pb)
  122. variantpanel.addWidget(self.clearbutton)
  123. mainpanel.addWidget(pgroupbox)
  124. mainpanel.addWidget(vgroupbox)
  125. vgroupbox.setLayout(variantpanel)
  126. test = QtWidgets.QVBoxLayout(self)
  127. test.addLayout(self.pvbox)
  128. pgroupbox.setLayout(test)
  129.  
  130. grid = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.TopToBottom, self)
  131. grid.addLayout(mainpanel)
  132. grid.addWidget(self.tablewidget)
  133. self.setLayout(grid)
  134.  
  135. def setCredentials(self, credentials): ################################
  136. self._credentials = credentials
  137.  
  138. def update_textbox(self, text):
  139. self.textbox.clear()
  140. textline = self.variants.itemText(text)
  141. self.textbox.setPlaceholderText(textline)
  142. if textline == 'IMEI':
  143. regexp = QtCore.QRegExp('^(?=.{0,16}$)(0d+|[1-9][0-9]+)$')
  144. elif textline == 'PESEL':
  145. regexp = QtCore.QRegExp('^(?=.{0,11}$)(0d+|[1-9][0-9]+)$')
  146. elif textline == 'NIP':
  147. regexp = QtCore.QRegExp('^(?=.{0,10}$)(0d+|[1-9][0-9]+)$')
  148. elif textline == 'REGON':
  149. regexp = QtCore.QRegExp('^(?=.{0,9}$)(0d+|[1-9][0-9]+)$')
  150. elif textline == 'Nazwisko':
  151. regexp = QtCore.QRegExp('[A-Za-zżźćńółęąśŻŹĆĄŚĘŁÓŃ]*')
  152. else:
  153. regexp = None
  154. self.textbox.setValidator(QtGui.QRegExpValidator(regexp))
  155.  
  156. @QtCore.pyqtSlot(QtWidgets.QAbstractButton)
  157. @QtCore.pyqtSlot(int)
  158. def on_itemSelected(self, index):
  159. if isinstance(index, QtWidgets.QAbstractButton):
  160. self.base = None
  161. element = '{}'.format(index.text())
  162. if element == 'Play':
  163. self.base = 'W2_FileImportWorkerP4'
  164. elif element == 'TMobile':
  165. self.base= 'W2_FileImportWorkerTmobileFIX'
  166. elif element == 'Orange':
  167. self.base = 'W2_FileImportWorkerOCP'
  168. elif element == 'PLK':
  169. self.base = 'W2_FileImportWorkerPLK'
  170. return self.base
  171. elif isinstance(index, int):
  172. pass
  173.  
  174. @QtCore.pyqtSlot()
  175. def disableButton(self):
  176. val = bool(self.textbox.text())
  177. self.pb.setDisabled(not val)
  178. self.clearbutton.setDisabled(not val)
  179.  
  180. @QtCore.pyqtSlot()
  181. def disablesql(self):
  182. self.textbox.setDisabled(True)
  183. self.pb.setDisabled(True)
  184. self.clearbutton.setDisabled(True)
  185.  
  186. @QtCore.pyqtSlot()
  187. def enablesql(self):
  188. self.textbox.setDisabled(False)
  189. self.pb.setDisabled(False)
  190. self.clearbutton.setDisabled(False)
  191.  
  192.  
  193. ### run process button
  194. @QtCore.pyqtSlot()
  195. def on_clicked_pb(self):
  196. if self.textbox.text():
  197. threading.Thread(target=self.sql_query, daemon=True).start()
  198.  
  199. ### clear all
  200. @QtCore.pyqtSlot()
  201. def on_clicked_clear(self):
  202. if self.textbox.text():
  203. self.textbox.clear()
  204. self.tablewidget.setRowCount(0)
  205. self.tablewidget.setColumnWidth(3, 200)
  206.  
  207. def table_performance(self):
  208. self.tablewidget.resizeColumnsToContents()
  209. self.tablewidget.setColumnWidth(4, 2500)
  210. self.tablewidget.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
  211.  
  212. @QtCore.pyqtSlot(str, str)
  213. def show_warning(self, title, msg):
  214. QtWidgets.QMessageBox.information(self, title, msg)
  215.  
  216. @QtCore.pyqtSlot(str, str)
  217. def show_ok(self, title, msg):
  218. QtWidgets.QMessageBox.information(self, title ,msg)
  219.  
  220. @QtCore.pyqtSlot()
  221. def clear_items(self):
  222. self.tablewidget.setRowCount(0)
  223.  
  224. @QtCore.pyqtSlot(int, int, str)
  225. def add_item(self, row, column, val):
  226. if row >= self.tablewidget.rowCount():
  227. self.tablewidget.insertRow(self.tablewidget.rowCount())
  228. newitem = QtWidgets.QTableWidgetItem(val)
  229. self.tablewidget.setItem(row, column, newitem)
  230.  
  231. @QtCore.pyqtSlot()
  232. def sort_items(self):
  233. self.tablewidget.sortItems(0, order=QtCore.Qt.DescendingOrder)
  234.  
  235. def sql_query(self):
  236. ser = '10.96.5.17dqinstance'
  237. print(self.credentials) #check
  238. username, pwd = self._credentials ############################
  239. imei = '%' + self.textbox.text() + '%'
  240. self.clear_items()
  241. try:
  242. self.disablesql()
  243. connection = pyodbc.connect(driver='{SQL Server}', server=ser,
  244. user=username, password=pwd)
  245. if self.base == 'W2_FileImportWorkerTmobileFIX':
  246. cursor = connection.cursor()
  247. res = cursor.execute('''
  248. SELECT FI.FileNameOriginal,
  249. FI.OrderItemCode,
  250. FIR.Imported,
  251. FIRI.InfoCode,
  252. FR.Row
  253. FROM BIDQ_W2_DB.dbo.[FileImports] AS FI
  254. JOIN BIDQ_W2_DB.dbo.[FileImportRows] AS FIR ON FI.Id = FIR.FileImportId
  255. JOIN BIDQ_W2_DB.dbo.[FileRows] AS FR ON FIR.RowId = FR.RowId
  256. LEFT JOIN BIDQ_W2_DB.dbo.FileImportRowInfoes AS FIRI ON FR.RowId = FIRI.RowId
  257. WHERE (FI.WorkerCode = ? or FI.WorkerCode = ?) and FR.Row LIKE ? ''',
  258. (self.base, self.base, imei))
  259.  
  260. elif self.base == 'All':
  261. cursor = connection.cursor()
  262. res = cursor.execute(''' SELECT FI.FileNameOriginal,
  263. FI.OrderItemCode,
  264. FIR.Imported,
  265. FIRI.InfoCode,
  266. FR.Row
  267. FROM BIDQ_W2_DB.dbo.[FileImports] AS FI
  268. JOIN BIDQ_W2_DB.dbo.[FileImportRows] AS FIR ON FI.Id = FIR.FileImportId
  269. JOIN BIDQ_W2_DB.dbo.[FileRows] AS FR ON FIR.RowId = FR.RowId
  270. LEFT JOIN BIDQ_W2_DB.dbo.FileImportRowInfoes AS FIRI ON FR.RowId = FIRI.RowId
  271. WHERE FR.Row LIKE ? ''',(imei))
  272. else:
  273. cursor = connection.cursor()
  274. res = cursor.execute('''
  275. SELECT FI.FileNameOriginal,
  276. FI.OrderItemCode,
  277. FIR.Imported,
  278. FIRI.InfoCode,
  279. FR.Row
  280. FROM BIDQ_W2_DB.dbo.[FileImports] AS FI
  281. JOIN BIDQ_W2_DB.dbo.[FileImportRows] AS FIR ON FI.Id = FIR.FileImportId
  282. JOIN BIDQ_W2_DB.dbo.[FileRows] AS FR ON FIR.RowId = FR.RowId
  283. LEFT JOIN BIDQ_W2_DB.dbo.FileImportRowInfoes AS FIRI ON FR.RowId = FIRI.RowId
  284. WHERE FI.WorkerCode = ? and FR.Row LIKE ? ''', (self.base, imei))
  285.  
  286. if not cursor.rowcount:
  287. QtCore.QMetaObject.invokeMethod(self, 'show_warning',
  288. QtCore.Qt.QueuedConnection,
  289. QtCore.Q_ARG(str, 'IMEI'), QtCore.Q_ARG(str, 'No items found'))
  290. else:
  291. QtCore.QMetaObject.invokeMethod(self, 'clear_items', QtCore.Qt.QueuedConnection)
  292. QtCore.QThread.msleep(10)
  293. for row, form in enumerate(res):
  294. for column, item in enumerate(form):
  295. QtCore.QMetaObject.invokeMethod(self, 'add_item',
  296. QtCore.Qt.QueuedConnection,
  297. QtCore.Q_ARG(int, row), QtCore.Q_ARG(int, column),
  298. QtCore.Q_ARG(str, str(item)))
  299. QtCore.QThread.msleep(10)
  300. QtCore.QMetaObject.invokeMethod(self, 'sort_items', QtCore.Qt.QueuedConnection)
  301. self.table_performance()
  302. QtCore.QMetaObject.invokeMethod(self, 'show_ok',
  303. QtCore.Qt.QueuedConnection,
  304. QtCore.Q_ARG(str, 'Done'), QtCore.Q_ARG(str, 'Items found'))
  305. cursor.close()
  306.  
  307. except:
  308. QtCore.QMetaObject.invokeMethod(self, 'show_warning',
  309. QtCore.Qt.QueuedConnection,
  310. QtCore.Q_ARG(str, 'Error'), QtCore.Q_ARG(str, 'Something went wrongnn'
  311. 'Contact karol.chojnowski@digitalcaregroup.com'))
  312. self.enablesql()
  313.  
  314. # -- coding: utf-8 --
  315.  
  316. import sys
  317. from PyQt5 import QtWidgets,QtGui
  318. from QLogin import LoginDialog
  319. from QApp import MainWindow
  320. from QFilesTab import Files
  321. import os
  322.  
  323.  
  324. def resource_path(relative_path):
  325. if hasattr(sys, '_MEIPASS'):
  326. return os.path.join(sys._MEIPASS, relative_path)
  327. return os.path.join(os.path.abspath('.'), relative_path)
  328.  
  329.  
  330. if __name__ == '__main__':
  331.  
  332. app = QtWidgets.QApplication(sys.argv)
  333.  
  334. login = LoginDialog()
  335. login.setWindowIcon(QtGui.QIcon(resource_path('dc1.png')))
  336.  
  337. if login.exec_() != QtWidgets.QDialog.Accepted:
  338. sys.exit(-1)
  339.  
  340. files = Files()
  341. window = MainWindow()
  342. window.setWindowIcon(QtGui.QIcon(resource_path('dc1.png')))
  343. window.setGeometry(500, 150, 800, 500)
  344. files.setCredentials(login.credentials()) ###############################
  345. window.show()
  346. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement