Module: Fe::AnswerSheetsControllerConcern

Extended by:
ActiveSupport::Concern
Included in:
AnswerSheetsController
Defined in:
app/controllers/concerns/fe/answer_sheets_controller_concern.rb

Instance Method Summary collapse

Instance Method Details

#createObject



22
23
24
25
26
27
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 22

def create
  @question_sheet = Fe::QuestionSheet.find(params[:question_sheet_id])
  @answer_sheet = @question_sheet.answer_sheets.create

  redirect_to edit_fe_answer_sheet_path(@answer_sheet)
end

#editObject

display answer sheet for data capture (page 1)



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 30

def edit
  @presenter = Fe::AnswerPagesPresenter.new(self, @answer_sheet, params[:a])
  unless @presenter.active_answer_sheet.pages.present?
    flash[:error] = "Sorry, there are no questions for this form yet."
    if request.env["HTTP_REFERER"]
      redirect_back(fallback_location: '/')
    else
      render html: "", layout: true
    end
  else
    if get_filter.present?
      # filter presenter entire page list
      all_question_set = @presenter.questions_for_all_pages
      all_question_set.set_filter(get_filter)
      @presenter.filter_pages_from_elements(all_question_set.elements)

      # get first page elements
      question_set = @presenter.questions_for_page(:first)
      question_set.set_filter(get_filter)
      @elements = question_set.elements
      @page = @presenter.pages.first
    else
      # save some processing by not doing any filtering code
      @elements = @presenter.questions_for_page(:first).elements
      @page = @presenter.pages.first
    end
    @answers_digest = @answer_sheet.answers_digest(@page) if @page
  end
end

#indexObject

list existing answer sheets



14
15
16
17
18
19
20
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 14

def index

  @answer_sheets = answer_sheet_type.order('created_at')

  # drop down of sheets to capture data for
  @question_sheets = Fe::QuestionSheet.order('label').collect {|s| [s.label, s.id]}
end

#send_reference_invite(reference = nil) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 70

def send_reference_invite(reference = nil)
  @reference = reference || @answer_sheet.reference_sheets.find(params[:reference_id])
  if params[:reference]
    reference_params = params.fetch(:reference)[@reference.id.to_s].permit(:relationship, :title, :first_name, :last_name, :phone, :email, :is_staff)

    @reference.update(reference_params)
  end
  if @reference.valid?
    @reference.send_invite(request.host)
  end
end

#showObject

display captured answers (read-only)



61
62
63
64
65
66
67
68
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 61

def show
  @question_sheet = @answer_sheet.question_sheet
  pf = Fe.table_name_prefix
  @elements = @question_sheet.pages.collect {|p| p.elements.includes(:pages).order("#{pf}pages.number,#{pf}page_elements.position").all}.flatten
  questions = Fe::QuestionSet.new(@elements, @answer_sheet)
  questions.set_filter(get_filter)
  @elements = questions.elements.group_by{ |e| e.pages.find_by(id: @question_sheet.page_ids) }
end

#submitObject



82
83
84
85
86
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 82

def submit
  return false unless validate_sheet
  flash[:notice] = "Your form has been submitted. Thanks!"
  redirect_to root_path
end