프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

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)
클립보드 이미지 추가 (최대 크기: 500 MB)