프로젝트

일반

사용자정보

개정판 8804d0d9

ID8804d0d9b65208011273582bc4543de7435a156c
상위 0e455b69
하위 701cd8c0

gaqhf 이(가) 6년 이상 전에 추가함

dev issue #627: add instrument data list

차이점 보기:

DTI_PID/DTI_PID/AppDocData.py
141 141

  
142 142
        self._areas = []
143 143
        self.equipments = []
144
        self.equipmentDataList = []
144
        #self.equipmentDataList = []
145 145
        self.lineNos = []
146 146
        self.lines = []
147 147
        self.symbols = []
......
1812 1812
            conn.close()
1813 1813

  
1814 1814
    '''
1815
        @brief      delete inst data list
1816
        @author     kyouho
1817
        @date       2018.08.14
1818
    '''
1819
    def deleteInstDataList(self, removeUID):
1820
        try:
1821
            # Creates or opens a file called mydb with a SQLite3 DB
1822
            dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), 'ITI_PID.db')
1823
            conn = sqlite3.connect(dbPath)
1824
            # Get a cursor object
1825
            cursor = conn.cursor()
1826
            
1827
            for uid in removeUID:
1828
                sql = "delete from INSTRUMENT_DATA_LIST where uid = '{}'".format(uid)
1829
                cursor.execute(sql)
1830

  
1831
            conn.commit()
1832

  
1833
        # Catch the exception
1834
        except Exception as ex:
1835
            # Roll back any change if something goes wrong
1836
            conn.rollback()
1837
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
1838
        finally:
1839
            # Close the db connection
1840
            conn.close()
1841

  
1842
    '''
1815 1843
        @brief      get equipment data list
1816 1844
        @author     humkyung
1817 1845
        @date       2018.05.03
1818 1846
    '''
1819 1847
    def getEquipmentDataList(self, docName = None):
1820
        if not self.equipmentDataList:
1821
            try:
1822
                # Creates or opens a file called mydb with a SQLite3 DB
1823
                dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), 'ITI_PID.db')
1824
                conn = sqlite3.connect(dbPath)
1825
                # Get a cursor object
1826
                cursor = conn.cursor()
1848
        result = []
1849
        try:
1850
            # Creates or opens a file called mydb with a SQLite3 DB
1851
            dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), 'ITI_PID.db')
1852
            conn = sqlite3.connect(dbPath)
1853
            # Get a cursor object
1854
            cursor = conn.cursor()
1827 1855

  
1828
                sql = 'select 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 from EQUIPMENT_DATA_LIST'
1829
                if docName is not None:
1830
                    sql += " where PNID_NO = '{}'".format(docName)
1856
            sql = 'select 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 from EQUIPMENT_DATA_LIST'
1857
            if docName is not None:
1858
                sql += " where PNID_NO = '{}'".format(docName)
1831 1859

  
1832
                cursor.execute(sql)
1833
                rows = cursor.fetchall()
1834
                for row in rows:
1835
                    data = []
1836
                    for index in range(len(cursor.description)): 
1837
                        data.append(row[index])
1838
                    self.equipmentDataList.append(data)
1839
            # Catch the exception
1840
            except Exception as ex:
1841
                # Roll back any change if something goes wrong
1842
                conn.rollback()
1843
                print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
1844
            finally:
1845
                # Close the db connection
1846
                conn.close()
1860
            cursor.execute(sql)
1861
            rows = cursor.fetchall()
1862
            for row in rows:
1863
                data = []
1864
                for index in range(len(cursor.description)): 
1865
                    data.append(row[index])
1866
                result.append(data)
1867
        # Catch the exception
1868
        except Exception as ex:
1869
            # Roll back any change if something goes wrong
1870
            conn.rollback()
1871
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
1872
        finally:
1873
            # Close the db connection
1874
            conn.close()
1875

  
1876
        return result
1877

  
1878
    '''
1879
        @brief      get instrument data list
1880
        @author     kyouho
1881
        @date       2018.08.14
1882
    '''
1883
    def getInstrumentDataList(self, docName = None):
1884
        result = []
1885
        try:
1886
            # Creates or opens a file called mydb with a SQLite3 DB
1887
            dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), 'ITI_PID.db')
1888
            conn = sqlite3.connect(dbPath)
1889
            # Get a cursor object
1890
            cursor = conn.cursor()
1891

  
1892
            sql = 'select UID, ITEM_NO, SERVICE, FLOW_RATE, PRESSURE, TEMPERATURE, TPYE, RANGE, NOR_LEVEL_MM, NOR_LEVEL_PERCENT, DEL_PRESS, SHUT_OFF, LOCATION, PNID_NO, REV from INSTRUMENT_DATA_LIST'
1893
            if docName is not None:
1894
                sql += " where PNID_NO = '{}'".format(docName)
1895

  
1896
            cursor.execute(sql)
1897
            rows = cursor.fetchall()
1898
            for row in rows:
1899
                data = []
1900
                for index in range(len(cursor.description)): 
1901
                    data.append(row[index])
1902
                result.append(data)
1903
        # Catch the exception
1904
        except Exception as ex:
1905
            # Roll back any change if something goes wrong
1906
            conn.rollback()
1907
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
1908
        finally:
1909
            # Close the db connection
1910
            conn.close()
1847 1911

  
1848
        return self.equipmentDataList 
1912
        return result
1849 1913

  
1850 1914
    '''
1851 1915
        @brief      set equipment data list
......
1865 1929
                param = tuple(data)
1866 1930
                cursor.execute(sql, param)
1867 1931
            conn.commit()
1932
        # Catch the exception
1933
        except Exception as ex:
1934
            # Roll back any change if something goes wrong
1935
            conn.rollback()
1936
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
1937
        finally:
1938
            # Close the db connection
1939
            conn.close()
1940

  
1941
    '''
1942
        @brief      set instrumnet data list
1943
        @author     kyoyho
1944
        @date       2018.08.14
1945
    '''
1946
    def setInstrumentDataList(self, dataList):
1947
        try:
1948
            # Creates or opens a file called mydb with a SQLite3 DB
1949
            dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), 'ITI_PID.db')
1950
            conn = sqlite3.connect(dbPath)
1951
            # Get a cursor object
1952
            cursor = conn.cursor()
1953

  
1954
            for data in dataList:
1955
                sql = "insert or replace into INSTRUMENT_DATA_LIST(UID, ITEM_NO, SERVICE, FLOW_RATE, PRESSURE, TEMPERATURE, TPYE, RANGE, NOR_LEVEL_MM, NOR_LEVEL_PERCENT, DEL_PRESS, SHUT_OFF, LOCATION, PNID_NO, REV) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
1956
                param = tuple(data)
1957
                cursor.execute(sql, param)
1958
            conn.commit()
1868 1959

  
1869
            self.equipmentDataList = dataList
1870 1960
        # Catch the exception
1871 1961
        except Exception as ex:
1872 1962
            # Roll back any change if something goes wrong
DTI_PID/DTI_PID/ItemDataExportDialog.py
15 15

  
16 16
        self.sceneLineData = {}
17 17
        self.sceneEquipData = {}
18
        self.sceneInstData = {}
18 19

  
19 20
        self.lineColumnList = []
20 21
        self.equipColumnList = []
......
78 79
        # Table Header Label 설정
79 80
        self.lineColumnList = ['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']
80 81
        self.equipColumnList = ['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']
81
        self.instColumnList = ['UID', 'NAME', 'VARIABLECODE', 'TYPEMODIFIER', 'TAGSEQNO', 'TAGSUFFIX', 'DOCUMENTNAME']
82
        self.instColumnList = ['UID', 'ITEM_NO', 'SERVICE', 'FLOW_RATE', 'PRESSURE', 'TEMPERATURE', 'TPYE', 'RANGE', 'NOR_LEVEL_MM', 'NOR_LEVEL_PERCENT', 'DEL_PRESS', 'SHUT_OFF', 'LOCATION', 'PNID_NO', 'REV']
82 83

  
83 84
        lineTable.setHorizontalHeaderLabels(['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'])
84 85
        equipTable.setHorizontalHeaderLabels(['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'])
85
        instTable.setHorizontalHeaderLabels(['UID', 'Name', 'Variable Code', 'Type Modifier', 'Tag Seq No', 'Tag Suffix', 'Document Name'])
86
        instTable.setHorizontalHeaderLabels(['UID', 'ITEM_NO', 'SERVICE', 'FLOW_RATE', 'PRESSURE', 'TEMPERATURE', 'TPYE', 'RANGE', 'NOR_LEVEL_MM', 'NOR_LEVEL_PERCENT', 'DEL_PRESS', 'SHUT_OFF', 'LOCATION', 'PNID_NO', 'REV'])
86 87
        # Table Header 크기 설정
87 88
        lineTable.horizontalHeaderItem(1).setSizeHint(QSize(40, 40))
88 89
        equipTable.horizontalHeaderItem(1).setSizeHint(QSize(40, 40))
......
91 92
        # talbe Data 설정
92 93
        self.settingLineData()
93 94
        self.settingEquipmentData()
95
        self.settingInstrumentData()
94 96

  
95 97
    '''
96 98
        @brief      setting line data
......
182 184
                            widgetItem.setBackground(QColor(int(134), int(229), int(127)))
183 185
                        equipTable.setItem(rowCount - 1, index, widgetItem)
184 186

  
187
    '''
188
        @brief      setting equip data
189
        @author     kyouho
190
        @date       2018.08.14
191
    '''
192
    def settingInstrumentData(self):
193
        instTable = self.ui.tableWidgetInstrumentDataList
194
        docData = AppDocData.instance()
195

  
196
        # 기존 저장된 데이터 불러옴
197
        index = self.ui.comboBoxDoc.currentIndex()
198
        text = self.ui.comboBoxDoc.itemText(index)
199
        if self.ui.comboBoxDoc.currentIndex() == 0:
200
            text = None
201
        dataList = docData.getInstrumentDataList(text)
202
        instTable.setRowCount(len(dataList))
203
        row = 0
204
        for data in dataList:
205
            for dataIndex in range(len(data)):
206
                instTable.setItem(row, dataIndex, QTableWidgetItem(data[dataIndex] if data[dataIndex] is not None else ''))
207
            row += 1
208

  
209
        # 현재 문서명이 같으면 중복 체크 (Equipment 경우 uid로)
210
        if docData.imgName is not None and (docData.imgName == text or self.ui.comboBoxDoc.currentIndex() == 0):
211
            rowCount = instTable.rowCount()
212
            uidList = []
213
            for row in range(rowCount):
214
                uidList.append(instTable.item(row, 0).text())
215

  
216
            for uid in self.sceneInstData.keys():
217
                # 중복 (어떻게 할지)
218
                if uidList.count(uid) >= 1:
219
                    continue
220
                # 신규
221
                else:
222
                    rowCount += 1
223
                    instTable.setRowCount(rowCount)
224
                    equipData = self.sceneInstData[uid]
225

  
226
                    for index in range(len(equipData)):
227
                        widgetItem = QTableWidgetItem(equipData[index] if equipData[index] is not None else '')
228
                        if widgetItem.text() != '':
229
                            widgetItem.setBackground(QColor(int(134), int(229), int(127)))
230
                        instTable.setItem(rowCount - 1, index, widgetItem)
231

  
232

  
185 233

  
186 234
    '''
187 235
        @brief      doc name change event
......
213 261
        for item in items:
214 262
            self.sceneEquipData[item.uid] = item.getEquipmentDataList()
215 263

  
264
        from QEngineeringInstrumentItem import QEngineeringInstrumentItem
265
        items = [item for item in self.parent.graphicsView.scene.items() if type(item) is QEngineeringInstrumentItem]
266
        for item in items:
267
            self.sceneInstData[item.uid] = item.getInstrumentDataList()
216 268

  
217
        #self.sceneEquipData
218 269

  
219
    ''' 
270
    ''' self.equipmentDataList
220 271
        @brief      save Datas
221 272
        @author     kyouho
222 273
        @date       2018.08.13
......
227 278
        docData.deleteLineDataList(self.removeUID[0])
228 279
        self.saveEquipmentDataList()
229 280
        docData.deleteEquipDataList(self.removeUID[1])
230

  
281
        self.saveInstrumentDataList()
282
        docData.deleteInstDataList(self.removeUID[2])
231 283

  
232 284
        QDialog.accept(self)
233 285

  
......
285 337
            
286 338
        docData.setEquipmentDataList(dataLists)
287 339

  
340
    '''
341
        @brief      save Equip Data
342
        @author     kyouho
343
        @date       2018.08.13
344
    '''
345
    def saveInstrumentDataList(self):
346
        
347
        instTable = self.ui.tableWidgetInstrumentDataList
348
        docData = AppDocData.instance()
349

  
350
        dataLists = []
351
        for rowIndex in range(instTable.rowCount()):
352
            dataList = []
353
            for columnIndex in range(instTable.columnCount()):
354
                widgetItem = instTable.item(rowIndex, columnIndex)
355

  
356
                if widgetItem is not None:
357
                    dataList.append(widgetItem.text())
358
                else:
359
                    dataList.append('')
360
            
361
            dataLists.append(dataList)
362
            
363
        docData.setInstrumentDataList(dataLists)
364

  
288 365

  
289 366
    '''
290 367
        @brief      key press event
DTI_PID/DTI_PID/ItemDataExport_UI.py
46 46
        self.gridLayout_7 = QtWidgets.QGridLayout(self.tabInstrumentList)
47 47
        self.gridLayout_7.setObjectName("gridLayout_7")
48 48
        self.tableWidgetInstrumentDataList = QtWidgets.QTableWidget(self.tabInstrumentList)
49
        self.tableWidgetInstrumentDataList.setColumnCount(7)
49
        self.tableWidgetInstrumentDataList.setColumnCount(15)
50 50
        self.tableWidgetInstrumentDataList.setObjectName("tableWidgetInstrumentDataList")
51 51
        self.tableWidgetInstrumentDataList.setRowCount(0)
52 52
        self.tableWidgetInstrumentDataList.verticalHeader().setVisible(False)
......
70 70
        self.gridLayout.addLayout(self.horizontalLayout, 1, 1, 1, 1)
71 71

  
72 72
        self.retranslateUi(ItemDataExportDialog)
73
        self.tabWidget.setCurrentIndex(1)
73
        self.tabWidget.setCurrentIndex(2)
74 74
        self.buttonBox.accepted.connect(ItemDataExportDialog.accept)
75 75
        self.buttonBox.rejected.connect(ItemDataExportDialog.reject)
76 76
        QtCore.QMetaObject.connectSlotsByName(ItemDataExportDialog)
DTI_PID/DTI_PID/Shapes/QEngineeringInstrumentItem.py
11 11
from SymbolSvgItem import SymbolSvgItem
12 12
from EngineeringConnectorItem import QEngineeringConnectorItem
13 13

  
14
instColumnList = ['UID', 'ITEM_NO', 'SERVICE', 'FLOW_RATE', 'PRESSURE', 'TEMPERATURE', 'TPYE', 'RANGE', 'NOR_LEVEL_MM', 'NOR_LEVEL_PERCENT', 'DEL_PRESS', 'SHUT_OFF', 'LOCATION', 'PNID_NO', 'REV']
15

  
14 16
class QEngineeringInstrumentItem(SymbolSvgItem):
15 17
    clicked = pyqtSignal(QGraphicsSvgItem)
16 18
    #removed = pyqtSignal(QGraphicsItem)
......
245 247
            parentNode.append(attrNode) 
246 248
        except Exception as ex:
247 249
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
250

  
251

  
252
    '''
253
        @brief      return equip Data List
254
        @author     kyouho
255
        @date       2018.08.14
256
    '''
257
    def getInstrumentDataList(self):
258
        dataList = []
259
        try:
260
            from AppDocData import AppDocData
261

  
262
            global instColumnList
263

  
264
            docData = AppDocData.instance()
265
            attrs = self.attrs
266

  
267
            for index in range(len(instColumnList)):
268
                dataList.append('')
269

  
270
            dataList[0] = self.uid
271
            dataList[13] = docData.imgName
272

  
273
            for attr in attrs:
274
                pass
275
            
276
        except Exception as ex:
277
            print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno))
278

  
279
        return dataList
DTI_PID/DTI_PID/UI/ItemDataExport.ui
22 22
   <item row="0" column="1">
23 23
    <widget class="QTabWidget" name="tabWidget">
24 24
     <property name="currentIndex">
25
      <number>1</number>
25
      <number>2</number>
26 26
     </property>
27 27
     <widget class="QWidget" name="tabLineList">
28 28
      <attribute name="title">
......
103 103
       <item row="0" column="0">
104 104
        <widget class="QTableWidget" name="tableWidgetInstrumentDataList">
105 105
         <property name="columnCount">
106
          <number>7</number>
106
          <number>15</number>
107 107
         </property>
108 108
         <attribute name="verticalHeaderVisible">
109 109
          <bool>false</bool>
......
115 115
         <column/>
116 116
         <column/>
117 117
         <column/>
118
         <column/>
119
         <column/>
120
         <column/>
121
         <column/>
122
         <column/>
123
         <column/>
124
         <column/>
125
         <column/>
118 126
        </widget>
119 127
       </item>
120 128
      </layout>

내보내기 Unified diff