ministryofjustice/Claim-for-Crown-Court-Defence

View on GitHub
app/services/concerns/case_worker_claim_param_readable.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module CaseWorkerClaimParamReadable
  extend ActiveSupport::Concern

  included do
    def current_user
      @current_user ||= params[:current_user]
    end

    def state
      @state ||= params['state']
    end

    def transition_reasons
      @transition_reasons ||= params['state_reason']&.reject(&:empty?)
    end

    def transition_reason_text
      @transition_reason_text ||= reason_text
    end

    def reason_text
      reasons = {
        rejected: params['reject_reason_text'],
        refused: params['refuse_reason_text']
      }
      reasons[state.to_sym] if state.present?
    end

    def assessment_params
      @assessment_params ||= assessment_attributes
    end

    def assessment_attributes
      assessment_attributes = params['assessment_attributes']
      determination_with_defaults(assessment_attributes) unless determination_zero?(assessment_attributes)
    end

    def redetermination_params
      @redetermination_params ||= redetermination_attributes
    end

    def redetermination_attributes
      redetermination_attributes = params.dig('redeterminations_attributes', '0')
      determination_with_defaults(redetermination_attributes) unless determination_zero?(redetermination_attributes)
    end

    def state_verb
      @state_verb ||= state.chomp('ed').concat('ing')
    end

    def state_symbol(other_suffix: true)
      @state_symbol ||= :"#{state}_reason#{'_other' if other_suffix}"
    end

    def transition_reason_text_missing?
      transition_reasons&.any? { |reason| %w[other other_refuse].include?(reason) } &&
        transition_reason_text.blank?
    end

    def determination_with_defaults(attributes)
      attributes.compact_blank!
      {
        'fees' => '0.00',
        'expenses' => '0.00',
        'disbursements' => '0.00'
      }.merge(attributes)
    end

    def determination_zero?(params)
      params.blank? ||
        %w[fees expenses disbursements].none? { |field| params[field].to_f > 0.0 }
    end

    def determination_present?
      assessment_params || redetermination_params
    end

    def reasons_present?
      transition_reasons.present? || transition_reason_text.present?
    end
  end
end