Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

87 lines
2.6 KiB

class SchemesController < ApplicationController
include Pagy::Backend
include Modules::SearchFilter
before_action :authenticate_user!
before_action :find_resource, except: %i[index]
before_action :find_by_scheme_id, only: %i[edit]
before_action :authenticate_scope!
def index
redirect_to schemes_organisation_path(current_user.organisation) unless current_user.support?
all_schemes = Scheme.all
@pagy, @schemes = pagy(filtered_collection(all_schemes, search_term))
@searched = search_term.presence
@total_count = all_schemes.size
end
def show
@scheme = Scheme.find_by(id: params[:id])
end
def locations
@scheme = Scheme.find_by(id: params[:id])
@pagy, @locations = pagy(@scheme.locations)
@total_count = @scheme.locations.size
end
def new
@resource = Scheme.new
end
def create
@scheme = Scheme.new(clean_params)
@scheme.save
redirect_to edit_scheme_path(id: @scheme.id)
end
def edit
if !params[:scheme]
@scheme = Scheme.find(params[:id])
render "schemes/primary_client_group", locals: { scheme: @scheme }
elsif params[:scheme][:primary_client_group]
required_params = params.require(:scheme).permit(:primary_client_group)
@scheme.update(required_params)
render "schemes/secondary_client_group", locals: { scheme: @scheme }
elsif params[:scheme][:secondary_client_group]
required_params = params.require(:scheme).permit(:secondaryy_client_group)
@scheme.update(required_params)
render "schemes/secondary_client_group", locals: { scheme: @scheme }
elsif params[:scheme][:support]
required_params = params.require(:scheme).permit(:secondaryy_client_group)
@scheme.update(required_params)
render "schemes/secondary_client_group", locals: { scheme: @scheme }
end
end
private
def clean_params
code = "S#{SecureRandom.alphanumeric(5)}".upcase
required_params = params.require(:scheme).permit(:service_name, :sensitive, :organisation_id, :scheme_type, :registered_under_care_act, :total_units).merge(code: code)
required_params[:sensitive] = required_params[:sensitive].to_i
required_params
end
def search_term
params["search"]
end
def find_by_scheme_id
@scheme = Scheme.find_by(id: params[:scheme_id])
end
def find_resource
@scheme = Scheme.find_by(id: params[:id])
end
def authenticate_scope!
head :unauthorized and return unless current_user.data_coordinator? || current_user.support?
if %w[show locations].include?(action_name) && !((current_user.organisation == @scheme.organisation) || current_user.support?)
render_not_found and return
end
end
end