From 2f9c85664591bf3df94fabc638756b7353910d12 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 15 Jun 2025 18:12:30 +0500 Subject: [PATCH] Refactors order and line item permissions logic Simplifies permission checking by: - Extracting common managed/coordinated orders logic into separate method - Combining producer-editable and managed/coordinated order clauses - Merging producer and admin line item permission checks into single query --- app/services/permissions/order.rb | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/app/services/permissions/order.rb b/app/services/permissions/order.rb index 29d63b5a2f..c9e043a8bd 100644 --- a/app/services/permissions/order.rb +++ b/app/services/permissions/order.rb @@ -21,18 +21,20 @@ module Permissions filtered_orders(orders) end + def managed_or_coordinated_orders_where_clause + Spree::Order.where( + managed_orders_where_values.or(coordinated_orders_where_values) + ) + end + # Any orders that the user can edit def editable_orders - orders = if @user.can_manage_line_items_in_orders_only? - Spree::Order.joins(:distributor).where( - id: produced_orders.select(:id), - distributor: { enable_producers_to_edit_orders: true } - ) - else - Spree::Order.where( - managed_orders_where_values.or(coordinated_orders_where_values) - ) - end + orders = Spree::Order.joins(:distributor).where( + id: produced_orders.select(:id), + distributor: { enable_producers_to_edit_orders: true } + ).or( + managed_or_coordinated_orders_where_clause + ) filtered_orders(orders) end @@ -43,13 +45,13 @@ module Permissions # Any line items that I can edit def editable_line_items - if @user.can_manage_line_items_in_orders_only? - Spree::LineItem.editable_by_producers( - @permissions.managed_enterprises.select("enterprises.id") + Spree::LineItem.editable_by_producers( + @permissions.managed_enterprises.select("enterprises.id") + ).or( + Spree::LineItem.where( + order_id: filtered_orders(managed_or_coordinated_orders_where_clause).select(:id) ) - else - Spree::LineItem.where(order_id: editable_orders.select(:id)) - end + ) end private