hytos / DTI_PID / DTI_PID / ItemDataExportDialog.py @ 9b3491ae
이력 | 보기 | 이력해설 | 다운로드 (38.1 KB)
1 |
# coding: utf-8
|
---|---|
2 |
"""
|
3 |
This is ItemDataExportDialog module
|
4 |
"""
|
5 |
|
6 |
import os |
7 |
import sys |
8 |
from PyQt5.QtCore import * |
9 |
from PyQt5.QtGui import * |
10 |
from PyQt5.QtWidgets import * |
11 |
import sqlite3 |
12 |
from AppDocData import AppDocData, Config |
13 |
from openpyxl import * |
14 |
from openpyxl.styles import * |
15 |
import ItemDataExport_UI |
16 |
|
17 |
class QItemDataExportDialog(QDialog): |
18 |
"""
|
19 |
This is QItemDataExportDialog class
|
20 |
"""
|
21 |
def __init__(self, parent): |
22 |
QDialog.__init__(self, parent)
|
23 |
|
24 |
self.delimiter = '!-!' |
25 |
|
26 |
self.sceneLineData = {}
|
27 |
self.sceneEquipData = {}
|
28 |
self.scene_valve_data= {}
|
29 |
self.sceneInstData = {}
|
30 |
self.sceneNoteData = {}
|
31 |
|
32 |
self.lineColumnListAll = ['UID', 'LINE_SIZE', 'LINE_SYMBOL', 'LINE_NO', 'LINE_CLASS', 'LINE_ROUTING_FROM', 'LINE_ROUTING_TO', 'SERVICE_FLUID', 'SERVICE_DENSITY', 'SERVICE_STATE', 'OPERATION_CONDITION_TEMP', 'OPERATION_CONDITION_PRESS', 'DESIGN_CONDITION_TEMP', 'DESIGN_CONDITION_PRESS', 'TEST_CONDITION_TEMP', 'TEST_CONDITION_PRESS', 'INSUL_CODE', 'PAINT_CODE', 'NDE_CODE', 'PWHT', 'PNID_NO'] |
33 |
self.equipColumnListAll = ['UID', 'ITEM_NO', 'SERVICE', 'NO_REQ', 'FLUID', 'DESC_OF_PART', 'OPERATION_CONDITION_TEMP', 'OPERATION_CONDITION_PRESS', 'DESIGN_CONDITION_TEMP', 'DESIGN_CONDITION_PRESS', 'MATERIAL', 'WEIGHT', 'POWER', 'INSULATION', 'PNID_NO', 'REV'] |
34 |
self.valveColumnListAll = ['UID', 'ITEM_NO', 'PNID_NO'] |
35 |
self.instColumnListAll = ['UID', 'ITEM_NO', 'SERVICE', 'FLOW_RATE', 'PRESSURE', 'TEMPERATURE', 'TPYE', 'RANGE', 'NOR_LEVEL_MM', 'NOR_LEVEL_PERCENT', 'DEL_PRESS', 'SHUT_OFF', 'LOCATION', 'PNID_NO', 'REV'] |
36 |
self.noteColumnListAll = ['UID', 'Note No', 'Description', 'P&ID No'] |
37 |
|
38 |
self.removeUID = [[], [], [], []]
|
39 |
|
40 |
self.parent = parent
|
41 |
self.ui = ItemDataExport_UI.Ui_ItemDataExportDialog()
|
42 |
self.ui.setupUi(self) |
43 |
|
44 |
# line no table setting combobox column
|
45 |
self.nominalDiameterList = []
|
46 |
self.fluidCodeList = []
|
47 |
self.insulationPurposeList = []
|
48 |
self.pipingMaterialClassList = []
|
49 |
self.initLineNoAttrData()
|
50 |
self.lineNoTableComboBoxDic = {}
|
51 |
self.lineNoTableComboBoxDic[1] = self.nominalDiameterList |
52 |
self.lineNoTableComboBoxDic[2] = self.fluidCodeList |
53 |
self.lineNoTableComboBoxDic[4] = self.pipingMaterialClassList |
54 |
self.lineNoTableComboBoxDic[7] = self.fluidCodeList |
55 |
self.lineNoTableComboBoxDic[16] = self.insulationPurposeList |
56 |
|
57 |
try:
|
58 |
# save scene data
|
59 |
self.saveSceneData()
|
60 |
# setting combobox
|
61 |
self.initComboBox()
|
62 |
# setting table
|
63 |
self.initTableWidget()
|
64 |
except Exception as ex: |
65 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
66 |
from App import App |
67 |
from AppDocData import MessageType |
68 |
|
69 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
70 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
71 |
return None |
72 |
|
73 |
# evnet connect
|
74 |
self.ui.pushButtonItemDataFormat.clicked.connect(self.show_item_data_format_dialog) |
75 |
self.ui.comboBoxDoc.currentTextChanged.connect(self.docNameChanged) |
76 |
self.ui.pushButtonExport.clicked.connect(self.save_excel) |
77 |
|
78 |
'''
|
79 |
@brief setting commbobox Data
|
80 |
@author kyouho
|
81 |
@date 2018.08.16
|
82 |
'''
|
83 |
def initLineNoAttrData(self): |
84 |
docData = AppDocData.instance() |
85 |
lineProps = docData.getLineProperties() |
86 |
for prop in lineProps: |
87 |
if prop[3] == 'Code Table': |
88 |
tableName = prop[1].upper().replace(' ','') |
89 |
if tableName == 'NOMINALDIAMETER': |
90 |
self.nominalDiameterList = docData.getCodeTable(tableName, True) |
91 |
elif tableName == 'FLUIDCODE': |
92 |
self.fluidCodeList = docData.getCodeTable(tableName, True) |
93 |
elif tableName == 'INSULATIONPURPOSE': |
94 |
self.insulationPurposeList = docData.getCodeTable(tableName, True) |
95 |
elif tableName == 'PIPINGMATERIALSCLASS': |
96 |
self.pipingMaterialClassList = docData.getCodeTable(tableName, True) |
97 |
|
98 |
'''
|
99 |
@brief save excel
|
100 |
@author kyouho
|
101 |
@date 2018.08.16
|
102 |
'''
|
103 |
def save_excel(self): |
104 |
try:
|
105 |
options = QFileDialog.Options() |
106 |
options |= QFileDialog.DontUseNativeDialog |
107 |
fileName = QFileDialog.getSaveFileName(self, "Save xlsx file", os.getcwd(), "xlsx files(*.xlsx)", options=options) |
108 |
|
109 |
wb = Workbook() |
110 |
wb.active.title = '라인 리스트'
|
111 |
wb.create_sheet('장치 리스트')
|
112 |
wb.create_sheet('밸브 리스트')
|
113 |
wb.create_sheet('계장 리스트')
|
114 |
wb.create_sheet('노트 리스트')
|
115 |
|
116 |
lineTable = self.ui.tableWidgetLineDataList
|
117 |
equipTable = self.ui.tableWidgetEquipmentDataList
|
118 |
instTable = self.ui.tableWidgetInstrumentDataList
|
119 |
noteTable = self.ui.tableWidgetNoteDataList
|
120 |
|
121 |
lineSheet = wb.worksheets[0]
|
122 |
equipSheet = wb.worksheets[1]
|
123 |
valve_sheet = wb.worksheets[2]
|
124 |
instSheet = wb.worksheets[3]
|
125 |
noteSheet = wb.worksheets[4]
|
126 |
|
127 |
self.qtable_to_sheet(lineTable, lineSheet)
|
128 |
self.qtable_to_sheet(equipTable, equipSheet)
|
129 |
self.qtable_to_sheet(self.ui.tableWidgetValveDataList, valve_sheet) |
130 |
self.qtable_to_sheet(instTable, instSheet)
|
131 |
self.qtable_to_sheet(noteTable, noteSheet)
|
132 |
|
133 |
fileName, ext = os.path.splitext(fileName[0])
|
134 |
wb.save(fileName + ext if ext == '.xlsx' else fileName + '.xlsx') |
135 |
|
136 |
QMessageBox.about(self, "알림", '성공적으로 저장하였습니다.') |
137 |
except Exception as ex: |
138 |
from App import App |
139 |
from AppDocData import MessageType |
140 |
|
141 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
142 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
143 |
|
144 |
'''
|
145 |
@brief save excel
|
146 |
@author kyouho
|
147 |
@date 2018.08.16
|
148 |
'''
|
149 |
def qtable_to_sheet(self, table, sheet): |
150 |
self.set_sheet_header(table, sheet)
|
151 |
self.set_sheet_data(table, sheet)
|
152 |
self.auto_resize_columns(sheet)
|
153 |
|
154 |
'''
|
155 |
@brief save excel
|
156 |
@author kyouho
|
157 |
@date 2018.08.16
|
158 |
'''
|
159 |
def set_sheet_header(self, table, sheet): |
160 |
thin = Side(border_style='thin', color='000000') |
161 |
border = Border(left=thin, right=thin, top=thin, bottom=thin) |
162 |
for index in range(table.columnCount()): |
163 |
if not index: |
164 |
continue
|
165 |
sheet.cell(1, index, table.horizontalHeaderItem(index).text())
|
166 |
sheet.cell(row = 1, column = index).alignment = Alignment(horizontal='center', vertical='center', wrapText=True) |
167 |
sheet.cell(row = 1, column = index).fill = PatternFill(patternType='solid', fill_type='solid', fgColor=Color('8DB4E2')) |
168 |
sheet.cell(row = 1, column = index).border = border
|
169 |
|
170 |
def set_sheet_data(self, table, sheet): |
171 |
"""
|
172 |
@brief save excel
|
173 |
@author kyouho
|
174 |
@date 2018.08.16
|
175 |
"""
|
176 |
thin = Side(border_style='thin', color='000000') |
177 |
border = Border(left=thin, right=thin, top=thin, bottom=thin) |
178 |
for rowIndex in range(table.rowCount()): |
179 |
for colIndex in range(table.columnCount()): |
180 |
if not colIndex: |
181 |
continue
|
182 |
|
183 |
widgetItem = table.cellWidget(rowIndex, colIndex) |
184 |
if widgetItem is None: |
185 |
data = table.item(rowIndex, colIndex).text() if table.item(rowIndex, colIndex) is not None else '' |
186 |
else:
|
187 |
if widgetItem.currentIndex() >= 0: |
188 |
data = widgetItem.currentText() |
189 |
else:
|
190 |
data = ''
|
191 |
|
192 |
sheet.cell(rowIndex + 2, colIndex, data)
|
193 |
sheet.cell(row = rowIndex+2, column = colIndex).border = border
|
194 |
|
195 |
def auto_resize_columns(self, sheet): |
196 |
"""
|
197 |
@brief auto resize columns with contents
|
198 |
@author humkyung
|
199 |
@date 2018.10.11
|
200 |
"""
|
201 |
for col in sheet.columns: |
202 |
max_length = 0
|
203 |
column = col[0].column # Get the column name |
204 |
for cell in col: |
205 |
try: # Necessary to avoid error on empty cells |
206 |
if len(str(cell.value)) > max_length: |
207 |
max_length = len(cell.value)
|
208 |
except:
|
209 |
pass
|
210 |
|
211 |
adjusted_width = (max_length + 2) * 1.2 |
212 |
sheet.column_dimensions[column].width = adjusted_width |
213 |
|
214 |
'''
|
215 |
@brief init combobox
|
216 |
@author kyouho
|
217 |
@date 2018.08.13
|
218 |
'''
|
219 |
def initComboBox(self): |
220 |
self.ui.comboBoxDoc.addItem('ALL') |
221 |
docData = AppDocData.instance() |
222 |
|
223 |
documentNameList = [] |
224 |
documentNameData = docData.getLineDocumentNameList() |
225 |
documentNameList.extend(documentNameData) |
226 |
#documentNameData = docData.getEquipDocumentNameList()
|
227 |
#documentNameList.extend(documentNameData)
|
228 |
|
229 |
for name in documentNameData: |
230 |
self.ui.comboBoxDoc.addItem(name)
|
231 |
|
232 |
|
233 |
if not self.parent.graphicsView.hasImage(): |
234 |
return
|
235 |
result = self.ui.comboBoxDoc.findText(docData.imgName)
|
236 |
if result == -1: |
237 |
self.ui.comboBoxDoc.addItem(docData.imgName)
|
238 |
|
239 |
|
240 |
'''
|
241 |
@brief init table widget
|
242 |
@author kyouho
|
243 |
@date 2018.08.13
|
244 |
@history Euisung 2018.10.23 added list export order in db
|
245 |
'''
|
246 |
def initTableWidget(self): |
247 |
try:
|
248 |
# 엑셀 추출시 사용할 리스트 오더를 db에서 읽거나 추가
|
249 |
configs = [] |
250 |
docData = AppDocData.instance() |
251 |
lineOrder = docData.getConfigs('LINE_DATA_LIST_EXPORT_ORDER', '1') |
252 |
equipOrder = docData.getConfigs('EQUIPMENT_DATA_LIST_EXPORT_ORDER', '2') |
253 |
valveOrder = docData.getConfigs('VALVE_DATA_LIST_EXPORT_ORDER', '3') |
254 |
instOrder = docData.getConfigs('INSTRUMENT_DATA_LIST_EXPORT_ORDER', '4') |
255 |
noteOrder = docData.getConfigs('NOTE_DATA_LIST_EXPORT_ORDER', '5') |
256 |
|
257 |
if len(lineOrder) is 0: |
258 |
value = ''
|
259 |
for header in self.lineColumnListAll: |
260 |
value += (header + self.delimiter)
|
261 |
value = value[:-len(self.delimiter)] |
262 |
configs.append(Config('LINE_DATA_LIST_EXPORT_ORDER', '1', value)) |
263 |
|
264 |
if len(equipOrder) is 0: |
265 |
value = ''
|
266 |
for header in self.equipColumnListAll: |
267 |
value += (header + self.delimiter)
|
268 |
value = value[:-len(self.delimiter)] |
269 |
configs.append(Config('EQUIPMENT_DATA_LIST_EXPORT_ORDER', '2', value)) |
270 |
|
271 |
if len(valveOrder) is 0: |
272 |
value = ''
|
273 |
for header in self.valveColumnListAll: |
274 |
value += (header + self.delimiter)
|
275 |
value = value[:-len(self.delimiter)] |
276 |
configs.append(Config('VALVE_DATA_LIST_EXPORT_ORDER', '3', value)) |
277 |
|
278 |
if len(instOrder) is 0: |
279 |
value = ''
|
280 |
for header in self.instColumnListAll: |
281 |
value += (header + self.delimiter)
|
282 |
value = value[:-len(self.delimiter)] |
283 |
configs.append(Config('INSTRUMENT_DATA_LIST_EXPORT_ORDER', '4', value)) |
284 |
|
285 |
if len(noteOrder) is 0: |
286 |
value = ''
|
287 |
for header in self.noteColumnListAll: |
288 |
value += (header + self.delimiter)
|
289 |
value = value[:-len(self.delimiter)] |
290 |
configs.append(Config('NOTE_DATA_LIST_EXPORT_ORDER', '5', value)) |
291 |
|
292 |
docData.saveConfigs(configs) |
293 |
|
294 |
# 기존의 저장한 export order로 header 값을 정함
|
295 |
lineOrder = docData.getConfigs('LINE_DATA_LIST_EXPORT_ORDER', '1')[0].value.split(self.delimiter) |
296 |
equipOrder = docData.getConfigs('EQUIPMENT_DATA_LIST_EXPORT_ORDER', '2')[0].value.split(self.delimiter) |
297 |
valveOrder = docData.getConfigs('VALVE_DATA_LIST_EXPORT_ORDER', '3')[0].value.split(self.delimiter) |
298 |
instOrder = docData.getConfigs('INSTRUMENT_DATA_LIST_EXPORT_ORDER', '4')[0].value.split(self.delimiter) |
299 |
noteOrder = docData.getConfigs('NOTE_DATA_LIST_EXPORT_ORDER', '5')[0].value.split(self.delimiter) |
300 |
|
301 |
except Exception as ex: |
302 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
303 |
from App import App |
304 |
from AppDocData import MessageType |
305 |
|
306 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
307 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
308 |
|
309 |
|
310 |
lineTable = self.ui.tableWidgetLineDataList
|
311 |
equipTable = self.ui.tableWidgetEquipmentDataList
|
312 |
valveTable = self.ui.tableWidgetValveDataList
|
313 |
instTable = self.ui.tableWidgetInstrumentDataList
|
314 |
noteTable = self.ui.tableWidgetNoteDataList
|
315 |
|
316 |
# set table column count
|
317 |
noteTable.setColumnCount(4)
|
318 |
valveTable.setColumnCount(3)
|
319 |
|
320 |
# Table Header Label 설정
|
321 |
lineTable.setHorizontalHeaderLabels(lineOrder) |
322 |
equipTable.setHorizontalHeaderLabels(equipOrder) |
323 |
valveTable.setHorizontalHeaderLabels(valveOrder) |
324 |
instTable.setHorizontalHeaderLabels(instOrder) |
325 |
noteTable.setHorizontalHeaderLabels(noteOrder) |
326 |
|
327 |
# Table Header 크기 설정
|
328 |
lineTable.horizontalHeaderItem(1).setSizeHint(QSize(25, 25)) |
329 |
equipTable.horizontalHeaderItem(1).setSizeHint(QSize(25, 25)) |
330 |
valveTable.horizontalHeaderItem(1).setSizeHint(QSize(25, 25)) |
331 |
instTable.horizontalHeaderItem(1).setSizeHint(QSize(25, 25)) |
332 |
noteTable.horizontalHeaderItem(1).setSizeHint(QSize(25, 25)) |
333 |
|
334 |
# UID column hide
|
335 |
lineTable.hideColumn(0)
|
336 |
equipTable.hideColumn(0)
|
337 |
valveTable.hideColumn(0)
|
338 |
instTable.hideColumn(0)
|
339 |
noteTable.hideColumn(0)
|
340 |
|
341 |
'''add by sung'''
|
342 |
#lineTable.horizontalHeader().moveSection(3, 1)
|
343 |
lineTable.horizontalHeader().setSectionsMovable(True)
|
344 |
|
345 |
# talbe Data 설정
|
346 |
self.settingLineData()
|
347 |
self.settingEquipmentData()
|
348 |
self.set_valve_data()
|
349 |
self.settingInstrumentData()
|
350 |
self.settingNoteData()
|
351 |
|
352 |
'''
|
353 |
@brief setting line data
|
354 |
@author kyouho
|
355 |
@date 2018.08.13
|
356 |
'''
|
357 |
def settingLineData(self): |
358 |
lineTable = self.ui.tableWidgetLineDataList
|
359 |
docData = AppDocData.instance() |
360 |
# 기존 저장된 데이터 불러옴
|
361 |
index = self.ui.comboBoxDoc.currentIndex()
|
362 |
text = self.ui.comboBoxDoc.itemText(index)
|
363 |
if self.ui.comboBoxDoc.currentIndex() == 0: |
364 |
text = None
|
365 |
dataList = docData.getLineDataList(text) |
366 |
lineTable.setRowCount(len(dataList))
|
367 |
row = 0
|
368 |
for data in dataList: |
369 |
for dataIndex in range(len(data)): |
370 |
#self.lineNoTableComboBoxDic
|
371 |
if dataIndex in self.lineNoTableComboBoxDic: |
372 |
tempList = self.lineNoTableComboBoxDic[dataIndex]
|
373 |
comboBox = QComboBox() |
374 |
comboBox.setEnabled(False)
|
375 |
for comboText in tempList: |
376 |
comboBox.addItem(comboText) |
377 |
tempIndex = comboBox.findText(data[dataIndex]) |
378 |
comboBox.setCurrentIndex(tempIndex) |
379 |
lineTable.setCellWidget(row, dataIndex, comboBox) |
380 |
else:
|
381 |
item = QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else '') |
382 |
item.setFlags(Qt.ItemIsEnabled) |
383 |
lineTable.setItem(row, dataIndex, item) |
384 |
row += 1
|
385 |
|
386 |
# 현재 문서명이 같으면 중복 체크 (line 경우 lineNo로)
|
387 |
if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0): |
388 |
rowCount = lineTable.rowCount() |
389 |
lineNo = [] |
390 |
for row in range(rowCount): |
391 |
lineNo.append(lineTable.item(row, 3).text())
|
392 |
|
393 |
for line in self.sceneLineData.keys(): |
394 |
lineData = self.sceneLineData[line]
|
395 |
# 중복 (어떻게 할지)
|
396 |
if lineNo.count(line) >= 1: |
397 |
rowIndex = lineNo.index(line) |
398 |
|
399 |
for index in range(len(lineData)): |
400 |
if str(lineData[index]): |
401 |
if index in self.lineNoTableComboBoxDic: |
402 |
oldData = lineTable.cellWidget(rowIndex, index).currentText() |
403 |
if oldData != lineData[index]:
|
404 |
tempIndex = lineTable.cellWidget(rowIndex, index).findText(lineData[index]) |
405 |
lineTable.cellWidget(rowIndex, index).setCurrentIndex(tempIndex) |
406 |
else:
|
407 |
oldData = lineTable.item(rowIndex, index).text() |
408 |
if oldData != lineData[index]:
|
409 |
lineTable.item(rowIndex, index).setText(lineData[index]) |
410 |
lineTable.item(rowIndex, index).setBackground(QColor(int(134), int(229), int(127))) |
411 |
# 신규
|
412 |
else:
|
413 |
rowCount += 1
|
414 |
lineTable.setRowCount(rowCount) |
415 |
lineData[0] = '' |
416 |
|
417 |
for index in range(len(lineData)): |
418 |
if index in self.lineNoTableComboBoxDic: |
419 |
tempList = self.lineNoTableComboBoxDic[index]
|
420 |
comboBox = QComboBox() |
421 |
comboBox.setEnabled(False)
|
422 |
for comboText in tempList: |
423 |
comboBox.addItem(comboText) |
424 |
tempIndex = comboBox.findText(lineData[index]) |
425 |
comboBox.setCurrentIndex(tempIndex) |
426 |
lineTable.setCellWidget(rowCount - 1, index, comboBox)
|
427 |
item = lineTable.item(rowCount - 1, index)
|
428 |
if item is not None: |
429 |
lineTable.item(rowCount - 1, index).setFlags(Qt.ItemIsEnabled)
|
430 |
else:
|
431 |
item = QTableWidgetItem(lineData[index] if lineData[index] is not None else '') |
432 |
item.setFlags(Qt.ItemIsEnabled) |
433 |
if item.text() != '': |
434 |
item.setBackground(QColor(int(134), int(229), int(127))) |
435 |
lineTable.setItem(rowCount - 1, index, item)
|
436 |
|
437 |
'''
|
438 |
@brief setting equip data
|
439 |
@author kyouho
|
440 |
@date 2018.08.14
|
441 |
'''
|
442 |
def settingEquipmentData(self): |
443 |
equipTable = self.ui.tableWidgetEquipmentDataList
|
444 |
docData = AppDocData.instance() |
445 |
|
446 |
# 기존 저장된 데이터 불러옴
|
447 |
index = self.ui.comboBoxDoc.currentIndex()
|
448 |
text = self.ui.comboBoxDoc.itemText(index)
|
449 |
if self.ui.comboBoxDoc.currentIndex() == 0: |
450 |
text = None
|
451 |
dataList = docData.getEquipmentDataList(text) |
452 |
equipTable.setRowCount(len(dataList))
|
453 |
row = 0
|
454 |
for data in dataList: |
455 |
for dataIndex in range(len(data)): |
456 |
item = QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else '') |
457 |
item.setFlags(Qt.ItemIsEnabled) |
458 |
equipTable.setItem(row, dataIndex, item) |
459 |
row += 1
|
460 |
|
461 |
# 현재 문서명이 같으면 중복 체크 (Equipment 경우 uid로)
|
462 |
if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0): |
463 |
rowCount = equipTable.rowCount() |
464 |
uidList = [] |
465 |
for row in range(rowCount): |
466 |
uidList.append(equipTable.item(row, 0).text())
|
467 |
|
468 |
for uid in self.sceneEquipData.keys(): |
469 |
equipData = self.sceneEquipData[uid]
|
470 |
# 중복 (어떻게 할지)
|
471 |
if uidList.count(uid) >= 1: |
472 |
rowIndex = uidList.index(uid) |
473 |
|
474 |
for index in range(len(equipData)): |
475 |
if str(equipData[index]): |
476 |
oldData = equipTable.item(rowIndex, index).text() |
477 |
if oldData != equipData[index]:
|
478 |
equipTable.item(rowIndex, index).setText(equipData[index]) |
479 |
equipTable.item(rowIndex, index).setBackground(QColor(int(134), int(229), int(127))) |
480 |
# 신규
|
481 |
else:
|
482 |
rowCount += 1
|
483 |
equipTable.setRowCount(rowCount) |
484 |
|
485 |
for index in range(len(equipData)): |
486 |
item = QTableWidgetItem(str(equipData[index]) if equipData[index] is not None else '') |
487 |
item.setFlags(Qt.ItemIsEnabled) |
488 |
if item.text() != '': |
489 |
item.setBackground(QColor(int(134), int(229), int(127))) |
490 |
equipTable.setItem(rowCount - 1, index, item)
|
491 |
|
492 |
def set_valve_data(self): |
493 |
"""
|
494 |
@brief setting valve data
|
495 |
@author humkyung
|
496 |
@date 2018.10.11
|
497 |
"""
|
498 |
from EngineeringTextItem import QEngineeringTextItem |
499 |
|
500 |
valve_table = self.ui.tableWidgetValveDataList
|
501 |
docData = AppDocData.instance() |
502 |
|
503 |
# 기존 저장된 데이터 불러옴
|
504 |
index = self.ui.comboBoxDoc.currentIndex()
|
505 |
text = self.ui.comboBoxDoc.itemText(index)
|
506 |
if self.ui.comboBoxDoc.currentIndex() == 0: |
507 |
text = None
|
508 |
dataList = docData.get_valve_data_list(text) |
509 |
valve_table.setRowCount(len(dataList))
|
510 |
row = 0
|
511 |
for data in dataList: |
512 |
for dataIndex in range(len(data)): |
513 |
item = QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else '') |
514 |
item.setFlags(Qt.ItemIsEnabled) |
515 |
valve_table.setItem(row, dataIndex, item) |
516 |
row += 1
|
517 |
|
518 |
# get column headers
|
519 |
headers = [] |
520 |
for col in range(valve_table.columnCount()): |
521 |
headers.append(valve_table.horizontalHeaderItem(col).text()) |
522 |
|
523 |
# 현재 문서명이 같으면 중복 체크
|
524 |
if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0): |
525 |
rowCount = valve_table.rowCount() |
526 |
uidList = [] |
527 |
for row in range(rowCount): |
528 |
uidList.append(valve_table.item(row, 0).text())
|
529 |
|
530 |
for uid in self.scene_valve_data.keys(): |
531 |
attrs = self.scene_valve_data[uid].getAttributes()
|
532 |
# 중복 (어떻게 할지)
|
533 |
if uidList.count(uid) >= 1: |
534 |
rowIndex = uidList.index(uid) |
535 |
|
536 |
for key in attrs.keys(): |
537 |
attr_info = docData.getSymbolAttributeByUID(key) |
538 |
attr_name = attr_info[0] if attr_info is not None else '' |
539 |
if attr_name in headers: |
540 |
oldData = valve_table.item(rowIndex, headers.index(attr_name)).text() |
541 |
if oldData != attrs[key]:
|
542 |
valve_table.item(rowIndex, index).setText(attrs[key]) |
543 |
valve_table.item(rowIndex, index).setBackground(QColor(int(134), int(229), int(127))) |
544 |
# 신규
|
545 |
else:
|
546 |
rowCount += 1
|
547 |
valve_table.setRowCount(rowCount) |
548 |
|
549 |
for key in attrs.keys(): |
550 |
attr_info = docData.getSymbolAttributeByUID(key) |
551 |
attr_name = attr_info[0] if attr_info is not None else '' |
552 |
if attr_name in headers: |
553 |
if attr_info[2] == 'Text Item': |
554 |
items = [item for item in self.parent.graphicsView.scene.items() if issubclass(type(item), QEngineeringTextItem) and item.uid == attrs[key]] |
555 |
item = QTableWidgetItem(items[0].text() if len(items) > 0 else '') |
556 |
else:
|
557 |
item = QTableWidgetItem(str(attrs[key]) if attrs[key] is not None else '') |
558 |
|
559 |
item.setFlags(Qt.ItemIsEnabled) |
560 |
if item.text() != '': |
561 |
item.setBackground(QColor(int(134), int(229), int(127))) |
562 |
valve_table.setItem(rowCount - 1, headers.index(attr_name), item)
|
563 |
|
564 |
for attr_name in ['UID', 'PNID_NO']: |
565 |
if attr_name in headers: |
566 |
if attr_name == 'UID': |
567 |
item = QTableWidgetItem(uid) |
568 |
elif attr_name == 'PNID_NO': |
569 |
item = QTableWidgetItem(docData.imgName) |
570 |
|
571 |
item.setFlags(Qt.ItemIsEnabled) |
572 |
if item.text() != '': |
573 |
item.setBackground(QColor(int(134), int(229), int(127))) |
574 |
valve_table.setItem(rowCount - 1, headers.index(attr_name), item)
|
575 |
|
576 |
'''
|
577 |
@brief setting Inst data
|
578 |
@author kyouho
|
579 |
@date 2018.08.14
|
580 |
'''
|
581 |
def settingInstrumentData(self): |
582 |
instTable = self.ui.tableWidgetInstrumentDataList
|
583 |
docData = AppDocData.instance() |
584 |
|
585 |
# 기존 저장된 데이터 불러옴
|
586 |
index = self.ui.comboBoxDoc.currentIndex()
|
587 |
text = self.ui.comboBoxDoc.itemText(index)
|
588 |
if self.ui.comboBoxDoc.currentIndex() == 0: |
589 |
text = None
|
590 |
dataList = docData.getInstrumentDataList(text) |
591 |
instTable.setRowCount(len(dataList))
|
592 |
row = 0
|
593 |
for data in dataList: |
594 |
for dataIndex in range(len(data)): |
595 |
item = QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else '') |
596 |
item.setFlags(Qt.ItemIsEnabled) |
597 |
instTable.setItem(row, dataIndex, item) |
598 |
row += 1
|
599 |
|
600 |
# 현재 문서명이 같으면 중복 체크 (Inst 경우 uid로)
|
601 |
if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0): |
602 |
rowCount = instTable.rowCount() |
603 |
uidList = [] |
604 |
for row in range(rowCount): |
605 |
uidList.append(instTable.item(row, 0).text())
|
606 |
|
607 |
for uid in self.sceneInstData.keys(): |
608 |
instData = self.sceneInstData[uid]
|
609 |
# 중복 (어떻게 할지)
|
610 |
if uidList.count(uid) >= 1: |
611 |
rowIndex = uidList.index(uid) |
612 |
|
613 |
for index in range(len(instData)): |
614 |
if str(instData[index]): |
615 |
oldData = instTable.item(rowIndex, index).text() |
616 |
if oldData != instData[index]:
|
617 |
instTable.item(rowIndex, index).setText(instData[index]) |
618 |
instTable.item(rowIndex, index).setBackground(QColor(int(134), int(229), int(127))) |
619 |
|
620 |
# 신규
|
621 |
else:
|
622 |
rowCount += 1
|
623 |
instTable.setRowCount(rowCount) |
624 |
|
625 |
for index in range(len(instData)): |
626 |
item = QTableWidgetItem(str(instData[index]) if instData[index] is not None else '') |
627 |
item.setFlags(Qt.ItemIsEnabled) |
628 |
if item.text() != '': |
629 |
item.setBackground(QColor(int(134), int(229), int(127))) |
630 |
instTable.setItem(rowCount - 1, index, item)
|
631 |
|
632 |
'''
|
633 |
@brief setting note data
|
634 |
@author kyouho
|
635 |
@date 2018.10.10
|
636 |
'''
|
637 |
def settingNoteData(self): |
638 |
noteTable = self.ui.tableWidgetNoteDataList
|
639 |
docData = AppDocData.instance() |
640 |
|
641 |
# 기존 저장된 데이터 불러옴
|
642 |
index = self.ui.comboBoxDoc.currentIndex()
|
643 |
text = self.ui.comboBoxDoc.itemText(index)
|
644 |
if self.ui.comboBoxDoc.currentIndex() == 0: |
645 |
text = None
|
646 |
dataList = docData.getNoteDataList(text) |
647 |
noteTable.setRowCount(len(dataList))
|
648 |
|
649 |
row = 0
|
650 |
for data in dataList: |
651 |
for dataIndex in range(len(data)): |
652 |
item = QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else '') |
653 |
item.setFlags(Qt.ItemIsEnabled) |
654 |
noteTable.setItem(row, dataIndex, item) |
655 |
row += 1
|
656 |
|
657 |
# 현재 문서명이 같으면 중복 체크 (Note 경우 uid로)
|
658 |
if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0): |
659 |
rowCount = noteTable.rowCount() |
660 |
uidList = [] |
661 |
for row in range(rowCount): |
662 |
uidList.append(noteTable.item(row, 0).text())
|
663 |
|
664 |
for uid in self.sceneNoteData.keys(): |
665 |
noteData = self.sceneNoteData[uid]
|
666 |
# 중복 (어떻게 할지)
|
667 |
if uidList.count(uid) >= 1: |
668 |
rowIndex = uidList.index(uid) |
669 |
|
670 |
for index in range(len(noteData)): |
671 |
if str(noteData[index]): |
672 |
oldData = noteTable.item(rowIndex, index).text() |
673 |
if oldData != noteData[index]:
|
674 |
noteTable.item(rowIndex, index).setText(noteData[index]) |
675 |
noteTable.item(rowIndex, index).setBackground(QColor(int(134), int(229), int(127))) |
676 |
|
677 |
# 신규
|
678 |
else:
|
679 |
rowCount += 1
|
680 |
noteTable.setRowCount(rowCount) |
681 |
|
682 |
for index in range(len(noteData)): |
683 |
item = QTableWidgetItem(str(noteData[index]) if noteData[index] is not None else '') |
684 |
item.setFlags(Qt.ItemIsEnabled) |
685 |
if item.text() != '': |
686 |
item.setBackground(QColor(int(134), int(229), int(127))) |
687 |
noteTable.setItem(rowCount - 1, index, item)
|
688 |
|
689 |
def show_item_data_format_dialog(self): |
690 |
"""
|
691 |
show item data format dialog
|
692 |
"""
|
693 |
from ItemDataFormatDialog import QItemDataFormatDialog |
694 |
|
695 |
item_data_format_dialog = QItemDataFormatDialog(self, self.lineColumnListAll, self.equipColumnListAll, self.valveColumnListAll, self.instColumnListAll, self.noteColumnListAll) |
696 |
item_data_format_dialog.exec_() |
697 |
|
698 |
'''
|
699 |
@brief doc name change event
|
700 |
@author kyouho
|
701 |
@date 2018.08.13
|
702 |
'''
|
703 |
def docNameChanged(self, text): |
704 |
self.settingLineData()
|
705 |
self.settingEquipmentData()
|
706 |
|
707 |
def saveSceneData(self): |
708 |
"""
|
709 |
@brief save Line Data at scene
|
710 |
@author kyouho
|
711 |
@date 2018.08.13
|
712 |
"""
|
713 |
|
714 |
appDocData = AppDocData.instance() |
715 |
|
716 |
if not self.parent.graphicsView.hasImage(): |
717 |
return
|
718 |
|
719 |
from EngineeringLineNoTextItem import QEngineeringLineNoTextItem |
720 |
items = [item for item in self.parent.graphicsView.scene.items() if type(item) is QEngineeringLineNoTextItem] |
721 |
for item in items: |
722 |
text = item.text() |
723 |
self.sceneLineData[text] = item.getLineDataList()
|
724 |
|
725 |
from QEngineeringEquipmentItem import QEngineeringEquipmentItem |
726 |
items = [item for item in self.parent.graphicsView.scene.items() if type(item) is QEngineeringEquipmentItem] |
727 |
for item in items: |
728 |
self.sceneEquipData[str(item.uid)] = item.getEquipmentDataList() |
729 |
|
730 |
from SymbolSvgItem import SymbolSvgItem |
731 |
items = [item for item in self.parent.graphicsView.scene.items() if type(item) is SymbolSvgItem] |
732 |
for item in items: |
733 |
self.scene_valve_data[str(item.uid)] = item |
734 |
|
735 |
from EngineeringInstrumentItem import QEngineeringInstrumentItem |
736 |
items = [item for item in self.parent.graphicsView.scene.items() if type(item) is QEngineeringInstrumentItem] |
737 |
for item in items: |
738 |
self.sceneInstData[str(item.uid)] = item.getInstrumentDataList() |
739 |
|
740 |
from QEngineeringNoteItem import QEngineeringNoteItem |
741 |
items = [item for item in self.parent.graphicsView.scene.items() if type(item) is QEngineeringNoteItem] |
742 |
for item in items: |
743 |
loopIndex = 1
|
744 |
for note in item.getNoteDataList(): |
745 |
self.sceneNoteData[str(item.uid) + "-" + str(loopIndex)] = note |
746 |
loopIndex += 1
|
747 |
|
748 |
''' self.equipmentDataList
|
749 |
@brief save Datas
|
750 |
@author kyouho
|
751 |
@date 2018.08.13
|
752 |
'''
|
753 |
def accept(self): |
754 |
docData = AppDocData.instance() |
755 |
self.saveLineDataList()
|
756 |
docData.deleteLineDataList(self.removeUID[0]) |
757 |
self.saveEquipmentDataList()
|
758 |
docData.deleteEquipDataList(self.removeUID[1]) |
759 |
self.saveInstrumentDataList()
|
760 |
docData.deleteInstDataList(self.removeUID[2]) |
761 |
self.saveNoteDataList()
|
762 |
docData.deleteNoteDataList(self.removeUID[3]) |
763 |
|
764 |
QDialog.accept(self)
|
765 |
|
766 |
'''
|
767 |
@brief save Line Data
|
768 |
@author kyouho
|
769 |
@date 2018.08.13
|
770 |
'''
|
771 |
def saveLineDataList(self): |
772 |
import uuid |
773 |
|
774 |
lineTable = self.ui.tableWidgetLineDataList
|
775 |
docData = AppDocData.instance() |
776 |
|
777 |
dataLists = [] |
778 |
for rowIndex in range(lineTable.rowCount()): |
779 |
dataList = [] |
780 |
for columnIndex in range(lineTable.columnCount()): |
781 |
if columnIndex in self.lineNoTableComboBoxDic: |
782 |
widgetItem = lineTable.cellWidget(rowIndex, columnIndex) |
783 |
if widgetItem.currentIndex() >= 0: |
784 |
dataList.append(widgetItem.currentText()) |
785 |
else:
|
786 |
dataList.append('')
|
787 |
|
788 |
else:
|
789 |
widgetItem = lineTable.item(rowIndex, columnIndex) |
790 |
if widgetItem is not None: |
791 |
dataList.append(widgetItem.text()) |
792 |
else:
|
793 |
dataList.append('')
|
794 |
|
795 |
if dataList[0] is None or dataList[0] == '': |
796 |
dataList[0] = str(uuid.uuid4()) |
797 |
dataLists.append(dataList) |
798 |
|
799 |
docData.setLineDataList(dataLists) |
800 |
|
801 |
'''
|
802 |
@brief save Equip Data
|
803 |
@author kyouho
|
804 |
@date 2018.08.13
|
805 |
'''
|
806 |
def saveEquipmentDataList(self): |
807 |
import uuid |
808 |
|
809 |
equipTable = self.ui.tableWidgetEquipmentDataList
|
810 |
docData = AppDocData.instance() |
811 |
|
812 |
dataLists = [] |
813 |
for rowIndex in range(equipTable.rowCount()): |
814 |
dataList = [] |
815 |
for columnIndex in range(equipTable.columnCount()): |
816 |
widgetItem = equipTable.item(rowIndex, columnIndex) |
817 |
|
818 |
if widgetItem is not None: |
819 |
dataList.append(widgetItem.text()) |
820 |
else:
|
821 |
dataList.append('')
|
822 |
|
823 |
dataLists.append(dataList) |
824 |
|
825 |
docData.setEquipmentDataList(dataLists) |
826 |
|
827 |
'''
|
828 |
@brief save inst Data
|
829 |
@author kyouho
|
830 |
@date 2018.08.13
|
831 |
'''
|
832 |
def saveInstrumentDataList(self): |
833 |
|
834 |
instTable = self.ui.tableWidgetInstrumentDataList
|
835 |
docData = AppDocData.instance() |
836 |
|
837 |
dataLists = [] |
838 |
for rowIndex in range(instTable.rowCount()): |
839 |
dataList = [] |
840 |
for columnIndex in range(instTable.columnCount()): |
841 |
widgetItem = instTable.item(rowIndex, columnIndex) |
842 |
|
843 |
if widgetItem is not None: |
844 |
dataList.append(widgetItem.text()) |
845 |
else:
|
846 |
dataList.append('')
|
847 |
|
848 |
dataLists.append(dataList) |
849 |
|
850 |
docData.setInstrumentDataList(dataLists) |
851 |
|
852 |
'''
|
853 |
@brief save note Data
|
854 |
@author kyouho
|
855 |
@date 2018.10.10
|
856 |
'''
|
857 |
def saveNoteDataList(self): |
858 |
|
859 |
noteTable = self.ui.tableWidgetNoteDataList
|
860 |
docData = AppDocData.instance() |
861 |
|
862 |
dataLists = [] |
863 |
for rowIndex in range(noteTable.rowCount()): |
864 |
dataList = [] |
865 |
for columnIndex in range(noteTable.columnCount()): |
866 |
widgetItem = noteTable.item(rowIndex, columnIndex) |
867 |
|
868 |
if widgetItem is not None: |
869 |
dataList.append(widgetItem.text()) |
870 |
else:
|
871 |
dataList.append('')
|
872 |
|
873 |
dataLists.append(dataList) |
874 |
|
875 |
docData.setNoteDataList(dataLists) |
876 |
|
877 |
|
878 |
'''
|
879 |
@brief key press event
|
880 |
@author kyouho
|
881 |
@date 2018.08.13
|
882 |
'''
|
883 |
def keyPressEvent(self, e): |
884 |
if e.key() == Qt.Key_Delete:
|
885 |
_tabWidget = self.ui.tabWidget
|
886 |
currentTabIndex = _tabWidget.currentIndex() |
887 |
tableName = ''
|
888 |
if currentTabIndex == 0: |
889 |
tableName = 'tableWidgetLineDataList'
|
890 |
elif currentTabIndex == 1: |
891 |
tableName = 'tableWidgetEquipmentDataList'
|
892 |
elif currentTabIndex == 2: |
893 |
tableName = 'tableWidgetInstrumentDataList'
|
894 |
else:
|
895 |
tableName = 'tableWidgetNoteDataList'
|
896 |
table = self.findChild(QTableWidget, tableName)
|
897 |
|
898 |
if table:
|
899 |
selectedIndexes = table.selectedIndexes() |
900 |
selectedRows = [item.row() for item in selectedIndexes] |
901 |
model = table.model() |
902 |
|
903 |
rowsIndex = [] |
904 |
for row in selectedRows: |
905 |
rowsIndex.append(row) |
906 |
|
907 |
#중복 제거
|
908 |
rowsIndex = list(set(rowsIndex)) |
909 |
rowsIndex.reverse() |
910 |
|
911 |
for row in rowsIndex: |
912 |
uidCell = table.item(row, 0)
|
913 |
if uidCell is not None: |
914 |
uid = table.item(row, 0).text()
|
915 |
self.removeUID[currentTabIndex].append(uid)
|
916 |
model.removeRow(row) |