11module Partners
22 class RequestsController < BaseController
3+ skip_before_action :require_partner , only : [ :new , :create , :validate ]
4+ before_action :require_partner_or_org_admin , only : [ :new , :create , :validate ]
5+ layout :layout
6+
37 protect_from_forgery with : :exception
48
59 def index
@@ -21,15 +25,20 @@ def show
2125 def create
2226 create_service = Partners ::RequestCreateService . new (
2327 request_type : "quantity" ,
24- partner_user_id : current_user . id ,
28+ partner_id : partner . id ,
29+ user_id : current_user . id ,
2530 comments : partner_request_params [ :comments ] ,
2631 item_requests_attributes : partner_request_params [ :item_requests_attributes ] &.values || [ ]
2732 )
2833
2934 create_service . call
3035 if create_service . errors . none?
3136 flash [ :success ] = 'Request was successfully created.'
32- redirect_to partners_request_path ( create_service . partner_request . id )
37+ if current_partner
38+ redirect_to partners_request_path ( create_service . partner_request . id )
39+ else
40+ redirect_to request_path ( create_service . partner_request . id )
41+ end
3342 else
3443 @partner_request = create_service . partner_request
3544 @errors = create_service . errors
@@ -45,15 +54,16 @@ def create
4554 def validate
4655 create_service = Partners ::RequestCreateService . new (
4756 request_type : "quantity" ,
48- partner_user_id : current_user . id ,
57+ partner_id : partner . id ,
58+ user_id : current_user . id ,
4959 comments : partner_request_params [ :comments ] ,
5060 item_requests_attributes : partner_request_params [ :item_requests_attributes ] &.values || [ ]
5161 ) . initialize_only
5262
5363 if create_service . errors . none?
5464 @partner_request = create_service . partner_request
5565 @total_items = @partner_request . total_items
56- @quota_exceeded = current_partner . quota_exceeded? ( @total_items )
66+ @quota_exceeded = partner . quota_exceeded? ( @total_items )
5767 body = render_to_string ( template : 'partners/requests/validate' , formats : [ :html ] , layout : false )
5868 render json : { valid : true , body : body }
5969 else
@@ -68,13 +78,42 @@ def partner_request_params
6878 end
6979
7080 def fetch_items
71- @requestable_items = PartnerFetchRequestableItemsService . new ( partner_id : current_partner . id ) . call
81+ @requestable_items = PartnerFetchRequestableItemsService . new ( partner_id : partner . id ) . call
7282 if Flipper . enabled? ( :enable_packs )
7383 # hash of (item ID => hash of (request unit name => request unit plural name))
7484 @item_units = Item . where ( id : @requestable_items . to_h . values ) . to_h do |i |
7585 [ i . id , i . request_units . to_h { |u | [ u . name , u . name . pluralize ] } ]
7686 end
7787 end
7888 end
89+
90+ def require_partner_or_org_admin
91+ return if current_partner
92+
93+ partner_id = params . permit ( :partner_id ) [ :partner_id ]
94+ return redirect_invalid_user if partner_id . blank?
95+
96+ partner = Partner . find ( partner_id )
97+ if current_user . has_role? ( Role ::ORG_ADMIN , current_organization ) && current_organization == partner &.organization
98+ @partner = partner
99+ else
100+ redirect_invalid_user
101+ end
102+ end
103+
104+ def redirect_invalid_user
105+ respond_to do |format |
106+ format . html { redirect_to dashboard_path , flash : { error : "Logged in user is not set up as a 'partner'." } }
107+ format . json { render body : nil , status : :forbidden }
108+ end
109+ end
110+
111+ def partner
112+ @partner ||= current_partner
113+ end
114+
115+ def layout
116+ @layout ||= current_partner ? "partners/application" : "application"
117+ end
79118 end
80119end
0 commit comments