Skip to content

Commit 190433e

Browse files
author
Francisco Arrieta
committed
Fixed some bugs when creating a new series
Chooinsg an existing and new method/variable/pcl will active its respective panels, also added some methods to finish creating a new series such as the getMethods, getVariales, etc
1 parent b220daa commit 190433e

7 files changed

+139
-8
lines changed

odmtools/controller/WizardMethodController.py

+49
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import wx
22
from wx.wizard import WizardPageSimple
33
from odmtools.view.WizardMethodView import WizardMethodView
4+
from odmtools.odmdata import Method
45

56

67
class WizardMethodController(WizardPageSimple):
@@ -16,8 +17,37 @@ def __init__(self, parent, series_service):
1617
table_columns = ["Descriptions", "Link", "ID"]
1718
self.method_view.existing_method_table.set_columns(table_columns)
1819
self.method_view.method_type_combo.AppendItems(["ABC"])
20+
self.on_auto_radio(None)
21+
22+
self.method_view.auto_method_radio.Bind(wx.EVT_RADIOBUTTON, self.on_auto_radio)
23+
self.method_view.existing_method_radio.Bind(wx.EVT_RADIOBUTTON, self.on_existing_method_radio)
24+
self.method_view.create_method_radio.Bind(wx.EVT_RADIOBUTTON, self.on_create_method_radio)
25+
1926
self.__fetch_data()
2027

28+
def on_auto_radio(self, event):
29+
self.method_view.existing_method_table.Enable(False)
30+
self.__set_create_method_section_(False)
31+
32+
def on_existing_method_radio(self, event):
33+
self.method_view.existing_method_table.Enable()
34+
self.__set_create_method_section_(False)
35+
36+
def __set_create_method_section_(self, active):
37+
if not isinstance(active, bool):
38+
raise Exception("active must be type bool")
39+
40+
self.method_view.method_code_text_ctrl.Enable(active)
41+
self.method_view.method_name_text_ctrl.Enable(active)
42+
self.method_view.method_type_combo.Enable(active)
43+
self.method_view.organization_combo.Enable(active)
44+
self.method_view.method_link_text_ctrl.Enable(active)
45+
self.method_view.description_text_ctrl.Enable(active)
46+
47+
def on_create_method_radio(self, event):
48+
self.method_view.existing_method_table.Disable()
49+
self.__set_create_method_section_(True)
50+
2151
def __fetch_data(self):
2252
methods = self.series_service.get_all_methods()
2353
data = []
@@ -29,3 +59,22 @@ def __fetch_data(self):
2959
])
3060

3161
self.method_view.existing_method_table.set_table_content(data=data)
62+
63+
def getMethod(self):
64+
m = Method()
65+
if self.method_view.auto_method_radio.GetValue():
66+
description = "Values derived from ODM Tools Python"
67+
m = self.series_service.get_method_by_description(description)
68+
if m is None:
69+
m = Method()
70+
m.description = description
71+
elif self.method_view.existing_method_radio.GetValue():
72+
index = self.method_view.existing_method_table.GetFirstSelected()
73+
desc = self.method_view.existing_method_table.GetItem(index, 0).GetText()
74+
75+
m = self.series_service.get_method_by_description(desc)
76+
elif self.method_view.create_method_radio.GetValue():
77+
m.description = self.method_view.description_text_ctrl.GetValue()
78+
79+
80+
return m

odmtools/controller/WizardProcessLevelController.py

+34
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import wx
22
from odmtools.view.WizardProcessLevelView import WizardProcessLevelView
33
from wx.wizard import WizardPageSimple
4+
from odmtools.odmdata import QualityControlLevel
45

56

67
class WizardProcessLevelController(WizardPageSimple):
@@ -17,6 +18,25 @@ def __init__(self, parent, service_manager):
1718
self.processing_level_view.existing_process_table.set_columns(table_columns)
1819
self.__fetch_data()
1920

21+
self.processing_level_view.create_process_level_radio.Bind(wx.EVT_RADIOBUTTON, self.on_create_radio)
22+
self.processing_level_view.existing_process_radio.Bind(wx.EVT_RADIOBUTTON, self.on_existing_radio)
23+
24+
def on_create_radio(self, event):
25+
self.processing_level_view.existing_process_table.Enable(False)
26+
self.__set_create_proces_section(True)
27+
28+
def on_existing_radio(self, event):
29+
self.processing_level_view.existing_process_table.Enable(True)
30+
self.__set_create_proces_section(False)
31+
32+
def __set_create_proces_section(self, active):
33+
if not isinstance(active, bool):
34+
raise Exception("activet must be type bool")
35+
36+
self.processing_level_view.level_code_text_ctrl.Enable(active)
37+
self.processing_level_view.definition_text_ctrl.Enable(active)
38+
self.processing_level_view.explanation_text_ctrl.Enable(active)
39+
2040
def __fetch_data(self):
2141
series_service = self.service_manager.get_series_service()
2242
processes = series_service.get_all_qcls()
@@ -31,3 +51,17 @@ def __fetch_data(self):
3151
])
3252

3353
self.processing_level_view.existing_process_table.set_table_content(data=data)
54+
55+
def getQCL(self):
56+
q = QualityControlLevel()
57+
if self.processing_level_view.create_process_level_radio.GetValue():
58+
q.code = self.processing_level_view.level_code_text_ctrl.GetValue()
59+
q.definition = self.processing_level_view.definition_text_ctrl.GetValue()
60+
q.explanation = self.processing_level_view.explanation_text_ctrl.GetValue()
61+
62+
elif self.processing_level_view.existing_process_radio.GetValue():
63+
selected_row = self.processing_level_view.existing_process_table.get_selected_row()
64+
code = selected_row[0]
65+
q = self.service_manager.get_series_service().get_qcl_by_code(qcl_code=code)
66+
67+
return q

odmtools/controller/WizardVariableController.py

+45-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import wx
22
from odmtools.view.WizardVariableView import WizardVariableView
33
from wx.wizard import WizardPageSimple
4+
from odmtools.odmdata import Variable
45

56

67
class WizardVariableController(WizardPageSimple):
7-
def __init__(self, parent, service_manager):
8+
def __init__(self, parent, service_manager, current_variable):
89
WizardPageSimple.__init__(self, parent)
910

1011
self.service_manager = service_manager
12+
self.current_variable = current_variable
1113
main_sizer = wx.BoxSizer(wx.VERTICAL)
1214
self.variable_view = WizardVariableView(self)
1315
main_sizer.Add(self.variable_view, 1, wx.EXPAND | wx.RIGHT, -16)
@@ -17,8 +19,35 @@ def __init__(self, parent, service_manager):
1719
"Sample Medium", "Value Type", "IsRegular", "Time Support",
1820
"Time Units", "DataType", "Genaral Category", "NoDataValue", "ID"]
1921
self.variable_view.variable_table.set_columns(table_columns)
22+
self.on_current_radio(None)
2023

2124
self.__fetch_data()
25+
self.variable_view.current_variable_radio.Bind(wx.EVT_RADIOBUTTON, self.on_current_radio)
26+
self.variable_view.existing_variable_radio.Bind(wx.EVT_RADIOBUTTON, self.on_existing_radio)
27+
self.variable_view.create_variable_radio.Bind(wx.EVT_RADIOBUTTON, self.on_create_radio)
28+
29+
def on_current_radio(self, event):
30+
self.variable_view.variable_table.Enable(False)
31+
self.__set_create_variable_section(False)
32+
33+
def on_create_radio(self, event):
34+
self.variable_view.variable_table.Enable(False)
35+
self.__set_create_variable_section(True)
36+
37+
def on_existing_radio(self, event):
38+
self.variable_view.variable_table.Enable(True)
39+
self.__set_create_variable_section(False)
40+
41+
def __set_create_variable_section(self, active):
42+
if not isinstance(active, bool):
43+
raise Exception("active must be type bool")
44+
45+
self.variable_view.variable_code_text_ctrl.Enable(active)
46+
self.variable_view.variable_name_combo.Enable(active)
47+
self.variable_view.variable_type_combo.Enable(active)
48+
self.variable_view.no_data_value_text_ctrl.Enable(active)
49+
self.variable_view.speciation_combo.Enable(active)
50+
self.variable_view.definition_text_ctrl.Enable(active)
2251

2352
def __fetch_data(self):
2453
self.__populate_variable_table()
@@ -53,6 +82,21 @@ def __populate_variable_table(self):
5382

5483
self.variable_view.variable_table.set_table_content(data=data)
5584

85+
def get_variable(self):
86+
v = Variable()
87+
if self.variable_view.current_variable_radio.GetValue():
88+
v = self.current_variable
89+
elif self.variable_view.existing_variable_radio.GetValue():
90+
row = self.variable_view.variable_table.get_selected_row()
91+
code = row[0]
92+
v = self.service_manager.get_series_service().get_variable_by_code(code)
93+
94+
elif self.variable_view.create_variable_radio.GetValue():
95+
# v = self.createdVar
96+
pass
97+
98+
return v
99+
56100

57101

58102

odmtools/gui/wizSave.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -238,9 +238,9 @@ def get_metadata(self):
238238

239239
if self.pgIntro.pnlIntroduction.rbSaveAs.GetValue():
240240
logger.debug("SaveAs")
241-
method = self.pgMethod.panel.getMethod()
242-
qcl = self.pgQCL.panel.getQCL()
243-
variable = self.pgVariable.panel.getVariable()
241+
method = self.pgMethod.getMethod()
242+
qcl = self.pgQCL.getQCL()
243+
variable = self.pgVariable.get_variable()
244244
elif self.pgIntro.pnlIntroduction.rbSave.GetValue():
245245
logger.debug("Save")
246246
method = self.currSeries.method
@@ -272,7 +272,8 @@ def __init__(self, parent, service_manager, record_service):
272272
# self.pgQCL = QCLPage(self, "Quality Control Level", self.series_service, self.currSeries.quality_control_level)
273273
self.pgQCL = WizardProcessLevelController(self, service_manager=service_manager)
274274
# self.pgVariable = VariablePage(self, "Variable", service_manager, self.currSeries.variable)
275-
self.pgVariable = WizardVariableController(self, service_manager=service_manager)
275+
self.pgVariable = WizardVariableController(self, service_manager=service_manager,
276+
current_variable=self.currSeries.variable)
276277
self.pgExisting = pageExisting.pageExisting(self, "Existing Series", self.series_service, self.currSeries.site)
277278
self.pgSummary = SummaryPage(self, "Summary", self.series_service)
278279

@@ -302,7 +303,6 @@ def __init__(self, parent, service_manager, record_service):
302303
self.Destroy()
303304

304305
def on_page_changed(self, event):
305-
#if isinstance(event.Page, pageSummary.pnlSummary):
306306
if event.Page == self.pgSummary:
307307
self.pgSummary.fill_summary()
308308

odmtools/view/CustomListCtrl.py

+1
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,6 @@ def set_table_content(self, data):
172172
for j in range(len(data[i])):
173173
self.SetStringItem(index, j, str(data[i][j]))
174174

175+
self.Select(0)
175176
self.auto_size_table()
176177
self.alternate_row_color()

odmtools/view/WizardMethodView.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def __init__(self, parent):
3838
self.method_type_combo.SetSelection(0)
3939
self.organization_combo.SetSelection(0)
4040
self.SetupScrolling()
41+
self.auto_method_radio.SetValue(True)
4142

4243
# Add components to sizer
4344
table_sizer = wx.BoxSizer()
@@ -80,7 +81,7 @@ def __init__(self, parent):
8081
main_sizer.Add(self.auto_method_radio, 0, wx.EXPAND | wx.TOP, 10)
8182
main_sizer.Add(self.existing_method_radio, 0, wx.EXPAND | wx.TOP, 5)
8283
main_sizer.Add(table_panel, 0, wx.EXPAND | wx.TOP, 5)
83-
main_sizer.Add(self.create_method_radio, 0, wx.EXPAND | wx.TOP, 5)
84+
main_sizer.Add(self.create_method_radio, 0, wx.EXPAND | wx.TOP, 10)
8485
main_sizer.Add(required_static_box_sizer, 0, wx.EXPAND | wx.TOP, 10)
8586
main_sizer.Add(optional_static_box_sizer, 0, wx.EXPAND | wx.TOP, 10)
8687
self.SetSizer(main_sizer)

odmtools/view/WizardVariableView.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def __init__(self, parent):
1414
self.current_variable_radio = wx.RadioButton(self, label="Use current variable")
1515
self.variable_table = CustomListCtrl(table_panel)
1616
self.existing_variable_radio = wx.RadioButton(self, label="Select an existing variable")
17-
17+
self.create_variable_radio = wx.RadioButton(self, label="Create new variable")
1818
required_static_box_sizer = wx.StaticBoxSizer(box=wx.StaticBox(self, label="Required Fields"), orient=wx.VERTICAL)
1919
variable_code_text = wx.StaticText(self, label="Variable Code")
2020
self.variable_code_text_ctrl = wx.TextCtrl(self)
@@ -38,6 +38,7 @@ def __init__(self, parent):
3838
self.speciation_combo.SetSelection(0)
3939
self.variable_type_combo.SetSelection(0)
4040
self.SetupScrolling()
41+
self.current_variable_radio.SetValue(True)
4142

4243
# Add components to sizer
4344
table_sizer = wx.BoxSizer()
@@ -80,6 +81,7 @@ def __init__(self, parent):
8081
main_sizer.Add(self.current_variable_radio, 0, wx.EXPAND | wx.TOP, 10)
8182
main_sizer.Add(self.existing_variable_radio, 0, wx.EXPAND | wx.TOP, 10)
8283
main_sizer.Add(table_panel, 0, wx.EXPAND | wx.TOP, 10)
84+
main_sizer.Add(self.create_variable_radio, 0, wx.EXPAND | wx.TOP, 10)
8385
main_sizer.Add(required_static_box_sizer, 0, wx.EXPAND | wx.TOP, 10)
8486
main_sizer.Add(optional_static_box_sizer, 0, wx.EXPAND | wx.TOP, 10)
8587
self.SetSizer(main_sizer)

0 commit comments

Comments
 (0)