11ActiveAdmin . register Item do
2- permit_params :name , :description , :category_id , :is_disabled ,
3- :is_fixed , :is_open , :is_selectable_options ,
4- :fixed_parameters , :open_parameters_label ,
5- :calculation_formula
2+ permit_params do
3+ %i[
4+ name description category_id is_disabled is_fixed is_open is_selectable_options
5+ fixed_parameters pricing_options open_parameters_label formula_parameters calculation_formula
6+ ]
7+ end
68
79 filter :name_cont , as : :string , label : "Product Name"
810 filter :category , as : :select , collection : -> { Category . pluck ( :name , :id ) } , label : "Category"
911 filter :is_disabled , label : "Disabled"
10-
12+
1113 index do
1214 id_column
1315 column :name
2022 actions defaults : false do |resource |
2123 item ( "View" , admin_item_path ( resource ) , class : "member_link" )
2224 item ( "Edit" , edit_admin_item_path ( resource ) , class : "member_link" )
23-
25+
2426 unless resource . category &.is_disabled?
2527 item ( resource . is_disabled? ? "Enable" : "Disable" , toggle_admin_item_path ( resource ) ,
2628 method : :put ,
5355 div class : "add-param-link-wrapper" do
5456 item_id = f . object . persisted? ? f . object . id . to_s : "new"
5557 formula_label = f . object . calculation_formula . present? ? "Update Calculation Formula" : "Create Calculation Formula"
56-
58+
5759 para do
58- concat ( link_to "Add Parameter" , "#" , class : "button store-and-navigate" , data : {
59- redirect : new_parameter_admin_item_path ( id : item_id ) ,
60- item_id : item_id
61- } )
62-
63- concat ( link_to formula_label , "#" , class : "button store-and-navigate" , data : {
64- redirect : new_formula_admin_item_path ( id : item_id ) ,
65- item_id : item_id
66- } )
67- end
60+ concat ( link_to ( "Add Parameter" , "#" , class : "button store-and-navigate" , data : {
61+ redirect : new_parameter_admin_item_path ( id : item_id ) ,
62+ item_id : item_id
63+ } ) )
64+
65+ concat ( link_to ( formula_label , "#" , class : "button store-and-navigate" , data : {
66+ redirect : new_formula_admin_item_path ( id : item_id ) ,
67+ item_id : item_id
68+ } ) )
69+ end
6870 end
69-
71+
7072 f . inputs "Pricing Parameters" do
7173 f . input :formula_parameters , as : :hidden
7274 div class : "formula-preview" do
7779 span class : "formula-label" do
7880 "Calculation Formula:"
7981 end
80-
82+
8183 span class : "formula" do
8284 item_key = f . object . persisted? ? f . object . id . to_s : "new"
8385 session_formula = controller . view_context . session . dig ( :tmp_params , item_key , "calculation_formula" )
8486 f . object . calculation_formula . presence || session_formula . presence || "No formula yet"
8587 end
8688 end
87-
8889 end
8990
9091 item_key = f . object . persisted? ? f . object . id . to_s : "new"
131132 end
132133 end
133134 end
134-
135-
135+
136136 panel "Pricing Parameters" do
137137 render partial : "admin/items/parameters" , locals : {
138138 fixed_parameters : item . fixed_parameters || { } ,
@@ -163,7 +163,7 @@ def create
163163 def edit
164164 @item = Item . find ( params [ :id ] )
165165 item_key = @item . id . to_s
166-
166+
167167 session [ :tmp_params ] ||= { }
168168 session [ :tmp_params ] [ item_key ] ||= {
169169 fixed : @item . fixed_parameters || { } ,
@@ -172,44 +172,45 @@ def edit
172172 formula_parameters : @item . formula_parameters || [ ] ,
173173 calculation_formula : @item . calculation_formula
174174 }
175-
175+
176176 super
177177 end
178178
179179 def update
180180 @item = Item . find ( params [ :id ] )
181181 item_key = @item . id . to_s
182-
182+
183183 apply_tmp_params ( @item , session [ :tmp_params ] [ item_key ] ) if session [ :tmp_params ] &.key? ( item_key )
184-
184+
185185 if @item . update ( permitted_params [ :item ] )
186186 session [ :tmp_params ] &.delete ( item_key )
187187 redirect_to admin_item_path ( @item ) , notice : "Item was successfully updated."
188188 else
189- flash [ :error ] = "Failed to update item"
190- render :edit
189+ flash [ :error ] = "Failed to update item"
190+ render :edit
191191 end
192192 end
193193
194194 private
195195
196196 def apply_tmp_params ( item , tmp )
197197 return unless tmp . present?
198-
198+
199199 data = tmp . deep_symbolize_keys
200200 item . fixed_parameters = data [ :fixed ] || { }
201201 item . open_parameters_label = data [ :open ] || [ ]
202202 item . pricing_options = data [ :select ] || { }
203203 item . formula_parameters = data [ :formula_parameters ] || [ ]
204-
204+ item . calculation_formula = data [ :calculation_formula ]
205+
205206 item . is_open = item . open_parameters_label . any?
206207 item . is_selectable_options = item . pricing_options . any?
207208 item . is_fixed = item . fixed_parameters . any?
208209
209210 Rails . logger . info "🧠 APPLY TMP: formula_parameters = #{ item . formula_parameters . inspect } "
210211 end
211212 end
212-
213+
213214 actions :all , except : [ :destroy ]
214215
215216 action_item :back , only : :show do
@@ -219,14 +220,13 @@ def apply_tmp_params(item, tmp)
219220 action_item :toggle , only : :show do
220221 unless resource . category &.is_disabled?
221222 link_to (
222- resource . is_disabled? ? "Enable item" : "Disable item" ,
223+ resource . is_disabled? ? "Enable item" : "Disable item" ,
223224 toggle_admin_item_path ( resource ) ,
224225 method : :put ,
225226 data : { confirm : "Are you sure?" }
226227 )
227228 end
228229 end
229-
230230
231231 member_action :toggle , method : :put do
232232 resource . update ( is_disabled : !resource . is_disabled )
@@ -243,170 +243,170 @@ def apply_tmp_params(item, tmp)
243243
244244 session [ :tmp_params ] ||= { }
245245 session [ :tmp_params ] [ item_key ] ||= { }
246-
246+
247247 Rails . logger . info "🔑 item_key: #{ item_key } "
248248 Rails . logger . info "📦 Session before: #{ session [ :tmp_params ] [ item_key ] } "
249-
249+
250250 store = session [ :tmp_params ] [ item_key ] . deep_symbolize_keys
251251 store [ :fixed ] ||= { }
252252 store [ :open ] ||= [ ]
253253 store [ :select ] ||= { }
254254 store [ :formula_parameters ] ||= [ ]
255-
255+
256256 param_type = params [ :parameter_type ]
257257 param_name = case param_type
258258 when "Fixed" then params [ :fixed_parameter_name ] . to_s . strip
259259 when "Open" then params [ :open_parameter_name ] . to_s . strip
260260 when "Select" then params [ :select_parameter_name ] . to_s . strip
261261 end
262-
262+
263263 if param_name . blank?
264264 flash [ :error ] = "Parameter name can't be blank"
265265 return redirect_back ( fallback_location : edit_admin_item_path ( @item ) )
266266 end
267-
267+
268268 store [ :formula_parameters ] << param_name unless store [ :formula_parameters ] . include? ( param_name )
269-
269+
270270 case param_type
271271 when "Fixed"
272272 param_value = params [ :fixed_parameter_value ]
273273 store [ :fixed ] [ param_name ] = param_value
274-
274+
275275 when "Open"
276276 store [ :open ] << param_name unless store [ :open ] . include? ( param_name )
277-
277+
278278 when "Select"
279279 sub_hash = { }
280280 ( 1 ..10 ) . each do |i |
281281 desc = params [ "option_description_#{ i } " ]
282282 val = params [ "option_value_#{ i } " ]
283283 next if desc . blank? || val . blank?
284+
284285 sub_hash [ desc ] = val
285286 end
286287 store [ :select ] [ param_name ] = sub_hash if sub_hash . any?
287-
288+
288289 else
289290 flash [ :error ] = "Unknown parameter type"
290291 return redirect_back ( fallback_location : edit_admin_item_path ( @item ) )
291292 end
292-
293+
293294 session [ :tmp_params ] [ item_key ] = store . deep_stringify_keys
294-
295+
295296 Rails . logger . info "📤 Session after update: #{ session [ :tmp_params ] [ item_key ] } "
296-
297+
297298 flash [ :notice ] = "Parameter '#{ param_name } ' added (stored in session)."
298299 redirect_to @item . persisted? ? edit_admin_item_path ( @item ) : new_resource_path
299300 end
300-
301+
301302 member_action :remove_parameter , method : :delete do
302303 Rails . logger . info "🧩 REMOVE PARAMETER"
303304 @item = params [ :id ] == "new" ? Item . new : Item . find ( params [ :id ] )
304305 item_key = @item . persisted? ? @item . id . to_s : "new"
305306 Rails . logger . info "🔑 item_key: #{ item_key } "
306-
307+
307308 session [ :tmp_params ] ||= { }
308309 session [ :tmp_params ] [ item_key ] ||= {
309310 fixed : { } ,
310311 open : [ ] ,
311312 select : { } ,
312313 formula_parameters : [ ]
313314 }
314-
315+
315316 store = session [ :tmp_params ] [ item_key ] . deep_symbolize_keys
316317 param_type = params [ :param_type ] . to_s
317318 key = params [ :param_key ] . to_s
318319 desc_key = params [ :desc_key ] . to_s if params [ :desc_key ] . present?
319-
320+
320321 Rails . logger . info "📦 Session before delete: #{ store } "
321322 Rails . logger . info "🛠 Param type: #{ param_type } , Key: #{ key } , Desc key: #{ desc_key } "
322-
323+
323324 case param_type
324325 when "fixed"
325326 store [ :fixed ] &.delete ( key . to_sym )
326327 store [ :formula_parameters ] &.delete ( key )
327328 Rails . logger . info "🗑 Deleted fixed #{ key } "
328-
329+
329330 when "open"
330331 store [ :open ] &.delete ( key )
331332 store [ :formula_parameters ] &.delete ( key )
332333 Rails . logger . info "🗑 Deleted open #{ key } "
333-
334+
334335 when "select"
335336 key_str = key . to_s
336337 if desc_key . present?
337338 store [ :select ] [ key_str ] &.delete ( desc_key )
338- store [ :select ] . delete ( key_str ) if store [ :select ] [ key_str ] & .empty?
339+ store [ :select ] . delete ( key_str ) if store [ :select ] [ key_str ] && store [ :select ] [ key_str ] . empty?
339340 Rails . logger . info "🗑 Deleted desc #{ desc_key } from #{ key_str } "
340341 else
341342 store [ :select ] = store [ :select ] . reject { |k , _ | k . to_s == key_str }
342343 Rails . logger . info "🗑 Deleted whole select #{ key_str } "
343344 end
344345 store [ :formula_parameters ] &.delete ( key_str )
345-
346+
346347 else
347348 Rails . logger . warn "⚠️ Unknown param_type=#{ param_type } "
348349 end
349-
350+
350351 session [ :tmp_params ] [ item_key ] = store . deep_stringify_keys
351-
352+
352353 Rails . logger . info "📦 Session after delete: #{ session [ :tmp_params ] [ item_key ] } "
353354 redirect_to @item . persisted? ? edit_admin_item_path ( @item ) : new_resource_path
354- end
355+ end
355356
356357 member_action :save_meta_to_session , method : :post do
357358 item_key = params [ :id ] == "new" ? "new" : params [ :id ] . to_s
358-
359+
359360 session [ :tmp_params ] ||= { }
360361 session [ :tmp_params ] [ item_key ] ||= { }
361362 session [ :tmp_params ] [ item_key ] [ "name" ] = params [ :name ]
362363 session [ :tmp_params ] [ item_key ] [ "description" ] = params [ :description ]
363364 session [ :tmp_params ] [ item_key ] [ "category_id" ] = params [ :category_id ]
364-
365- Rails . logger . info "💾 Saved to session: #{ session [ :tmp_params ] [ item_key ] . slice ( " name" , " description" , " category_id" ) } "
365+
366+ Rails . logger . info "💾 Saved to session: #{ session [ :tmp_params ] [ item_key ] . slice ( ' name' , ' description' , ' category_id' ) } "
366367
367368 head :ok
368369 end
369370
370371 member_action :new_formula , method : :get do
371372 @item = params [ :id ] == "new" ? Item . new : Item . find ( params [ :id ] )
372373 item_key = @item . persisted? ? @item . id . to_s : "new"
373-
374+
374375 session [ :tmp_params ] ||= { }
375376 store = session [ :tmp_params ] [ item_key ] || { }
376-
377+
377378 @formula_params = store [ "formula_parameters" ] || [ ]
378379 @initial_formula = store [ "calculation_formula" ] || @item . calculation_formula
379380 end
380-
381381
382382 member_action :update_formula , method : :post do
383383 if params [ :id ] == "new"
384384 session [ :tmp_params ] ||= { }
385385 session [ :tmp_params ] [ "new" ] ||= { }
386386 session [ :tmp_params ] [ "new" ] [ "calculation_formula" ] = params [ :calculation_formula ]
387-
387+
388388 flash [ :notice ] = "Formula saved (in session)!"
389389 redirect_to new_resource_path
390390 else
391391 @item = Item . find ( params [ :id ] )
392392 @item . calculation_formula = params [ :calculation_formula ]
393-
393+
394394 if @item . save
395395 flash [ :notice ] = "Formula saved!"
396396 else
397397 flash [ :error ] = "Failed to save formula: #{ @item . errors . full_messages . to_sentence } "
398398 end
399-
399+
400400 redirect_to edit_admin_item_path ( @item )
401401 end
402- end
402+ end
403403
404404 member_action :clear_session , method : :post do
405405 if params [ :id ] == "new"
406406 session [ :tmp_params ] &.delete ( "new" )
407407 Rails . logger . info "🧹 Session[:tmp_params][\" new\" ] cleared via JS"
408408 end
409-
409+
410410 head :ok
411411 end
412412end
0 commit comments