module Validations::Sales::SoftValidations ALLOWED_INCOME_RANGES = { 1 => OpenStruct.new(soft_min: 5000), 2 => OpenStruct.new(soft_min: 1500), 3 => OpenStruct.new(soft_min: 1000), 5 => OpenStruct.new(soft_min: 2000), 0 => OpenStruct.new(soft_min: 2000), }.freeze def income1_under_soft_min? return false unless ecstat1 && income1 && ALLOWED_INCOME_RANGES[ecstat1] income1 < ALLOWED_INCOME_RANGES[ecstat1][:soft_min] end def staircase_bought_above_fifty? stairbought && stairbought > 50 end def mortgage_over_soft_max? return false unless mortgage && inc1mort && inc2mort return false if income1_used_for_mortgage? && income1.blank? || income2_used_for_mortgage? && income2.blank? income_used_for_mortgage = (income1_used_for_mortgage? ? income1 : 0) + (income2_used_for_mortgage? ? income2 : 0) mortgage > income_used_for_mortgage * 5 end def wheelchair_when_not_disabled? return unless disabled && wheel wheel == 1 && disabled == 2 end def savings_over_soft_max? savings && savings > 100_000 end def deposit_over_soft_max? return unless savings && deposit deposit > savings * 4 / 3 end def extra_borrowing_expected_but_not_reported? return unless extrabor && mortgage && deposit && value && discount extrabor != 1 && mortgage + deposit > value - value * discount / 100 end def shared_ownership_deposit_invalid? return unless mortgage || mortgageused == 2 return unless cashdis || !is_type_discount? return unless deposit && value && equity cash_discount = cashdis || 0 mortgage_value = mortgage || 0 mortgage_value + deposit + cash_discount != value * equity / 100 end def mortgage_plus_deposit_less_than_discounted_value? return unless mortgage && deposit && value && discount discounted_value = value * (100 - discount) / 100 mortgage + deposit < discounted_value end def hodate_3_years_or_more_saledate? return unless hodate && saledate ((saledate.to_date - hodate.to_date).to_i / 365) >= 3 end def grant_outside_common_range? return unless grant !grant.between?(9_000, 16_000) end end