프로젝트

일반

사용자정보

통계
| 개정판:

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

    
클립보드 이미지 추가 (최대 크기: 500 MB)