49 changed files with 1893 additions and 97 deletions
@ -0,0 +1,14 @@
|
||||
class Form::Sales::Pages::ServiceChargeChanged < ::Form::Page |
||||
def initialize(id, hsh, subsection) |
||||
super |
||||
@id = "service_charge_changed" |
||||
@copy_key = "sales.sale_information.servicecharges_changed" |
||||
end |
||||
|
||||
def questions |
||||
@questions ||= [ |
||||
Form::Sales::Questions::HasServiceChargesChanged.new(nil, nil, self), |
||||
Form::Sales::Questions::NewServiceCharges.new(nil, nil, self), |
||||
] |
||||
end |
||||
end |
||||
@ -0,0 +1,27 @@
|
||||
class Form::Sales::Questions::HasServiceChargesChanged < ::Form::Question |
||||
def initialize(id, hsh, page) |
||||
super |
||||
@id = "hasservicechargeschanged" |
||||
@type = "radio" |
||||
@answer_options = ANSWER_OPTIONS |
||||
@conditional_for = { |
||||
"newservicecharges" => [1], |
||||
} |
||||
@hidden_in_check_answers = { |
||||
"depends_on" => [ |
||||
{ |
||||
"hasservicechargeschanged" => 1, |
||||
}, |
||||
], |
||||
} |
||||
@copy_key = "sales.sale_information.servicecharges_changed.has_service_charges_changed" |
||||
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] |
||||
end |
||||
|
||||
ANSWER_OPTIONS = { |
||||
"1" => { "value" => "Yes" }, |
||||
"2" => { "value" => "No" }, |
||||
}.freeze |
||||
|
||||
QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze |
||||
end |
||||
@ -0,0 +1,17 @@
|
||||
class Form::Sales::Questions::NewServiceCharges < ::Form::Question |
||||
def initialize(id, hsh, page) |
||||
super |
||||
@id = "newservicecharges" |
||||
@type = "numeric" |
||||
@min = 0 |
||||
@max = 9999.99 |
||||
@step = 0.01 |
||||
@width = 5 |
||||
@prefix = "£" |
||||
@copy_key = "sales.sale_information.servicecharges_changed.new_service_charges" |
||||
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] |
||||
@strip_commas = true |
||||
end |
||||
|
||||
QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze |
||||
end |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
||||
class AddServiceChargeChangedToSalesLogs < ActiveRecord::Migration[7.2] |
||||
def change |
||||
change_table :sales_logs, bulk: true do |t| |
||||
t.column :hasservicechargeschanged, :integer |
||||
t.column :newservicecharges, :decimal, precision: 10, scale: 2 |
||||
end |
||||
end |
||||
end |
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,31 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Pages::ServiceChargeChanged, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||
|
||||
let(:page_id) { nil } |
||||
let(:page_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: collection_start_date_for_year(2026))) } |
||||
|
||||
it "has correct subsection" do |
||||
expect(page.subsection).to eq(subsection) |
||||
end |
||||
|
||||
it "has correct questions" do |
||||
expect(page.questions.map(&:id)).to eq(%w[hasservicechargeschanged newservicecharges]) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(page.id).to eq("service_charge_changed") |
||||
end |
||||
|
||||
it "has the correct description" do |
||||
expect(page.description).to be_nil |
||||
end |
||||
|
||||
it "has correct depends_on" do |
||||
expect(page.depends_on).to be_nil |
||||
end |
||||
end |
||||
@ -0,0 +1,56 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Questions::HasServiceChargesChanged, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||
|
||||
let(:question_id) { nil } |
||||
let(:question_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } |
||||
let(:page) { instance_double(Form::Page, subsection:) } |
||||
let(:start_date) { collection_start_date_for_year(2026) } |
||||
|
||||
it "has correct page" do |
||||
expect(question.page).to eq(page) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(question.id).to eq("hasservicechargeschanged") |
||||
end |
||||
|
||||
it "has the correct type" do |
||||
expect(question.type).to eq("radio") |
||||
end |
||||
|
||||
it "is not marked as derived" do |
||||
expect(question.derived?(nil)).to be false |
||||
end |
||||
|
||||
it "has the correct answer_options" do |
||||
expect(question.answer_options).to eq({ |
||||
"1" => { "value" => "Yes" }, |
||||
"2" => { "value" => "No" }, |
||||
}) |
||||
end |
||||
|
||||
it "has correct conditional for" do |
||||
expect(question.conditional_for).to eq({ |
||||
"newservicecharges" => [1], |
||||
}) |
||||
end |
||||
|
||||
it "has correct hidden_in_check_answers for" do |
||||
expect(question.hidden_in_check_answers).to eq({ |
||||
"depends_on" => [ |
||||
{ |
||||
"hasservicechargeschanged" => 1, |
||||
}, |
||||
], |
||||
}) |
||||
end |
||||
|
||||
it "has the correct question number" do |
||||
expect(question.question_number).to eq(0) |
||||
end |
||||
end |
||||
@ -0,0 +1,53 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Questions::NewServiceCharges, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||
|
||||
let(:question_id) { nil } |
||||
let(:question_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } |
||||
let(:page) { instance_double(Form::Page, subsection:) } |
||||
let(:start_date) { collection_start_date_for_year(2026) } |
||||
|
||||
it "has correct page" do |
||||
expect(question.page).to eq(page) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(question.id).to eq("newservicecharges") |
||||
end |
||||
|
||||
it "has the correct type" do |
||||
expect(question.type).to eq("numeric") |
||||
end |
||||
|
||||
it "is not marked as derived" do |
||||
expect(question.derived?(nil)).to be false |
||||
end |
||||
|
||||
it "has the correct width" do |
||||
expect(question.width).to be 5 |
||||
end |
||||
|
||||
it "has the correct min" do |
||||
expect(question.min).to be 0 |
||||
end |
||||
|
||||
it "has the correct max" do |
||||
expect(question.max).to be 9999.99 |
||||
end |
||||
|
||||
it "has the correct step" do |
||||
expect(question.step).to be 0.01 |
||||
end |
||||
|
||||
it "has the correct prefix" do |
||||
expect(question.prefix).to eq("£") |
||||
end |
||||
|
||||
it "has the correct question number" do |
||||
expect(question.question_number).to eq(0) |
||||
end |
||||
end |
||||
Loading…
Reference in new issue