hytos / DTI_PID / DTI_PID / CodeTableDialog.py @ 25e0cacb
이력 | 보기 | 이력해설 | 다운로드 (13.7 KB)
1 |
# coding: utf-8
|
---|---|
2 |
import os |
3 |
import sys |
4 |
from PyQt5.QtCore import * |
5 |
from PyQt5.QtGui import * |
6 |
from PyQt5.QtWidgets import * |
7 |
import sqlite3 |
8 |
from AppDocData import AppDocData |
9 |
from AppDocData import Config |
10 |
import CodeTable_UI |
11 |
|
12 |
class QCodeTableDialog(QDialog): |
13 |
def __init__(self, parent): |
14 |
QDialog.__init__(self, parent)
|
15 |
|
16 |
self.removeUID = {}
|
17 |
self.currentCode = {}
|
18 |
|
19 |
self.ui = CodeTable_UI.Ui_CodeTableDialog()
|
20 |
self.ui.setupUi(self) |
21 |
|
22 |
#DB Table명 기준으로 작성
|
23 |
self.settingTable("Nominal Diameter") |
24 |
self.settingTable("Fluid Code") |
25 |
self.settingTable("Insulation Purpose") |
26 |
self.settingTable("PnID Number") |
27 |
self.settingTable("Piping Materials Class") |
28 |
self.settingTable("Unit Number") |
29 |
|
30 |
|
31 |
|
32 |
'''
|
33 |
@brief Setting Table
|
34 |
@author kyouho
|
35 |
@date 2018.07.10
|
36 |
'''
|
37 |
def settingTable(self, tableName): |
38 |
try:
|
39 |
tableName = self.replaceText(tableName)
|
40 |
docData = AppDocData.instance() |
41 |
table = self.findTableWidget(tableName)
|
42 |
if tableName == "NominalDiameter": |
43 |
tableDatas = docData.getNomialPipeSizeData() |
44 |
else:
|
45 |
tableDatas = docData.getCodeTable(tableName) |
46 |
|
47 |
if tableName == "NominalDiameter": |
48 |
self.insertTableWidgetNominalPipeSizeRow(tableDatas)
|
49 |
|
50 |
table.cellChanged.connect(self.cellValueChanged)
|
51 |
self.checkRowAndAddRow(tableName, table)
|
52 |
else:
|
53 |
table.setColumnCount(3)
|
54 |
table.setHorizontalHeaderLabels(['uid', 'Code', 'Desc.']) |
55 |
table.hideColumn(0)
|
56 |
|
57 |
self.insertTableWidgetCommonRow(table, tableDatas)
|
58 |
|
59 |
table.horizontalHeaderItem(1).setSizeHint(QSize(30, 30)) |
60 |
table.cellChanged.connect(self.cellValueChanged)
|
61 |
self.checkRowAndAddRow(tableName, table)
|
62 |
self.setCurrentCode(table, tableName)
|
63 |
except Exception as ex: |
64 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
65 |
|
66 |
|
67 |
'''
|
68 |
@brief Insert row NominalPipeSzie Tablewidget
|
69 |
@author kyouho
|
70 |
@date 2018.07.10
|
71 |
'''
|
72 |
def insertTableWidgetNominalPipeSizeRow(self, pipeSizes): |
73 |
try:
|
74 |
self.ui.tableWidgetNominalDiameter.setColumnCount(5) |
75 |
self.ui.tableWidgetNominalDiameter.setHorizontalHeaderLabels(['Code', 'Metric', 'Inch', 'InchStr', 'MetricStr']) |
76 |
self.ui.tableWidgetNominalDiameter.setRowCount(len(pipeSizes)) |
77 |
row = 0
|
78 |
for pipeSize in pipeSizes: |
79 |
self.ui.tableWidgetNominalDiameter.setItem(row, 0, QTableWidgetItem(pipeSize.code)) |
80 |
self.ui.tableWidgetNominalDiameter.setItem(row, 1, QTableWidgetItem('' if pipeSize.metric is None else str(pipeSize.metric))) |
81 |
self.ui.tableWidgetNominalDiameter.setItem(row, 2, QTableWidgetItem('' if pipeSize.inch is None else str(pipeSize.inch))) |
82 |
self.ui.tableWidgetNominalDiameter.setItem(row, 3, QTableWidgetItem('' if pipeSize.inchStr is None else pipeSize.inchStr)) |
83 |
self.ui.tableWidgetNominalDiameter.setItem(row, 4, QTableWidgetItem('' if pipeSize.metricStr is None else pipeSize.metricStr)) |
84 |
row += 1
|
85 |
|
86 |
self.ui.tableWidgetNominalDiameter.horizontalHeaderItem(0).setSizeHint(QSize(30, 30)) |
87 |
except Exception as ex: |
88 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
89 |
|
90 |
|
91 |
|
92 |
'''
|
93 |
@brief Insert row Common Tablewidget
|
94 |
@author kyouho
|
95 |
@date 2018.07.10
|
96 |
'''
|
97 |
def insertTableWidgetCommonRow(self, table, tableDatas): |
98 |
try:
|
99 |
table.setRowCount(len(tableDatas))
|
100 |
row = 0
|
101 |
for tableData in tableDatas: |
102 |
table.setItem(row, 0, QTableWidgetItem(tableData[0])) |
103 |
table.setItem(row, 1, QTableWidgetItem(tableData[1])) |
104 |
table.setItem(row, 2, QTableWidgetItem(tableData[2])) |
105 |
row += 1
|
106 |
except Exception as ex: |
107 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
108 |
|
109 |
|
110 |
'''
|
111 |
@brief Find TableWidget with Name
|
112 |
@author kyouhokyouho
|
113 |
@date 2018.07.10
|
114 |
'''
|
115 |
def findTableWidget(self, tableName): |
116 |
tableName = self.replaceText(tableName)
|
117 |
return self.findChild(QTableWidget, 'tableWidget' + tableName) |
118 |
|
119 |
'''
|
120 |
@brief key press event
|
121 |
@author kyouho
|
122 |
@date 2018.07.10
|
123 |
'''
|
124 |
def keyPressEvent(self, e): |
125 |
try:
|
126 |
if e.key() == Qt.Key_Delete:
|
127 |
_tabWidget = self.ui.tabWidget
|
128 |
currentTabIndex = _tabWidget.currentIndex() |
129 |
tabText = self.replaceText(_tabWidget.tabText(currentTabIndex))
|
130 |
table = self.findTableWidget(tabText)
|
131 |
if table:
|
132 |
selectedIndexes = table.selectedIndexes() |
133 |
selectedRows = [item.row() for item in selectedIndexes] |
134 |
model = table.model() |
135 |
|
136 |
rowsIndex = [] |
137 |
for row in selectedRows: |
138 |
rowsIndex.append(row) |
139 |
|
140 |
#중복 제거
|
141 |
rowsIndex = list(set(rowsIndex)) |
142 |
rowsIndex.reverse() |
143 |
|
144 |
if tabText != "NominalDiameter": |
145 |
for row in rowsIndex: |
146 |
uid = table.item(row, 0).text()
|
147 |
self.removeUID[uid] = tabText
|
148 |
model.removeRow(row) |
149 |
|
150 |
self.checkRowAndAddRow(tabText, table)
|
151 |
|
152 |
|
153 |
except Exception as ex: |
154 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
155 |
|
156 |
'''
|
157 |
@brief Add new row
|
158 |
@author kyouho
|
159 |
@date 2018.07.10
|
160 |
'''
|
161 |
def checkRowAndAddRow(self, tableName, table): |
162 |
try:
|
163 |
rowCount = table.rowCount() |
164 |
result = True
|
165 |
if tableName != "NominalDiameter": |
166 |
for row in range(rowCount): |
167 |
code = table.item(row, 1).text()
|
168 |
if not code: |
169 |
result = False
|
170 |
if result:
|
171 |
table.cellChanged.disconnect(self.cellValueChanged)
|
172 |
table.setRowCount(rowCount + 1)
|
173 |
table.setItem(rowCount, 0, QTableWidgetItem('')) |
174 |
table.setItem(rowCount, 1, QTableWidgetItem('')) |
175 |
table.setItem(rowCount, 2, QTableWidgetItem('')) |
176 |
table.cellChanged.connect(self.cellValueChanged)
|
177 |
else:
|
178 |
columnCount = table.columnCount() |
179 |
|
180 |
for row in range(rowCount): |
181 |
if not result: |
182 |
break
|
183 |
for columnIndex in range(columnCount): |
184 |
if not table.item(row, columnIndex).text(): |
185 |
result = False
|
186 |
break
|
187 |
|
188 |
if result:
|
189 |
table.setRowCount(rowCount + 1)
|
190 |
table.cellChanged.disconnect(self.cellValueChanged)
|
191 |
for columnIndex in range(columnCount): |
192 |
table.setItem(rowCount, columnIndex, QTableWidgetItem(''))
|
193 |
table.cellChanged.connect(self.cellValueChanged)
|
194 |
|
195 |
except Exception as ex: |
196 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
197 |
|
198 |
'''
|
199 |
@brief cellValueChange event
|
200 |
@author kyouho
|
201 |
@date 2018.07.10
|
202 |
'''
|
203 |
def cellValueChanged(self, row, column): |
204 |
try:
|
205 |
_tabWidget = self.ui.tabWidget
|
206 |
currentTabIndex = _tabWidget.currentIndex() |
207 |
tabText = self.replaceText(_tabWidget.tabText(currentTabIndex))
|
208 |
table = self.findTableWidget(tabText)
|
209 |
|
210 |
if tabText != "NominalDiameter": |
211 |
item = table.item(row, 1)
|
212 |
code = item.text() |
213 |
if column == 1: |
214 |
result = self.isExistCode(table, code)
|
215 |
if result:
|
216 |
self.checkRowAndAddRow(tabText, table)
|
217 |
self.setCurrentCode(table, tabText)
|
218 |
else:
|
219 |
item.setText(self.currentCode[tabText][row])
|
220 |
else:
|
221 |
table.resizeColumnToContents(2)
|
222 |
else:
|
223 |
self.checkRowAndAddRow(tabText, table)
|
224 |
|
225 |
except Exception as ex: |
226 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
227 |
|
228 |
'''
|
229 |
@brief Check Duplicate Code
|
230 |
@author kyouho
|
231 |
@date 2018.07.10
|
232 |
'''
|
233 |
def isExistCode(self, table, editCode): |
234 |
try:
|
235 |
if not editCode: |
236 |
return False |
237 |
|
238 |
rowCount = table.rowCount() |
239 |
codes = [] |
240 |
for row in range(rowCount): |
241 |
code = table.item(row, 1).text()
|
242 |
codes.append(code) |
243 |
|
244 |
count = codes.count(editCode) |
245 |
|
246 |
if count >=2: |
247 |
return False |
248 |
else:
|
249 |
return True |
250 |
|
251 |
except Exception as ex: |
252 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
253 |
|
254 |
'''
|
255 |
@brief save current Code (self.currentCode)
|
256 |
@author kyouho
|
257 |
@date 2018.07.10
|
258 |
'''
|
259 |
def setCurrentCode(self, table, tabText): |
260 |
try:
|
261 |
self.currentCode[tabText] = {}
|
262 |
rowCount = table.rowCount() |
263 |
|
264 |
res = {} |
265 |
for row in range(rowCount): |
266 |
code = table.item(row, 1).text()
|
267 |
res[row] = code |
268 |
|
269 |
self.currentCode[tabText] = res
|
270 |
|
271 |
except Exception as ex: |
272 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
273 |
|
274 |
|
275 |
'''
|
276 |
@brief replaceTextForCodeTable
|
277 |
@author kyouho
|
278 |
@date 2018.07.12
|
279 |
'''
|
280 |
def replaceText(self, text): |
281 |
return text.replace(' ','').replace('&&', 'n') |
282 |
|
283 |
|
284 |
'''
|
285 |
@brief save codes
|
286 |
@author kyouho
|
287 |
@date 2018.07.12
|
288 |
'''
|
289 |
def accept(self): |
290 |
|
291 |
self.saveCommonCodeData("Fluid Code") |
292 |
self.saveCommonCodeData("Insulation Purpose") |
293 |
self.saveCommonCodeData("PnID Number") |
294 |
self.saveCommonCodeData("Piping Materials Class") |
295 |
self.saveCommonCodeData("Unit Number") |
296 |
self.deleteCommonCodeData()
|
297 |
|
298 |
self.saveNomialPipeSize()
|
299 |
|
300 |
QDialog.accept(self)
|
301 |
|
302 |
'''
|
303 |
@brief save common code data
|
304 |
@author kyouho
|
305 |
@date 2018.07.12
|
306 |
'''
|
307 |
def saveCommonCodeData(self, tableName): |
308 |
datas = [] |
309 |
try:
|
310 |
tableName = self.replaceText(tableName)
|
311 |
table = self.findTableWidget(tableName)
|
312 |
rowCount = table.rowCount() |
313 |
for row in range(rowCount): |
314 |
uid = table.item(row, 0).text()
|
315 |
code = table.item(row, 1).text()
|
316 |
description = table.item(row, 2).text()
|
317 |
|
318 |
if code:
|
319 |
datas.append((uid, code, description)) |
320 |
|
321 |
docData = AppDocData.instance() |
322 |
docData.setCommonCodeData(tableName, datas) |
323 |
|
324 |
except Exception as ex: |
325 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
326 |
|
327 |
'''
|
328 |
@brief save common code data
|
329 |
@author kyouho
|
330 |
@date 2018.07.12
|
331 |
'''
|
332 |
def deleteCommonCodeData(self): |
333 |
try:
|
334 |
datas = self.removeUID.items()
|
335 |
docData = AppDocData.instance() |
336 |
docData.deleteCommonCodeData(datas) |
337 |
except Exception as ex: |
338 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
339 |
|
340 |
'''
|
341 |
@brief save common code data
|
342 |
@author kyouho
|
343 |
@date 2018.07.16
|
344 |
'''
|
345 |
def saveNomialPipeSize(self): |
346 |
pipeSizes = [] |
347 |
try:
|
348 |
docData = AppDocData.instance() |
349 |
self.deleteNomialPipeSize()
|
350 |
|
351 |
from AppDocData import NominalPipeSize |
352 |
|
353 |
table = self.ui.tableWidgetNominalDiameter
|
354 |
rowCount = table.rowCount() |
355 |
for row in range(rowCount): |
356 |
code = table.item(row, 0).text()
|
357 |
metric = table.item(row, 1).text()
|
358 |
inch = table.item(row, 2).text()
|
359 |
inchStr = table.item(row, 3).text()
|
360 |
metricStr = table.item(row, 4).text()
|
361 |
|
362 |
pipeSize = NominalPipeSize(code, float(metric) if metric != '' else None, float(inch) if inch != '' else None, inchStr, metricStr) |
363 |
pipeSizes.append(pipeSize) |
364 |
|
365 |
docData.insertNomialPipeSize(pipeSizes) |
366 |
|
367 |
except Exception as ex: |
368 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
369 |
|
370 |
|
371 |
|
372 |
|
373 |
|
374 |
|
375 |
|
376 |
|
377 |
|
378 |
|
379 |
'''
|
380 |
@brief save common code data
|
381 |
@author kyouho
|
382 |
@date 2018.07.16
|
383 |
'''
|
384 |
def deleteNomialPipeSize(self): |
385 |
docData = AppDocData.instance() |
386 |
docData.deleteNomialPipeSize() |
387 |
|
388 |
|
389 |
|
390 |
|
391 |
|
392 |
|
393 |
|
394 |
|