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:
+
+ - Q1 - Friday 14 July 2023: Quarterly cut-off date for tenancies and sales starting between 1 April 2023 and 30 June 2023.
+ - Q2 - Friday 13 October 2023: Quarterly cut-off date for tenancies and sales starting between 1 July 2023 and 30 September 2023.
+ - Q3 - Friday 12 January 2024: Quarterly cut-off date for tenancies and sales starting between 1 October 2023 and 31 December 2023.
+ - End of year deadline - Friday 7 June 2024: Deadline for tenancies and sales starting between 1 January 2024 and 31 March 2024, plus any late submissions for the 2023 to 2024 collection year.
+
+
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