@@ -102,7 +102,7 @@ def sync(self):
102102 df = self .build_df ()
103103 df .reset_index (drop = True , inplace = True )
104104 self .model .set_dataframe (df )
105- self .model .group (["_scope" ])
105+ self .model .group (["_param_type" , " _scope" ])
106106 self .view .expandAll ()
107107
108108 exchanges_df = self .build_exchanges_df ()
@@ -126,20 +126,20 @@ def build_df(self) -> pd.DataFrame:
126126
127127 # Project parameters
128128 for param in ProjectParameter .select ():
129- row = self ._parameter_to_row (param , "Current project" , None )
129+ row = self ._parameter_to_row (param )
130130 translated .append (row )
131131
132132 # Database parameters
133133 for param in DatabaseParameter .select ():
134- row = self ._parameter_to_row (param , f"Database: { param .database } " , param .database )
134+ row = self ._parameter_to_row (param , " {param.database}" , param .database )
135135 translated .append (row )
136136
137137 # Activity parameters
138138 for param in ActivityParameter .select ():
139139 row = self ._parameter_to_row (param , f"Group: { param .group } " , param .database )
140140 translated .append (row )
141141
142- columns = ["name" , "amount" , "formula" , "uncertainty" , "comment" , "_parameter" , "_scope" , "_database" , "_group" ]
142+ columns = ["name" , "amount" , "formula" , "uncertainty" , "comment" , "_parameter" , "_scope" , "_database" , "_group" , "_param_type" ]
143143 df = pd .DataFrame (translated , columns = columns )
144144 df ["_is_new" ] = False
145145
@@ -149,7 +149,6 @@ def build_df(self) -> pd.DataFrame:
149149 # Add for project
150150 new_rows .append ({
151151 "name" : "New parameter..." ,
152- "_scope" : "Current project" ,
153152 "_group" : "project" ,
154153 "_param_type" : "project" ,
155154 "_is_new" : True ,
@@ -160,23 +159,23 @@ def build_df(self) -> pd.DataFrame:
160159 if not bd .databases [db_name ].get ("read_only" , True ):
161160 new_rows .append ({
162161 "name" : "New parameter..." ,
163- "_scope" : f"Database: { db_name } " ,
162+ "_scope" : f"{ db_name } " ,
164163 "_database" : db_name ,
165164 "_group" : db_name ,
166165 "_param_type" : "database" ,
167166 "_is_new" : True ,
168167 })
169168
170169 # Add for each activity group
171- activity_params = df [df ._scope .str .startswith ("Group : " , na = False )]
170+ activity_params = df [df ._scope .str .startswith ("group : " , na = False )]
172171 groups = activity_params ._group .unique () if len (activity_params ) > 0 else []
173172 for group_name in sorted (groups ):
174173 group_data = activity_params [activity_params ._group == group_name ]
175174 db_name = group_data .iloc [0 ]._database if len (group_data ) > 0 else None
176175 if db_name and db_name in bd .databases and not bd .databases [db_name ].get ("read_only" , True ):
177176 new_rows .append ({
178177 "name" : "New parameter..." ,
179- "_scope" : f"Group : { group_name } " ,
178+ "_scope" : f"group : { group_name } " ,
180179 "_database" : db_name ,
181180 "_group" : group_name ,
182181 "_param_type" : "activity" ,
@@ -188,9 +187,9 @@ def build_df(self) -> pd.DataFrame:
188187 new_df = pd .DataFrame (new_rows )
189188 df = pd .concat ([df , new_df ], ignore_index = True )
190189
191- return df
190+ return df . sort_values ( by = "_param_type" , key = lambda c : c . map ({ "project" : 0 , "database" : 1 , "activity" : 2 }))
192191
193- def _parameter_to_row (self , param , scope_label : str , database : str = None ) -> dict :
192+ def _parameter_to_row (self , param , scope_label : str = None , database : str = None ) -> dict :
194193 """
195194 Converts a parameter to a row dictionary.
196195
@@ -208,12 +207,15 @@ def _parameter_to_row(self, param, scope_label: str, database: str = None) -> di
208207 if isinstance (param , ProjectParameter ):
209208 parameter = Parameter (param .name , "project" , data .get ("amount" ), data , "project" )
210209 group = "project"
210+ param_type = "project"
211211 elif isinstance (param , DatabaseParameter ):
212212 parameter = Parameter (param .name , param .database , data .get ("amount" ), data , "database" )
213213 group = param .database
214+ param_type = "database"
214215 elif isinstance (param , ActivityParameter ):
215216 parameter = Parameter (param .name , param .group , data .get ("amount" ), data , "activity" )
216217 group = param .group
218+ param_type = "activity"
217219 else :
218220 raise ValueError (f"Unknown parameter type: { type (param )} " )
219221
@@ -223,6 +225,7 @@ def _parameter_to_row(self, param, scope_label: str, database: str = None) -> di
223225 "uncertainty" : parameter .uncertainty ,
224226 "formula" : data .get ("formula" ),
225227 "comment" : data .get ("comment" ),
228+ "_param_type" : param_type ,
226229 "_parameter" : parameter ,
227230 "_scope" : scope_label ,
228231 "_database" : database ,
0 commit comments