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