개정판 af52cf95
엑셀 파일에서 HMB 테이타를 읽어오도록 수정
Change-Id: I2263cd8aae996563e95bfd24bae59ee126f45c30
DTI_PID/DTI_PID/AppDocData.py | ||
---|---|---|
2480 | 2480 |
CodeTable.clearTables() |
2481 | 2481 |
|
2482 | 2482 |
@staticmethod |
2483 |
def save_hmb_data(hmb_list: list): |
|
2484 |
import uuid |
|
2485 |
|
|
2486 |
app_doc_data = AppDocData.instance() |
|
2487 |
with app_doc_data.project.database.connect() as conn: |
|
2488 |
try: |
|
2489 |
cursor = conn.cursor() |
|
2490 |
sql = 'delete from HMB' |
|
2491 |
cursor.execute(sql) |
|
2492 |
|
|
2493 |
for hmb in hmb_list: |
|
2494 |
sql = f"insert into HMB(UID, StreamNumber) values(?,?)" |
|
2495 |
params = (str(hmb.uid) if hmb.uid else str(uuid.uuid4()), hmb.stream_no) |
|
2496 |
affected = cursor.execute(sql, params) |
|
2497 |
except Exception as ex: |
|
2498 |
# Roll back any change if something goes wrong |
|
2499 |
conn.rollback() |
|
2500 |
|
|
2501 |
from App import App |
|
2502 |
message = f"error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:" \ |
|
2503 |
f"{sys.exc_info()[-1].tb_lineno}" |
|
2504 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
2505 |
|
|
2506 |
@staticmethod |
|
2483 | 2507 |
def get_hmb_data_from(file_path: str): |
2484 | 2508 |
"""get hmb data from pap database if file_path is given otherwise get hmb data from id2 database""" |
2485 | 2509 |
|
DTI_PID/DTI_PID/HMBDialog.py | ||
---|---|---|
129 | 129 |
|
130 | 130 |
def on_open_hmb_file(self): |
131 | 131 |
"""open hmb file""" |
132 |
import openpyxl |
|
133 |
from HMBTable import HMBData |
|
132 | 134 |
|
133 | 135 |
options = QFileDialog.Options() |
134 | 136 |
options |= QFileDialog.DontUseNativeDialog |
135 |
file, _ = QFileDialog.getOpenFileName(self, self.tr('Import', "Select PAP File"),
|
|
136 |
os.getcwd(), "pap files (*.pap)", options=options)
|
|
137 |
file, _ = QFileDialog.getOpenFileName(self, self.tr('Import', "Select Excel File"),
|
|
138 |
os.getcwd(), "excel files (*.xlsx)", options=options)
|
|
137 | 139 |
if file: |
138 | 140 |
self.ui.lineEditHMBFilePath.setText(file) |
139 |
self.fill_hmb_data(file) |
|
141 |
|
|
142 |
doc = openpyxl.load_workbook(file) |
|
143 |
sheet = doc.active |
|
144 |
|
|
145 |
hmb_list = [] |
|
146 |
|
|
147 |
# get max row count |
|
148 |
max_row = sheet.max_row |
|
149 |
# get max column count |
|
150 |
max_column = sheet.max_column |
|
151 |
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) |
|
155 |
|
|
156 |
hmb = HMBData() |
|
157 |
hmb.stream_no = stream_no.value |
|
158 |
hmb_list.append(hmb) |
|
159 |
|
|
160 |
app_doc_data = AppDocData.instance() |
|
161 |
app_doc_data.save_hmb_data(hmb_list) |
|
162 |
|
|
163 |
self.fill_hmb_data(None) |
|
140 | 164 |
|
141 | 165 |
def accept(self): |
142 | 166 |
"""accept dialog""" |
DTI_PID/DTI_PID/StreamlineDialog.py | ||
---|---|---|
22 | 22 |
self.ui.setupUi(self) |
23 | 23 |
self.ui.splitterHorizontal.setSizes([200, 700]) |
24 | 24 |
|
25 |
self.fill_hmb_data() |
|
26 |
|
|
25 | 27 |
self.ui.buttonBox.button(QDialogButtonBox.Ok).setIcon(QIcon(':/newPrefix/OK.svg')) |
26 | 28 |
self.ui.buttonBox.button(QDialogButtonBox.Cancel).setIcon(QIcon(':/newPrefix/Remove.svg')) |
27 | 29 |
|
30 |
def fill_hmb_data(self): |
|
31 |
"""load hmb data and fill table view""" |
|
32 |
import uuid |
|
33 |
|
|
34 |
rows = AppDocData.get_hmb_data_from(None) |
|
35 |
model = QStandardItemModel() |
|
36 |
for row in rows: |
|
37 |
UID = row['UID'] if row['UID'] else str(uuid.uuid4()) |
|
38 |
items = [QStandardItem(UID), QStandardItem(row['StreamNumber']), |
|
39 |
QStandardItem(row['StreamDescription']), QStandardItem(row['DATACASE']), |
|
40 |
QStandardItem(row['STREAMPHASE']), QStandardItem(row['Unitno']), |
|
41 |
QStandardItem(row['OVERALLVAPORFRACTION']), QStandardItem(row['OVERALLTEMPERATURE']), |
|
42 |
QStandardItem(row['OVERALLPRESSURE']), QStandardItem(row['OVERALLMOLECULARWEIGHT']), |
|
43 |
QStandardItem(row['OVERALLMOLARFLOW']), QStandardItem(row['OVERALLMASSFLOW']), |
|
44 |
QStandardItem(row['OVERALLACTUALVOLUMEFLOW']), QStandardItem(row['OVERALLMASSDENSITY']), |
|
45 |
QStandardItem(row['OVERALLVISCOSITY']), QStandardItem(row['OVERALLMASSHEATCAPACITY']), |
|
46 |
QStandardItem(row['OVERALLHEATFLOW']), QStandardItem(row['OverallMassEnthalpy']), |
|
47 |
QStandardItem(row['OverallSp.Gravity']), QStandardItem(row['OverallAPIGravity']), |
|
48 |
QStandardItem(row['OverallCriticalPressure']), QStandardItem(row['OverallCriticalTemperature']), |
|
49 |
QStandardItem(row['OverallUOPKfactor']), QStandardItem(row['LIQUIDMOLEFRACTION']), |
|
50 |
QStandardItem(row['VaporTemperature']), QStandardItem(row['VaporPressure']), |
|
51 |
QStandardItem(row['VaporPseudocriticalTemperature']), |
|
52 |
QStandardItem(row['VaporPseudocriticalPressure']), QStandardItem(row['VAPORMOLARRATE']), |
|
53 |
QStandardItem(row['VAPORMASSRATE']), QStandardItem(row['VAPORACTUALVOLUMERATE']), |
|
54 |
QStandardItem(row['VAPORSTD.VOLUMERATE']), QStandardItem(row['VAPORMOLECULARWEIGHT']), |
|
55 |
QStandardItem(row['VaporHeatFlow']), QStandardItem(row['VAPORCOMPRESSIBILITY']), |
|
56 |
QStandardItem(row['VAPORSPECIFICENTHALPY']), QStandardItem(row['VAPORSPECIFICHEATCAPACITY']), |
|
57 |
QStandardItem(row['IDEALVAPORSPECIFICHEATRATIO']), QStandardItem(row['VAPORACTUALDENSITY']), |
|
58 |
QStandardItem(row['VAPORTHERMALCONDUCTIVITY']), QStandardItem(row['VAPORVISCOSITY']), |
|
59 |
QStandardItem(row['LiquidTemperature']), QStandardItem(row['LiquidPressure']), |
|
60 |
QStandardItem(row['LiquidPseudocriticalTemperature']), |
|
61 |
QStandardItem(row['LiquidPseudocriticalPressure']), |
|
62 |
QStandardItem(row['LIQUIDMOLARRATE']), QStandardItem(row['LIQUIDMASSRATE']), |
|
63 |
QStandardItem(row['LIQUIDACTUALVOLUMEFLOW']), QStandardItem(row['LIQUIDSTD.VOLUMEFLOW']), |
|
64 |
QStandardItem(row['LIQUIDMOLECULARWEIGHT']), QStandardItem(row['LiquidHeatFlow']), |
|
65 |
QStandardItem(row['LIQUIDSPECIFICENTHALPY']), |
|
66 |
QStandardItem(row['LIQUIDBoilingPointPressureatStreamT']), |
|
67 |
QStandardItem(row['LIQUIDSPECIFICHEATCAPACITY']), QStandardItem(row['LIQUIDACTUALDENSITY']), |
|
68 |
QStandardItem(row['LiquidStdDensity']), QStandardItem(row['LiquidSpecificGravity@15°C']), |
|
69 |
QStandardItem(row['LIQUIDSURFACETENSION']), QStandardItem(row['LIQUIDTHERMALCONDUCTIVITY']), |
|
70 |
QStandardItem(row['LIQUIDVISCOSITY']), QStandardItem(row['AQUEOUSPseudocriticalTemperature']), |
|
71 |
QStandardItem(row['AQUEOUSPseudocriticalPressure']), QStandardItem(row['AQUEOUSMOLARRATE']), |
|
72 |
QStandardItem(row['AQUEOUSMASSRATE']), QStandardItem(row['AQUEOUSACTUALVOLUMEFLOW']), |
|
73 |
QStandardItem(row['AQUEOUSSTD.LIQUIDFLOW']), QStandardItem(row['AQUEOUSMolecularWeight']), |
|
74 |
QStandardItem(row['AQUEOUSHeatFlow']), QStandardItem(row['AQUEOUSSPECIFICENTHALPY']), |
|
75 |
QStandardItem(row['AQUEOUSBoilingPointPressureatStreamT']), |
|
76 |
QStandardItem(row['AQUEOUSSPECIFICHEATCAPACITY']), |
|
77 |
QStandardItem(row['AQUEOUSACTUALDENSITY']), QStandardItem(row['AQUEOUSStdDensity']), |
|
78 |
QStandardItem(row['AQUEOUSSpecificGravity@15°C']), |
|
79 |
QStandardItem(row['AQUEOUSSURFACETENSION']), |
|
80 |
QStandardItem(row['AQUEOUSTHERMALCONDUCTIVITY']), QStandardItem(row['AQUEOUSVISCOSITY']), |
|
81 |
QStandardItem(row['DataSource'])] |
|
82 |
model.appendRow(items) |
|
83 |
|
|
84 |
model.setHorizontalHeaderLabels(['UID', 'Stream No', |
|
85 |
'StreamDescription', 'DATACASE', 'STREAMPHASE', |
|
86 |
'Unitno', 'OVERALLVAPORFRACTION', 'OVERALLTEMPERATURE', 'OVERALLPRESSURE', |
|
87 |
'OVERALLMOLECULARWEIGHT', 'OVERALLMOLARFLOW', 'OVERALLMASSFLOW', |
|
88 |
'OVERALLACTUALVOLUMEFLOW', 'OVERALLMASSDENSITY', 'OVERALLVISCOSITY', |
|
89 |
'OVERALLMASSHEATCAPACITY', 'OVERALLHEATFLOW', 'OverallMassEnthalpy', |
|
90 |
'OverallSp.Gravity', 'OverallAPIGravity', 'OverallCriticalPressure', |
|
91 |
'OverallCriticalTemperature', 'OverallUOPKfactor', |
|
92 |
'LIQUIDMOLEFRACTION', 'VaporTemperature', 'VaporPressure', |
|
93 |
'VaporPseudocriticalTemperature', 'VaporPseudocriticalPressure', |
|
94 |
'VAPORMOLARRATE', 'VAPORMASSRATE', 'VAPORACTUALVOLUMERATE', |
|
95 |
'VAPORSTD.VOLUMERATE', 'VAPORMOLECULARWEIGHT', 'VaporHeatFlow', |
|
96 |
'VAPORCOMPRESSIBILITY', 'VAPORSPECIFICENTHALPY', |
|
97 |
'VAPORSPECIFICHEATCAPACITY', 'IDEALVAPORSPECIFICHEATRATIO', |
|
98 |
'VAPORACTUALDENSITY', 'VAPORTHERMALCONDUCTIVITY', 'VAPORVISCOSITY', |
|
99 |
'LiquidTemperature', 'LiquidPressure', |
|
100 |
'LiquidPseudocriticalTemperature', 'LiquidPseudocriticalPressure', |
|
101 |
'LIQUIDMOLARRATE', 'LIQUIDMASSRATE', 'LIQUIDACTUALVOLUMEFLOW', |
|
102 |
'LIQUIDSTD.VOLUMEFLOW', 'LIQUIDMOLECULARWEIGHT', 'LiquidHeatFlow', |
|
103 |
'LIQUIDSPECIFICENTHALPY', 'LIQUIDBoilingPointPressureatStreamT', |
|
104 |
'LIQUIDSPECIFICHEATCAPACITY', 'LIQUIDACTUALDENSITY', |
|
105 |
'LiquidStdDensity', 'LiquidSpecificGravity@15°C', |
|
106 |
'LIQUIDSURFACETENSION', 'LIQUIDTHERMALCONDUCTIVITY', 'LIQUIDVISCOSITY', |
|
107 |
'AQUEOUSPseudocriticalTemperature', 'AQUEOUSPseudocriticalPressure', |
|
108 |
'AQUEOUSMOLARRATE', 'AQUEOUSMASSRATE', 'AQUEOUSACTUALVOLUMEFLOW', |
|
109 |
'AQUEOUSSTD.LIQUIDFLOW', 'AQUEOUSMolecularWeight', 'AQUEOUSHeatFlow', |
|
110 |
'AQUEOUSSPECIFICENTHALPY', 'AQUEOUSBoilingPointPressureatStreamT', |
|
111 |
'AQUEOUSSPECIFICHEATCAPACITY', 'AQUEOUSACTUALDENSITY', 'AQUEOUSStdDensity', |
|
112 |
'AQUEOUSSpecificGravity@15°C', 'AQUEOUSSURFACETENSION', |
|
113 |
'AQUEOUSTHERMALCONDUCTIVITY', 'AQUEOUSVISCOSITY', 'DataSource']) |
|
114 |
self.ui.tableViewStreamNo.setModel(model) |
|
115 |
self.ui.tableViewStreamNo.resizeColumnsToContents() |
|
116 |
self.ui.tableViewStreamNo.setEditTriggers(QAbstractItemView.NoEditTriggers) |
|
117 |
for col in range(self.ui.tableViewStreamNo.model().columnCount()): |
|
118 |
self.ui.tableViewStreamNo.setColumnHidden(col, col != 1) # hide all columns except index is 1 |
|
119 |
|
|
28 | 120 |
def accept(self): |
29 | 121 |
QDialog.accept(self) |
30 | 122 |
|
DTI_PID/DTI_PID/UI/Streamline.ui | ||
---|---|---|
14 | 14 |
<string>Streamline</string> |
15 | 15 |
</property> |
16 | 16 |
<layout class="QGridLayout" name="gridLayout_3"> |
17 |
<item row="2" column="0">
|
|
17 |
<item row="1" column="0">
|
|
18 | 18 |
<widget class="QDialogButtonBox" name="buttonBox"> |
19 | 19 |
<property name="orientation"> |
20 | 20 |
<enum>Qt::Horizontal</enum> |
... | ... | |
24 | 24 |
</property> |
25 | 25 |
</widget> |
26 | 26 |
</item> |
27 |
<item row="1" column="0">
|
|
27 |
<item row="0" column="0">
|
|
28 | 28 |
<layout class="QGridLayout" name="gridLayout"> |
29 | 29 |
<item row="4" column="0"> |
30 | 30 |
<widget class="QSplitter" name="splitterHorizontal"> |
... | ... | |
71 | 71 |
</item> |
72 | 72 |
</layout> |
73 | 73 |
</item> |
74 |
<item row="0" column="0"> |
|
75 |
<layout class="QGridLayout" name="gridLayout_2"> |
|
76 |
<item row="0" column="0"> |
|
77 |
<widget class="QLabel" name="label"> |
|
78 |
<property name="text"> |
|
79 |
<string>HMB Excel File Path : </string> |
|
80 |
</property> |
|
81 |
</widget> |
|
82 |
</item> |
|
83 |
<item row="0" column="1"> |
|
84 |
<widget class="QLineEdit" name="lineEdit"/> |
|
85 |
</item> |
|
86 |
<item row="0" column="2"> |
|
87 |
<widget class="QToolButton" name="toolButtonExcelFile"> |
|
88 |
<property name="text"> |
|
89 |
<string/> |
|
90 |
</property> |
|
91 |
<property name="icon"> |
|
92 |
<iconset resource="../res/MainWindow.qrc"> |
|
93 |
<normaloff>:/newPrefix/File.svg</normaloff>:/newPrefix/File.svg</iconset> |
|
94 |
</property> |
|
95 |
</widget> |
|
96 |
</item> |
|
97 |
</layout> |
|
98 |
</item> |
|
99 | 74 |
</layout> |
100 | 75 |
</widget> |
101 | 76 |
<resources> |
DTI_PID/DTI_PID/UI/Streamline_UI.py | ||
---|---|---|
20 | 20 |
self.buttonBox.setOrientation(QtCore.Qt.Horizontal) |
21 | 21 |
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) |
22 | 22 |
self.buttonBox.setObjectName("buttonBox") |
23 |
self.gridLayout_3.addWidget(self.buttonBox, 2, 0, 1, 1)
|
|
23 |
self.gridLayout_3.addWidget(self.buttonBox, 1, 0, 1, 1)
|
|
24 | 24 |
self.gridLayout = QtWidgets.QGridLayout() |
25 | 25 |
self.gridLayout.setObjectName("gridLayout") |
26 | 26 |
self.splitterHorizontal = QtWidgets.QSplitter(StreamlineDialog) |
... | ... | |
50 | 50 |
self.toolButtonAddFromTo.setObjectName("toolButtonAddFromTo") |
51 | 51 |
self.horizontalLayout.addWidget(self.toolButtonAddFromTo) |
52 | 52 |
self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1) |
53 |
self.gridLayout_3.addLayout(self.gridLayout, 1, 0, 1, 1) |
|
54 |
self.gridLayout_2 = QtWidgets.QGridLayout() |
|
55 |
self.gridLayout_2.setObjectName("gridLayout_2") |
|
56 |
self.label = QtWidgets.QLabel(StreamlineDialog) |
|
57 |
self.label.setObjectName("label") |
|
58 |
self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1) |
|
59 |
self.lineEdit = QtWidgets.QLineEdit(StreamlineDialog) |
|
60 |
self.lineEdit.setObjectName("lineEdit") |
|
61 |
self.gridLayout_2.addWidget(self.lineEdit, 0, 1, 1, 1) |
|
62 |
self.toolButtonExcelFile = QtWidgets.QToolButton(StreamlineDialog) |
|
63 |
self.toolButtonExcelFile.setText("") |
|
64 |
icon1 = QtGui.QIcon() |
|
65 |
icon1.addPixmap(QtGui.QPixmap(":/newPrefix/File.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) |
|
66 |
self.toolButtonExcelFile.setIcon(icon1) |
|
67 |
self.toolButtonExcelFile.setObjectName("toolButtonExcelFile") |
|
68 |
self.gridLayout_2.addWidget(self.toolButtonExcelFile, 0, 2, 1, 1) |
|
69 |
self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1) |
|
53 |
self.gridLayout_3.addLayout(self.gridLayout, 0, 0, 1, 1) |
|
70 | 54 |
|
71 | 55 |
self.retranslateUi(StreamlineDialog) |
72 | 56 |
self.buttonBox.accepted.connect(StreamlineDialog.accept) |
... | ... | |
76 | 60 |
def retranslateUi(self, StreamlineDialog): |
77 | 61 |
_translate = QtCore.QCoreApplication.translate |
78 | 62 |
StreamlineDialog.setWindowTitle(_translate("StreamlineDialog", "Streamline")) |
79 |
self.label.setText(_translate("StreamlineDialog", "HMB Excel File Path : ")) |
|
80 | 63 |
import MainWindow_rc |
내보내기 Unified diff