Skip to content

Commit

Permalink
Rename NewPolicyClass to PolicyClass
Browse files Browse the repository at this point in the history
  • Loading branch information
pixeltrix committed Feb 13, 2025
1 parent f79b20f commit 72fcd5b
Show file tree
Hide file tree
Showing 27 changed files with 110 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ def new
end

def create
class_ids = params[:new_policy_classes].compact_blank
class_ids = params[:policy_classes].compact_blank

@part.new_policy_classes.where(id: class_ids).find_each do |policy_class|
@planning_application.planning_application_policy_classes.find_or_create_by!(new_policy_class_id: policy_class.id)
@part.policy_classes.where(id: class_ids).find_each do |policy_class|
@planning_application.planning_application_policy_classes.find_or_create_by!(policy_class_id: policy_class.id)
end

redirect_to planning_application_assessment_tasks_path(@planning_application), notice: t(".success")
Expand Down
2 changes: 1 addition & 1 deletion app/models/planning_application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class WithdrawOrCancelError < RuntimeError; end
has_many :site_visits, -> { by_created_at_desc }
has_many :press_notices, -> { by_created_at_desc }
has_many :planning_application_policy_classes
has_many :new_policy_classes, through: :planning_application_policy_classes
has_many :policy_classes, through: :planning_application_policy_classes
has_many :planning_application_policy_sections
has_many :policy_sections, through: :planning_application_policy_sections
has_many :additional_services
Expand Down
4 changes: 1 addition & 3 deletions app/models/planning_application_policy_class.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class PlanningApplicationPolicyClass < ApplicationRecord
belongs_to :planning_application
belongs_to :new_policy_class
belongs_to :policy_class

with_options dependent: :destroy do
has_many :reviews, -> { order(created_at: :desc) }, as: :owner
Expand All @@ -12,8 +12,6 @@ class PlanningApplicationPolicyClass < ApplicationRecord
validates :reporting_types, presence: true
end

alias_method :policy_class, :new_policy_class

def current_review
reviews.load.first || reviews.create!
end
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

class NewPolicyClass < ApplicationRecord
class PolicyClass < ApplicationRecord
belongs_to :policy_part
has_many :policy_sections, -> { order(:section) }, dependent: :restrict_with_error
has_many :planning_application_policy_sections, through: :policy_sections
Expand Down
2 changes: 1 addition & 1 deletion app/models/policy_part.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class PolicyPart < ApplicationRecord
belongs_to :policy_schedule
has_many :new_policy_classes, -> { order(:section) }, dependent: :restrict_with_error
has_many :policy_classes, -> { order(:section) }, dependent: :restrict_with_error

with_options presence: true do
validates :number, uniqueness: {scope: :policy_schedule}, numericality: {greater_than_or_equal_to: 1, less_than_or_equal_to: 20}
Expand Down
6 changes: 2 additions & 4 deletions app/models/policy_section.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,17 @@ class PolicySection < ApplicationRecord
"Other"
].freeze

belongs_to :new_policy_class
belongs_to :policy_class
has_many :planning_application_policy_sections, dependent: :restrict_with_error
has_many :planning_applications, through: :planning_application_policy_sections

with_options presence: true do
validates :section, uniqueness: {scope: :new_policy_class}
validates :section, uniqueness: {scope: :policy_class}
validates :description
end

validates :title, inclusion: {in: TITLES}

alias_method :policy_class, :new_policy_class

scope :grouped_and_ordered_by_title, -> {
group_by(&:title)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@
</div>
<div class="govuk-checkboxes">
<%= form.collection_check_boxes(
:new_policy_classes,
@part.new_policy_classes.menu,
:policy_classes,
@part.policy_classes.menu,
:first,
:last
) do |b| %>
<div class="govuk-checkboxes__item">
<% if b.object.first.in?(@planning_application.planning_application_policy_classes.pluck(:new_policy_class_id)) %>
<% if b.object.first.in?(@planning_application.planning_application_policy_classes.pluck(:policy_class_id)) %>
<%= b.check_box(class: "govuk-checkboxes__input", disabled: true, checked: true) %>
<% else %>
<%= b.check_box(class: "govuk-checkboxes__input") %>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</span>
</li>
<% else %>
<% @planning_application.planning_application_policy_classes.order(:new_policy_class_id).each do |pa_policy_class| %>
<% @planning_application.planning_application_policy_classes.order(:policy_class_id).each do |pa_policy_class| %>
<%= render(
TaskListItems::Assessment::PlanningApplicationPolicyClassComponent.new(
planning_application_policy_class: pa_policy_class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<%= render "shared/dates_and_assignment_header" %>

<ul class="app-task-list__items" id="review-legislation">
<% @planning_application.planning_application_policy_classes.order(:new_policy_class_id).each do |policy_class| %>
<% @planning_application.planning_application_policy_classes.order(:policy_class_id).each do |policy_class| %>
<% next if policy_class.current_review.not_started? || policy_class.current_review.in_progress? %>

<%= render TaskListItems::Reviewing::Component.new do |c| %>
Expand Down
10 changes: 4 additions & 6 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,6 @@ en:
date_invalid: The date the meeting took place must be a valid date
date_not_on_or_after: The date the meeting took place must be on or after the consultation start date
date_not_on_or_before: The date the meeting took place must be on or before today
new_policy_class:
attributes:
name:
blank: Enter a description for the class
section:
blank: Enter a section for the class
permitted_development_right:
attributes:
reviewer_comment:
Expand Down Expand Up @@ -357,6 +351,10 @@ en:
attributes:
base:
policies_to_be_determined: All policies must be assessed
name:
blank: Enter a description for the class
section:
blank: Enter a section for the class
policy_part:
attributes:
name:
Expand Down
9 changes: 9 additions & 0 deletions db/migrate/20250213183440_rename_new_policy_classes_table.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

class RenameNewPolicyClassesTable < ActiveRecord::Migration[7.2]
def change
safety_assured do
rename_table :new_policy_classes, :policy_classes
end
end
end
10 changes: 10 additions & 0 deletions db/migrate/20250213183643_rename_new_policy_class_id_column.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# frozen_string_literal: true

class RenameNewPolicyClassIdColumn < ActiveRecord::Migration[7.2]
def change
safety_assured do
rename_column :planning_application_policy_classes, :new_policy_class_id, :policy_class_id
rename_column :policy_sections, :new_policy_class_id, :policy_class_id
end
end
end
11 changes: 11 additions & 0 deletions db/migrate/20250213184646_rename_new_policy_class_index.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

class RenameNewPolicyClassIndex < ActiveRecord::Migration[7.2]
def change
safety_assured do
rename_index :planning_application_policy_classes,
"ix_pa_policy_classes_on_new_policy_class_and_pa",
"ix_pa_policy_classes_on_policy_class_and_pa"
end
end
end
42 changes: 21 additions & 21 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.2].define(version: 2025_02_13_183043) do
ActiveRecord::Schema[7.2].define(version: 2025_02_13_184646) do
# These are extensions that must be enabled in order to support this database
enable_extension "btree_gin"
enable_extension "plpgsql"
Expand Down Expand Up @@ -678,17 +678,6 @@
t.index ["consultation_id"], name: "ix_neighbours_on_consultation_id"
end

create_table "new_policy_classes", force: :cascade do |t|
t.string "section", null: false
t.string "name", null: false
t.string "url"
t.bigint "policy_part_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["policy_part_id"], name: "ix_new_policy_classes_on_policy_part_id"
t.index ["section", "policy_part_id"], name: "ix_new_policy_classes_on_section__policy_part_id", unique: true
end

create_table "notes", force: :cascade do |t|
t.bigint "planning_application_id", null: false
t.bigint "user_id", null: false
Expand Down Expand Up @@ -781,12 +770,12 @@

create_table "planning_application_policy_classes", force: :cascade do |t|
t.bigint "planning_application_id", null: false
t.bigint "new_policy_class_id", null: false
t.bigint "policy_class_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["new_policy_class_id", "planning_application_id"], name: "ix_pa_policy_classes_on_new_policy_class_and_pa", unique: true
t.index ["new_policy_class_id"], name: "ix_planning_application_policy_classes_on_new_policy_class_id"
t.index ["planning_application_id"], name: "ix_planning_application_policy_classes_on_planning_application_"
t.index ["policy_class_id", "planning_application_id"], name: "ix_pa_policy_classes_on_policy_class_and_pa", unique: true
t.index ["policy_class_id"], name: "ix_planning_application_policy_classes_on_policy_class_id"
end

create_table "planning_application_policy_sections", force: :cascade do |t|
Expand Down Expand Up @@ -917,6 +906,17 @@
t.index ["planning_application_id"], name: "ix_planx_planning_data_on_planning_application_id"
end

create_table "policy_classes", force: :cascade do |t|
t.string "section", null: false
t.string "name", null: false
t.string "url"
t.bigint "policy_part_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["policy_part_id"], name: "ix_policy_classes_on_policy_part_id"
t.index ["section", "policy_part_id"], name: "ix_policy_classes_on_section__policy_part_id", unique: true
end

create_table "policy_parts", force: :cascade do |t|
t.integer "number", null: false
t.string "name", null: false
Expand All @@ -938,12 +938,12 @@
create_table "policy_sections", force: :cascade do |t|
t.string "section", null: false
t.text "description", null: false
t.bigint "new_policy_class_id", null: false
t.bigint "policy_class_id", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "title", default: "Other", null: false
t.index ["new_policy_class_id"], name: "ix_policy_sections_on_new_policy_class_id"
t.index ["section", "new_policy_class_id"], name: "ix_policy_sections_on_section__new_policy_class_id", unique: true
t.index ["policy_class_id"], name: "ix_policy_sections_on_policy_class_id"
t.index ["section", "policy_class_id"], name: "ix_policy_sections_on_section__policy_class_id", unique: true
end

create_table "press_notices", force: :cascade do |t|
Expand Down Expand Up @@ -1191,7 +1191,6 @@
add_foreign_key "neighbour_responses", "neighbours"
add_foreign_key "neighbour_responses", "users", column: "redacted_by_id"
add_foreign_key "neighbours", "consultations"
add_foreign_key "new_policy_classes", "policy_parts"
add_foreign_key "notes", "planning_applications"
add_foreign_key "notes", "users"
add_foreign_key "old_policies", "old_policy_classes", column: "policy_class_id"
Expand All @@ -1204,17 +1203,18 @@
add_foreign_key "planning_application_constraints", "planning_application_constraints_queries"
add_foreign_key "planning_application_constraints", "planning_applications"
add_foreign_key "planning_application_constraints_queries", "planning_applications"
add_foreign_key "planning_application_policy_classes", "new_policy_classes"
add_foreign_key "planning_application_policy_classes", "planning_applications"
add_foreign_key "planning_application_policy_classes", "policy_classes"
add_foreign_key "planning_application_policy_sections", "planning_applications"
add_foreign_key "planning_application_policy_sections", "policy_sections"
add_foreign_key "planning_applications", "api_users"
add_foreign_key "planning_applications", "local_authorities"
add_foreign_key "planning_applications", "users"
add_foreign_key "planning_applications", "users", column: "boundary_created_by_id"
add_foreign_key "planx_planning_data", "planning_applications"
add_foreign_key "policy_classes", "policy_parts"
add_foreign_key "policy_parts", "policy_schedules"
add_foreign_key "policy_sections", "new_policy_classes"
add_foreign_key "policy_sections", "policy_classes"
add_foreign_key "press_notices", "planning_applications"
add_foreign_key "proposal_measurements", "planning_applications"
add_foreign_key "recommendations", "planning_applications"
Expand Down
4 changes: 2 additions & 2 deletions db/seeds.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@
)

part_data["classes"].each do |class_data|
new_policy_class = part.new_policy_classes.find_or_create_by!(
policy_class = part.policy_classes.find_or_create_by!(
section: class_data["section"],
name: class_data["name"],
url: class_data["url"]
)

class_data["policies_attributes"].each do |section_data|
new_policy_class.policy_sections.find_or_create_by!(
policy_class.policy_sections.find_or_create_by!(
section: section_data["section"].presence || class_data["section"],
description: section_data["description"]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def set_policy_parts
end

def set_policy_classes
@policy_classes = @part.new_policy_classes
@policy_classes = @part.policy_classes
end

def policy_part_number
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,15 @@ def policy_class_section_params
end

def policy_class_params
params.require(:new_policy_class).permit(*policy_class_attributes)
params.require(:policy_class).permit(*policy_class_attributes)
end

def policy_class_attributes
%i[section name url]
end

def build_policy_class
@policy_class = @part.new_policy_classes.new
@policy_class = @part.policy_classes.new
end

def set_policy_class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<%= form.govuk_text_field :name, label: {text: t(".name_label")}, hint: {text: t(".name_hint")} %>

<%= form.govuk_submit(t(".save")) do %>
<% if action_name == "edit" && @part.new_policy_classes.none? %>
<% if action_name == "edit" && @part.policy_classes.none? %>
<%= govuk_button_link_to(t(".remove"),
gpdo_policy_schedule_policy_part_path(@schedule.number, @part.number),
warning: true,
Expand Down
18 changes: 9 additions & 9 deletions engines/bops_config/spec/system/gpdo_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@

context "when deleting the part" do
let(:part2) { create(:policy_part, number: 2, name: "Minor operations", policy_schedule: schedule) }
let!(:policy_class) { create(:new_policy_class, policy_part: part2) }
let!(:policy_class) { create(:policy_class, policy_part: part2) }

it "allows deleting the part when no policy classes are associated", :capybara do
visit "/gpdo/schedule/2/part/1/edit"
Expand All @@ -240,9 +240,9 @@

context "when managing policy classes" do
let!(:part) { create(:policy_part, number: 1, name: "Development within the curtilage of a dwellinghouse", policy_schedule: schedule) }
let!(:policy_classA) { create(:new_policy_class, section: "A", name: "enlargement, improvement or other alteration of a dwellinghouse", policy_part: part) }
let!(:policy_classAA) { create(:new_policy_class, section: "AA", name: "enlargement of a dwellinghouse by construction of additional storeys", policy_part: part) }
let!(:policy_classB) { create(:new_policy_class, section: "B", name: "additions etc to the roof of a dwellinghouse", policy_part: part) }
let!(:policy_classA) { create(:policy_class, section: "A", name: "enlargement, improvement or other alteration of a dwellinghouse", policy_part: part) }
let!(:policy_classAA) { create(:policy_class, section: "AA", name: "enlargement of a dwellinghouse by construction of additional storeys", policy_part: part) }
let!(:policy_classB) { create(:policy_class, section: "B", name: "additions etc to the roof of a dwellinghouse", policy_part: part) }

it "allows viewing and creating the policy classes" do
click_link "GPDO"
Expand Down Expand Up @@ -334,7 +334,7 @@
expect(page).to have_selector("h1", text: "Edit class")
expect(page).to have_link("Back", href: "/gpdo/schedule/2/part/1/class")

expect(page).to have_selector("#new-policy-class-section-field[readonly]")
expect(page).to have_selector("#policy-class-section-field[readonly]")
fill_in "Description", with: "other alterations to the roof of a dwellinghouse"
fill_in "Link (optional)", with: "https://www.legislation.gov.uk/uksi/2015/596/schedule/2/part/1/crossheading/class-c-other-alterations-to-the-roof-of-a-dwellinghouse"
click_button "Save"
Expand All @@ -352,7 +352,7 @@
end

context "when deleting the policy class" do
let!(:policy_section) { create(:policy_section, new_policy_class: policy_classAA) }
let!(:policy_section) { create(:policy_section, policy_class: policy_classAA) }

it "allows deleting the policy class when no policy sections are associated", :capybara do
visit "/gpdo/schedule/2/part/1/class/A/edit"
Expand All @@ -373,8 +373,8 @@

context "when managing policy sections" do
let!(:part) { create(:policy_part, number: 1, name: "Development within the curtilage of a dwellinghouse", policy_schedule: schedule) }
let!(:policy_classAA) { create(:new_policy_class, section: "AA", name: "enlargement of a dwellinghouse by construction of additional storeys", policy_part: part) }
let!(:policy_section) { create(:policy_section, section: "1b(ii)", title: "Development not permitted", description: "if the dwellinghouse is located on a site of special scientific interest", new_policy_class: policy_classAA) }
let!(:policy_classAA) { create(:policy_class, section: "AA", name: "enlargement of a dwellinghouse by construction of additional storeys", policy_part: part) }
let!(:policy_section) { create(:policy_section, section: "1b(ii)", title: "Development not permitted", description: "if the dwellinghouse is located on a site of special scientific interest", policy_class: policy_classAA) }

it "allows viewing and creating the policy sections" do
click_link "GPDO"
Expand Down Expand Up @@ -446,7 +446,7 @@
end

context "when deleting the policy section" do
let!(:policy_section1a) { create(:policy_section, section: "1a", new_policy_class: policy_classAA) }
let!(:policy_section1a) { create(:policy_section, section: "1a", policy_class: policy_classAA) }
let!(:planning_application_policy_section) { create(:planning_application_policy_section, policy_section:) }

it "allows deleting the policy section when no planning application policy sections are associated", :capybara do
Expand Down
2 changes: 1 addition & 1 deletion spec/factories/planning_application_policy_class.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

FactoryBot.define do
factory :planning_application_policy_class do
association :new_policy_class
association :policy_class
association :planning_application
end
end
Loading

0 comments on commit 72fcd5b

Please sign in to comment.