개정판 a346916f
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