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.
98 lines
2.4 KiB
98 lines
2.4 KiB
class LocationPolicy |
|
attr_reader :user, :location |
|
|
|
def initialize(user, location) |
|
@user = user |
|
@location = location |
|
end |
|
|
|
def index? |
|
true |
|
end |
|
|
|
def create? |
|
return true if user.support? |
|
|
|
if location == Location |
|
user.data_coordinator? |
|
else |
|
user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner_or_recently_absorbed_org |
|
end |
|
end |
|
|
|
def update? |
|
return true if user.support? |
|
|
|
user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner_or_recently_absorbed_org |
|
end |
|
|
|
def delete_confirmation? |
|
delete? |
|
end |
|
|
|
def delete? |
|
return false unless user.support? |
|
return false unless location.status == :incomplete || location.status == :deactivated |
|
|
|
!has_any_logs_in_editable_collection_period |
|
end |
|
|
|
%w[ |
|
update_postcode? |
|
update_local_authority? |
|
update_name? |
|
update_units? |
|
update_type_of_unit? |
|
update_mobility_standards? |
|
update_availability? |
|
new_deactivation? |
|
deactivate_confirm? |
|
deactivate? |
|
new_reactivation? |
|
reactivate? |
|
postcode? |
|
local_authority? |
|
name? |
|
units? |
|
type_of_unit? |
|
mobility_standards? |
|
availability? |
|
confirm? |
|
].each do |method_name| |
|
define_method method_name do |
|
return true if user.support? |
|
|
|
user.data_coordinator? && scheme_owned_by_user_org_or_stock_owner_or_recently_absorbed_org |
|
end |
|
end |
|
|
|
%w[ |
|
show? |
|
check_answers? |
|
].each do |method_name| |
|
define_method method_name do |
|
return true if user.support? |
|
|
|
scheme_owned_by_user_org_or_stock_owner_or_recently_absorbed_org |
|
end |
|
end |
|
|
|
private |
|
|
|
def scheme |
|
location.scheme |
|
end |
|
|
|
def scheme_owned_by_user_org_or_stock_owner_or_recently_absorbed_org |
|
scheme_owned_by_user_org = scheme&.owning_organisation == user.organisation |
|
scheme_owned_by_stock_owner = user.organisation.stock_owners.exists?(scheme&.owning_organisation_id) |
|
scheme_owned_by_recently_absorbed_org = user.organisation.absorbed_organisations.visible.merged_during_open_collection_period.exists?(scheme&.owning_organisation_id) |
|
scheme_owned_by_user_org || scheme_owned_by_stock_owner || scheme_owned_by_recently_absorbed_org |
|
end |
|
|
|
def has_any_logs_in_editable_collection_period |
|
editable_from_date = FormHandler.instance.earliest_open_for_editing_collection_start_date |
|
|
|
LettingsLog.where(location_id: location.id).after_date(editable_from_date).or(LettingsLog.where(startdate: nil, location_id: location.id)).any? |
|
end |
|
end
|
|
|