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
This commit is contained in:
Ahmed Ejaz
2025-06-15 18:12:30 +05:00
parent 8e8878e43a
commit 2f9c856645

View File

@@ -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