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.
110 lines
3.7 KiB
110 lines
3.7 KiB
class HomepagePresenter |
|
include Rails.application.routes.url_helpers |
|
include CollectionTimeHelper |
|
|
|
attr_reader :current_year_in_progress_lettings_data, :current_year_completed_lettings_data, :current_year_in_progress_sales_data, :current_year_completed_sales_data, :last_year_in_progress_lettings_data, :last_year_completed_lettings_data, :last_year_in_progress_sales_data, :last_year_completed_sales_data, :incomplete_schemes_data, :active_notifications |
|
|
|
def initialize(user) |
|
@user = user |
|
@display_sales = should_display_sales? |
|
@in_crossover_period = FormHandler.instance.in_crossover_period? |
|
@current_year = current_collection_start_year |
|
@current_year_in_progress_lettings_data = data_box_data(:lettings, @current_year, :in_progress) |
|
@current_year_completed_lettings_data = data_box_data(:lettings, @current_year, :completed) |
|
@current_year_in_progress_sales_data = data_box_data(:sales, @current_year, :in_progress) if display_sales? |
|
@current_year_completed_sales_data = data_box_data(:sales, @current_year, :completed) if display_sales? |
|
@last_year = @current_year - 1 |
|
@last_year_in_progress_lettings_data = data_box_data(:lettings, @last_year, :in_progress) if in_crossover_period? |
|
@last_year_completed_lettings_data = data_box_data(:lettings, @last_year, :completed) |
|
@last_year_in_progress_sales_data = data_box_data(:sales, @last_year, :in_progress) if in_crossover_period? && display_sales? |
|
@last_year_completed_sales_data = data_box_data(:sales, @last_year, :completed) if display_sales? |
|
if display_schemes? |
|
@incomplete_schemes_data = { |
|
count: @user.schemes.visible.incomplete.count, |
|
text: data_box_text(type: :schemes, status: :incomplete), |
|
path: schemes_path(status: [:incomplete], owning_organisation_select: "all"), |
|
} |
|
end |
|
@active_notifications = Notification.active if @user.support? |
|
end |
|
|
|
def title_text_for_user |
|
if @user.support? |
|
"Manage all data" |
|
elsif @user.data_coordinator? |
|
"Manage your organisation's logs" |
|
else |
|
"Manage logs assigned to you" |
|
end |
|
end |
|
|
|
def display_sales? |
|
@display_sales |
|
end |
|
|
|
def in_crossover_period? |
|
@in_crossover_period |
|
end |
|
|
|
def subheading_for_current_year |
|
subheading_from_year @current_year |
|
end |
|
|
|
def subheading_for_last_year |
|
subheading = subheading_from_year @last_year |
|
in_crossover_period? ? subheading : "#{subheading} (Closed collection year)" |
|
end |
|
|
|
def display_schemes? |
|
!@user.data_provider? |
|
end |
|
|
|
private |
|
|
|
def subheading_from_year(year) |
|
"#{year} to #{year + 1} Logs" |
|
end |
|
|
|
def data_box_data(type, year, status) |
|
{ |
|
count: logs_count(type:, year:, status:), |
|
text: data_box_text(type:, status:), |
|
path: logs_link(type:, year:, status:), |
|
} |
|
end |
|
|
|
def data_box_text(type:, status:) |
|
text = [status, type] |
|
text.reverse! if status == :in_progress |
|
text.join(" ").humanize |
|
end |
|
|
|
def logs_link(type:, year:, status:) |
|
params = { |
|
status: [status], |
|
years: [year], |
|
assigned_to: @user.data_provider? ? "you" : "all", |
|
owning_organisation_select: "all", |
|
managing_organisation_select: "all", |
|
} |
|
case type |
|
when :lettings then lettings_logs_path(params) |
|
when :sales then sales_logs_path(params) |
|
end |
|
end |
|
|
|
def logs_count(type:, year:, status:) |
|
query = case type |
|
when :lettings then @user.lettings_logs |
|
when :sales then @user.sales_logs |
|
end |
|
query = query.where(assigned_to: @user) if @user.data_provider? |
|
query.filter_by_year(year) |
|
.where(status:) |
|
.count |
|
end |
|
|
|
def should_display_sales? |
|
@user.support? || @user.organisation.sales_logs.exists? |
|
end |
|
end
|
|
|