프로젝트

일반

사용자정보

개정판 a346916f

IDa346916fe2d287413c26f7180682ebecce423878
상위 816f941c
하위 77df149e, d695194d

백흠경이(가) 4년 이상 전에 추가함

issue #1489: HMB, Streamline 데이터 로딩 구현

Change-Id: I53276d68346abdf3024386ba5826fb734c015faa

차이점 보기:

DTI_PID/DTI_PID/AppDocData.py
2656 2656
                                                               sys.exc_info()[-1].tb_lineno)
2657 2657
                App.mainWnd().addMessage.emit(MessageType.Error, message)
2658 2658

  
2659
    @staticmethod
2660
    def save_stream_line_data(stream_line_list: list):
2661
        import uuid
2662

  
2663
        app_doc_data = AppDocData.instance()
2664
        with app_doc_data.project.database.connect() as conn:
2665
            try:
2666
                cursor = conn.cursor()
2667
                for stream_line in stream_line_list:
2668
                    sql = f"insert into Streamlines(HMB_UID,[From],[To]) values" \
2669
                          f"((select UID from HMB where StreamNumber=?),?,?)"
2670
                    params = (stream_line[0], stream_line[1], stream_line[2])
2671
                    affected = cursor.execute(sql, params)
2672
            except Exception as ex:
2673
                # Roll back any change if something goes wrong
2674
                conn.rollback()
2675

  
2676
                from App import App
2677
                message = f"error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:" \
2678
                          f"{sys.exc_info()[-1].tb_lineno}"
2679
                App.mainWnd().addMessage.emit(MessageType.Error, message)
2680

  
2681
    def get_stream_lines(self, hmb_uid: str) -> list:
2682
        """get stream lines related to hmb"""
2683

  
2684
        with self.project.database.connect() as conn:
2685
            try:
2686
                # Get a cursor object
2687
                cursor = conn.cursor()
2688

  
2689
                sql = f"select * from Streamlines where HMB_UID = ?"
2690
                sql = self.project.database.to_sql(sql)
2691
                params = (hmb_uid,)
2692
                cursor.execute(sql, params)
2693
                return cursor.fetchall()
2694
            # Catch the exception
2695
            except Exception as ex:
2696
                # Roll back any change if something goes wrong
2697
                conn.rollback()
2698

  
2699
                from App import App
2700
                message = f"error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:" \
2701
                          f"{sys.exc_info()[-1].tb_lineno}"
2702
                App.mainWnd().addMessage.emit(MessageType.Error, message)
2703

  
2659 2704

  
2660 2705
    def saveCustomCodes(self, tables):
2661 2706
        ''' save custom code tables and codes '''
DTI_PID/DTI_PID/HMBDialog.py
148 148
            max_row = sheet.max_row
149 149
            # get max column count
150 150
            max_column = sheet.max_column
151

  
152
            stream_lines = []
151 153
            for col in range(2, max_column + 1):
152
                stream_no = sheet.cell(row=1, column=col)
153
                from_ = sheet.cell(row=2, column=col)
154
                to_ = sheet.cell(row=3, column=col)
154
                stream_no = sheet.cell(row=1, column=col).value
155
                from_ = sheet.cell(row=2, column=col).value
156
                to_ = sheet.cell(row=3, column=col).value
155 157

  
156 158
                hmb = HMBData()
157
                hmb.stream_no = stream_no.value
159
                hmb.stream_no = stream_no
158 160
                hmb_list.append(hmb)
159 161

  
162
                stream_lines.append((stream_no, from_, to_))
163

  
160 164
            app_doc_data = AppDocData.instance()
161 165
            app_doc_data.save_hmb_data(hmb_list)
162 166

  
167
            AppDocData.save_stream_line_data(stream_lines)
168

  
163 169
            self.fill_hmb_data(None)
164 170

  
165 171
    def accept(self):
DTI_PID/DTI_PID/Scripts/ID2.sql
173 173
);
174 174

  
175 175
CREATE TABLE IF NOT EXISTS HMB (
176
    UID       VARCHAR (37) NOT NULL,
177
    STREAM_NO TEXT         NOT NULL,
178
    NAME      TEXT         NOT NULL,
179
    UNIT      TEXT,
180
    VALUE     TEXT,
181
    PRIMARY KEY (
182
        UID
183
    )
176
    UID                                  VARCHAR (37) PRIMARY KEY,
177
    StreamNumber                         TEXT,
178
    StreamDescription                    TEXT,
179
    DATACASE                             TEXT,
180
    STREAMPHASE                          TEXT,
181
    Unitno                               TEXT,
182
    OVERALLVAPORFRACTION                 TEXT,
183
    OVERALLTEMPERATURE                   TEXT,
184
    OVERALLPRESSURE                      TEXT,
185
    OVERALLMOLECULARWEIGHT               TEXT,
186
    OVERALLMOLARFLOW                     TEXT,
187
    OVERALLMASSFLOW                      TEXT,
188
    OVERALLACTUALVOLUMEFLOW              TEXT,
189
    OVERALLMASSDENSITY                   TEXT,
190
    OVERALLVISCOSITY                     TEXT,
191
    OVERALLMASSHEATCAPACITY              TEXT,
192
    OVERALLHEATFLOW                      TEXT,
193
    OverallMassEnthalpy                  TEXT,
194
    [OverallSp.Gravity]                  TEXT,
195
    OverallAPIGravity                    TEXT,
196
    OverallCriticalPressure              TEXT,
197
    OverallCriticalTemperature           TEXT,
198
    OverallUOPKfactor                    TEXT,
199
    LIQUIDMOLEFRACTION                   TEXT,
200
    VaporTemperature                     TEXT,
201
    VaporPressure                        TEXT,
202
    VaporPseudocriticalTemperature       TEXT,
203
    VaporPseudocriticalPressure          TEXT,
204
    VAPORMOLARRATE                       TEXT,
205
    VAPORMASSRATE                        TEXT,
206
    VAPORACTUALVOLUMERATE                TEXT,
207
    [VAPORSTD.VOLUMERATE]                TEXT,
208
    VAPORMOLECULARWEIGHT                 TEXT,
209
    VaporHeatFlow                        TEXT,
210
    VAPORCOMPRESSIBILITY                 TEXT,
211
    VAPORSPECIFICENTHALPY                TEXT,
212
    VAPORSPECIFICHEATCAPACITY            TEXT,
213
    IDEALVAPORSPECIFICHEATRATIO          TEXT,
214
    VAPORACTUALDENSITY                   TEXT,
215
    VAPORTHERMALCONDUCTIVITY             TEXT,
216
    VAPORVISCOSITY                       TEXT,
217
    LiquidTemperature                    TEXT,
218
    LiquidPressure                       TEXT,
219
    LiquidPseudocriticalTemperature      TEXT,
220
    LiquidPseudocriticalPressure         TEXT,
221
    LIQUIDMOLARRATE                      TEXT,
222
    LIQUIDMASSRATE                       TEXT,
223
    LIQUIDACTUALVOLUMEFLOW               TEXT,
224
    [LIQUIDSTD.VOLUMEFLOW]               TEXT,
225
    LIQUIDMOLECULARWEIGHT                TEXT,
226
    LiquidHeatFlow                       TEXT,
227
    LIQUIDSPECIFICENTHALPY               TEXT,
228
    LIQUIDBoilingPointPressureatStreamT  TEXT,
229
    LIQUIDSPECIFICHEATCAPACITY           TEXT,
230
    LIQUIDACTUALDENSITY                  TEXT,
231
    LiquidStdDensity                     TEXT,
232
    [LiquidSpecificGravity@15°C]         TEXT,
233
    LIQUIDSURFACETENSION                 TEXT,
234
    LIQUIDTHERMALCONDUCTIVITY            TEXT,
235
    LIQUIDVISCOSITY                      TEXT,
236
    AQUEOUSPseudocriticalTemperature     TEXT,
237
    AQUEOUSPseudocriticalPressure        TEXT,
238
    AQUEOUSMOLARRATE                     TEXT,
239
    AQUEOUSMASSRATE                      TEXT,
240
    AQUEOUSACTUALVOLUMEFLOW              TEXT,
241
    [AQUEOUSSTD.LIQUIDFLOW]              TEXT,
242
    AQUEOUSMolecularWeight               TEXT,
243
    AQUEOUSHeatFlow                      TEXT,
244
    AQUEOUSSPECIFICENTHALPY              TEXT,
245
    AQUEOUSBoilingPointPressureatStreamT TEXT,
246
    AQUEOUSSPECIFICHEATCAPACITY          TEXT,
247
    AQUEOUSACTUALDENSITY                 TEXT,
248
    AQUEOUSStdDensity                    TEXT,
249
    [AQUEOUSSpecificGravity@15°C]        TEXT,
250
    AQUEOUSSURFACETENSION                TEXT,
251
    AQUEOUSTHERMALCONDUCTIVITY           TEXT,
252
    AQUEOUSVISCOSITY                     TEXT,
253
    DataSource                           TEXT
254
);
255

  
256

  
257
CREATE TABLE IF NOT EXISTS Streamlines (
258
    UID     INTEGER      PRIMARY KEY AUTOINCREMENT
259
                         NOT NULL,
260
    HMB_UID VARCHAR (37) REFERENCES HMB (UID) ON DELETE CASCADE,
261
    [From]  VARCHAR (37) REFERENCES Components (UID) ON DELETE SET NULL,
262
    [To]    VARCHAR (37) REFERENCES Components (UID) ON DELETE SET NULL
184 263
);
185 264

  
265

  
186 266
CREATE TABLE IF NOT EXISTS InsulationPurpose (
187 267
    UID         VARCHAR (37) CONSTRAINT InsulationPurpose_PK PRIMARY KEY
188 268
                             NOT NULL,
DTI_PID/DTI_PID/StreamlineDialog.py
23 23
        self.ui.splitterHorizontal.setSizes([200, 700])
24 24

  
25 25
        self.fill_hmb_data()
26
        self.ui.tableViewStreamNo.selectionModel().selectionChanged.connect(self.on_selection_changed)
26 27

  
27 28
        self.ui.buttonBox.button(QDialogButtonBox.Ok).setIcon(QIcon(':/newPrefix/OK.svg'))
28 29
        self.ui.buttonBox.button(QDialogButtonBox.Cancel).setIcon(QIcon(':/newPrefix/Remove.svg'))
......
117 118
        for col in range(self.ui.tableViewStreamNo.model().columnCount()):
118 119
            self.ui.tableViewStreamNo.setColumnHidden(col, col != 1)  # hide all columns except index is 1
119 120

  
121
    def on_selection_changed(self, selection):
122
        """show stream line from, to related to selected hmb"""
123

  
124
        if selection.indexes():
125
            row = selection.indexes()[0].row()
126
            uid = self.ui.tableViewStreamNo.model().item(row, 0).text()
127

  
128
            if not self.ui.tableViewFromTo.model():
129
                model = QStandardItemModel()
130
                self.ui.tableViewFromTo.setModel(model)
131

  
132
            model = self.ui.tableViewFromTo.model()
133
            model.clear()
134

  
135
            app_doc_data = AppDocData.instance()
136
            rows = app_doc_data.get_stream_lines(uid)
137
            for row_ in rows:
138
                from_ = row_['From_UID'] if row_['From_UID'] else row_['From']
139
                to_ = row_['To_UID'] if row_['To_UID'] else row_['To']
140
                items = [QStandardItem(''), QStandardItem(from_), QStandardItem(to_)]
141
                model.appendRow(items)
142

  
143
            model.setHorizontalHeaderLabels(['Drawing No', 'From', 'To'])
144
            self.ui.tableViewFromTo.setModel(model)
145
            self.ui.tableViewFromTo.resizeColumnsToContents()
146

  
147
            """Properties"""
148
            if not self.ui.tableViewProperties.model():
149
                model_property = QStandardItemModel()
150
                self.ui.tableViewProperties.setModel(model_property)
151

  
152
            model_property = self.ui.tableViewProperties.model()
153
            model_property.clear()
154

  
155
            for col in range(self.ui.tableViewStreamNo.model().columnCount()):
156
                value = self.ui.tableViewStreamNo.model().item(row, col).text()
157
                property_ = self.ui.tableViewStreamNo.model().headerData(col, Qt.Horizontal)
158
                items = [QStandardItem(property_), QStandardItem(value)]
159
                model_property.appendRow(items)
160

  
161
            model_property.setHorizontalHeaderLabels(['Property', 'Value'])
162
            self.ui.tableViewProperties.setModel(model_property)
163
            self.ui.tableViewProperties.resizeColumnsToContents()
164
            self.ui.tableViewProperties.setEditTriggers(QAbstractItemView.NoEditTriggers)
165
            self.ui.tableViewProperties.setRowHidden(0, True)  # hide all columns except index is 1
166

  
120 167
    def accept(self):
121 168
        QDialog.accept(self)
122 169

  
DTI_PID/DTI_PID/UI/Streamline.ui
31 31
       <property name="orientation">
32 32
        <enum>Qt::Horizontal</enum>
33 33
       </property>
34
       <widget class="QTableView" name="tableViewStreamNo"/>
34
       <widget class="QTableView" name="tableViewStreamNo">
35
        <property name="selectionBehavior">
36
         <enum>QAbstractItemView::SelectRows</enum>
37
        </property>
38
        <attribute name="horizontalHeaderStretchLastSection">
39
         <bool>true</bool>
40
        </attribute>
41
       </widget>
35 42
       <widget class="QSplitter" name="splitterVertical">
36 43
        <property name="orientation">
37 44
         <enum>Qt::Vertical</enum>
38 45
        </property>
39 46
        <widget class="QTableView" name="tableViewFromTo"/>
40
        <widget class="QTableWidget" name="tableWidgetProperties"/>
47
        <widget class="QTableView" name="tableViewProperties"/>
41 48
       </widget>
42 49
      </widget>
43 50
     </item>
DTI_PID/DTI_PID/UI/Streamline_UI.py
27 27
        self.splitterHorizontal.setOrientation(QtCore.Qt.Horizontal)
28 28
        self.splitterHorizontal.setObjectName("splitterHorizontal")
29 29
        self.tableViewStreamNo = QtWidgets.QTableView(self.splitterHorizontal)
30
        self.tableViewStreamNo.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
30 31
        self.tableViewStreamNo.setObjectName("tableViewStreamNo")
32
        self.tableViewStreamNo.horizontalHeader().setStretchLastSection(True)
31 33
        self.splitterVertical = QtWidgets.QSplitter(self.splitterHorizontal)
32 34
        self.splitterVertical.setOrientation(QtCore.Qt.Vertical)
33 35
        self.splitterVertical.setObjectName("splitterVertical")
34 36
        self.tableViewFromTo = QtWidgets.QTableView(self.splitterVertical)
35 37
        self.tableViewFromTo.setObjectName("tableViewFromTo")
36
        self.tableWidgetProperties = QtWidgets.QTableWidget(self.splitterVertical)
37
        self.tableWidgetProperties.setObjectName("tableWidgetProperties")
38
        self.tableWidgetProperties.setColumnCount(0)
39
        self.tableWidgetProperties.setRowCount(0)
38
        self.tableViewProperties = QtWidgets.QTableView(self.splitterVertical)
39
        self.tableViewProperties.setObjectName("tableViewProperties")
40 40
        self.gridLayout.addWidget(self.splitterHorizontal, 4, 0, 1, 1)
41 41
        self.horizontalLayout = QtWidgets.QHBoxLayout()
42 42
        self.horizontalLayout.setObjectName("horizontalLayout")

내보내기 Unified diff

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