From c912696e143003aee6d43a3f814ddcdb8f97c4f7 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:28:30 +0000 Subject: [PATCH 1/2] CLDC-2253 Add collection resources (#2120) * Update collection resources, add to homepage * Add guidance link to an empty page * Update headings * Rebase fix * Update title * Update file names * Add section break --- app/frontend/styles/_document-list.scss | 2 +- app/views/home/index.html.erb | 5 + .../layouts/_collection_resources.html.erb | 115 ++++++------------ app/views/organisations/show.html.erb | 4 - app/views/start/index.html.erb | 7 +- .../requests/organisations_controller_spec.rb | 36 ------ spec/requests/start_controller_spec.rb | 29 +++++ 7 files changed, 81 insertions(+), 117 deletions(-) diff --git a/app/frontend/styles/_document-list.scss b/app/frontend/styles/_document-list.scss index 47936a365..e8cef0625 100644 --- a/app/frontend/styles/_document-list.scss +++ b/app/frontend/styles/_document-list.scss @@ -12,7 +12,7 @@ } .app-document-list__item-title { - @include govuk-font($size: 16, $weight: "bold"); + @include govuk-font($size: 16); margin: 0 0 govuk-spacing(1); } diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index e691b3e5b..7469ed18f 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1 +1,6 @@

<%= "Welcome back, #{@current_user.name}" %>

+
+
+ <%= render partial: "layouts/collection_resources" %> +
+
diff --git a/app/views/layouts/_collection_resources.html.erb b/app/views/layouts/_collection_resources.html.erb index e2d56e4a5..0c084596e 100644 --- a/app/views/layouts/_collection_resources.html.erb +++ b/app/views/layouts/_collection_resources.html.erb @@ -1,94 +1,59 @@ -
+<% if current_user %> +

Collection resources

+

<%= govuk_link_to "Guidance for submitting social housing lettings and sales data (CORE)", guidance_path %>

+<% else %>

Collection resources

-

For lettings starting during 1 April 2023 to 31 March 2024 and sales completing during the same period, use the 2023/24 forms.

- +<% end %> +

Use the 2023 to 2024 forms for lettings that start and sales that complete between 1 April 2023 and 31 March 2024.

+<%= govuk_tabs(title: "Collection resources") do |c| %> <% if FormHandler.instance.lettings_form_for_start_year(2023) && FormHandler.instance.lettings_form_for_start_year(2023).edit_end_date > Time.zone.today %> -

Lettings 2023/24

- <%= render DocumentListComponent.new(items: [ + <% c.with_tab(label: "Lettings 2023/24") do %> + <%= render DocumentListComponent.new(items: [ { - name: "Lettings log for tenants (2023/24)", + name: "Download the lettings log for tenants (2023 to 2024)", href: download_23_24_lettings_form_path, metadata: file_type_size_and_pages("2023_24_lettings_paper_form.pdf", number_of_pages: 8), }, { - name: "Lettings bulk upload template (2023/24) – New question ordering", + name: "Download the lettings bulk upload template (2023 to 2024) – New question ordering", href: download_23_24_lettings_bulk_upload_template_path, metadata: file_type_size_and_pages("bulk-upload-lettings-template-2023-24.xlsx"), }, { - name: "Lettings bulk upload template (2023/24)", + name: "Download the lettings bulk upload template (2023 to 2024) – Legacy version", href: download_23_24_lettings_bulk_upload_legacy_template_path, metadata: file_type_size_and_pages("bulk-upload-lettings-legacy-template-2023-24.xlsx"), }, { - name: "Lettings bulk upload specification (2023/24)", + name: "Download the lettings bulk upload specification (2023 to 2024)", href: download_23_24_lettings_bulk_upload_specification_path, metadata: file_type_size_and_pages("bulk-upload-lettings-specification-2023-24.xlsx"), }, - ]) %> - -

Sales 2023/24

- <%= render DocumentListComponent.new(items: [ - { - name: "Sales log for buyers (2023/24)", - href: download_23_24_sales_form_path, - metadata: file_type_size_and_pages("2023_24_sales_paper_form.pdf", number_of_pages: 8), - }, - { - name: "Sales bulk upload template (2023/24) – New question ordering", - href: download_23_24_sales_bulk_upload_template_path, - metadata: file_type_size_and_pages("bulk-upload-sales-template-2023-24.xlsx"), - }, - { - name: "Sales bulk upload template (2023/24)", - href: download_23_24_sales_bulk_upload_legacy_template_path, - metadata: file_type_size_and_pages("bulk-upload-sales-legacy-template-2023-24.xlsx"), - }, - { - name: "Sales bulk upload specification (2023/24)", - href: download_23_24_sales_bulk_upload_specification_path, - metadata: file_type_size_and_pages("bulk-upload-sales-specification-2023-24.xlsx"), - }, - ]) %> - <% end %> - - <% if FormHandler.instance.lettings_form_for_start_year(2022) && FormHandler.instance.lettings_form_for_start_year(2022).edit_end_date > Time.zone.today %> -

Lettings 2022/23

- <%= render DocumentListComponent.new(items: [ - { - name: "Lettings log for tenants (2022/23)", - href: download_22_23_lettings_form_path, - metadata: file_type_size_and_pages("2022_23_lettings_paper_form.pdf", number_of_pages: 4), - }, - { - name: "Lettings bulk upload template (2022/23)", - href: download_22_23_lettings_bulk_upload_template_path, - metadata: file_type_size_and_pages("bulk-upload-lettings-template-2022-23.xlsx"), - }, - { - name: "Lettings bulk upload specification (2022/23)", - href: download_22_23_lettings_bulk_upload_specification_path, - metadata: file_type_size_and_pages("bulk-upload-lettings-specification-2022-23.xlsx"), - }, - ]) %> - -

Sales 2022/23

- <%= render DocumentListComponent.new(items: [ - { - name: "Sales log for buyers (2022/23)", - href: download_22_23_sales_form_path, - metadata: file_type_size_and_pages("2022_23_sales_paper_form.pdf", number_of_pages: 5), - }, - { - name: "Sales bulk upload template (2022/23)", - href: download_22_23_sales_bulk_upload_template_path, - metadata: file_type_size_and_pages("bulk-upload-sales-template-2022-23.xlsx"), - }, - { - name: "Sales bulk upload specification (2022/23)", - href: download_22_23_sales_bulk_upload_specification_path, - metadata: file_type_size_and_pages("bulk-upload-sales-template-2022-23.xlsx"), - }, - ]) %> + ]) %> + <% end %> + <% c.with_tab(label: "Sales 2023/24") do %> + <%= render DocumentListComponent.new(items: [ + { + name: "Download the sales log for buyers (2023 to 2024)", + href: download_23_24_sales_form_path, + metadata: file_type_size_and_pages("2023_24_sales_paper_form.pdf", number_of_pages: 8), + }, + { + name: "Download the sales bulk upload template (2023 to 2024) – New question ordering", + href: download_23_24_sales_bulk_upload_template_path, + metadata: file_type_size_and_pages("bulk-upload-sales-template-2023-24.xlsx"), + }, + { + name: "Download the sales bulk upload template (2023 to 2024) – Legacy version", + href: download_23_24_sales_bulk_upload_legacy_template_path, + metadata: file_type_size_and_pages("bulk-upload-sales-legacy-template-2023-24.xlsx"), + }, + { + name: "Download the sales bulk upload specification (2023 to 2024)", + href: download_23_24_sales_bulk_upload_specification_path, + metadata: file_type_size_and_pages("bulk-upload-sales-specification-2023-24.xlsx"), + }, + ]) %> + <% end %> <% end %> -
+<% end %> diff --git a/app/views/organisations/show.html.erb b/app/views/organisations/show.html.erb index 9cfecda26..93b47fb03 100644 --- a/app/views/organisations/show.html.erb +++ b/app/views/organisations/show.html.erb @@ -41,8 +41,4 @@ <% end %> <%= render partial: "organisations/merged_organisation_details" %> - -
- <%= render partial: "layouts/collection_resources" %> -
diff --git a/app/views/start/index.html.erb b/app/views/start/index.html.erb index d6ec6d392..17e15d34e 100644 --- a/app/views/start/index.html.erb +++ b/app/views/start/index.html.erb @@ -16,14 +16,19 @@ href: start_path, ) %> +
+

Before you start

Use your account details to sign in.

If you need to set up a new account, speak to your organisation’s CORE data coordinator. If you don’t know who that is, <%= govuk_link_to("contact the helpdesk", GlobalConstants::HELPDESK_URL) %>.

You can <%= govuk_mail_to("dluhc.digital-services@levellingup.gov.uk", "request an account", subject: "CORE: Request a new account") %> if your organisation doesn’t have one.

<%= govuk_link_to guidance_path do %>Guidance for submitting social housing lettings and sales data (CORE)<% end %>

+ -

+
+
+
<%= render partial: "layouts/collection_resources" %>
diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index 97665f8ca..68de93c51 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -310,42 +310,6 @@ RSpec.describe OrganisationsController, type: :request do it "redirects to details" do expect(response).to have_http_status(:redirect) end - - context "and 2022 collection window is open" do - let(:set_time) { allow(Time).to receive(:now).and_return(Time.zone.local(2023, 1, 1)) } - - it "displays correct resources for 2022/23 and 2023/24 collection years" do - follow_redirect! - expect(page).to have_content("Lettings 2023/24") - expect(page).to have_content("Sales 2023/24") - expect(page).to have_content("Lettings 2022/23") - expect(page).to have_content("Sales 2022/23") - end - end - - context "and 2022 collection window is closed for editing" do - let(:set_time) { allow(Time).to receive(:now).and_return(Time.zone.local(2024, 1, 1)) } - - it "displays correct resources for 2022/23 and 2023/24 collection years" do - follow_redirect! - expect(page).to have_content("Lettings 2023/24") - expect(page).to have_content("Sales 2023/24") - expect(page).not_to have_content("Lettings 2022/23") - expect(page).not_to have_content("Sales 2022/23") - end - end - - context "and 2023 collection window is closed for editing" do - let(:set_time) { allow(Time).to receive(:now).and_return(Time.zone.local(2025, 1, 1)) } - - it "displays correct resources for 2022/23 and 2023/24 collection years" do - follow_redirect! - expect(page).not_to have_content("Lettings 2023/24") - expect(page).not_to have_content("Sales 2023/24") - expect(page).not_to have_content("Lettings 2022/23") - expect(page).not_to have_content("Sales 2022/23") - end - end end context "with an organisation that are not in scope for the user, i.e. that they do not belong to" do diff --git a/spec/requests/start_controller_spec.rb b/spec/requests/start_controller_spec.rb index 1bfd2b4b9..2287280dc 100644 --- a/spec/requests/start_controller_spec.rb +++ b/spec/requests/start_controller_spec.rb @@ -31,6 +31,35 @@ RSpec.describe StartController, type: :request do get "/", headers:, params: {} expect(page).to have_content("Welcome back") end + + context "and 2023 collection window is open for editing" do + before do + allow(Time).to receive(:now).and_return(Time.zone.local(2024, 1, 1)) + end + + it "displays correct resources for 2022/23 and 2023/24 collection years" do + get "/", headers: headers, params: {} + expect(page).to have_content("Lettings 2023/24") + expect(page).to have_content("Sales 2023/24") + end + end + + context "and 2023 collection window is closed for editing" do + before do + allow(Time).to receive(:now).and_return(Time.zone.local(2025, 1, 1)) + end + + it "displays correct resources for 2022/23 and 2023/24 collection years" do + get "/", headers: headers, params: {} + expect(page).not_to have_content("Lettings 2023/24") + expect(page).not_to have_content("Sales 2023/24") + end + end + + it "shows guidance link" do + get "/", headers: headers, params: {} + expect(page).to have_content("Guidance for submitting social housing lettings and sales data (CORE)") + end end end From bf92c52635b4c06df66e81ff7ff3ddaf6127bdc4 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 9 Jan 2024 12:05:42 +0000 Subject: [PATCH 2/2] CLDC-2593 Add upcoming deadlines section (#2119) * Add upcoming deadlines section * Update the content to use the correct dates * Update content * lint * typos --- app/helpers/collection_time_helper.rb | 20 ++++++++++++ app/models/form_handler.rb | 4 +++ app/views/home/_upcoming_deadlines.html.erb | 35 +++++++++++++++++++++ app/views/home/index.html.erb | 2 ++ spec/helpers/collection_time_helper_spec.rb | 30 ++++++++++++++++++ 5 files changed, 91 insertions(+) create mode 100644 app/views/home/_upcoming_deadlines.html.erb diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index ea7601c70..6f8ef62fc 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -45,4 +45,24 @@ module CollectionTimeHelper def previous_collection_start_date current_collection_start_date - 1.year end + + def quarter_for_date(date: Time.zone.now) + quarters = [ + { quarter: "Q3", cutoff_date: Time.zone.local(2024, 1, 12), start_date: Time.zone.local(2023, 10, 1), end_date: Time.zone.local(2023, 12, 31) }, + { quarter: "Q1", cutoff_date: Time.zone.local(2024, 7, 12), start_date: Time.zone.local(2024, 4, 1), end_date: Time.zone.local(2024, 6, 30) }, + { quarter: "Q2", cutoff_date: Time.zone.local(2024, 10, 11), start_date: Time.zone.local(2024, 7, 1), end_date: Time.zone.local(2024, 9, 30) }, + { quarter: "Q3", cutoff_date: Time.zone.local(2025, 1, 10), start_date: Time.zone.local(2024, 10, 1), end_date: Time.zone.local(2024, 12, 31) }, + ] + + quarter = quarters.find { |q| date.between?(q[:start_date], q[:cutoff_date] + 1.day) } + + return unless quarter + + OpenStruct.new( + quarter: quarter[:quarter], + cutoff_date: quarter[:cutoff_date], + quarter_start_date: quarter[:start_date], + quarter_end_date: quarter[:end_date], + ) + end end diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb index 83bfb0f8a..d9a3d4a35 100644 --- a/app/models/form_handler.rb +++ b/app/models/form_handler.rb @@ -28,6 +28,10 @@ class FormHandler forms["current_lettings"] end + def previous_lettings_form + forms["previous_lettings"] + end + def current_sales_form forms["current_sales"] end diff --git a/app/views/home/_upcoming_deadlines.html.erb b/app/views/home/_upcoming_deadlines.html.erb new file mode 100644 index 000000000..ffed67ca1 --- /dev/null +++ b/app/views/home/_upcoming_deadlines.html.erb @@ -0,0 +1,35 @@ +

Upcoming deadlines

+ +<% current_lettings_form = FormHandler.instance.in_crossover_period? ? FormHandler.instance.previous_lettings_form : FormHandler.instance.current_lettings_form %> +<% formatted_deadline = "#{current_lettings_form.submission_deadline.strftime('%A')} #{current_lettings_form.submission_deadline.to_formatted_s(:govuk_date)}" %> +<% if FormHandler.instance.in_crossover_period? %> +

End of year deadline - <%= formatted_deadline %>: Deadline to submit logs for tenancies starting between <%= collection_start_date(Time.zone.now).to_formatted_s(:govuk_date) %> to <%= collection_end_date(Time.zone.now).to_formatted_s(:govuk_date) %>

+<% end %> + +<% current_quarter = quarter_for_date(date: Time.zone.now) %> +<% if current_quarter.present? %> +

<%= "#{current_quarter.quarter} - #{current_quarter.cutoff_date.strftime('%A')} #{current_quarter.cutoff_date.to_formatted_s(:govuk_date)}" %>: Quarterly cut off date for tenancies and sales starting between <%= current_quarter.quarter_start_date.to_formatted_s(:govuk_date) %> and <%= current_quarter.quarter_end_date.to_formatted_s(:govuk_date) %>.

+<% end %> + +<% if !FormHandler.instance.in_crossover_period? %> +

Try to complete your logs for each quarter by the cut-off date.

+

You can still create logs for a previous quarter after its cut-off date, as long as you complete them by the end-of-year deadline: <%= formatted_deadline %>.

+<% end %> + +<% if FormHandler.instance.in_crossover_period? %> +<% previous_lettings_form = FormHandler.instance.previous_lettings_form %> +

Prioritise completing logs for the closing collection year. You must complete all <%= previous_lettings_form.start_date.year %> to <%= previous_lettings_form.submission_deadline.year %> logs must by the end-of-year deadline. You can still create <%= current_lettings_form.start_date.year %> to <%= current_lettings_form.submission_deadline.year %> logs for this quarter after the quarterly cut-off date.

+<% end %> + +<%= govuk_details(summary_text: "Quarterly cut-off dates for 2023 to 2024") do %> +

The 2023 to 2024 quarterly cut-off dates are:

+ +

It is important that you meet these cut-off dates because we submit data to the Office for National Statistics quarterly, helping them create essential inflation statistics.

+

Meeting these cut-off dates also gives you more accurate data for your own analysis, and reduces the burden at the end of the year.

+

If you are not able to meet these quarterly dates, submit your logs as soon as you can so that they can be included in the annual data.

+<% end %> diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 7469ed18f..e87fde287 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -2,5 +2,7 @@
<%= render partial: "layouts/collection_resources" %> +
+ <%= render partial: "home/upcoming_deadlines" %>
diff --git a/spec/helpers/collection_time_helper_spec.rb b/spec/helpers/collection_time_helper_spec.rb index 3eef01b5e..859431c57 100644 --- a/spec/helpers/collection_time_helper_spec.rb +++ b/spec/helpers/collection_time_helper_spec.rb @@ -109,4 +109,34 @@ RSpec.describe CollectionTimeHelper do end end end + + describe "#quarter_for_date" do + it "returns correct cutoff date for curent quarter" do + quarter = quarter_for_date(date: Time.zone.local(2023, 10, 1)) + expect(quarter.cutoff_date).to eq(Time.zone.local(2024, 1, 12)) + expect(quarter.quarter_start_date).to eq(Time.zone.local(2023, 10, 1)) + expect(quarter.quarter_end_date).to eq(Time.zone.local(2023, 12, 31)) + end + + it "returns correct cutoff date for the first quarter of 2024/25" do + quarter = quarter_for_date(date: Time.zone.local(2024, 4, 1)) + expect(quarter.cutoff_date).to eq(Time.zone.local(2024, 7, 12)) + expect(quarter.quarter_start_date).to eq(Time.zone.local(2024, 4, 1)) + expect(quarter.quarter_end_date).to eq(Time.zone.local(2024, 6, 30)) + end + + it "returns correct cutoff date for the second quarter of 2024/25" do + quarter = quarter_for_date(date: Time.zone.local(2024, 9, 30)) + expect(quarter.cutoff_date).to eq(Time.zone.local(2024, 10, 11)) + expect(quarter.quarter_start_date).to eq(Time.zone.local(2024, 7, 1)) + expect(quarter.quarter_end_date).to eq(Time.zone.local(2024, 9, 30)) + end + + it "returns correct cutoff date for the third quarter of 2024/25" do + quarter = quarter_for_date(date: Time.zone.local(2024, 10, 25)) + expect(quarter.cutoff_date).to eq(Time.zone.local(2025, 1, 10)) + expect(quarter.quarter_start_date).to eq(Time.zone.local(2024, 10, 1)) + expect(quarter.quarter_end_date).to eq(Time.zone.local(2024, 12, 31)) + end + end end