68 changed files with 2365 additions and 219 deletions
			
			
		@ -0,0 +1,43 @@
					 | 
				
			||||
class Form::Sales::Pages::RetirementValueCheck < Form::Sales::Pages::Person | 
				
			||||
  def initialize(id, hsh, subsection, person_index:) | 
				
			||||
    super | 
				
			||||
    @depends_on = [ | 
				
			||||
      { | 
				
			||||
        "person_#{person_index}_retired_under_soft_min_age?" => true, | 
				
			||||
        "jointpur" => joint_purchase? ? 1 : 2, | 
				
			||||
      }, | 
				
			||||
    ] | 
				
			||||
    @person_index = person_index | 
				
			||||
    @title_text = { | 
				
			||||
      "translation" => "soft_validations.retirement.min.title", | 
				
			||||
      "arguments" => [ | 
				
			||||
        { | 
				
			||||
          "key" => "retirement_age_for_person_#{person_index}", | 
				
			||||
          "label" => false, | 
				
			||||
          "i18n_template" => "age", | 
				
			||||
        }, | 
				
			||||
      ], | 
				
			||||
    } | 
				
			||||
    @informative_text = { | 
				
			||||
      "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
      "arguments" => [ | 
				
			||||
        { | 
				
			||||
          "key" => "plural_gender_for_person_#{person_index}", | 
				
			||||
          "label" => false, | 
				
			||||
          "i18n_template" => "gender", | 
				
			||||
        }, | 
				
			||||
        { | 
				
			||||
          "key" => "retirement_age_for_person_#{person_index}", | 
				
			||||
          "label" => false, | 
				
			||||
          "i18n_template" => "age", | 
				
			||||
        }, | 
				
			||||
      ], | 
				
			||||
    } | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def questions | 
				
			||||
    @questions ||= [ | 
				
			||||
      Form::Sales::Questions::RetirementValueCheck.new(nil, nil, self, person_index: @person_index), | 
				
			||||
    ] | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,24 @@
					 | 
				
			||||
class Form::Sales::Questions::RetirementValueCheck < ::Form::Question | 
				
			||||
  def initialize(id, hsh, page, person_index:) | 
				
			||||
    super(id, hsh, page) | 
				
			||||
    @id = "retirement_value_check" | 
				
			||||
    @check_answer_label = "Retirement confirmation" | 
				
			||||
    @type = "interruption_screen" | 
				
			||||
    @answer_options = { | 
				
			||||
      "0" => { "value" => "Yes" }, | 
				
			||||
      "1" => { "value" => "No" }, | 
				
			||||
    } | 
				
			||||
    @hidden_in_check_answers = { | 
				
			||||
      "depends_on" => [ | 
				
			||||
        { | 
				
			||||
          "retirement_value_check" => 0, | 
				
			||||
        }, | 
				
			||||
        { | 
				
			||||
          "retirement_value_check" => 1, | 
				
			||||
        }, | 
				
			||||
      ], | 
				
			||||
    } | 
				
			||||
    @check_answers_card_number = person_index | 
				
			||||
    @header = "Are you sure this person is retired?" | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,58 @@
					 | 
				
			||||
require "csv" | 
				
			||||
 | 
				
			||||
class BulkUpload::Lettings::CsvParser | 
				
			||||
  attr_reader :path | 
				
			||||
 | 
				
			||||
  def initialize(path:) | 
				
			||||
    @path = path | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def row_offset | 
				
			||||
    with_headers? ? 5 : 0 | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def col_offset | 
				
			||||
    with_headers? ? 1 : 0 | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def cols | 
				
			||||
    @cols ||= ("A".."EE").to_a | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def row_parsers | 
				
			||||
    @row_parsers ||= body_rows.map do |row| | 
				
			||||
      stripped_row = row[col_offset..] | 
				
			||||
      headers = ("field_1".."field_134").to_a | 
				
			||||
      hash = Hash[headers.zip(stripped_row)] | 
				
			||||
 | 
				
			||||
      BulkUpload::Lettings::RowParser.new(hash) | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def body_rows | 
				
			||||
    rows[row_offset..] | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def rows | 
				
			||||
    @rows ||= CSV.parse(normalised_string, row_sep:) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
private | 
				
			||||
 | 
				
			||||
  def with_headers? | 
				
			||||
    rows[0][0]&.match?(/\D+/) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def row_sep | 
				
			||||
    "\n" | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def normalised_string | 
				
			||||
    return @normalised_string if @normalised_string | 
				
			||||
 | 
				
			||||
    @normalised_string = File.read(path) | 
				
			||||
    @normalised_string.gsub!("\r\n", "\n") | 
				
			||||
 | 
				
			||||
    @normalised_string | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,57 @@
					 | 
				
			||||
class BulkUpload::Lettings::LogCreator | 
				
			||||
  attr_reader :bulk_upload, :path | 
				
			||||
 | 
				
			||||
  def initialize(bulk_upload:, path:) | 
				
			||||
    @bulk_upload = bulk_upload | 
				
			||||
    @path = path | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def call | 
				
			||||
    row_parsers.each do |row_parser| | 
				
			||||
      row_parser.valid? | 
				
			||||
 | 
				
			||||
      row_parser.log.blank_invalid_non_setup_fields! | 
				
			||||
      row_parser.log.bulk_upload = bulk_upload | 
				
			||||
 | 
				
			||||
      begin | 
				
			||||
        row_parser.log.save! | 
				
			||||
      rescue StandardError => e | 
				
			||||
        Sentry.capture_exception(e) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
private | 
				
			||||
 | 
				
			||||
  def csv_parser | 
				
			||||
    @csv_parser ||= BulkUpload::Lettings::CsvParser.new(path:) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def row_offset | 
				
			||||
    csv_parser.row_offset | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def col_offset | 
				
			||||
    csv_parser.col_offset | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def row_parsers | 
				
			||||
    return @row_parsers if @row_parsers | 
				
			||||
 | 
				
			||||
    @row_parsers = csv_parser.row_parsers | 
				
			||||
 | 
				
			||||
    @row_parsers.each do |row_parser| | 
				
			||||
      row_parser.bulk_upload = bulk_upload | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    @row_parsers | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def body_rows | 
				
			||||
    csv_parser.body_rows | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def rows | 
				
			||||
    csv_parser.rows | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,6 @@
					 | 
				
			||||
class AddBulkUploadToLogs < ActiveRecord::Migration[7.0] | 
				
			||||
  def change | 
				
			||||
    add_reference :lettings_logs, :bulk_upload | 
				
			||||
    add_reference :sales_logs, :bulk_upload | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,7 @@
					 | 
				
			||||
class AddRetirementValueCheckToSales < ActiveRecord::Migration[7.0] | 
				
			||||
  def change | 
				
			||||
    change_table :sales_logs, bulk: true do |t| | 
				
			||||
      t.column :retirement_value_check, :integer | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
| 
		
		
			 Can't render this file because it has a wrong number of fields in line 72. 
		
	 | 
@ -0,0 +1,603 @@
					 | 
				
			||||
require "rails_helper" | 
				
			||||
 | 
				
			||||
RSpec.describe Form::Sales::Pages::RetirementValueCheck, type: :model do | 
				
			||||
  subject(:page) { described_class.new(page_id, page_definition, subsection, person_index:) } | 
				
			||||
 | 
				
			||||
  let(:page_definition) { nil } | 
				
			||||
  let(:subsection) { instance_double(Form::Subsection) } | 
				
			||||
  let(:person_index) { 1 } | 
				
			||||
 | 
				
			||||
  let(:page_id) { "person_1_retirement_value_check" } | 
				
			||||
 | 
				
			||||
  it "has correct subsection" do | 
				
			||||
    expect(page.subsection).to eq(subsection) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct header" do | 
				
			||||
    expect(page.header).to be_nil | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct description" do | 
				
			||||
    expect(page.description).to be_nil | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  context "with joint purchase" do | 
				
			||||
    context "with person 1" do | 
				
			||||
      let(:person_index) { 1 } | 
				
			||||
      let(:page_id) { "person_1_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_1_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_1_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 2" do | 
				
			||||
      let(:person_index) { 2 } | 
				
			||||
      let(:page_id) { "person_2_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_2_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_2_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 3" do | 
				
			||||
      let(:person_index) { 3 } | 
				
			||||
      let(:page_id) { "person_3_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_3_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_3_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 4" do | 
				
			||||
      let(:person_index) { 4 } | 
				
			||||
      let(:page_id) { "person_4_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_4_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_4_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 5" do | 
				
			||||
      let(:person_index) { 5 } | 
				
			||||
      let(:page_id) { "person_5_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_5_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_5_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 6" do | 
				
			||||
      let(:person_index) { 6 } | 
				
			||||
      let(:page_id) { "person_6_retirement_value_check_joint_purchase" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_6_retirement_value_check_joint_purchase") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_6_retired_under_soft_min_age?" => true, "jointpur" => 1 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_6", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_6", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_6", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  context "without joint purchase" do | 
				
			||||
    context "with person 1" do | 
				
			||||
      let(:person_index) { 1 } | 
				
			||||
      let(:page_id) { "person_1_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_1_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_1_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_1", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 2" do | 
				
			||||
      let(:person_index) { 2 } | 
				
			||||
      let(:page_id) { "person_2_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_2_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_2_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 3" do | 
				
			||||
      let(:person_index) { 2 } | 
				
			||||
      let(:page_id) { "person_3_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_3_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_2_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_2", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 4" do | 
				
			||||
      let(:person_index) { 3 } | 
				
			||||
      let(:page_id) { "person_4_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_4_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_3_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_3", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 5" do | 
				
			||||
      let(:person_index) { 4 } | 
				
			||||
      let(:page_id) { "person_5_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_5_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_4_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_4", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "with person 6" do | 
				
			||||
      let(:person_index) { 5 } | 
				
			||||
      let(:page_id) { "person_6_retirement_value_check" } | 
				
			||||
 | 
				
			||||
      it "has correct questions" do | 
				
			||||
        expect(page.questions.map(&:id)).to eq(%w[retirement_value_check]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has the correct id" do | 
				
			||||
        expect(page.id).to eq("person_6_retirement_value_check") | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct depends_on" do | 
				
			||||
        expect(page.depends_on).to eq([{ "person_5_retired_under_soft_min_age?" => true, "jointpur" => 2 }]) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct title_text" do | 
				
			||||
        expect(page.title_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.title", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "has correct informative_text" do | 
				
			||||
        expect(page.informative_text).to eq({ | 
				
			||||
          "translation" => "soft_validations.retirement.min.hint_text", | 
				
			||||
          "arguments" => [ | 
				
			||||
            { | 
				
			||||
              "key" => "plural_gender_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "gender", | 
				
			||||
            }, | 
				
			||||
            { | 
				
			||||
              "key" => "retirement_age_for_person_5", | 
				
			||||
              "label" => false, | 
				
			||||
              "i18n_template" => "age", | 
				
			||||
            }, | 
				
			||||
          ], | 
				
			||||
        }) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,61 @@
					 | 
				
			||||
require "rails_helper" | 
				
			||||
 | 
				
			||||
RSpec.describe Form::Sales::Questions::RetirementValueCheck, type: :model do | 
				
			||||
  subject(:question) { described_class.new(question_id, question_definition, page, person_index: 1) } | 
				
			||||
 | 
				
			||||
  let(:question_id) { nil } | 
				
			||||
  let(:question_definition) { nil } | 
				
			||||
  let(:page) { instance_double(Form::Page) } | 
				
			||||
 | 
				
			||||
  it "has correct page" do | 
				
			||||
    expect(question.page).to eq(page) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct id" do | 
				
			||||
    expect(question.id).to eq("retirement_value_check") | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct header" do | 
				
			||||
    expect(question.header).to eq("Are you sure this person is retired?") | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct check_answer_label" do | 
				
			||||
    expect(question.check_answer_label).to eq("Retirement confirmation") | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct type" do | 
				
			||||
    expect(question.type).to eq("interruption_screen") | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "is not marked as derived" do | 
				
			||||
    expect(question.derived?).to be false | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct hint" do | 
				
			||||
    expect(question.hint_text).to be_nil | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has a correct check_answers_card_number" do | 
				
			||||
    expect(question.check_answers_card_number).to eq(1) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct answer_options" do | 
				
			||||
    expect(question.answer_options).to eq({ | 
				
			||||
      "0" => { "value" => "Yes" }, | 
				
			||||
      "1" => { "value" => "No" }, | 
				
			||||
    }) | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  it "has the correct hidden_in_check_answers" do | 
				
			||||
    expect(question.hidden_in_check_answers).to eq({ | 
				
			||||
      "depends_on" => [ | 
				
			||||
        { | 
				
			||||
          "retirement_value_check" => 0, | 
				
			||||
        }, | 
				
			||||
        { | 
				
			||||
          "retirement_value_check" => 1, | 
				
			||||
        }, | 
				
			||||
      ], | 
				
			||||
    }) | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,38 @@
					 | 
				
			||||
require "rails_helper" | 
				
			||||
 | 
				
			||||
RSpec.describe BulkUpload::Lettings::CsvParser do | 
				
			||||
  subject(:service) { described_class.new(path:) } | 
				
			||||
 | 
				
			||||
  let(:path) { file_fixture("2022_23_lettings_bulk_upload.csv") } | 
				
			||||
 | 
				
			||||
  context "when parsing csv with headers" do | 
				
			||||
    it "returns correct offsets" do | 
				
			||||
      expect(service.row_offset).to eq(5) | 
				
			||||
      expect(service.col_offset).to eq(1) | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    it "parses csv correctly" do | 
				
			||||
      expect(service.row_parsers[0].field_12).to eq(55) | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  context "when parsing csv without headers" do | 
				
			||||
    let(:file) { Tempfile.new } | 
				
			||||
    let(:path) { file.path } | 
				
			||||
    let(:log) { build(:lettings_log, :completed) } | 
				
			||||
 | 
				
			||||
    before do | 
				
			||||
      file.write(BulkUpload::LogToCsv.new(log:, col_offset: 0).to_csv_row) | 
				
			||||
      file.rewind | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    it "returns correct offsets" do | 
				
			||||
      expect(service.row_offset).to eq(0) | 
				
			||||
      expect(service.col_offset).to eq(0) | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    it "parses csv correctly" do | 
				
			||||
      expect(service.row_parsers[0].field_12).to eql(log.age1) | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,67 @@
					 | 
				
			||||
require "rails_helper" | 
				
			||||
 | 
				
			||||
RSpec.describe BulkUpload::Lettings::LogCreator do | 
				
			||||
  subject(:service) { described_class.new(bulk_upload:, path:) } | 
				
			||||
 | 
				
			||||
  let(:owning_org) { create(:organisation, old_visible_id: 123) } | 
				
			||||
  let(:user) { create(:user, organisation: owning_org) } | 
				
			||||
 | 
				
			||||
  let(:bulk_upload) { create(:bulk_upload, :lettings, user:) } | 
				
			||||
  let(:path) { file_fixture("2022_23_lettings_bulk_upload.csv") } | 
				
			||||
 | 
				
			||||
  describe "#call" do | 
				
			||||
    context "when a valid csv with new log" do | 
				
			||||
      it "creates a new log" do | 
				
			||||
        expect { service.call }.to change(LettingsLog, :count) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "associates log with bulk upload" do | 
				
			||||
        service.call | 
				
			||||
 | 
				
			||||
        log = LettingsLog.last | 
				
			||||
        expect(log.bulk_upload).to eql(bulk_upload) | 
				
			||||
        expect(bulk_upload.lettings_logs).to include(log) | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "when a valid csv with row with one invalid non setup field" do | 
				
			||||
      let(:file) { Tempfile.new } | 
				
			||||
      let(:path) { file.path } | 
				
			||||
      let(:log) do | 
				
			||||
        build( | 
				
			||||
          :lettings_log, | 
				
			||||
          :completed, | 
				
			||||
          renttype: 3, | 
				
			||||
          age1: 5, | 
				
			||||
          owning_organisation: owning_org, | 
				
			||||
          managing_organisation: owning_org, | 
				
			||||
          national: 18, | 
				
			||||
          waityear: 9, | 
				
			||||
          joint: 2, | 
				
			||||
          tenancy: 9, | 
				
			||||
          ppcodenk: 0, | 
				
			||||
        ) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      before do | 
				
			||||
        file.write(BulkUpload::LogToCsv.new(log:, col_offset: 0).to_csv_row) | 
				
			||||
        file.rewind | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "creates the log" do | 
				
			||||
        expect { service.call }.to change(LettingsLog, :count).by(1) | 
				
			||||
      end | 
				
			||||
 | 
				
			||||
      it "blanks invalid field" do | 
				
			||||
        service.call | 
				
			||||
 | 
				
			||||
        record = LettingsLog.last | 
				
			||||
        expect(record.age1).to be_blank | 
				
			||||
      end | 
				
			||||
    end | 
				
			||||
 | 
				
			||||
    context "when valid csv with existing log" do | 
				
			||||
      xit "what should happen?" | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,256 @@
					 | 
				
			||||
class BulkUpload::LogToCsv | 
				
			||||
  attr_reader :log, :line_ending, :col_offset | 
				
			||||
 | 
				
			||||
  def initialize(log:, line_ending: "\n", col_offset: 1) | 
				
			||||
    @log = log | 
				
			||||
    @line_ending = line_ending | 
				
			||||
    @col_offset = col_offset | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def to_csv_row | 
				
			||||
    [ | 
				
			||||
      [nil] * col_offset, # 0 | 
				
			||||
      log.renttype, # 1 | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      log.scheme&.old_visible_id, | 
				
			||||
      log.location&.old_visible_id, | 
				
			||||
      nil, | 
				
			||||
      log.tenancycode, | 
				
			||||
      log.startertenancy, | 
				
			||||
      log.tenancy, | 
				
			||||
      log.tenancyother, # 10 | 
				
			||||
      log.tenancylength, | 
				
			||||
      log.age1, | 
				
			||||
      log.age2, | 
				
			||||
      log.age3, | 
				
			||||
      log.age4, | 
				
			||||
      log.age5, | 
				
			||||
      log.age6, | 
				
			||||
      log.age7, | 
				
			||||
      log.age8, | 
				
			||||
 | 
				
			||||
      log.sex1, # 20 | 
				
			||||
      log.sex2, | 
				
			||||
      log.sex3, | 
				
			||||
      log.sex4, | 
				
			||||
      log.sex5, | 
				
			||||
      log.sex6, | 
				
			||||
      log.sex7, | 
				
			||||
      log.sex8, | 
				
			||||
 | 
				
			||||
      log.relat2, | 
				
			||||
      log.relat3, | 
				
			||||
      log.relat4, # 30 | 
				
			||||
      log.relat5, | 
				
			||||
      log.relat6, | 
				
			||||
      log.relat7, | 
				
			||||
      log.relat8, | 
				
			||||
 | 
				
			||||
      log.ecstat1, | 
				
			||||
      log.ecstat2, | 
				
			||||
      log.ecstat3, | 
				
			||||
      log.ecstat4, | 
				
			||||
      log.ecstat5, | 
				
			||||
      log.ecstat6, # 40 | 
				
			||||
      log.ecstat7, | 
				
			||||
      log.ecstat8, | 
				
			||||
 | 
				
			||||
      log.ethnic, | 
				
			||||
      log.national, | 
				
			||||
      log.armedforces, | 
				
			||||
      log.reservist, | 
				
			||||
      log.preg_occ, | 
				
			||||
      log.hb, | 
				
			||||
      log.benefits, | 
				
			||||
      log.earnings, # 50 | 
				
			||||
      net_income_known, | 
				
			||||
      nil, | 
				
			||||
      log.reasonother, | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      nil, | 
				
			||||
      nil, # 60 | 
				
			||||
      log.prevten, | 
				
			||||
      log.prevloc, | 
				
			||||
      ((log.ppostcode_full || "").split(" ") || [""]).first, | 
				
			||||
      ((log.ppostcode_full || "").split(" ") || [""]).last, | 
				
			||||
      previous_postcode_known, | 
				
			||||
      log.layear, | 
				
			||||
      log.waityear, | 
				
			||||
      homeless, | 
				
			||||
      log.reasonpref, | 
				
			||||
      log.rp_homeless, # 70 | 
				
			||||
      log.rp_insan_unsat, | 
				
			||||
      log.rp_medwel, | 
				
			||||
      log.rp_hardship, | 
				
			||||
      log.rp_dontknow, | 
				
			||||
      cbl, | 
				
			||||
      chr, | 
				
			||||
      cap, | 
				
			||||
      log.referral, | 
				
			||||
      log.period, | 
				
			||||
 | 
				
			||||
      log.brent, # 80 | 
				
			||||
      log.scharge, | 
				
			||||
      log.pscharge, | 
				
			||||
      log.supcharg, | 
				
			||||
      log.tcharge, | 
				
			||||
      log.chcharge, | 
				
			||||
      log.household_charge, | 
				
			||||
      log.hbrentshortfall, | 
				
			||||
      log.tshortfall, | 
				
			||||
      log.voiddate&.day, | 
				
			||||
 | 
				
			||||
      log.voiddate&.month, # 90 | 
				
			||||
      log.voiddate&.strftime("%y"), | 
				
			||||
      log.mrcdate&.day, | 
				
			||||
      log.mrcdate&.month, | 
				
			||||
      log.mrcdate&.strftime("%y"), | 
				
			||||
      nil, | 
				
			||||
      log.startdate&.day, | 
				
			||||
      log.startdate&.month, | 
				
			||||
      log.startdate&.strftime("%y"), | 
				
			||||
      log.offered, | 
				
			||||
 | 
				
			||||
      log.propcode, # 100 | 
				
			||||
      log.beds, | 
				
			||||
      log.unittype_gn, | 
				
			||||
      log.builtype, | 
				
			||||
      log.wchair, | 
				
			||||
      log.unitletas, | 
				
			||||
      log.rsnvac, | 
				
			||||
      log.la, | 
				
			||||
      ((log.postcode_full || "").split(" ") || [""]).first, | 
				
			||||
      ((log.postcode_full || "").split(" ") || [""]).last, | 
				
			||||
 | 
				
			||||
      nil, # 110 | 
				
			||||
      log.owning_organisation&.old_visible_id, | 
				
			||||
      nil, | 
				
			||||
      log.managing_organisation&.old_visible_id, | 
				
			||||
      leftreg, | 
				
			||||
      nil, | 
				
			||||
      log.incfreq, | 
				
			||||
      log.sheltered, | 
				
			||||
      log.illness, | 
				
			||||
      log.illness_type_1, | 
				
			||||
 | 
				
			||||
      log.illness_type_2, # 120 | 
				
			||||
      log.illness_type_3, | 
				
			||||
      log.illness_type_4, | 
				
			||||
      log.illness_type_5, | 
				
			||||
      log.illness_type_6, | 
				
			||||
      log.illness_type_7, | 
				
			||||
      log.illness_type_8, | 
				
			||||
      log.illness_type_9, | 
				
			||||
      log.illness_type_10, | 
				
			||||
      london_affordable_rent, | 
				
			||||
 | 
				
			||||
      intermediate_rent_type, # 130 | 
				
			||||
      log.irproduct_other, | 
				
			||||
      log.declaration, | 
				
			||||
      log.joint, | 
				
			||||
      renewal, | 
				
			||||
      line_ending, | 
				
			||||
    ].flatten.join(",") | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def renewal | 
				
			||||
    case log.renewal | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    when 0 | 
				
			||||
      2 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def london_affordable_rent | 
				
			||||
    case log.renttype | 
				
			||||
    when Imports::LettingsLogsImportService::RENT_TYPE[:london_affordable_rent] | 
				
			||||
      1 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def intermediate_rent_type | 
				
			||||
    case log.renttype | 
				
			||||
    when Imports::LettingsLogsImportService::RENT_TYPE[:rent_to_buy] | 
				
			||||
      1 | 
				
			||||
    when Imports::LettingsLogsImportService::RENT_TYPE[:london_living_rent] | 
				
			||||
      2 | 
				
			||||
    when Imports::LettingsLogsImportService::RENT_TYPE[:other_intermediate_rent_product] | 
				
			||||
      3 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def leftreg | 
				
			||||
    case log.leftreg | 
				
			||||
    when 3 | 
				
			||||
      3 | 
				
			||||
    when 1 | 
				
			||||
      4 | 
				
			||||
    when 2 | 
				
			||||
      5 | 
				
			||||
    when 0 | 
				
			||||
      6 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def net_income_known | 
				
			||||
    case log.net_income_known | 
				
			||||
    when 0 | 
				
			||||
      1 | 
				
			||||
    when 1 | 
				
			||||
      2 | 
				
			||||
    when 2 | 
				
			||||
      4 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def previous_postcode_known | 
				
			||||
    case log.ppcodenk | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    when 0 | 
				
			||||
      2 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def homeless | 
				
			||||
    case log.homeless | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    when 11 | 
				
			||||
      12 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def cbl | 
				
			||||
    case log.cbl | 
				
			||||
    when 0 | 
				
			||||
      2 | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def chr | 
				
			||||
    case log.chr | 
				
			||||
    when 0 | 
				
			||||
      2 | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  def cap | 
				
			||||
    case log.cap | 
				
			||||
    when 0 | 
				
			||||
      2 | 
				
			||||
    when 1 | 
				
			||||
      1 | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
					Loading…
					
					
				
		Reference in new issue