fe 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +36 -1
  3. data/Rakefile +22 -13
  4. data/app/assets/javascripts/application.js.erb +1 -0
  5. data/app/assets/javascripts/fe/admin.js +1 -4
  6. data/app/assets/javascripts/fe/{qe.admin.js → fe.admin.js} +15 -0
  7. data/app/assets/javascripts/fe/{qe.common.js → fe.common.js} +0 -0
  8. data/app/assets/javascripts/fe/{qe.public.js → fe.public.js} +115 -27
  9. data/app/assets/javascripts/fe/rails.extra.js +6 -0
  10. data/app/assets/stylesheets/fe/{qe.screen.css.scss.erb → fe.screen.css.scss.erb} +12 -18
  11. data/app/controllers/fe/admin/elements_controller.rb +4 -4
  12. data/app/controllers/fe/admin/email_templates_controller.rb +10 -4
  13. data/app/controllers/fe/admin/question_pages_controller.rb +3 -3
  14. data/app/controllers/fe/admin/question_sheets_controller.rb +6 -5
  15. data/app/controllers/fe/applications_controller.rb +183 -0
  16. data/app/controllers/fe/concerns/answer_pages_controller_concern.rb +5 -2
  17. data/app/controllers/fe/concerns/answer_sheets_controller_concern.rb +10 -6
  18. data/app/controllers/fe/concerns/application_controller_concern.rb +34 -0
  19. data/app/controllers/fe/payments_controller.rb +184 -0
  20. data/app/controllers/fe/reference_pages_controller.rb +41 -0
  21. data/app/controllers/fe/reference_sheets_controller.rb +1 -1
  22. data/app/controllers/fe/references_controller.rb +74 -0
  23. data/app/controllers/fe/submit_pages_controller.rb +22 -0
  24. data/app/helpers/fe/application_helper.rb +14 -5
  25. data/app/mailers/fe/notifier.rb +1 -1
  26. data/app/models/fe/address.rb +3 -0
  27. data/app/models/fe/answer_pages_presenter.rb +1 -1
  28. data/app/models/fe/answer_sheet.rb +6 -2
  29. data/app/models/fe/answer_sheet_question_sheet.rb +1 -1
  30. data/app/models/fe/application.rb +58 -0
  31. data/app/models/fe/choice_field.rb +1 -1
  32. data/app/models/fe/concerns/answer_concern.rb +10 -11
  33. data/app/models/fe/concerns/answer_pages_presenter_concern.rb +16 -7
  34. data/app/models/fe/concerns/answer_sheet_concern.rb +10 -16
  35. data/app/models/fe/concerns/choice_field_concern.rb +21 -10
  36. data/app/models/fe/condition.rb +1 -1
  37. data/app/models/fe/current_address.rb +12 -0
  38. data/app/models/fe/date_field.rb +3 -3
  39. data/app/models/fe/element.rb +66 -9
  40. data/app/models/fe/email_address.rb +7 -0
  41. data/app/models/fe/email_template.rb +1 -1
  42. data/app/models/fe/option.rb +1 -1
  43. data/app/models/fe/option_group.rb +1 -1
  44. data/app/models/fe/page.rb +13 -4
  45. data/app/models/fe/page_element.rb +13 -1
  46. data/app/models/fe/page_link.rb +1 -1
  47. data/app/models/fe/paragraph.rb +1 -1
  48. data/app/models/fe/payment.rb +32 -7
  49. data/app/models/fe/payment_question.rb +1 -1
  50. data/app/models/fe/person.rb +33 -0
  51. data/app/models/fe/phone_number.rb +5 -0
  52. data/app/models/fe/presenter.rb +3 -2
  53. data/app/models/fe/question.rb +7 -7
  54. data/app/models/fe/question_grid.rb +1 -2
  55. data/app/models/fe/question_set.rb +1 -1
  56. data/app/models/fe/question_sheet.rb +9 -3
  57. data/app/models/fe/reference_question.rb +2 -2
  58. data/app/models/fe/reference_sheet.rb +28 -4
  59. data/app/models/fe/section.rb +1 -1
  60. data/app/models/fe/state_chooser.rb +1 -1
  61. data/app/models/fe/text_field.rb +3 -3
  62. data/app/models/fe/user.rb +3 -0
  63. data/app/models/staff.rb +120 -0
  64. data/app/views/fe/admin/elements/_errors.html.erb +11 -1
  65. data/app/views/fe/admin/elements/create.js.erb +3 -3
  66. data/app/views/fe/admin/elements/destroy.js.erb +2 -2
  67. data/app/views/fe/admin/elements/drop.js.erb +1 -1
  68. data/app/views/fe/admin/elements/duplicate.js.erb +1 -1
  69. data/app/views/fe/admin/elements/edit.js.erb +1 -1
  70. data/app/views/fe/admin/elements/error.js.erb +1 -1
  71. data/app/views/fe/admin/elements/new.js.erb +3 -3
  72. data/app/views/fe/admin/elements/update.js.erb +2 -2
  73. data/app/views/fe/admin/email_templates/edit.html.erb +9 -9
  74. data/app/views/fe/admin/email_templates/index.html.erb +3 -3
  75. data/app/views/fe/admin/email_templates/new.html.erb +2 -2
  76. data/app/views/fe/admin/panels/_advanced_options.html.erb +28 -1
  77. data/app/views/fe/admin/panels/_common_fields.html.erb +1 -1
  78. data/app/views/fe/admin/panels/_condition.html.erb +1 -1
  79. data/app/views/fe/admin/panels/_insert.html.erb +13 -13
  80. data/app/views/fe/admin/panels/_nav_controls.html.erb +4 -4
  81. data/app/views/fe/admin/panels/_page.html.erb +2 -2
  82. data/app/views/fe/admin/panels/_pages_list.html.erb +4 -4
  83. data/app/views/fe/admin/panels/_prop_attachment_field.html.erb +1 -1
  84. data/app/views/fe/admin/panels/_prop_choice_field.html.erb +10 -10
  85. data/app/views/fe/admin/panels/_prop_date_field.html.erb +1 -1
  86. data/app/views/fe/admin/panels/_prop_element.html.erb +7 -7
  87. data/app/views/fe/admin/panels/_prop_page.html.erb +2 -2
  88. data/app/views/fe/admin/panels/_prop_paragraph.html.erb +1 -1
  89. data/app/views/fe/admin/panels/_prop_payment_question.html.erb +1 -0
  90. data/app/views/fe/admin/panels/_prop_question_grid.html.erb +2 -2
  91. data/app/views/fe/admin/panels/_prop_question_grid_with_total.html.erb +1 -1
  92. data/app/views/fe/admin/panels/_prop_reference_question.html.erb +2 -2
  93. data/app/views/fe/admin/panels/_prop_section.html.erb +1 -1
  94. data/app/views/fe/admin/panels/_prop_sheet.html.erb +9 -9
  95. data/app/views/fe/admin/panels/_prop_text_field.html.erb +10 -10
  96. data/app/views/fe/admin/question_pages/_element.html.erb +5 -5
  97. data/app/views/fe/admin/question_pages/_element_show.html.erb +1 -1
  98. data/app/views/fe/admin/question_pages/_errors.html.erb +10 -1
  99. data/app/views/fe/admin/question_pages/_question_page.html.erb +3 -3
  100. data/app/views/fe/admin/question_pages/create.js.erb +3 -3
  101. data/app/views/fe/admin/question_pages/destroy.js.erb +3 -3
  102. data/app/views/fe/admin/question_pages/edit.js.erb +1 -1
  103. data/app/views/fe/admin/question_pages/show.js.erb +3 -2
  104. data/app/views/fe/admin/question_pages/show_panel.js.erb +1 -1
  105. data/app/views/fe/admin/question_sheets/_errors.html.erb +11 -1
  106. data/app/views/fe/admin/question_sheets/edit.js.erb +1 -1
  107. data/app/views/fe/admin/question_sheets/error.js.erb +1 -1
  108. data/app/views/fe/admin/question_sheets/index.html.erb +8 -8
  109. data/app/views/fe/admin/question_sheets/new.html.erb +1 -1
  110. data/app/views/fe/admin/question_sheets/show.html.erb +18 -18
  111. data/app/views/fe/admin/question_sheets/update.js.erb +1 -1
  112. data/app/views/fe/answer_pages/_answer_page.html.erb +27 -30
  113. data/app/views/fe/answer_pages/_element.html.erb +5 -1
  114. data/app/views/fe/answer_pages/update.js.erb +1 -1
  115. data/app/views/fe/answer_sheets/_answer_sheet.html.erb +16 -14
  116. data/app/views/fe/answer_sheets/_element.html.erb +1 -1
  117. data/app/views/fe/answer_sheets/_incomplete.html.erb +8 -8
  118. data/app/views/fe/answer_sheets/_page_link.html.erb +2 -2
  119. data/app/views/fe/answer_sheets/_pages_list.html.erb +4 -4
  120. data/app/views/fe/answer_sheets/_title.html.erb +1 -1
  121. data/app/views/fe/answer_sheets/edit.html.erb +59 -53
  122. data/app/views/fe/answer_sheets/incomplete.js.erb +2 -2
  123. data/app/views/fe/answer_sheets/send_reference_invite.js.erb +1 -1
  124. data/app/views/fe/application/_logout.html.erb +1 -0
  125. data/app/views/fe/payment_pages/_credit.html.erb +47 -0
  126. data/app/views/fe/payment_pages/_mail.html.erb +27 -0
  127. data/app/views/fe/payment_pages/_payment.html.erb +6 -0
  128. data/app/views/fe/payment_pages/_staff.html.erb +25 -0
  129. data/app/views/fe/payment_pages/_staff_results.html.erb +17 -0
  130. data/app/views/fe/payment_pages/edit.html.erb +75 -0
  131. data/app/views/fe/payment_pages/staff_search.js.erb +2 -0
  132. data/app/views/fe/payments/_credit.html.erb +47 -0
  133. data/app/views/fe/payments/_errors.html.erb +1 -0
  134. data/app/views/fe/payments/_payment.html.erb +13 -0
  135. data/app/views/fe/payments/_staff.html.erb +21 -0
  136. data/app/views/fe/payments/_staff_results.html.erb +18 -0
  137. data/app/views/fe/payments/approve.js.erb +3 -0
  138. data/app/views/fe/payments/create.js.erb +19 -0
  139. data/app/views/fe/payments/destroy.js.erb +7 -0
  140. data/app/views/fe/payments/edit.html.erb +56 -0
  141. data/app/views/fe/payments/error.js.erb +3 -0
  142. data/app/views/fe/payments/no_access.html.erb +7 -0
  143. data/app/views/fe/payments/staff_search.js.erb +1 -0
  144. data/app/views/fe/payments/update.html.erb +24 -0
  145. data/app/views/fe/questions/{_acceptance.html.erb → fe/_acceptance.html.erb} +0 -0
  146. data/app/views/fe/questions/{_attachment_field.html.erb → fe/_attachment_field.html.erb} +2 -2
  147. data/app/views/fe/questions/{_checkbox_field.html.erb → fe/_checkbox_field.html.erb} +1 -1
  148. data/app/views/fe/questions/{_country.html.erb → fe/_country.html.erb} +1 -1
  149. data/app/views/fe/questions/{_date_field.html.erb → fe/_date_field.html.erb} +0 -0
  150. data/app/views/fe/questions/{_date_field_mmyy.html.erb → fe/_date_field_mmyy.html.erb} +0 -0
  151. data/app/views/fe/questions/{_drop_down_field.html.erb → fe/_drop_down_field.html.erb} +1 -1
  152. data/app/views/fe/questions/fe/_paragraph.html.erb +1 -0
  153. data/app/views/fe/questions/fe/_payment_question.html.erb +70 -0
  154. data/app/views/fe/questions/{_question_grid.html.erb → fe/_question_grid.html.erb} +7 -7
  155. data/app/views/fe/questions/{_question_grid_with_total.html.erb → fe/_question_grid_with_total.html.erb} +1 -1
  156. data/app/views/fe/questions/{_questions.html.erb → fe/_questions.html.erb} +2 -2
  157. data/app/views/fe/questions/{_radio_button_field.html.erb → fe/_radio_button_field.html.erb} +13 -11
  158. data/app/views/fe/questions/{_rating.html.erb → fe/_rating.html.erb} +0 -0
  159. data/app/views/fe/questions/fe/_reference_discipler.html.erb +1 -0
  160. data/app/views/fe/questions/fe/_reference_friend.html.erb +1 -0
  161. data/app/views/fe/questions/fe/_reference_parent.html.erb +1 -0
  162. data/app/views/fe/questions/fe/_reference_peer.html.erb +1 -0
  163. data/app/views/fe/questions/fe/_reference_question.html.erb +38 -0
  164. data/app/views/fe/questions/fe/_reference_roommate.html.erb +1 -0
  165. data/app/views/fe/questions/fe/_reference_spiritual.html.erb +1 -0
  166. data/app/views/fe/questions/fe/_reference_staff.html.erb +1 -0
  167. data/app/views/fe/questions/fe/_section.html.erb +1 -0
  168. data/app/views/fe/questions/{_state_chooser.html.erb → fe/_state_chooser.html.erb} +0 -0
  169. data/app/views/fe/questions/{_text_area_field.html.erb → fe/_text_area_field.html.erb} +0 -0
  170. data/app/views/fe/questions/{_text_field.html.erb → fe/_text_field.html.erb} +0 -0
  171. data/app/views/fe/questions/{_yes_no.html.erb → fe/_yes_no.html.erb} +6 -6
  172. data/app/views/fe/questions/{_yes_no_field.erb → fe/_yes_no_field.erb} +1 -1
  173. data/app/views/fe/reference_pages/_reference.html.erb +31 -0
  174. data/app/views/fe/reference_pages/edit.html.erb +24 -0
  175. data/app/views/fe/reference_sheets/done.html.erb +2 -0
  176. data/app/views/fe/reference_sheets/submitted.js.erb +1 -0
  177. data/app/views/fe/references/edit.html.erb +8 -0
  178. data/app/views/fe/references/send_invite.js.erb +7 -0
  179. data/app/views/fe/references/show.html.erb +18 -0
  180. data/app/views/fe/references/submit.js.erb +3 -0
  181. data/app/views/fe/submit_pages/_errors.html.erb +1 -0
  182. data/app/views/fe/submit_pages/_thankyou.html.erb +2 -0
  183. data/app/views/fe/submit_pages/edit.html.erb +36 -0
  184. data/app/views/fe/submit_pages/error.js.erb +1 -0
  185. data/app/views/fe/submit_pages/submit.js.erb +3 -0
  186. data/app/views/layouts/fe/application.html.erb +30 -13
  187. data/app/views/layouts/fe/{qe.admin.html.erb → fe.admin.html.erb} +1 -1
  188. data/config/locales/en.yml +37 -0
  189. data/config/routes.rb +69 -27
  190. data/db/migrate/20131003041856_core.rb +4 -4
  191. data/db/migrate/20131003044518_create_email_templates.rb +1 -1
  192. data/db/migrate/20140623153424_create_fe_people.rb +12 -0
  193. data/db/migrate/20140624180246_create_fe_addresses.rb +20 -0
  194. data/db/migrate/20140624182216_create_create_fe_phone_numbers.rb +16 -0
  195. data/db/migrate/20140625160545_create_fe_users.rb +12 -0
  196. data/db/migrate/20140808202507_add_conditional_type_to_elements.rb +5 -0
  197. data/db/migrate/20140808203609_add_conditional_answer_to_elements.rb +5 -0
  198. data/db/migrate/20140828045339_create_payments.rb +13 -0
  199. data/db/migrate/20141103204704_remove_short_value_column.rb +5 -0
  200. data/db/migrate/20141109154522_move_conditional_ids_used_for_choice_field_to_their_own_column.rb +7 -0
  201. data/db/seeds.rb +7 -0
  202. data/lib/fe.rb +1 -1
  203. data/lib/fe/engine.rb +46 -1
  204. data/lib/fe/version.rb +1 -1
  205. data/lib/tasks/fe_tasks.rake +14 -0
  206. data/spec/controllers/fe/admin/elements_controller_spec.rb +1 -1
  207. data/spec/controllers/fe/admin/email_templates_controller_spec.rb +1 -1
  208. data/spec/controllers/fe/admin/question_pages_controller_spec.rb +1 -1
  209. data/spec/controllers/fe/admin/question_sheets_controller_spec.rb +1 -1
  210. data/spec/controllers/fe/answer_pages_controller_spec.rb +1 -1
  211. data/spec/controllers/fe/answer_sheets_controller_spec.rb +1 -1
  212. data/spec/controllers/fe/reference_sheets_controller_spec.rb +1 -1
  213. data/spec/dummy/README.rdoc +28 -0
  214. data/spec/dummy/Rakefile +6 -0
  215. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  216. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  217. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  218. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  219. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  220. data/spec/dummy/bin/bundle +3 -0
  221. data/spec/dummy/bin/rails +4 -0
  222. data/spec/dummy/bin/rake +4 -0
  223. data/spec/dummy/config.ru +4 -0
  224. data/spec/dummy/config/application.rb +29 -0
  225. data/spec/dummy/config/boot.rb +5 -0
  226. data/spec/dummy/config/database.yml +25 -0
  227. data/spec/dummy/config/environment.rb +5 -0
  228. data/spec/dummy/config/environments/development.rb +37 -0
  229. data/spec/dummy/config/environments/production.rb +82 -0
  230. data/spec/dummy/config/environments/test.rb +39 -0
  231. data/spec/dummy/config/initializers/assets.rb +8 -0
  232. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  233. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  234. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  235. data/spec/dummy/config/initializers/inflections.rb +16 -0
  236. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  237. data/spec/dummy/config/initializers/session_store.rb +3 -0
  238. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  239. data/spec/dummy/config/locales/en.yml +23 -0
  240. data/spec/dummy/config/routes.rb +56 -0
  241. data/spec/dummy/config/secrets.yml +22 -0
  242. data/spec/dummy/db/schema.rb +203 -0
  243. data/spec/dummy/db/test.sqlite3 +0 -0
  244. data/spec/dummy/log/test.log +440 -0
  245. data/spec/dummy/public/404.html +67 -0
  246. data/spec/dummy/public/422.html +67 -0
  247. data/spec/dummy/public/500.html +66 -0
  248. data/spec/dummy/public/favicon.ico +0 -0
  249. data/spec/factories/answer_sheet_question_sheets.rb +4 -0
  250. data/spec/factories/answer_sheets.rb +1 -1
  251. data/spec/factories/applications.rb +7 -0
  252. data/spec/factories/elements.rb +19 -0
  253. data/spec/factories/fe_addresses.rb +14 -0
  254. data/spec/factories/fe_email_addresses.rb +7 -0
  255. data/spec/factories/fe_people.rb +10 -0
  256. data/spec/factories/fe_phone_numbers.rb +7 -0
  257. data/spec/factories/page.rb +9 -0
  258. data/spec/factories/page_elements.rb +5 -0
  259. data/spec/factories/payments.rb +7 -0
  260. data/spec/factories/question_sheet.rb +10 -0
  261. data/spec/models/fe/answer_sheet_question_sheet_spec.rb +3 -3
  262. data/spec/models/fe/answer_spec.rb +5 -5
  263. data/spec/models/fe/application_spec.rb +8 -0
  264. data/spec/models/fe/attachment_field_spec.rb +1 -1
  265. data/spec/models/fe/choice_field_spec.rb +29 -2
  266. data/spec/models/fe/condition_spec.rb +5 -5
  267. data/spec/models/fe/date_field_spec.rb +9 -9
  268. data/spec/models/fe/element_spec.rb +139 -9
  269. data/spec/models/fe/email_template_spec.rb +2 -2
  270. data/spec/models/fe/option_group_spec.rb +1 -1
  271. data/spec/models/fe/option_spec.rb +1 -1
  272. data/spec/models/fe/page_element_spec.rb +3 -3
  273. data/spec/models/fe/page_link_spec.rb +1 -1
  274. data/spec/models/fe/page_spec.rb +43 -11
  275. data/spec/models/fe/paragraph_spec.rb +4 -4
  276. data/spec/models/fe/payment_question_spec.rb +65 -0
  277. data/spec/models/fe/person_spec.rb +4 -0
  278. data/spec/models/fe/question_grid_spec.rb +1 -1
  279. data/spec/models/fe/question_grid_with_total_spec.rb +1 -1
  280. data/spec/models/fe/question_set_spec.rb +1 -1
  281. data/spec/models/fe/question_sheet_spec.rb +5 -5
  282. data/spec/models/fe/question_spec.rb +13 -12
  283. data/spec/models/fe/reference_question_spec.rb +4 -4
  284. data/spec/models/fe/reference_sheet_spec.rb +8 -8
  285. data/spec/models/fe/section_spec.rb +1 -1
  286. data/spec/models/fe/state_chooser_spec.rb +1 -1
  287. data/spec/models/fe/text_field_spec.rb +3 -3
  288. data/spec/{spec_helper.rb → rails_helper.rb} +3 -3
  289. data/spec/support/database.txt +3 -3
  290. metadata +261 -75
  291. data/app/views/fe/questions/_paragraph.html.erb +0 -1
  292. data/app/views/fe/questions/_reference_discipler.html.erb +0 -1
  293. data/app/views/fe/questions/_reference_friend.html.erb +0 -1
  294. data/app/views/fe/questions/_reference_parent.html.erb +0 -1
  295. data/app/views/fe/questions/_reference_peer.html.erb +0 -1
  296. data/app/views/fe/questions/_reference_question.html.erb +0 -38
  297. data/app/views/fe/questions/_reference_roommate.html.erb +0 -1
  298. data/app/views/fe/questions/_reference_spiritual.html.erb +0 -1
  299. data/app/views/fe/questions/_reference_staff.html.erb +0 -1
  300. data/app/views/fe/questions/_section.html.erb +0 -1
  301. data/lib/generators/fe/install_generator.rb +0 -132
  302. data/lib/tasks/qe_tasks.rake +0 -4
  303. data/spec/models/fe/answer_sheet_spec.rb +0 -8
@@ -0,0 +1,41 @@
1
+ # gather reference information from Applicant
2
+ module Fe
3
+ class ReferencePagesController < ApplicationController
4
+ skip_before_filter :cas_filter
5
+ skip_before_filter :authentication_filter
6
+
7
+ layout nil
8
+
9
+ before_filter :setup
10
+
11
+ MONTHS_KNOWN_OPTIONS = [
12
+ ["3 months", 3],
13
+ ["6 months", 6],
14
+ ["1 year", 12],
15
+ ["2 years", 24],
16
+ ["3 or more years", 36]
17
+ ]
18
+
19
+ # Allow applicant to edit reference
20
+ # /applications/1/reference_page/edit
21
+ # js: provide a partial to replace the answer_sheets page area
22
+ # html?: return a full page for editing reference independantly (after submission)
23
+ def edit
24
+ @references = @application.reference_sheets
25
+
26
+ # NEXT: skipping all the fancy answer sheets stuff since all custom pages come after those
27
+ @next_page = next_custom_page(@application, 'reference_page')
28
+ end
29
+
30
+ def update
31
+ #update_references
32
+ head :ok
33
+ end
34
+
35
+ private
36
+ def setup
37
+ @application = Application.find(params[:application_id])
38
+ end
39
+
40
+ end
41
+ end
@@ -14,7 +14,7 @@ class Fe::ReferenceSheetsController < Fe::AnswerSheetsController
14
14
  @presenter = Fe::AnswerPagesPresenter.new(self, @answer_sheet, params[:a])
15
15
  @elements = @presenter.questions_for_page(:first).elements
16
16
  @page = @presenter.pages.first
17
- render 'answer_sheets/edit'
17
+ render 'fe/answer_sheets/edit', layout: 'fe/application'
18
18
  end
19
19
 
20
20
  protected
@@ -0,0 +1,74 @@
1
+ # for Reference completing answer sheet
2
+ module Fe
3
+ class ReferencesController < ApplicationController
4
+ skip_before_filter :cas_filter
5
+ skip_before_filter :authentication_filter
6
+
7
+ before_filter :setup
8
+
9
+ layout 'public'
10
+
11
+ # AnswerSheet for reference to fill in
12
+ # /applications/1/references/{token}
13
+ def edit
14
+ ref = Fe::ReferenceSheet.find_by_access_key(params[:id])
15
+ redirect_to edit_fe_reference_sheet_path(ref, :a => params[:id])
16
+ end
17
+
18
+ # final submission
19
+ def submit
20
+ @reference = @application.references.find(params[:id])
21
+ @reference.submit!
22
+
23
+ # Send Reference Thank You
24
+ Fe::Notifier.notification(@reference.email,
25
+ Fe.from_email,
26
+ "Reference Thank You",
27
+ {'reference_full_name' => @reference.name,
28
+ 'applicant_full_name' => @application.applicant.informal_full_name}).deliver
29
+
30
+
31
+ # Send Reference Completion Notice
32
+ Fe::Notifier.notification(@application.applicant.email,
33
+ Fe.from_email,
34
+ "Reference Complete",
35
+ {'reference_full_name' => @reference.name,
36
+ 'applicant_full_name' => @application.applicant.informal_full_name,
37
+ 'reference_submission_date' => @reference.submitted_at.strftime("%m/%d/%Y")}).deliver
38
+
39
+ end
40
+
41
+
42
+ def show
43
+ @reference = @application.references.find_by_access_key(params[:id])
44
+
45
+ if @reference.nil?
46
+ render :action => :edit
47
+ else
48
+ @answer_sheet = @reference
49
+ @question_sheet = @answer_sheet.question_sheet
50
+ @elements = []
51
+ if @question_sheet
52
+ @question_sheet.pages.order(:number).each do |page|
53
+ @elements << page.elements.where("#{Element.table_name}.kind not in (?)", %w(Fe::Section Fe::Paragraph)).all
54
+ end
55
+ @elements = @elements.flatten
56
+ @elements = QuestionSet.new(@elements, @answer_sheet).elements.group_by(&:page_id)
57
+ end
58
+ end
59
+ end
60
+
61
+ def send_invite
62
+ # Save references on page first
63
+ #update_references
64
+
65
+ @reference = Fe::ReferenceSheet.find(params[:id])
66
+ send_reference_invite(@reference)
67
+ end
68
+
69
+ private
70
+ def setup
71
+ @application = Application.find(params[:application_id])
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,22 @@
1
+ class Fe::SubmitPagesController < ApplicationController
2
+
3
+ before_filter :setup
4
+ skip_before_filter :get_answer_sheet
5
+
6
+ layout nil
7
+
8
+ def edit
9
+ @next_page = next_custom_page(@application, 'submit_page')
10
+ end
11
+
12
+ # save any changes on the submit_page (for auto-save, no server-validation)
13
+ def update
14
+ head :ok
15
+ end
16
+
17
+ private
18
+
19
+ def setup
20
+ @application = @answer_sheet = Fe.answer_sheet_class.constantize.find(params[:application_id]) unless @application
21
+ end
22
+ end
@@ -31,10 +31,10 @@ module Fe
31
31
  name
32
32
  end
33
33
 
34
- #def calendar_date_select_tag(name, value = nil, options = {})
35
- # options.merge!({'data-calendar' => true})
36
- # text_field_tag(name, value, options )
37
- #end
34
+ def calendar_date_select_tag(name, value = nil, options = {})
35
+ options.merge!({'data-calendar' => true})
36
+ text_field_tag(name, value, options )
37
+ end
38
38
 
39
39
  def tip(t)
40
40
  image_tag('fe/icons/question-balloon.png', :title => t, :class => 'tip')
@@ -45,5 +45,14 @@ module Fe
45
45
  image_tag('spinner.gif', :id => e, :style => 'display:none', :class => 'spinner')
46
46
  end
47
47
 
48
+ def link_to_function(name, *args, &block)
49
+ html_options = args.extract_options!.symbolize_keys
50
+
51
+ function = block_given? ? update_page(&block) : args[0] || ''
52
+ onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;"
53
+ href = html_options[:href] || '#'
54
+
55
+ content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick))
56
+ end
48
57
  end
49
- end
58
+ end
@@ -19,4 +19,4 @@ module Fe
19
19
  end
20
20
  end
21
21
  end
22
- end
22
+ end
@@ -0,0 +1,3 @@
1
+ class Fe::Address < ActiveRecord::Base
2
+ belongs_to :person
3
+ end
@@ -10,4 +10,4 @@ module Fe
10
10
  class AnswerPagesPresenter < Presenter
11
11
  include Fe::AnswerPagesPresenterConcern
12
12
  end
13
- end
13
+ end
@@ -1,10 +1,14 @@
1
1
  module Fe
2
2
  class AnswerSheet < ActiveRecord::Base
3
- if Fe.answer_sheet_class.constantize == 'Fe::AnswerSheet'
3
+ self.abstract_class = true
4
+
5
+ =begin
6
+ if Fe.answer_sheet_class == 'Fe::AnswerSheet'
4
7
  self.table_name = self.table_name.sub('fe_', Fe.table_name_prefix)
5
8
  else
6
9
  self.table_name = Fe.answer_sheet_class.constantize.table_name
7
10
  end
11
+ =end
8
12
  include Fe::AnswerSheetConcern
9
13
  end
10
- end
14
+ end
@@ -4,4 +4,4 @@ module Fe
4
4
  belongs_to :answer_sheet, class_name: Fe.answer_sheet_class
5
5
  belongs_to :question_sheet, class_name: 'Fe::QuestionSheet'
6
6
  end
7
- end
7
+ end
@@ -0,0 +1,58 @@
1
+ require 'aasm'
2
+
3
+ # a visitor applies to a sleeve (application)
4
+ class Fe::Application < Fe::AnswerSheet
5
+ self.table_name = "#{Fe.table_name_prefix}applications"
6
+
7
+ belongs_to :applicant, :class_name => "Person", :foreign_key => "applicant_id"
8
+ has_many :references, :class_name => 'ReferenceSheet', :foreign_key => :applicant_answer_sheet_id, :dependent => :destroy
9
+ has_one :answer_sheet_question_sheet, :foreign_key => "answer_sheet_id"
10
+ has_many :answer_sheet_question_sheets, :foreign_key => 'answer_sheet_id'
11
+ has_many :question_sheets, :through => :answer_sheet_question_sheets
12
+
13
+ # This will be overridden by the state machine defined in the enclosing app
14
+ def completed?
15
+ raise "completed? should be implemented by the extending class"
16
+ end
17
+
18
+ # This will be overridden by the state machine defined in the enclosing app
19
+ def submitted?
20
+ raise "submitted? should be implemented by the extending class"
21
+ end
22
+
23
+ def completed_references
24
+ sr = Array.new()
25
+ references.each do |r|
26
+ sr << r if r.completed?
27
+ end
28
+ sr
29
+ end
30
+
31
+ def get_reference(question_id)
32
+ reference_sheets.each do |r|
33
+ return r if r.question_id == question_id
34
+ end
35
+ return Fe::ReferenceSheet.new()
36
+ end
37
+
38
+ def answer_sheets
39
+ a_sheets = [self]
40
+ references.each do |r|
41
+ a_sheets << r
42
+ end
43
+ a_sheets
44
+ end
45
+
46
+ def reference_answer_sheets
47
+ r_sheets = Array.new()
48
+ references.each do |r|
49
+ r_sheets << r
50
+ end
51
+ r_sheets
52
+ end
53
+
54
+ def has_references?
55
+ self.references.size > 0
56
+ end
57
+
58
+ end
@@ -4,4 +4,4 @@ module Fe
4
4
  class ChoiceField < Question
5
5
  include ChoiceFieldConcern
6
6
  end
7
- end
7
+ end
@@ -3,20 +3,19 @@ module Fe
3
3
  extend ActiveSupport::Concern
4
4
  include ActionView::Helpers::TextHelper
5
5
 
6
- included do
6
+ begin
7
+ included do
7
8
 
8
- belongs_to :answer_sheet
9
- belongs_to :question, :class_name => "Element", :foreign_key => "question_id"
9
+ belongs_to :answer_sheet
10
+ belongs_to :question, :class_name => "Element", :foreign_key => "question_id"
10
11
 
11
- # validates_presence_of :value
12
- validates_length_of :short_value, :maximum => 255, :allow_nil => true
13
-
14
- before_save :set_value_from_filename
12
+ before_save :set_value_from_filename
13
+ end
14
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
15
15
  end
16
16
 
17
- def set(value, short_value = value)
17
+ def set(value)
18
18
  self.value = value
19
- self.short_value = truncate(short_value, :length => 225) # adds ... if truncated (but not if not)
20
19
  end
21
20
 
22
21
  def to_s
@@ -24,7 +23,7 @@ module Fe
24
23
  end
25
24
 
26
25
  def set_value_from_filename
27
- self.value = self.short_value = self.attachment_file_name if self[:attachment_file_name].present?
26
+ self.value = self.attachment_file_name if self[:attachment_file_name].present?
28
27
  end
29
28
 
30
29
  module ClassMethods
@@ -33,4 +32,4 @@ module Fe
33
32
  end
34
33
  end
35
34
  end
36
- end
35
+ end
@@ -2,8 +2,11 @@ module Fe
2
2
  module AnswerPagesPresenterConcern
3
3
  extend ActiveSupport::Concern
4
4
 
5
- included do
6
- attr_accessor :active_answer_sheet, :page_links, :active_page, :pages
5
+ begin
6
+ included do
7
+ attr_accessor :active_answer_sheet, :page_links, :active_page, :pages
8
+ end
9
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
7
10
  end
8
11
 
9
12
  def initialize(controller, answer_sheets, a = nil, custom_pages = nil)
@@ -17,13 +20,19 @@ module Fe
17
20
 
18
21
  def questions_for_page(page_id=:first)
19
22
  @active_page = page_id == :first ? pages.first : pages.detect {|p| p.id == page_id.to_i}
20
- @active_page ||= @active_answer_sheet.pages.visible.includes(:elements).find(page_id)
23
+ begin
24
+ base = @active_answer_sheet.pages.visible.includes(:elements)
25
+ @active_page ||= page_id == :first ? base.first : base.find(page_id)
26
+ rescue ActiveRecord::RecordNotFound
27
+ @active_page = nil
28
+ end
21
29
  Fe::QuestionSet.new(@active_page ? @active_page.elements : [], @active_answer_sheet)
22
30
  end
23
31
 
24
32
  def all_questions_for_page(page_id=:first)
25
33
  @active_page = page_id == :first ? pages.first : pages.detect {|p| p.id == page_id.to_i}
26
- @active_page ||= @active_answer_sheet.pages.visible.find(page_id)
34
+ base = @active_answer_sheet.pages.visible
35
+ @active_page ||= page_id == :first ? base.first : base.find(page_id)
27
36
  Fe::QuestionSet.new(@active_page ? @active_page.all_elements : [], @active_answer_sheet)
28
37
  end
29
38
 
@@ -35,7 +44,7 @@ module Fe
35
44
  def active_page_link
36
45
  return unless @active_page
37
46
  link = new_page_link(@active_answer_sheet, @active_page)
38
- link.save_path = answer_sheet_page_path(@active_answer_sheet, @active_page)
47
+ link.save_path = fe_answer_sheet_page_path(@active_answer_sheet, @active_page)
39
48
  link
40
49
  end
41
50
 
@@ -72,7 +81,7 @@ module Fe
72
81
  end
73
82
 
74
83
  def new_page_link(answer_sheet, page, a = nil)
75
- Fe::PageLink.new(page.label, edit_answer_sheet_page_path(answer_sheet, page, :a => a), dom_page(answer_sheet, page), page) if page
84
+ Fe::PageLink.new(page.label, edit_fe_answer_sheet_page_path(answer_sheet, page, :a => a), dom_page(answer_sheet, page), page) if page
76
85
  end
77
86
 
78
87
  protected
@@ -96,4 +105,4 @@ module Fe
96
105
  dom
97
106
  end
98
107
  end
99
- end
108
+ end
@@ -2,21 +2,15 @@ module Fe
2
2
  module AnswerSheetConcern
3
3
  extend ActiveSupport::Concern
4
4
 
5
- included do
6
- has_many :answer_sheet_question_sheets,
7
- :class_name => "Fe::AnswerSheetQuestionSheet",
8
- :foreign_key => 'answer_sheet_id'
9
-
10
- has_many :question_sheets,
11
- :through => :answer_sheet_question_sheets
12
-
13
- has_many :answers,
14
- :class_name => 'Fe::Answer',
15
- :foreign_key => 'answer_sheet_id'
16
-
17
- has_many :reference_sheets,
18
- :class_name => "Fe::ReferenceSheet",
19
- :foreign_key => "applicant_answer_sheet_id"
5
+ begin
6
+ included do
7
+ has_many :answer_sheet_question_sheets, :foreign_key => 'answer_sheet_id'
8
+ has_many :question_sheets, :through => :answer_sheet_question_sheets
9
+ has_many :answers, :foreign_key => 'answer_sheet_id'
10
+ has_many :reference_sheets, :foreign_key => "applicant_answer_sheet_id"
11
+ has_many :payments, :foreign_key => "application_id"
12
+ end
13
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
20
14
  end
21
15
 
22
16
  def complete?
@@ -58,4 +52,4 @@ module Fe
58
52
 
59
53
  def collat_title() "" end
60
54
  end
61
- end
55
+ end
@@ -9,8 +9,11 @@ module Fe
9
9
  module ChoiceFieldConcern
10
10
  extend ActiveSupport::Concern
11
11
 
12
- included do
13
- has_many :elements, :class_name => "Element", :foreign_key => "conditional_id", :dependent => :nullify#, :order => :position
12
+ begin
13
+ included do
14
+ has_many :elements, :class_name => "Element", :foreign_key => "choice_field_id", :dependent => :nullify#, :order => :position
15
+ end
16
+ rescue ActiveSupport::Concern::MultipleIncludedBlocks
14
17
  end
15
18
 
16
19
  # Returns choices stored one per line in content field
@@ -55,20 +58,21 @@ module Fe
55
58
 
56
59
  # which view to render this element?
57
60
  def ptemplate
61
+ # TODO case would be nicer
58
62
  if self.style == 'checkbox'
59
- 'checkbox_field'
63
+ 'fe/checkbox_field'
60
64
  elsif self.style == 'drop-down'
61
- 'drop_down_field'
65
+ 'fe/drop_down_field'
62
66
  elsif self.style == 'radio'
63
- 'radio_button_field'
67
+ 'fe/radio_button_field'
64
68
  elsif self.style == 'yes-no'
65
- 'yes_no'
69
+ 'fe/yes_no'
66
70
  elsif self.style == 'rating'
67
- 'rating'
71
+ 'fe/rating'
68
72
  elsif self.style == 'acceptance'
69
- 'acceptance'
73
+ 'fe/acceptance'
70
74
  elsif self.style == 'country'
71
- 'country'
75
+ 'fe/country'
72
76
  end
73
77
  end
74
78
 
@@ -117,6 +121,13 @@ module Fe
117
121
  end
118
122
  end
119
123
 
124
+ def conditional_match(answer_sheet)
125
+ displayed_response = display_response(answer_sheet)
126
+ (is_true(displayed_response) && is_true(conditional_answer)) ||
127
+ (is_false(displayed_response) && is_false(conditional_answer)) ||
128
+ (displayed_response == conditional_answer)
129
+ end
130
+
120
131
  protected
121
132
  def is_true(val)
122
133
  [1,'1',true,'true','Yes','yes'].include?(val) # note: true = anything but false | nil
@@ -128,4 +139,4 @@ module Fe
128
139
  end
129
140
 
130
141
  end
131
- end
142
+ end