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



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

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)



29
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
# File 'app/controllers/concerns/fe/answer_sheets_controller_concern.rb', line 29

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
  end
end

#indexObject

list existing answer sheets



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

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



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

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)



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

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



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

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